美文网首页
分布式事务Saga(四)事务恢复SagaRecoveryMana

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

作者: 杨_同_学 | 来源:发表于2019-07-11 19:05 被阅读0次

    分布式事务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的支持等等,读者可以自行阅读源码。

    相关文章

      网友评论

          本文标题:分布式事务Saga(四)事务恢复SagaRecoveryMana

          本文链接:https://www.haomeiwen.com/subject/niqjkctx.html