回覆列表
  • 1 # 淺析架構

    1.先來看下訊息的投遞過程,訊息傳送分為三步,見圖

    2.傳送方透過這三步便可以保證訊息傳送到mq的可靠性:

    第一步send將訊息傳送給mq,

    第二步mq將訊息持久化,mq需要保證高可用, 訊息持久化化後不會丟失,一般都會存在多個副本,多個副本之間可以使用raft協議保證資料一致性。

    第三步mq應答到send方確認訊息已投遞。

    但是因為1,2,3步中都可能出現故障,需要重試傳送請求。如果是1,2步失敗直接重試就可以了,如果第三步失敗了,就可能一條訊息會出現多條,這就需要消費端去保證消費的冪等性。

  • 2 # MiLi影片

    訊息中介軟體訊息不丟失主要從以下幾個方面考慮

    投遞

    生產者向訊息中介軟體投遞訊息是push的方式,這種方法會出現以下情況

    1、生產者掛掉了

    情況是這樣的,你的生產者收到了資料,並存到了資料庫中,同時生產者要降訊息push到訊息中介軟體做非同步處理。這時候如果生產者掛掉了,就導致訊息資料沒有push到訊息中介軟體裡,也就會出現資料不一致的問題。

    這時候我們可以在資料庫設定是否投遞成功標誌位,在生產者push之後,再將標誌位設定為已經投遞。另外,客氣啟動一個定時任務,檢測是否有訊息沒有投遞,保證訊息資料一定會進入中介軟體。

    2、訊息重試

    生產者沒有掛掉,但是因為網路等其他問題,導致生產者不知道有沒有投遞成功。這時候生產者可以失敗重試,這保證訊息可以再次投遞。但是這有可能會出現重複投遞,導致出現中介軟體訊息資料重複。

    儲存

    訊息中介軟體是存到磁碟上的,存入磁碟的訊息一般是不會丟失的,同時磁碟檔案還會做備份。如果一個丟失了,可以透過備份檔案恢復。

    消費

    一般消費者需要在消費者消費成功之後再設定提交消費位點。如果消費失敗,消費者不提交消費位點還是可以消費該資料的。這就引出一個問題就是訊息重複消費。這個問題和上邊提到的訊息重複投遞相同,都會導致重複消費,這就需要考慮消費的冪等性,可以做消費記錄,防止重複消費。

  • 3 # 閒林素素

    討論訊息丟失的前提是訊息已經發送到MQ,如果傳送都沒成功,何來丟失的說法?然後傳送訊息只是一個普通的RPC遠端呼叫而已,如果失敗,那是訊息生產者自己要處理的事情。就像寫入資料到資料庫失敗一樣。所以我覺得樓主提這個問題本身就沒有理解什麼叫做訊息丟失。

  • 中秋節和大豐收的關聯?
  • 老婆埋怨我前妻,不負擔我和前妻的兒子的費用,怎麼辦?