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

前提條件

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

樣例邏輯說明

模擬轉賬業(yè)務,從 A 賬戶扣款給 B 賬戶打款。應用程序通過調用扣款微服務和存款微服務完成轉賬業(yè)務。

  • eureka-locator:微服務的注冊中心
  • eureka-consumer:應用程序
  • eureka-provider:扣款服務
  • eureka-provider2:存款服務

搭建樣例

  1. 初始化數(shù)據(jù)庫。
    1. 分別在兩個數(shù)據(jù)庫執(zhí)行 txc_undo_log.sql,創(chuàng)建 txc_undo_log 表。
    2. 分別在兩個數(shù)據(jù)庫執(zhí)行 txc_sample_springcloud.sql 中的相關命令,創(chuàng)建 account 表。
  2. 下載樣例 txc-yun-sample并上傳到 ECS 上。
  3. 修改樣例配置。
    1. 分別找到并打開 sample-txc-springcloud 樣例下 eureka-consumereureka-providereureka-provider2 三個文件中的 config.java 文件,在 txcTransactionScaner 方法中修改 GTS 的事務分組名稱。
    2. 分別找到并打開 eureka-consumereureka-providereureka-provider2 三個文件中的 application.properties 文件,將 accessKeysecretKey 的值修改為您實際賬號的值。
    3. 分別找到并打開 eureka-consumereureka-providereureka-provider2 三個文件中的 application.properties 文件,將數(shù)據(jù)庫的 urlusernamepassword 的值修改為您實際使用的值。
  4. 運行 txc-yun-sample/sample-txc-springcloud 目錄下的 sh build.sh 腳本,編譯工程。
    編譯后會在相應文件中生產 client 目錄。
  5. 運行樣例。
    1. 運行 eureka-locator/client/bin 目錄下的 locator.sh 腳本,啟動注冊中心。
    2. 運行 eureka-provider/client/bin 目錄下的 provider1_run.sh 腳本,啟動扣款服務。
    3. 運行 eureka-provider2/client/bin 目錄下的 provider2_run.sh 腳本,啟動存款服務。
    4. 運行 eureka-consumer/client/bin 目錄下的 consumer_run.sh 腳本,啟動樣例。

結果驗證

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