分散式事務解決方案(三)【基於可靠訊息的最終一致性(獨立訊息服務實現)】

風靈使發表於2018-07-31

3. 最終一致性設計與實現——獨立訊息服務

3.1 整體架構

image

3.2 訊息服務子系統

3.2.1 基本功能

  • 儲存預傳送訊息(主動方業務執行之前進行,預傳送的訊息儲存後狀態為待確認)
  • 確認併傳送訊息(主動方業務完成之後,主動方或訊息狀態確認系統通過此介面將訊息變為取消或傳送中)
  • 查詢狀態確認超時的訊息(訊息狀態確認系統使用)
  • 確認訊息已被成功消費(被動方業務執行完成之後呼叫)
  • 查詢消費確認超時的資訊

3.2.2 資料庫設計

欄位名 含義
id 主鍵ID
version 版本號
cuser 建立人
muser 修改人
ctime 建立時間
mtime 修改時間
message_id 訊息ID
message_body 訊息內容
message_try_times 訊息重試次數
message_queue 訊息佇列名
message_dead 訊息是否死亡
status 訊息狀態
remark 備註

3.3 訊息管理子系統

  • 主要用來用於手動管理死亡訊息,重發等

3.4 訊息狀態確認子系統

3.4.1 介面設計

  1. 處理待確認的超時訊息(注意排序,超時時間越長應該越早處理)

3.5 訊息恢復子系統

  • 主動方呼叫方業務執行成功,訊息服務子系統中訊息狀態已變成傳送中.我們必須保證訊息被被動方消費

3.6 實時訊息服務子系統

  • 使用MQ實現

3.7 非同步確認(防止可補償流程錯誤導致主流程回滾)

  • 主動業務方流程
    1. 預傳送訊息
    2. 執行業務
    3. 確認傳送(如果這一步超時會回滾前面的業務,但是訊息已被髮送到訊息服務子系統並並持久化)

相關文章