RabbitMQ如何保證消息的可靠性

一:介紹

消息的可靠傳輸一般是指業務系統接入消息中間件時需要考慮的問題。

二:消息傳輸示意圖

三:消息可能丟失的幾種情況

(1)、消息從生產者傳輸到中間件的過程中,可能網絡斷開,消息丟失;

(2)、消息到達中間件的交換器後,路由不到匹配的隊列中,消息丟失;

(3)、消息在隊列中還未被消費者消費時,中間件服務器宕機,消息丟失;

(4)、消息從隊列傳輸到消費者的過程中,可能網絡斷開,消息丟失;

四:保證消息可靠傳輸的幾種解決方案(對應三中的消息可能丟失的情況)

(1)、生產者開啓事務機制或者confirm機制,確保消息可靠的傳輸到RabbitMQ中;

(2)、生產者配合使用mandatory參數或者設置備份交換器來確保找不到隊列的消息返回生產者或者存到備份隊列中;

(3)、將隊列和消息都進行持久化處理,確保中間件服務器宕機後,重啓服務器消息不丟失;

(4)、消費者在訂閱隊列時,設置成手動確認模式,保證只將消費者消費後的消息從隊列中刪除;

五:消息傳輸保證級別

消息中間件的消息傳輸保證一般分爲三個級別:

(1)、最少一次:消息絕對不會丟失,但可能會重複;這種情況下,需要做到四中說明的4點,才能保證消息“最少一次”到達消費者;

(2)、最多一次:消息可能會丟失,但絕對不會重複;這種情況下,就比較隨意,四中說明的4點無須考慮,生產者隨意發送,消費者隨意消費;

(3)、恰好一次:每條消息肯定會被傳輸一次且僅傳輸一次;這種情況需要在“最少一次”的前提下,保證消息僅被消費一次;如果中間件給生產者發送收到確認時網絡斷開,則生產者認爲消息沒有達到中間件,還會再次發送消息給中間件,這樣消息就重複了;如果消費者給中間件發送消費確認時網絡斷開,則中間件會認爲消費者沒有正常消費消息,還會將消息再次發送給消費者,這樣消息也重複了;所以需要對消息進行去重;而中間件是沒有去重機制的,去重需要在業務端根據自身業務特性來進行。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章