seata之AT、TCC模式应用

废话不多说,直接贴代码

1.AT

1.application启动类上添加: @EnableAutoDataSourceProxy

2.需要事务的方法或类上添加:

@GlobalTransactional(rollbackFor = Exception.class)

3.启动服务

控制台输出:

 

2.TCC

AT模式基本上能满足我们使用分布式事务大部分需求,但涉及非关系型数据库与中间件的操作、跨公司服务的调用、跨语言的应用调用就需要结合TCC模式;

一个分布式的全局事务,整体式两阶段提交(Try-[Comfirm/Cancel])的模型,在seata中,AT模式与TCC模式事实上都是基于两阶段提交实现的,它们的区别在于:

AT模式基于支持本地ACID事务的关系型数据库:

1.一阶段prepare行为:在本地事务中,一并提交“业务数据更新”和“相应回滚日志记录”;

2.二阶段commit行为:马上成功结束,自动异步批量清理回滚日志;

3.二阶段rollback行为:通过回滚日志,自动生成补偿操作,完成数据回滚;

相应的,TCC模式需要我们认为编写代码实现提交和回滚:

1.一键端prepare行为:调用自定义的prepare逻辑(如插入、删除、修改等操作);

2.二阶段commit行为:调用自定义的commit逻辑;

3.二阶段rollback行为:调用自定义的rollback逻辑;

所以TCC模式就是把自定义的分支事务(提交和回滚)纳入到全局事务管理中:

seata中的TCC模式就是手动版的AT模式,它允许自定义两阶段的处理逻辑而不需要依赖AT模式的undo_log回滚表;

示例:

需要事务的方法或类上(事务发起方TM)添加@GlobalTransactional注解

在接口上添加@LocalTCC注解 注:该注解添加在接口上,而不是实现类上

方法上添加@TwoPhaseBusinessAction 定义两阶段提交

该注解属性

name:定义一个全局唯一值,一般为该方法名

commitMethod:自定义提交方法名(二阶段提交),需和下方提交方法名保持一致

rollbackMethod:自定义回滚方法名(二阶段回滚),需和下方回滚方法名保持一致

@BusinessActionContextParameter 加上该注解可传递参数到二阶段方法

BusinessActionContext 上下文 可取到@BusinessActionContextParameter定义的参数

实现类中commit方法可以为空确认

在rollback方法中写自定义回滚操作,该方法里可以实现中间件、非关系型数据库的回滚操作 

剩下的两种模式(SAGA、XA)本人只是稍微了解了一下,实际应用当中没有用到

 

  • 5
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Seata的AT模式TCC模式可以一起使用。AT模式主要用于满足分布式事务的大部分需求,但在涉及不支持事务的数据库或中间件操作,或者AT模式暂未支持的数据库、跨公司服务调用、跨语言应用调用或需要手动控制整个二阶段提交过程的情况下,可以结合TCC模式来实现。TCC模式可以在第一阶段顺利完成的情况下,通过TC控制当前分支事务的提交,如果提交失败,TC会反复尝试直到提交成功。在TCC模式中,全局事务未提交但本地已提交的数据对其他全局事务是可见的,但其他全局事务不能操作该条数据,必须等待当前全局事务提交。所以,Seata的AT模式TCC模式可以相互配合使用。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [Seata分布式事物(三)TCC事务模式执行机制](https://blog.csdn.net/Extraordinarylife/article/details/115772661)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [Seata --AT模式+TCC模式](https://blog.csdn.net/weixin_58678891/article/details/120442965)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [seata学习总结](https://blog.csdn.net/zhhui_syist/article/details/122976030)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值