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