該樣例工程介紹 AT 模式下,Spring Cloud 框架如何通過 GTS 保證跨數(shù)據(jù)庫轉賬的分布式事務的一致性。
前提條件
在使用樣例前,請先完成以下工作:
- 準備兩個 RDS 實例,用戶創(chuàng)建數(shù)據(jù)庫。
- 準備一個 ECS 實例,用于部署本樣例。
樣例邏輯說明
模擬轉賬業(yè)務,從 A 賬戶扣款給 B 賬戶打款。應用程序通過調用扣款微服務和存款微服務完成轉賬業(yè)務。
- eureka-locator:微服務的注冊中心
- eureka-consumer:應用程序
- eureka-provider:扣款服務
- eureka-provider2:存款服務
搭建樣例
- 初始化數(shù)據(jù)庫。
- 分別在兩個數(shù)據(jù)庫執(zhí)行 txc_undo_log.sql,創(chuàng)建 txc_undo_log 表。
- 分別在兩個數(shù)據(jù)庫執(zhí)行 txc_sample_springcloud.sql 中的相關命令,創(chuàng)建 account 表。
- 下載樣例 txc-yun-sample并上傳到 ECS 上。
- 修改樣例配置。
- 分別找到并打開 sample-txc-springcloud 樣例下 eureka-consumer、eureka-provider 和 eureka-provider2 三個文件中的 config.java 文件,在 txcTransactionScaner 方法中修改 GTS 的事務分組名稱。
- 分別找到并打開 eureka-consumer、eureka-provider 和 eureka-provider2 三個文件中的 application.properties 文件,將 accessKey 和 secretKey 的值修改為您實際賬號的值。
- 分別找到并打開 eureka-consumer、eureka-provider 和 eureka-provider2 三個文件中的 application.properties 文件,將數(shù)據(jù)庫的 url、username和 password 的值修改為您實際使用的值。
- 運行 txc-yun-sample/sample-txc-springcloud 目錄下的 sh build.sh 腳本,編譯工程。
編譯后會在相應文件中生產 client 目錄。
- 運行樣例。
- 運行 eureka-locator/client/bin 目錄下的 locator.sh 腳本,啟動注冊中心。
- 運行 eureka-provider/client/bin 目錄下的 provider1_run.sh 腳本,啟動扣款服務。
- 運行 eureka-provider2/client/bin 目錄下的 provider2_run.sh 腳本,啟動存款服務。
- 運行 eureka-consumer/client/bin 目錄下的 consumer_run.sh 腳本,啟動樣例。
結果驗證
- 使用瀏覽器訪問地址 http://<ECS IP>:9000。
- 在頁面中輸入轉賬金額,然后單擊提交。
- 余額不足,轉賬失敗,全局事務回滾。