該樣例工程介紹 AT 模式下,Spring Boot 框架如何通過 GTS 保證跨數據庫轉賬的分布式事務的一致性。
前提條件
在使用樣例前,請先完成以下工作:
- 準備兩個 RDS 實例,用戶創建數據庫。
- 準備一個 ECS 實例,用于部署本樣例。
樣例邏輯說明
從 A 賬戶向 B 賬戶轉賬。為了觸發應用異常,樣例故意先給 B 賬戶打款,然后從 A 賬戶扣款后檢查 A 賬戶余額。如果為負值則拋出應用異常,導致全局事務回滾。
搭建樣例
- 初始化數據庫。
- 在兩個數據庫分別執行 sample-txc-springboot.sql 和 txc_undo_log.sql,創建 txc_undo_log 表。
- 分別在兩個數據庫執行 txc_sample_springcloud.sql 中的相關命令,創建 account 表。
- 下載樣例 txc-yun-sample并上傳到 ECS 上。
- 修改樣例配置。
- 找到并打開 AccConfig.java 文件,在 txcTransactionScaner 方法中修改 GTS 的邏輯組名。
事務邏輯組名需要使用包含 ID 和 Region 信息的全名,例如 gtstest.432242345522.HZ。
- 找到并打開 application.properties 文件,將 accessKey 和 secretKey 的值修改為您實際賬號的值。
說明 請使用主賬戶的 Access Key ID/Access Key Secret。如果使用 RAM 子賬戶的 Access Key ID/Access Key Secret,需要先使用主賬戶對子賬戶進行授權。
- 找到并打開 application.properties 文件,將兩個數據庫的 url、username和 password 的值修改為您實際使用的值。
- 運行 txc-yun-sample/sample-txc-springcloud 目錄下的 sh build.sh 腳本,編譯工程。
編譯后會在相應文件中生產 client 目錄。
- 在 sample-txc-springboot/client/bin 目錄下運行 sh pay_run.sh,啟動樣例。
結果驗證
- 使用瀏覽器訪問地址 http://<ECS IP>:8080/pay。
- 輸入重置金額,然后單擊提交。
- 輸入轉賬金額,然后單擊提交。
- 余額不足,轉賬失敗,全局事務回滾。