該樣例工程介紹 AT 模式下,Spring Boot 框架如何通過 GTS 保證跨數據庫轉賬的分布式事務的一致性。

前提條件

在使用樣例前,請先完成以下工作:
  • 準備兩個 RDS 實例,用戶創建數據庫。
  • 準備一個 ECS 實例,用于部署本樣例。

樣例邏輯說明

從 A 賬戶向 B 賬戶轉賬。為了觸發應用異常,樣例故意先給 B 賬戶打款,然后從 A 賬戶扣款后檢查 A 賬戶余額。如果為負值則拋出應用異常,導致全局事務回滾。

搭建樣例

  1. 初始化數據庫。
    1. 在兩個數據庫分別執行 sample-txc-springboot.sqltxc_undo_log.sql,創建 txc_undo_log 表。
    2. 分別在兩個數據庫執行 txc_sample_springcloud.sql 中的相關命令,創建 account 表。
  2. 下載樣例 txc-yun-sample并上傳到 ECS 上。
  3. 修改樣例配置。
    1. 找到并打開 AccConfig.java 文件,在 txcTransactionScaner 方法中修改 GTS 的邏輯組名。
      事務邏輯組名需要使用包含 ID 和 Region 信息的全名,例如 gtstest.432242345522.HZ
    2. 找到并打開 application.properties 文件,將 accessKeysecretKey 的值修改為您實際賬號的值。
      說明 請使用主賬戶的 Access Key ID/Access Key Secret。如果使用 RAM 子賬戶的 Access Key ID/Access Key Secret,需要先使用主賬戶對子賬戶進行授權。
    3. 找到并打開 application.properties 文件,將兩個數據庫的 urlusernamepassword 的值修改為您實際使用的值。
  4. 運行 txc-yun-sample/sample-txc-springcloud 目錄下的 sh build.sh 腳本,編譯工程。
    編譯后會在相應文件中生產 client 目錄。
  5. sample-txc-springboot/client/bin 目錄下運行 sh pay_run.sh,啟動樣例。

結果驗證

  1. 使用瀏覽器訪問地址 http://<ECS IP>:8080/pay。
    初始化金額
  2. 輸入重置金額,然后單擊提交
    輸入金額
  3. 輸入轉賬金額,然后單擊提交
    轉賬
  4. 余額不足,轉賬失敗,全局事務回滾。
    事務回滾