目錄
一.從架構角度分析消息可靠性投遞
- 將數據插入到業務表中,同時將日誌存入到MSGDB中(包含一個狀態,初始值爲0),二者保證原子性。併發量大的時候,
- 業務層將消息投遞給MQ Broker
- Broker異步返回應答ack,Produce Component(監聽組件)進行監聽ack()
- Produce t監聽到ack後,更新MSG DB表中數據,將0改爲1
- 分佈式定時任務系統定時查看MSG表中的數據是否爲都爲,將狀態不是1的數據重新投遞
- 如果MSG DB表中的數據一直爲0,重新發送消息
- 如果發送的數據累計3次都發送失敗,將狀態改爲2.表示消息發送失敗,將BIZ和MSG回滾(不能刪除數據)。極端情況下,第三次broker收到消息並返回ack,此時網絡異常,producer沒有收到ack,但此時消息已經到了下一個環節,需要和表中的數據進行對比,根據業務是否將數據狀態修改。