分布式事务Saga (一) TCC vs Saga
分布式事务Saga(二)事务管理者SagaTransactionalAspect
分布式事务Saga(三)事务参与方管理SagaParticipantAspect
分布式事务Saga(四)事务恢复SagaRecoveryManager
项目地址:https://github.com/yangxb2010000/saga
上一篇讲的都是系统正常运行时事务的处理逻辑,我们的实例在运行很可能会在分布式事务运行期间宕机,这个时候就需要一个定时任务定期把没有完成的分布式事务恢复,对于当前项目的Saga来说就是回滚已经执行的参与方操作
image.png可以看下Demo PaymentServiceImpl类中的mockPaymentInventoryWithShutdown方法,模拟了分布式事务执行期间系统宕机的情景
image.png如上图所示,在调用扣库存服务之前系统宕机了,这个时候SagaRecoveryManager就会负责把accountClient.payment操作进行回滚(调用cancelPayment方法),看下SagaRecoveryManager的实现
loadErrorTransactions 从事务持久化服务中获取当前服务对应的超时未完成的事务,因为事务持久化服务可能存储了多个服务的事务对象,当前实例只能加载当前服务类型的事务对象,如UserService的一个实例只能加载UserService创建的事务对象
image.png
image.pngrecoverErrorTransactions 负责加载Participant填充到Transaction对象中,并对Transaction执行回滚操作,如果多次重试都没有成功就报警,人工介入
结束
这样Saga分布式事务的主要逻辑就已经介绍完了,其他的一些细节如:SagaRepository、Serializer、beanFactory、基于Filter实现对Dubbo的支持等等,读者可以自行阅读源码。
网友评论