1、鏈式調用方式
服務A 事務方法的最后一行 調用服務B事務方法, 服務B事務方法的最后一行 調用服務C事務方法
因為都是每個方法的最后一行,從上往下執行,如果有任何一個服務出現問題,那么整條鏈路都會回滾事物
2、通過mq自己手動回滾業務(補償事務(TCC))
比如訂單提交,可以先在訂單服務完成訂單創建,然后發消息再去商品模塊去減庫存,如果庫存修改失敗,發消息到訂單模塊,取消訂單
3、阻塞方式(兩階段提交(2PC))
定義一個事物控制中心,同一個操作中的所有服務的事物全部加入到事物控制中心控制,每個服務一旦執行完畢,事物都處於等待提交狀態,等待中心通知提交事物,一旦所有事物都執行完成,事物中心就通知所有的服務提交事物,反之,有一個服務失敗,事務中心則通知該批次所有服務全部回滾事物
4、利用日志回滾事物(Seata)
定義一個事物控制中心,同一個操作全部注冊一個全局事物id,每個服務執行完成都按照正常的事物進行提交,事物中心記錄狀態,如果某一個服務出現異常,那么事物中心會根據日志去挨個執行回滾操作