1. 程式人生 > >分散式事務—最終一致性模型(無獨立訊息系統)

分散式事務—最終一致性模型(無獨立訊息系統)

參考:https://blog.csdn.net/shanchahua123456/article/details/84781638

流程

1 上游程式/資料庫(生產者):

1.1 本地事務  【生成唯一ID——》執行業務流程  ——》  本地儲存訊息資料(db_queue 表) ——》傳送到MQ】 

本地事務中任意異常都會回滾,但小概率出現 MQ傳送成功,但是本地事務未提交。

所以下游消費時,要確認上游業務已完成。若是簡單的資料傳輸/同步則不需要確認,因為上游無資料,下游也不會拉取到資料。

1.2 確認介面:回寫業務表狀態,刪除db_queue 表

1.3 查詢介面:狀態業務表、db_queue 表查詢

 

2 訊息恢復功能:(注意冪等性設計)  

2.1查詢上游程式超時未傳送,重發;

2.2查詢上游程式超時未確認資料,去下游消費者查詢,若下游已消費則上游標誌確認,若下游未消費則重發

3 下游程式/資料庫(消費者):(注意冪等性設計)  

3.1 根據業務判斷是否需要查詢上游業務已完成,避免。(資料傳輸不需要)

3.2 本地事務  【 冪等執行業務流程  ——》 用上游介面,確認上游業務資料 】 

           3.3 注意MQ的可靠消費,手動ACK,限制收取量

           3.4 資料庫冪等設計可以依靠,主鍵/唯一索引/先查再寫(一定概率有問題)