事務消息
解決的問題:保證本地事務和發送消息同時成功, 保證分佈式系統的最終一致性。
其他方案的問題:
1. 先發消息, 再執行本地事務。
問題: 消息發成功之後, 系統宕機,本地事務沒有執行成功。
2. 先執行本地事務, 再發消息。
問題: 本地事務執行成功, 系統宕機, 消息沒有發送成功。
3. 先執行本地事務, 再發消息。 並放到同一個事務中。
問題: 本地事務發送成功, 發送消息超時。 本地事務回滾。
3.1 消息實際發送失敗, 符合預期
3.2 消息實際發送成功,不符合預期。
綜上:
1. 使用事務消息 可以有效地解決以上問題 -- 建議1
2. 如果感覺事務消息實現複雜,可以使用2 + 重試 + 離線數據對賬 + 補償 的形式, 保證消息不漏發。