前言
這次我們直接回到主幹分支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分支,這裏做了什麼也可以深挖一下。