【day10】

TCC 事务方案

两个阶段的三种操作:

第一个阶段:
Try 预留资源,冻结数据
第二个阶段:
Confirm 确认资源,使用第一阶段冻结的数据,完成业务
Cancel 取消资源,把第一阶段冻结的数据,再恢复回去
有侵入的事务方案,所有数据操作都需要自己实现,之前学的业务代码需要调整,底层数据库表结构也要调整。
有些复杂情况下,AT事务方案无法自动进行事务控制,就需要手动控制的事务方案。

新建工程,导入无事务版本

1.新建 Empty project 工程: seata-tcc
2.seata-at/无事务版本.zip 解压缩到 seata-tcc 工程目录
3.double shift — action – 搜索add maven project
4.选择 order-parent 的 pom.xml 导入

添加 TCC 事务

1.seata 依赖
2.三个配置文件
application.yml 对事务组命名
registry.conf 连接eureka,获取 seata server (TC)的地址
file.conf 事务组对应使用的协调器
3.调整数据库表结构
4.Mapper 添加新的数据库操作
5.按 seata tcc 的规则,定义 TccAction 接口、实现 用来执行 TCC 三个操作
6.TccAction 的三个方法要添加 @Transactional,控制本地事务(和全局事务无关)
7.业务方法中,不再直接执行业务,要改成调用 TccAction 的第一阶段方法,冻结数据
8.第一个模块业务方法上添加 @GlobalTransactional

TCC 的三个方法,

第一阶段方法,需要手动调用
第二阶段方法,由 seata 的 RM 组件(资源管理器)接收TC指令,然后自动执行
TCC的两个问题
第一阶段冻结数据失败,第二阶段仍然会执行回滚,可能引起数据混乱
第二阶段,如果运行超时或出错,TC会重试执行第二阶段,
可能会重复的提交数据,或重复的回滚数据,造成数据混乱。

幂等性控制

一次操作成功,和多次操作的结果相同

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值