預建立訂單失敗:若是實際預建立訂單成功,訂單定時補償機制,定時刪除這部分訂單,不影響數據一致性,下單失敗服務器
預扣減庫存失敗:若是預扣減庫存真實失敗,則下單失敗(訂單由定時補償機制定時刪除,其它應用參照場景4的處理方式,下單失敗;若是實際預扣減庫存成功,參照場景4的處理方式,下單失敗分佈式
實際建立訂單失敗:若是建立訂單真實失敗(不須要發送下單失敗消息,防止實際建立訂單成功場景)
,訂單的預處理數據經過訂單的定時補償機制嘗試刪除(須要考慮事務處理時間,將超過某個時間範圍該事務還處於預處理狀態的訂單刪除),下單失敗;若是實際建立訂單成功,其它應用參照場景4的處理方式,下單成功(提示用戶下單失敗)spa
發送訂單建立成功消息失敗/庫存服務因爲各類緣由沒有接到下單成功消息:庫存服務定時輪詢處理數據(須要考慮事務處理時間,將超過某個時間範圍該事務還處於預處理狀態的訂單篩選出來),詢問訂單服務改訂單Id對應的訂單是否建立成功,根據訂單建立成功與否選取相應的事務補償機制code
TCC
的比較TCC
是把全部的訂單建立步驟平等看待,只要有一個失敗,整個下單流程所有失敗(比較TCC
裏面的confirm
失敗和基於MQ實際建立訂單失敗的補償難易程度)事件
TCC
是經過發消息給TCC
服務器,而後由TCC
服務調用應用服務;基於MQ的分佈式事務補償機制,是經過將消息發送到MQ
,而後由應用本身去監聽MQ
的事件圖片