听说 TCC 不支持 OpenFeign?这个坑松哥必须给大家填了!
我们非常重视原创文章,为尊重知识产权并避免潜在的版权问题,我们在此提供文章的摘要供您初步了解。如果您想要查阅更为详尽的内容,访问作者的公众号页面获取完整文章。
文章摘要
介绍:松哥在此文章中讲解了分布式事务框架Seata的TCC(Try-Confirm-Cancel)模式,并用一个商品下单的案例来展示TCC模式的具体使用方法。
1. 什么是TCC模式
TCC模式是两阶段提交的一种手动模式。它分为两个阶段:prepare阶段检测资源并预留,commit或rollback阶段是等待所有分支事务准备完毕后,统一提交或回滚。与AT模式不同,TCC模式不依赖于数据库的事务支持,三个方法(prepare、commit、rollback)需开发者自己实现。
2. 案例回顾
案例涉及五个服务:eureka(服务注册中心),account(账户服务),order(订单服务),storage(仓储服务)和bussiness(业务执行下单操作)。示例中展示了用户下单的流程,如果任一环节出错,触发整体事务回滚,确保分布式事务的一致性。
3. 重新设计数据库
数据库重新设计,主要是在账户表中增加了冻结金额字段,库存表中增加了冻结库存数量字段,并删除了不再需要的undo_log表。
4. 重新设计Feign接口
在TCC模式中,使用OpenFeign和Seata依赖,通过@LocalTCC和@TwoPhaseBusinessAction注解定义了三个接口(AccountServiceApi、OrderServiceApi、StorageServiceApi),分别对应不同服务的TCC操作,通过prepare方法进行预处理,commit和rollback方法进行提交或回滚。
5. Account服务
在Account服务中,AccountController实现了AccountServiceApi接口。核心处理逻辑在AccountService类中,包括prepareDeduct方法检查并冻结账户余额,commitDeduct和rollbackDeduct方法处理最终的提交或回滚操作。
想要了解更多内容?