seata事務視頻實踐

先遺留兩個問題

問題1:如果異常是在orderService子服務消費者內發生,orderItemService還會繼續執行嗎?覺得應該不會了吧?
問題2:如果orderService發生異常,但是又想orderItemService繼續執行而且還能正常提交,這種場景怎麼用seata呢?不會直接用trycatch吧,

正文:先看圖後實踐: 

1:當Application(Controller)模擬Restful請求觸發和返回下圖

項目重新啓動completed時間時09:34:01,異常事務測試是此時間之後。

2:事務提供者Service發起者GlobalTransaction(時間09:34:14開始),並進行業務order-insert,與orderItem-insert兩個業務操作,流程是先begin new Global transaction 標識ip:id; 異常時又一次 Begin new Global transaction;  下圖console執行 時間和日誌

成功insert  xid: ~1035   ;   fail回滾:xid: ~1038   (xid是全局事務id)

2.1:查看服務消費者orderSevice(時間09:34:15開始); 由於Application模擬兩次測試,第一次無RuntimeExp;第二次模擬測試觸發的異常,所以orderSevice第一次模擬同時就會兩段式事務機制併成功(下圖SUCCESS藍色區域onMessage:xid~1029,branchId=~1030),onMessage:xid~1035,branchId=~1036

第二次模擬RuntimeExp,當全局事務觸發RuntimeExp, orderSevice重新onMessage:xid~1038,branchId=~1039,下圖FAIL 紅色區域,進行事務回滾

2.2:同理:服務消費者orderItemProvider,消費成功及回滾失敗同」 服務消費者orderSevice「(時間09:34:14開始) orderSevice是onMessage:xid~1038,branchId=~1039;orderItemProvider是onMessage:xid~1038,branchId=~1040

3: seata數據庫日誌