RabbitMQ:生產端的可靠性投遞解決方案

消息如何保證100%的投遞成功?

什麼是生產端的可靠性投遞?

  • 保障消息的成功發出;
  • 保障MQ節點的成功接收;
  • 發送端收到MQ節點(Broker)確認應答;
  • 完善消息補償機制;

生產端可靠性投遞常見解決方案

  • 消息落庫,對消息狀態進行打標;

       將消息存入數據庫,記錄消息的狀態。可以通過輪詢不斷獲取消息的狀態,從而保證消息的成功投遞。如下圖示所示,這樣做有一個很嚴重的問題就是要多次操作數據庫,對於一些高併發、對性能要求較高的業務,這種方式是不太合適的。因爲頻繁操作數據庫會帶來嚴重的性能問題。

在這裏插入圖片描述

  • 消息的延遲投遞,做二次確認,回調檢查;

生產端會發送兩次消息:
      第一次:生產端首先會將業務數據存入DB,之後會向MQ發送一個消息,消費端收到消息後發送確認消息(這裏的確認消息不是指ack,而是重新編輯發送一條新消息),回調服務監聽到確認消息後將消息存入DB;
       第二次:在第一條消息發送出去後一段時間,生產端會再發送一條check消息,回調服務監聽到check消息後會檢查第一條消息的執行情況,如果消息未能按照預期結果執行的話,回調服務會給生產端發送一條指令讓生產端重新發送消息;
       如下圖所示,這種方法可以有效的避免對數據庫的頻繁操作,從而提高性能;同時業務DB和消息DB之間解耦;

在這裏插入圖片描述

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