如何保證RabbitMQ的消息不會丟失?怎么保證RabbitMQ的可靠性?
- 生產者:
原因:
由于網絡原因導致消息發送失敗,消息隊列沒有接收到生產者發送的消息,但生產者認為消息發送成功。
解決辦法:
- transaction模式:事務模式:開啟事務,發送消息,成功提交事務,失敗回滾事務。
- confirm模式:確認模式,不管成功與否,消息隊列都給生產者一個成功或失敗的回執,然后生產者根據成功或失敗做處理。
- 消息隊列:
正常:
消息隊列接收消息,消費者監聽消息并消費。
丟失:
消息隊列接收消息,在消費者還沒有消費之前就宕機了。這時在消息隊列中的消息就丟失了。
解決:
可以對消息進行持久化操作,設置消息為持久化消息,那么持久化的消息會被保存到磁盤中,即使RabbitMQ宕機了。但是在重啟
之后的時候依然可以將持久化的消息重新加載到消息隊列中。在持久化消息的同時還可以結合生產的confirm模式來使用。
通過這種方式最大程度的解決消息丟失問題
- 消費者:
原因:
消費者之所以會發生消息丟失是因為消費者采用了自動確認消息模式。
丟失:在消費者采用自動確認消息模式時,在接收到消息后,會自動給消息隊列發送確認信息,他是不關注這條消息在消費過程中是否
出現問題導致沒有成功消費的情況的,這時消息隊列已經接收到確認消費回執,并把此消息移除了,這就導致消息丟失,
解決辦法:
將自動確認模式改成手動確認消息模式。接收到消息后,只有代碼執行成功,消息被真正消費掉了,才發送確認消息如果執行失敗就
不發送確認消息信息。


浙公網安備 33010602011771號