訊息中介軟體如何確保資料不丟失?

2021-10-01 10:06:00 字數 1017 閱讀 6547

我們把訊息中介軟體當成乙個快遞中轉站,思考兩個問題:

快遞如何在中轉站不丟失;

派件員在派件的過程中丟失了快遞,收件人沒收到,該怎麼解決。

等同於生產者將訊息投遞到rabbitmq,如果此時rabbitmq宕機了,訊息還沒傳送給消費者,如何確保訊息在伺服器重啟後還能恢復;

rabbitmq推送訊息給消費者,如何確保消費者接收到訊息並成功消費。

【答案】進行持久化,包括佇列持久化和訊息持久化,將訊息持久化到rabbitmq磁碟檔案中。

channel.queuedeclare(

"warehouse_schedule_delivery",

true, //支援持久化

false,

false,

null);

channel.basicpublish(

"","warehouse_schedule_delivery",

messageproperties.persistent_text_plain,

message.getbytes()

);//生產者將傳送去rabbitmq的訊息,在rabbitmq中進行持久化

由於rabbitmq消費者端預設開啟了自動ack機制,消費者接收到訊息,會立刻想rabbitmq傳送確認訊息,rabbitmq接收到ack後,對訊息進行刪除,如果此時消費者還沒來得及消費,訊息就會丟失,所以我們需要將消費者端的自動ack關閉。

channel.basicconsume(

queue_name, false, delivercallback, consumertag -> {}

);// 第二個引數false,表示自動ack關閉

如果rabbitmq發現某條訊息傳送給消費者後,遲遲沒有收到ack,那麼rabbitmq會將該訊息傳送給其它的消費者例項進行消費。

扎心!線上服務宕機時,如何保證資料100%不丟失?

訊息中介軟體集群崩潰,如何保證百萬生產資料不丟失?

如何確保訊息不丟失?

訊息持久化,當然前提是佇列必須持久化 rabbitmq 確保永續性訊息能從伺服器重啟中恢復的方式是,將它們寫入磁碟上 的乙個持久化日誌檔案,當發布一條永續性訊息到持久交換器上時,rabbit 會在 訊息提交到日誌檔案後才傳送響應。一旦消費者從持久佇列中消費了一條持久化訊息,rabbitmq 會在持久...

如何保證訊息中介軟體全鏈路資料100 不丟失(1)

這個問題,在網際網路公司面試的時候高頻出現,而且也是非常現實的生產環境問題。如果你的簡歷中寫了自己熟悉mq技術 rabbitmq rocketmq kafka 而且在專案裡有使用的經驗,那麼非常實際的乙個生產環境問題就是 投遞訊息到mq,然後從mq消費訊息來處理的這個過程,資料到底會不會丟失。面試官...

訊息中介軟體 訊息丟失怎麼辦

如何保證訊息的可靠性傳輸?或者說,如何處理訊息丟失的問題?如果說你這個是用 mq 來傳遞非常核心的訊息,比如說計費 扣費的一些訊息,那必須確保這個 mq 傳遞過程中絕對不會把計費訊息給弄丟。訊息中介軟體各種面試題 訊息中介軟體面試題 訊息丟失怎麼辦?訊息中介軟體面試題 訊息佇列的優缺點,區別 訊息中...