Seata 是基于全局事務服務 GTS 的開源分布式事務解決方案,和 GTS 的核心原理和事務協議是完全一致的。本文通過樣例介紹如何將一個基于 Seata 的分布式事務應用遷移到 GTS 上運行。

前提條件

在使用 Seata 應用樣例前,請先完成以下工作:
  • 數據庫依賴 MySQL,準備一個可用的 MySQL 環境(也可以是阿里云的 RDS)。
  • 構建樣例工程依賴 Maven,準備一個可用的 Maven 環境。

背景信息

GTS SDK 2.9.0 版本開始提供對 Seata 的兼容支持。關于 Seata 的更多信息,請參見 Seata

樣例簡介

樣例工程模擬了資金轉賬的應用,包含 2 個數據源:

  • 賬戶 A 數據源:存儲 A 的資金。
  • 賬戶 B 數據源:存儲 B 的資金。

通過 Seata 管理的分布式事務,保障賬戶 A 和 B 之間交易的一致性。

步驟一:下載樣例工程

樣例工程詳情請參見 gts-sample-seata

步驟二:構建樣例工程

  1. 創建兩個用于運行樣例的數據庫,分別執行工程中的 init-a.sqlinit-b.sql 腳本,建立相關表。
  2. 在樣例工程根目錄下,執行 build.sh(Linux) 或 build.bat(Windows) 腳本,構建工程。

步驟三:導入樣例工程到 IDE

為了方便運行和理解,建議您把工程導入到 IDE 中。

步驟四:運行樣例工程

運行樣例工程中 Application 的 Main 方法,結合代碼邏輯,查看 console 的日志輸出。

關鍵配置和運行機制解讀

application.properties 中,seata.txc 前綴的一系列配置是 GTS 關鍵配置,說明如下:

  • seata.txc.applicationId:請您為每個服務定義一個全局唯一的名字。這是 Seata 的原生配置,不需要修改。
  • seata.txc.txServiceGroup:Seata 的事務服務分組。這里配置為 GTS 服務實例名。
    • 在本地運行通過公網訪問 GTS 服務時,請使用公共的實例 txc_test_public.1129****3855****.QD 并配合使用下面的 spring.cloud.txc.url 配置。
    • 在正式環境 ECS 上運行時,請使用您訂購的 GTS 服務實例全名,并配合使用下面的 seata.txc.accessKey 和 seata.txc.accessKey 配置。
  • seata.txc.servcieEndPoint:公網訪問 GTS 服務的接入地址,固定值 https://test-cs-gts.aliyuncs.com 。這個配置僅在本地公網訪問時需要。
  • seata.txc.accessKey 和 seata.txc.secretKey:在阿里云環境上正式運行,這里配置您 GTS 服務實例使用者的 AK 和 SK 用于鑒權。默認是使用訂購 GTS 服務實例的用戶(即實例全名中間部分賬號ID 對應用戶)的 AK 和 SK。也可以使用 RAM 授權的用戶 AK 和 SK,具體方法請參見為 RAM 用戶授權事務分組