其他网址
github官方demo:seata-samples/tcc at master · seata/seata-samples · GitHub
95--分布式事务六-Seata TCC模式-Spring Cloud微服务案例(添加TCC事务) - liqiangbk - 博客园
springcloud+eureka整合seata-tcc模式 - 云+社区 - 腾讯云
Seata(TCC)+SpringCloud实现全局事务 - LifeOfCoding - 博客园
seata 是不是要支持 spring cloud 使用tcc模式? · Issue #2754 · seata/seata · GitHub
综述
本文测试Seata TCC模式。
业务场景:创建订单时,order微服务先预生成订单(订单状态为创建中),再调用storage的feign来减库存,再调用account的feign来减账户余额,最后将订单状态改为已完成。
所用技术栈:springboot、springcloud、mysql、mybatis-plus、eureka、gateway。
所用插件:lombok
与AT模式的公共部分
其他网址
简介
本部分包含三项:seata-server安装/配置、建库建表、业务微服务配置Seata。
不同点
- 业务的undo_log表
TCC无需业务微服务的undo_log表,而AT需要。即:“建库建表”=> “业务事务表”。对应的项也无需配置(配置了也不会用到):“业务微服务配置Seata”=> “各自配置”=> file.conf->client-> undo-> logTable
幂等
第一阶段:Try,第二阶段:Confirm、Cancel。第二阶段为了处理幂等问题添加一个工具类ResultHolder。这个工具也可以在第二阶段 Confirm 或 Cancel 阶段对第一阶段的成功与否进行判断,在第一阶段成功时需要保存一个标识。
幂等性:就是用户对于同一操作发起的一次请求或者多次请求的结果是一致的,不会因为多次点击而产生了了副作用。举个最简单的支付例子:用户购买商品后支付,支付扣款成功,但是返回结果的时候网络异常,此时钱已经扣了,用户再次点击按钮,此时会进行第二次扣款,返回结果成功,用户查询余额发现多扣了钱,流水记录也变成了两条。