如何保證MQ消息必達

此文章屬於筆記,原屬58沈劍

1、MQ消息必達,架構上的兩個核心設計點:

  1. 消息落地
  2. 消息超時、重傳、確認
  3. 四大部件:發送端 接收端 服務端 固化存儲組成

2、上半場消息必達以及消息重複問題

  1. 上半場的流程
    1. 發送端MQ-client 將消息發送給服務端MQ-server
    2. 服務端MQ-server將消息落地
    3. 服務端MQ-server 回ACK(表示確認) 2.若是3丟失 發送端在超時後,又會發送一遍,此時重發是MQ-client發起的,消息處理的是MQ-server 爲了不2 重複落地,對每條MQ消息系統內部須要生成一個inner-msg-id,做爲去重和冪等的依據,這個內部消息ID 的特色是
    4. 全局惟一
    5. MQ生成,具有業務無關性,對消息發送方和消息接收

3、下半場的消息必達以及消息重複問題

  1. 下半場的流程
    1. 服務端將消息發給MQ-client
    2. MQ-client將消息消費 並通知MQ-server
    3. MQ-server 落地消息刪除
  2. 須要強調的是,接收端MQ-client回ACK消息是MQ-client主動發起的,由於MQ-server不知道接收端什麼時候消費完。 3.若是5丟失,那麼在超時後MQ-server會從新發送消息,此時可能致使MQ-client收到重複消息,爲了保證業務的冪等性,業務消息中,必須有一個biz-id,做爲去重的依據,這個業務ID的特性是
    1. 對於同一個業務場景,全局惟一
    2. 由業務消息發送方生成,業務相關
    3. 由業務消費方消費判斷重複問題,以保證冪等

4、總結

MQ爲了保證消息必達,消息上下半場都可能發送重複消息,如何保證消息的冪等性呢架構

  1. 上半場,MQ-server生成inner-msg-id,保證上半場冪等 此ID全局惟一,業務無關,由MQ保證,對上下MQ-client屏蔽
  2. 下半場,由發送方帶入biz-id 業務方接受並判斷重複問題,保證冪等,這個ID對單業務惟一,業務相關,對MQ透明 結論 冪等性,不只對MQ有要求,對業務上下游也有要求
相關文章
相關標籤/搜索