tcc介绍
tcc介绍查看我之前的文章: https://caicongyang.blog.csdn.net/article/details/119721282?spm=1001.2014.3001.5502
tcc-transaction 介绍: http://mengyun.org/zh-cn/index.html
本文基于2.x 最新版本:https://github.com/changmingxie/tcc-transaction
核心流程
核心类: org.mengyun.tcctransaction.interceptor.CompensableTransactionAspect 可补偿的事物拦截器
核心类:org.mengyun.tcctransaction.interceptor.ResourceCoordinatorAspect 资源协调拦截器
两个类通过子类继承 Ordered 接口来实现CompensableTransactionAspect 先调用,后调用ResourceCoordinatorAspect接口;
核心流程:
@startuml
Compensable -> CompensableTransactionAspect
CompensableTransactionAspect -> compensableTransactionInterceptor : interceptCompensableMethod
CompensableTransactionInterceptor ->CompensableTransactionInterceptor : rootMethodProceed开启事务
Compensable -> ResourceCoordinatorAspect
ResourceCoordinatorAspect -> ResourceCoordinatorInterceptor:interceptTransactionContextMethod,事物参与者加入,并执行真正执行TRYING阶段的方法
CompensableTransactionInterceptor -> CompensableTransactionInterceptor: typing方式执行成功执行transactionManager.commit 否则执行rollback方法
CompensableTransactionInterceptor -> Transaction: commit()所有食物参与都执行confirm 方法
CompensableTransactionInterceptor -> Transaction:rollback() 所有事物参与都执行CANCEL方法
@enduml
http 支持
FeignInterceptor继承feign拦截器RequestInterceptor把TransactionContext 传递到下一个应用
下一个应用通过 RequesterInterceptor 将TransactionContext 获取重新放到 TransactionContextHolder 中
dubbo 支持
生产者:org.mengyun.tcctransaction.dubbo.filter.TransactionContextDecodeFilter 传递transaction上下文
消费者:org.mengyun.tcctransaction.dubbo.interceptor.TransactionContextEncodeInterceptor 获取上下文
通过该类org.mengyun.tcctransaction.dubbo.interceptor.CompensableTransactionInterceptor 将消费者加入事务传播链中
恢复
入口类 org.mengyun.tcctransaction.recovery.QuartzRecoveryTask