RocketMq訊息丟失問題解決

攻城獅numberOne發表於2020-10-21

分享一個連結:https://www.zhihu.com/tardis/sogou/art/166426241

這個圖很好,基本上就是這個問題的解決思路。我這裡總結一下:

為什麼會訊息丟失?

  • 儲存在佇列中,如果佇列沒有對訊息持久化,RabbitMQ伺服器當機重啟會丟失資料。
  • 生產者傳送訊息到RabbitMQ伺服器過程中,RabbitMQ伺服器如果當機停止服務,訊息會丟失。
  • 消費者從RabbitMQ伺服器獲取佇列中儲存的資料消費,但是消費者程式出錯或者當機而沒有正確消費,導致資料丟失。

解決方法:1.訊息持久化(Exchange交換機持久化     Queue持久化) 

訊息持久化可以防止訊息在MQ Server中不會因為當機重啟而丟失。

 2.訊息確認機制(confirm機制,事務機制)    

(1)confirm機制:通過兩個回撥函式確認confirm(),returnedMessage();

首先在配置檔案中配置,接著需要定義回撥方法。

confirm模式,作用是為了保證生產者投遞到Mq不會出現訊息丟失。

(2)事務機制:首先在配置檔案中配置,然後編寫消費者的監聽器

相關文章