TCC-Transaction 分布式事务源码解读(三、框架如何感知Tcc服务)

上文中提到发布TCC服务只需在service实现类的方法上加@Compensable ,那么该方法就变为TCC中的try方法:

@Compensable(confirmMethod = "confirmRecord", cancelMethod = "cancelRecord", transactionContextEditor = MethodTransactionContextEditor.class)
public String record(TransactionContext transactionContext, CapitalTradeOrderDto tradeOrderDto) {

接下来看看该注解具有哪些属性、框架又是如何感知该注解,框架感知注解后又做了哪些事? 

在tcc-transaction-api中定义了该注解:

1、注解定义:

具体属性有 Propagation  REQUIRED(0),SUPPORTS(1),MANDATORY(2),REQUIRES_NEW(3)  事务传播特性, confirmMethod 方法名,cancelMethod 方法名,asyncConfirm 是否异步确认,asyncCancel 是否异步取消,TransactionContextEditor 事务上下文(目标类、方法名、参数)。

2、TCC事务框架如何感知用户开启分布式事务?

tcc-transaction-core 中有两个重要的类配置@Aspect AOP 切面( 参与者 try 方法 )进行拦截 @Compensable事务注解,获取注解信息(事务传播特性、注解所在类名、confirm方法名、cancel方法名、注解方法参数列表),接下来我们框架在TCC分布式事务中具体做了哪些坏事??

第一个重要的类ConfigurableTransactionAspect:

ConfigurableTransactionAspect继承了CompensableTransactionAspect类,那么且看父类中具体做了那些事,

 

CompensableTransactionAspect类就是前文中提到的@Aspect AOP切面。

位置1、定义切面

位置2、定义切入点,拦截所有被@Compensable注解的方法,即拦截所有TCC中的try方法,也就是拦截下边这种代码。

@Compensable(confirmMethod = "confirmRecord", cancelMethod = "cancelRecord", transactionContextEditor = MethodTransactionContextEditor.class)
public String record(TransactionContext transactionContext, CapitalTradeOrderDto tradeOrderDto) {

位置3、在所拦截方法的前后执行3中的compensableTransactionInterceptor.interceptCompensableMethod(pjp)代码(后续重点解读该处代码

 

总结:到此为止框架已成功拦截所有@Compensable注解的方法,并且获取Compensable注解的属性,即框架已成功感知用户使用TCC框架,下文继续分享框架感知@Compensable注解后具体又是如何做分布式事务的?

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值