源码解读 - Tcc-Transaction框架(四)回归最新版本思路
前言
这次我们直接回到主干分支master-1.2.x进行分析。
正文
大致浏览一下各个模块,主要模块没有增加。
- tcc-transaction-server目前还是先不看。
- tcc-transaction-dubbo没变动。
- tcc-transaction-unit-test增加了几个单元测试类。
- tcc-transaction-tutorial-sample增加了很多集成例子。
跳过以上模块,说一下变化。
tcc-transaction-api
增加了一个注解类@UniqueIdentity,是参数级别的。
直白的理解为标识参数为唯一标识信息,后面有用到在参数列表中找到该类型的参数。
找到后具体使用的代码如下:基本思路就是用唯一标识来代替branchQualifier,好处不言而喻。
注解@Compensable中
- 增加了delayCancelExceptions,记录那些异常可以作为delayCancelException。
- 增加asyncConfirm、asyncCancel,看样子作者是实现了异步实现TCC(一会儿结合core模块分析)。
- transactionContextEditor的默认值改为了DefaultTransactionContextEditor,实现思路是与MethodTransactionContextEditor一样的。
tcc-transaction-core
直接说变化点吧
- context包:MethodTransactionContextEditor类被标记为过期,看了下使用的地方,与之前分析的差不多。
- serializer包:增加KryoThreadLocalSerializer类,字面意思是实现线程隔离\安全的序列化,有兴趣细看一下。
- interceptor包:增加CompensableMethodContext类,思路还是封装;CompensableTransactionInterceptor类中增加DelayCancelExceptions属性,记录cancel流程的异常,但是用来做什么没找到,肯定是用于记录或补偿的。增加了异步参数获取,在commit和rollback时传参。在后面流程的catch中,如果是已知的cancelException,则抛出,交给补偿流程处理这次遗留数据,否则进行正常rollback流程。
- 将Participant类与Terminator类的成员进行调整,Terminator值关心invoke()流程、Participant存储更多信息
- TransactionManager类,增加了线程池,在commit和rollback是,如果配置的@Compensable中的asyncCommit和asyncCancel属性为true,则通过线程池执行具体方法。
结尾
总结1.2.x版本
- 增加异步CC模式
- 多态、继承、封装使用的更多,每个类定位更加准确
- 增加很多集成的例子,这个需要花时间再分析实现
至此,对于Tcc-Transaction框架1.2.x分支的源码分析告一段落,对作者的实现思路有了大致了解,还有很多外围功能没来得及分析,等有时间再补充。
这是作者目前的分支列表,除了master-1.2.x外,还有一个master-1.2.x-nutz分支,这里做了什么也可以深挖一下。