Spring 分布式事務詳解


在學習分布式事務的過程中會遇到以下關鍵名詞:

 

相關名詞:

XA :XA規范的目的是允許多個資源(如數據庫,應用服務器,消息隊列,等等)在同一事務中訪問,這樣可以使ACID屬性跨越應用程序而保持有效。XA使用兩階段提交來保證所有資源同時提交或回滾任何特定的事務。

JTA: Java事務API(Java Transaction API,簡稱JTA ) 是一個Java企業版 的應用程序接口,在Java環境中,允許完成跨越多個XA資源的分布式事務。

 

分布式事務要解決的問題:

把不同支援放到一個事物中,實現ACID。舉例說明,一個方法中需要操作兩個數據庫 db1,db2, 本地事物是基於connection ,所以無法保證兩個庫的事物,這是后需要用到分布式事物。

 

分布式事務原理:

兩階段提交。簡單來說,引入事務管理器(txManager)的概念,開啟事務前,txManager 創建一個 tx ,txId 是全局事務的唯一標示, 方法中db1操作完成后,告知tx  db1操作成功,但db1沒有真的提交,而是block住了。db2 繼續執行,執行完了自己block住,然后告知txManager,這個事物可以提交了,然后txManager 通知db1 db2 你們可以真正提交了,事物結束。

db block 住屬於第一階段, 真正提交或者回滾屬於第二階段,這就是兩階段提交。

 

分布式事務實現方案:

1.基於 XA和JTA 規范的,需要用到JNDI ,比較笨重。JTA 的實現方式是依賴支持jndi 的容器,資源(datasource)和管理器(txManager)都必須配置成jndi ,然后兩階段過程是在容器層面執行的,影藏了具體細節。

2.非規范實現。

spring 官方推薦的分布式事物實現方案有:  Atomikos  Bitronix

Atomikos 支持了XA規范和非XA:

 

 mysql-connector.jar 驅動程序對JTA的支持:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM