導航:首頁 > 源碼編譯 > 38個聲明式事務源碼

38個聲明式事務源碼

發布時間:2023-08-15 22:37:09

Ⅰ 分布式事務解決方案ServiceComb - Omega源碼閱讀與分享

ServiceComb已經是Apache的頂級項目,包含兩個組件,即 alpha 和 omega。

源碼地址:https://github.com/apache/servicecomb-pack

alpha 是事務協調中心,保存事務日誌,通過日誌協調各個分支

demo 裡面項目的各框架的例子:spring和bbo saga tcc

docs 設計文檔,最先應該熟悉的。

omega 負責與alpha通訊,子事務邏輯

pack-contracts gRPC通訊介面定義文件,通過中間文件生成客戶端與服務端面代碼,讓開發者不必關心通訊過程

web 用angular寫的web界面,可以查看事務的狀態。

我們主要關注的alpha和omega的代碼,gRPC知識是通訊基礎非常重要,最好先了解gRPC和probuf、Kyro序列化對閱讀源碼

還是很有幫助的。但通訊部分只是簡單帶過。

GlobalTxId全局事務ID標記子事務是否同屬性一個事務中

ParentTxId 父類的事務ID

localTxId子事務Id

Omega會面向切面編程的方式,向程序中注入相應的邏輯,初始化事務上下文OmegaContext,在事務處理的過程中向alpha報告事務狀態,

實現saga協調協議和TCC協調協議,下面就是omega客戶端要配置了三個信息

omega.enable=true或@EnableOmega的作用只標記開啟Omega,Omega在SpringBoot上初始化過程:

OmegaSpringAutoConfiguration 通過@Configuration,在Spring框架啟動時載入並配置

OmegaSpringConfig

作用:初始化各Bean,IdGenerator用來生成子事務Id Saga的事件Sender Tcc事件Sender回調CallbackContext

TransactionAspectConfig

對@SagaStart @Compensable註解AOP的切面編程對象初始

Omega內部機制:SagaStartAspect @SagaStart的AOP切面編程

TransactionAspect對@Compensable註解AOP切面編程

成功場景下,每個事務都會有開始和對應的結束事件。

TransactionAspect=>DefaultRecovery=>CompensableInterceptor

封裝了通訊組件:bbo fegin resttemplate servicecomb實現的通訊

這些組件各自通訊的基礎上,在服務之間相互調用時,把globalTxId和localTxId傳遞過去,並注入Context中

如:omega-transport->omega-transport-resttemplate

RestTemplateConfig 配置攔截器

:把當前的上下文的globalTxId和localTxId放到請求里

TransactionHandlerInterceptor 服務提供者,把resttemplate傳遞過來的globalTxId和localTxId放到當前上下文里,

pack-contracts->pack-contract-grpc

gRPC的介面服務定義文件:GrpcCommon.proto GrpcTccEvent.protogrpcTxEvent.proto:這些文件在protobuf命令直接編譯java代碼。

如何使用請看:proto文件gRpc基礎

謝謝能看到最後的人:我分享我是怎麼閱讀源碼的。源碼閱讀不能一上來就找到main入口一行一行的看。最先應該了解基本的組成架構、和用到了哪些技術棧,如果還用了你從來沒見的技術,建議先去學習這門新的技術,再回頭來看代碼,熟悉了各模塊相對應的功能後。我會找到一個切入口,猜一下它的實現方式,再根據猜測,帶著疑問,去找答案。如果對整個項目的模塊不是很清楚,最好先把源碼里的Demo正常的運行。通過這樣的簡單學習,一步步的深入。有的代碼的抽象是比較復雜的。可先跳過,當你對整個結構都非常了解了,這時再回頭去讀剩下的難點。最後有個總結有個對比就是最好結果。

閱讀全文

與38個聲明式事務源碼相關的資料

熱點內容
土著生活app怎麼樣 瀏覽:552
加密許可權怎麼取消 瀏覽:16
為什麼高端安卓機拋棄sd卡 瀏覽:303
php語言結構函數 瀏覽:129
python爬蟲抓取div 瀏覽:223
excel表格如何把文件夾調換位置 瀏覽:678
java中會存在內存泄漏 瀏覽:366
游戲中心的加密密碼是多少 瀏覽:618
同事喜歡命令 瀏覽:430
程序員300字 瀏覽:945
pubg如何開自定義伺服器 瀏覽:81
linuxshellif包含字元串 瀏覽:301
設置裡面的郵箱怎麼登錄安卓 瀏覽:719
androidwebview電話 瀏覽:251
為什麼優盤里的文件夾都不見了 瀏覽:606
單車旅行pdf 瀏覽:270
手機桌面合並文件夾打不開 瀏覽:436
linuxcnull 瀏覽:269
javaformat字元 瀏覽:677
精打細算的程序員 瀏覽:880