05消息發送一致性的異常流程處理

消息發送一致性的正向流程

1. 主動方應用先把消息發給消息中間件,消息狀態標記爲「待確認」;
2. 消息中間件收到消息後,把消息持久化到消息存儲中,但並不向被動方應用投遞消息;
3. 消息中間件返回消息持久化結果(成功/失敗),主動方應用根據返回結果進行判斷如何進行業務操做處理:
a) 失敗:放棄業務操做處理,結束(必要時向上層返回失敗結果);
b) 成功:執行業務操做處理;
4. 業務操做完成後,把業務操做結果(成功/失敗)發送給消息中間件;
5. 消息中間件收到業務操做結果後,根據業務結果進行處理;
a) 失敗:刪除消息存儲中的消息,結束;
b) 成功:更新消息存儲中的消息狀態爲「待發送(可發送)」,緊接着執行消息投遞;
6. 前面的正向流程都成功後,向被動方應用投遞消息;網絡

 

消息發送一致性流程中的異常點

任何一個環節均可能會出問題!spa

一、從主動方應用的角度來分析:中間件

異常狀況 可能的狀態 一致性
預發送消息失敗 消息未進存儲,業務操做未執行(可能的緣由:主動方應用、網絡、消息中間件、消息存儲) 一致
預發送消息後,主動方應用沒有收到返回消息存儲結果 (1)消息未進存儲,業務操做未執行 一致
(2)消息已進存儲(待確認),業務操做未執行 不一致
收到消息存儲成功的返回結果,但未執行業務操做就失敗 消息已進存儲(待確認),業務操做未執行 不一致

二、從消息中間件的角度來分析:ci

異常狀況 可能的狀態 一致性
消息中間件沒有收到主動方應用的業務操做處理結果 (1)消息已進存儲(待確認),業務操做未執行(或業務操做出錯回滾了) 不一致
(2)消息已進存儲(待確認),業務操做成功 不一致
消息中間件收到業務操做結果(成功/失敗),但處理消息存儲中的消息狀態失敗 (1)消息已進存儲(待確認),業務操做未執行(或業務操做出錯回滾了) 不一致
(2)消息已進存儲(待確認),業務操做成功 不一致

消息發送一致性的異常狀況總結

異常狀況總結及處理table

異常狀況 一致性 異常處理方法
消息未進存儲,業務操做未執行 一致  
消息已進存儲(狀態待確認),業務
操做未執行
不一致 確認業務操做結果,處理消息(刪除消息)
消息已進存儲(狀態待確認),業務
操做成功
不一致 確認業務操做結果,處理消息
(更新消息狀態,執行消息投遞)

消息發送一致性的異常處理

異常處理流程也有可能發生異常,
又該怎麼處理呢?
方法

相關文章
相關標籤/搜索