消息中間件如何解決消息丟失問題


為了解決消息丟失問題,我們引入了一些重發機制,但也帶來的另外一個問題:消息重復,我們來看下都有哪些情況會導致消息重復:

 

消息發送超時,處於不確定狀態,導致重試發送消息,有可能之前的消息已經發送成功,會出現消息重復的情況。解決的思路是,每個消息生成一個消息id,如果發送的消息Broker已經存在了,則丟棄。這種解決辦法需要維護一個已經接收的消息的message id list。

 

消息在Broker中只有一份,但是consumer重啟前,未及時更新offset,導致consumer重啟之后重復消費消息。

上游業務給每個message 分配一個message ID,下游業務在接收到message之后,執行業務並且保存message ID,而且要講兩部分放到同一個事務中,保證業務執行成功,message ID肯定保存,業務執行失敗,message ID肯定不會保存下來,利用db中存儲的message id來做冪等。我們可以重新封裝producer client和consumer client,將這部分message ID分配和判重的邏輯封裝到client lib里面。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM