分佈式事務框架-Litx補償事務框架源碼解析

前言

  之前某段時間在研究分佈式事務過程中,對實現原理比較好奇,於是去Gitee上找了幾個人氣比較高的框架進行學習,其中印象深刻的有Litx,因為Litx源碼不多,且都是基於Spring和Dubbo底層實現,所以理解起來比較容易,索性對這個框架分析過長進行總結如下

 

litx(//gitee.com/bryan31/litx)是一個基於補償的輕量級分佈式事務框架。(目前只支持dubbo,未來計劃支持http等其他rpc調用的補償)

  • 對代碼邏輯無侵入
  • 和spring事務無縫結合(內部實現是集成spring的事務管理器,靠@transactional標註開啟)
  • 自動回滾補償接口
  • 如回滾異常提供hook接口可供擴展,當回滾失敗時,可以拿到數據自行可作處理。

 首先看源碼得先把項目拉到本地,通過跑demo或者測試用例方式先讓項目正常運行,然後結合文檔+觀察輸出日誌+debug方式找到其入口,然後深入對每個方法進行深挖

  如下是項目結構圖,從上到下分別是 litx-core(存放核心模塊)、litx-dubbo(實現dubbo分佈式事務)、litx-test(測試用例)

   該框架其主要核心思路是基於Spring->BeanPostProcessor + 自定義分佈式事務標識註解 + Dubbo Filter + 重寫DataSourceTransactionManager實現分佈式事務,由於篇幅有限,下面只對核心的代碼進行分析

1.litx-dubbo

  •  LitxDubboDefinationScanner(註冊每個方法對應的回滾方法到Map)

 

  •  回滾方法註冊邏輯

 

2.lite-dubbo

 

 

3.litx-core

 

 

 以上圖片篇幅就是Litx分佈式事務源碼的核心