2、TCC 解決分布式事務的方案 落地時 hmily框架。
2.1 TCC 代表了三個階段 Try Confirm cancel
Try 就是 一個方法,這里 是 業務的邏輯,幾個邏輯都操縱數據庫 比如完成 注冊用戶,調用 送積分的 遠程邏輯
默認 try執行了 confirm一定執行。
Confirm 這里呢 可以理解成 確認提交。
Cancel 就是業務的 回滾,只要try里面有異常 就 走cancel。
2.2 TCC 注意的異常處理情況
1) 空回滾 :就是 try沒有執行 就執行cancel 方法。
2)冪等性 :一個方法無論調多少次 結果都是一樣的 這是冪等性。
3) 懸掛 ;confirm 或者 cancel已經執行了 又要執行 try方法 這是懸掛。
處理的方法是調用 數據庫的 邏輯。 hmily需要的數據庫表設計。
事務的發起方 try這里需要解決冪等性 和懸掛的問題。 try方法上要加本地事務的注解。
cancel這里需要解決 空回滾和冪等性的問題。
事務的另一方 try這里 啥也不用寫邏輯
confirm 這里需要 寫 送積分的邏輯。這里即使又異常整個事務也回滾不了 可以人工的處理。 需要解決冪等性。方法上要加本地事務的注解。
cancel 這里 也啥也不用寫。
##feign 的使用注意事項
@FeignClient(value="tcc-demo-bank2",fallback=Bank2ClientFallback.class)
public interface Bank2Client {
//遠程調用李四的微服務
@GetMapping("/bank2/transfer")
##這里特別注意啊一定要加 這個注解 為的是 把全局的 事務id 傳到 下游。
@Hmily
public Boolean transfer(@RequestParam("amount") Double amount);
}
代碼 位置
https://pan.baidu.com/s/1Qn4qrAr-HIoO_gdcreAQug