Seata分布式事務解決方案
分布式有可能會帶來很多額外的技術問題,如分布式事務,分布式鎖,全局唯一ID等問題,假如從設計層面可以避免這些問題,建議還是從設計層面避免。
安裝:
首先下載https://github.com/seata/seata/releases/ 1.4.2的版本,修改file.conf和registry.conf

下載源碼https://gitee.com/jovic/seata, 建立seata數據庫,執行script/server/db/mysql.sql
啟動Eureka,然后啟動\seata\seata-server-1.4.2\bin\seata-server.bat
Seata有3個基本組成部分:
A. 事務協調器(TC-Transaction Coordinator):維護全局事務和分支事務的狀態,驅動全局提交或回滾。
B. 事務管理器(TM-Transaction Manager): 定義全局事務的范圍, 開始全局事務,提交或回滾全局事務。
C.資源管理器(RM-Resource Manager):管理正在處理的分支事務的資源,與TC對話以注冊分支事務并報告分支事務的狀態,并驅動分支事務的提交或回滾。

Seata管理的分布式事務的典型生命周期:
-
TM要求TC開始一項新的全局事務。TC生成代表全局事務的XID。
-
XID通過微服務的調用鏈傳播。
-
RM將本地事務注冊為XID到TC的相應全局事務的分支。
-
TM要求TC提交或回退相應的XID全局事務。
-
TC驅動XID的相應全局事務下的所有分支事務以完成分支提交或回滾

案例:
下面看看下單->扣庫存->扣賬戶余額這個流程,怎么解決分布式事務的問題,圖示如下:


測試失敗的Case, UserId 為1002 的用戶下單,account-service會拋出異常導致事務回滾
http://127.0.0.1:8084/api/business/purchase/rollback
seata-server1.4.2的log可以看到事務回滾成功

測試成功的Case,UserId 為1001的用戶下單,事務成功提交:
http://127.0.0.1:8084/api/business/purchase/commit
關注公眾號“一米源碼”回復“Seata”獲取項目示例源碼

浙公網安備 33010602011771號