源碼解讀 - 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中

  1. 增加了delayCancelExceptions,記錄那些異常可以作爲delayCancelException。
  2. 增加asyncConfirm、asyncCancel,看樣子作者是實現了異步實現TCC(一會兒結合core模塊分析)。
  3. 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版本

  1. 增加異步CC模式
  2. 多態、繼承、封裝使用的更多,每個類定位更加準確
  3. 增加很多集成的例子,這個需要花時間再分析實現

至此,對於Tcc-Transaction框架1.2.x分支的源碼分析告一段落,對作者的實現思路有了大致瞭解,還有很多外圍功能沒來得及分析,等有時間再補充。

這是作者目前的分支列表,除了master-1.2.x外,還有一個master-1.2.x-nutz分支,這裏做了什麼也可以深挖一下。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章