您好,登錄后才能下訂單哦!
這篇“mq消息丟失問題如何解決”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“mq消息丟失問題如何解決”文章吧。
解決辦法:
(1)事務機制:(同步方式,不推薦)
對于RabbitMQ消息隊列來說,生產者發送數據之前開啟RabbitMQ的事務機制 channel.txselect,如果消息沒有進隊列,則生產者受到異常報錯,并進行回滾channel.txRollback,然后重試發送消息。如果收到了消息,則可以提交事務channel.txCommit。這是同步操作,會影響性能。
(2)異步機制:
confirm模式來解決同步機制的性能問題。每次生產者發送的消息都會分配一個唯一的id,如果寫入到了RabbitMQ隊列中,則RabbitMQ會回傳一個ack消息,說明這個消息接收成功。如果RabbitMQ沒能處理這個消息,則回調nack接口。說明需要重試發送消息。
也可以自定義超時時間 + 消息 id 來實現超時等待后重試機制。但可能出現的問題是調用ack接口時失敗了,所以會出現消息被發送兩次的問題,這個時候就需要保證消費者消費消息的冪等性。
事務模式和confirm模式的區別:
事務機制是同步的,提交事務后悔被阻塞直到提交事務完成后。
confirm 模式異步接收通知,但可能接收不到通知。需要考慮接收不到通知的場景。
解決辦法:
(1)創建Queue時,將其設置為持久化
(2)發送消息的時候將消息的deliveryMode設置為2(將消息持久化 1:非持久化,2:持久化)
(3)開啟生產者 confirm`模式,可以重試發送消息。
解決辦法:
關閉RabbitMQ的自動ack,每次生產者將消息寫入消息隊列后,就自動回傳一個ack給生產者。
消費者處理完消息再主動ack,告訴消息隊列我處理完了。
(1)開啟生產者消息手動確認機制
(2)開啟消息持久化,隊列持久化,交換機持久化(默認開啟)
(3)開啟消費者消息手動確認機制
以上就是關于“mq消息丟失問題如何解決”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。