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

前提條件

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

樣例邏輯說明

模擬轉(zhuǎn)賬業(yè)務(wù),從 A 賬戶扣款給 B 賬戶打款。應(yīng)用程序通過調(diào)用扣款微服務(wù)和存款微服務(wù)完成轉(zhuǎn)賬業(yè)務(wù)。

  • eureka-locator:微服務(wù)的注冊中心
  • eureka-consumer:應(yīng)用程序
  • eureka-provider:扣款服務(wù)
  • eureka-provider2:存款服務(wù)

搭建樣例

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

結(jié)果驗(yàn)證

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