情景描述:數據庫
dubbo服務A:支付接口服務框架
dubbo服務B:訂單狀態更新分佈式
正常流程,首先調用支付接口,支付成功後,再調用dubbo服務B更新訂單狀態;可是若是在調用dubbo服務B時失敗,此時dubbo服務A中數據已沒法回滾(事務已提交),此時該如何進行處理?性能
手動編寫dubbo服務A回滾代碼,在dubbo服務B調用失敗時,進行該回滾代碼調用,此方案只使用簡單業務場景、冗餘代碼多。spa
使用JTA分佈式事務,但這樣很差的就是代碼入侵性高以及性能問題。(本人也沒有用過,網上這麼講的)。中間件
結合MQ消息中間件實現的可靠消息,來到達數據最終一致性(CAP理論)。接口
方案一不理想,方案2、三相關技術沒具體接觸過。事務
下圖是項目中遇到的折中方案:dubbo
也就是說「dubbo服務A」便是提供者也是消費者(dubbo服務B的調用),只有在"dubbo服務B"調用成功的狀況下才會對「dubbo服務A」事務提交。im
侷限:
三個服務調用狀況就是以下
至此,關於分佈式服務框架-dubbo總結完畢!
額外提下,以前demo工程中主鍵id採用的數據庫自增,在「分佈式」侷限性