分布式事务Saga(四)事务恢复SagaRecoveryManager

分布式事务Saga (一) TCC vs Saga
分布式事务Saga(二)事务管理者SagaTransactionalAspect
分布式事务Saga(三)事务参与方管理SagaParticipantAspect
分布式事务Saga(四)事务恢复SagaRecoveryManager

项目地址:https://github.com/yangxb2010000/saga

上一篇讲的都是系统正常运行时事务的处理逻辑,我们的实例在运行很可能会在分布式事务运行期间宕机,这个时候就需要一个定时任务定期把没有完成的分布式事务恢复,对于当前项目的Saga来说就是回滚已经执行的参与方操作

可以看下Demo PaymentServiceImpl类中的mockPaymentInventoryWithShutdown方法,模拟了分布式事务执行期间系统宕机的情景

image.png

如上图所示,在调用扣库存服务之前系统宕机了,这个时候SagaRecoveryManager就会负责把accountClient.payment操作进行回滚(调用cancelPayment方法),看下SagaRecoveryManager的实现

image.png

loadErrorTransactions 从事务持久化服务中获取当前服务对应的超时未完成的事务,因为事务持久化服务可能存储了多个服务的事务对象,当前实例只能加载当前服务类型的事务对象,如UserService的一个实例只能加载UserService创建的事务对象
image.png

recoverErrorTransactions 负责加载Participant填充到Transaction对象中,并对Transaction执行回滚操作,如果多次重试都没有成功就报警,人工介入

image.png

结束

这样Saga分布式事务的主要逻辑就已经介绍完了,其他的一些细节如:SagaRepository、Serializer、beanFactory、基于Filter实现对Dubbo的支持等等,读者可以自行阅读源码。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值