目錄
一、核心問題場景
二、RocketMQ 事務消息方案
1. 核心機制
2. 執行流程
3. 關鍵優勢
4. 局限性
三、消息表方案
1. 核心機制
2. 執行流程
3. 關鍵優勢
4. 局限性
四、方案對比與選擇
五、實施建議
六、總結
一、核心問題場景
當數據庫更新后,若 MQ 消息未成功發送或機器異常重啟,可能導致數據狀態與消息通知不一致。需解決以下問題:
- 原子性:確保數據庫操作與消息發送要么全成功,要么全失敗
- 最終一致性:即使出現異常,也能通過補償機制達成一致
二、RocketMQ 事務消息方案
1. 核心機制
- 半消息階段:生產者先發送 prepare 消息(半消息)到 Broker
- 本地事務執行:執行數據庫更新操作
- 事務狀態回查:Broker 通過定時任務回查本地事務狀態,決定消息是否提交 / 回滾
2. 執行流程
3. 關鍵優勢
- 強一致性:通過事務狀態回查保證最終消息投遞
- 異步解耦:不阻塞業務流程,適合高并發場景