TCC分布式事务

场景分析:用户下单,减库存并消耗优惠券

涉及微服务的三个子模块:订单模块、库存模块、促销模块

  1. 订单模块作为事务控制器
  2. 订单本地方法进行拦截器处理
  3. @Compensable(confirmMethod = "transferConfirm", cancelMethod = "transferCancel")
    @Transactional
  4. 利用spring的拦截器,拦截注解为Transactional的方法。这个方法里面的逻辑是try 步骤的逻辑
  5. 在方法拦截器Interceptor里面判断   当被拦截的方法正常提交后。则执行confirmMethod 配置的方法    
  6. 如果非正常提交则执行cancelMethod配置对应的方法
  7.  

如果服务正常的时候,上述是没有问题的,但如果拦截方法正在执行过程中,服务宕机了。就会出现不一致的现象,所以需要引入一个持久化保存步骤的方案

  1. 在被拦截的方法执行前,需要将业务的方法实例,参数等信息存入数据库或者其他持久化实体中;存入数据的状态默认是trying,开始的状态
  2. 当分布式事务commit后,修改数据的状态为commit
  3. 或者发生以后,处理完rollback逻辑后,修改数据的状态为rollback状态
  4. 当然commit和rollback逻辑需要遵守幂等性原则

当服务异常宕机,持久化的数据记录为trying、commit、rollback状态时,需要启用定时任务扫描。然后继续执行;执行成功则删除记录

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值