本樣例介紹如何把 MQ 事務消息的發送納入 GTS 管理的全局事務。

前提條件

在把 MQ 事務消息的發送納入 GTS 管理的全局事務,請先完成以下工作:
  • 準備一個可用的 MySQL 環境(可以是阿里云的 RDS)。
  • 準備一個可用的 Maven 環境。

樣例說明

樣例工程模擬了資金轉賬的應用。包含 2 個數據源,和 1 個 MQ 事務消息 Topic:

  • 帳戶 A 數據源:存儲 A 的資金。
  • 帳戶 B 數據源:存儲 B 的資金。
  • MQ 事務消息 Topic:銜接上下游業務的消息隊列。

步驟一:下載樣例工程

樣例工程請參見gts-sample-mq

步驟二:構建樣例工程

  1. 初始化數據庫。
    1. 創建兩個用于運行樣例的數據庫。
    2. 分別執行工程中的 init-a.sqlinit-b.sql 腳本,建立相關表。
  2. 在樣例工程的根目錄下,執行 mvn clean install命令,構建樣例工程。
    運行成功后common/lib目錄下會生成 GTS 的 SDK 包,包括:
    • 客戶端主包:~txc-client-${gts.sdk.version}.jar
    • Spring Cloud 原生支持包:txc-client-springcloud-${gts.sdk.version}.jar

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

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

步驟四:運行樣例工程

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

關鍵配置和運行機制解讀

application.properties中,以 spring.cloud.txc 為前綴的一系列參數是 GTS 關鍵配置,說明如下:

  • GTS 全局事務調用鏈路上的每個服務都要進行這些配置,例如樣例中的 Business/Storage/Order/Account。
  • spring.cloud.txc.txcAppName:每個服務自定義一個全局唯一的應用名。
  • spring.cloud.txc.txcServerGroup:GTS 服務實例(事務分組)名。
    • 在本地運行通過公網訪問 GTS 服務時,請使用公共的實例 txc_test_public.1129****3855****.QD 并配合使用下面的 spring.cloud.txc.url 配置。
    • 在正式環境 ECS 上運行時,請使用您訂購的 GTS 服務實例全名,并配合使用下面的 spring.cloud.txc.accessKeyspring.cloud.txc.accessKey 配置。
  • spring.cloud.txc.mode: GTS 工作模式,默認為 1(AT 模式)。MQ 實際上使用了 TCC 模式,所以這里模式為 3
  • spring.cloud.txc.url:公網訪問 GTS 服務的接入地址,固定值 https://test-cs-gts.aliyuncs.com 。這個配置僅在本地公網訪問時需要。
  • spring.cloud.txc.accessKeyspring.cloud.txc.secretKey:在 ECS 上正式運行,這里配置您 GTS 服務實例使用者的 AK 和 SK 用于鑒權。默認是使用訂購 GTS 服務實例的用戶(即實例全名中間部分 賬號ID 對應用戶)的 AK 和 SK。也可以使用 RAM 授權的用戶 AK 和 SK,具體方法請參見為RAM用戶授權事務分組