最近項目中需要設計一個消息服務,承接各個業務線的應用消息(對用戶提醒) 其中涉及到消息的可靠投遞.目前思考有兩種方案可以選型.
image.png
風險點
-
消息投遞失敗
- 消息中間件不可用.
- 消息中間件內部處理異常
- 消息中間件處理成功 返回給調用端網絡超時.(事物回滾 業務邏輯回滾 消息投遞成功 數據不一致)
原因1:
???調用端重試
原因2:
???調用端重試
原因3:
???回查消息中間件 或者 重試(消息中間件支持冪等)
-
解決方案
發送事物消息.
- half消息發送失敗 事物回滾。(消息中間件不可用. 消息中間件內部處理異常 消息中間件處理成功 返回給調用端網絡超時.)
- half 消息發送成功 執行具體業務邏輯。
- 業務邏輯處理成功 發送commit消息。業務邏輯處理失敗 發送rollback消息
- 消息中間件定時查詢half消息列表,回調發送方,詢問業務狀態.成功 commit消息 失敗 rollback消息.
事物消息 可以保證 發送端業務邏輯處理 和 消息投遞成功 兩邊的一致性.