該樣例綜合了 GTS、EDAS 及 MQ 的使用,通過 Console 和 Web 兩種方式充分展現了用戶的使用場景,是 EDAS 上部署 GTS 的進階樣例,幫助您更全面的理解 GTS 的使用場景。

前提條件

在使用 sample-txc-edas 樣例工程,請先完成以下工作:

樣例邏輯說明

DecMoney 賬號向 IncMoney 賬號轉賬,IncMoney 會根據當前賬號余額更新用戶相應的 Level。業務為了模擬應用異常產生,故意先給 IncMoney 打款,然后從 DecMoney 扣款后檢查 DecMoney 余額,如果為負值則拋出應用異常導致全局事務回滾。

該業務的展現方式有兩種,分別是 Web 方式和 Console 方式。此外,還提供了一種帶有 MQ 操作的 Console 方式客戶端。

樣例模塊說明

本樣例主要包含以下幾個子工程:

  • txc-client-web:EDAS+GTS 的 MVC 客戶端 Spring Mvc,用 Web 方式展現業務邏輯。
  • txc-client-console:EDAS+GTS 的 Console 客戶端,用 Console 的方式展現業務邏輯。
  • txc-client-mq:EDAS+GTS+MQ 的 Console 客戶端,用 Console 的方式展現綜合了 EDAS 和 MQ 的業務邏輯。
  • txc-edas-api:DecMoney、 IncMoney 、UpdateStarLevel 服務接口定義。
  • txc-level-service:UpdateStarLevel 的 EDAS 服務端應用(WAR)。
  • txc-money-service:IncMoney,DecMoney 的 EDAS 服務端應用(WAR)。

搭建樣例

  1. 下載樣例 txc-yun-sample
  2. 根據數據源的使用情況,修改數據源配置。
    • 同時擁有 DRDS 數據源和 RDS 數據源,并在上述數據源配置文件中配置了它們。則在服務發布后,您將同時有兩個分組,一個是 DRDS 的,一個是 RDS 的。
    • 使用 RDS 數據源
      1. 請在下列文件中刪除 DRDS 配置:
        • sample-txc-edas/txc-money-service/src/main/resources/txc-datasource.xml
        • sample-txc-edas/txc-level-service/src/main/resources/txc-datasource.xml
        • sample-txc-edas/txc-money-service/src/main/resources/hsf-provider-beans.xml
        • sample-txc-edas/txc-level-service/src/main/resources/hsf-provider-beans.xml
      2. sample-txc-edas/txc-client-web/src/main/resources/hsf-consumer-beans-drds.xml 文件中,將 version1.1.1 改為 1.1.2,將所有 DRDS 替換為 RDS

        sample-txc-edas/txc-client-web/src/main/resources/hsf-consumer-beans-drds.xml

    • 使用 DRDS 數據源
      1. 請在下列文件中刪除 RDS 配置:
        • sample-txc-edas/txc-money-service/src/main/resources/txc-datasource.xml
        • sample-txc-edas/txc-level-service/src/main/resources/txc-datasource.xml
        • sample-txc-edas/txc-money-service/src/main/resources/hsf-provider-beans.xml
        • sample-txc-edas/txc-level-service/src/main/resources/hsf-provider-beans.xml
      2. 在下列文件中,將 version1.1.2 改為 1.1.1,將所有 RDS 替換為 DRDS
        • sample-txc-edas/txc-client-mq/src/main/resources/hsf-consumer-beans-rds.xml
        • sample-txc-edas/txc-client-console/src/main/resources/hsf-consumer-beans-rds.xml
  3. sample-txc-edas 目錄下執行 build.sh,編譯樣例工程。
  4. 將下列編譯完成的 WAR 包部署到 EDAS 中。部署操作請參見在ECS集群中創建并部署應用
    • sample-txc-edas/txc-level-service/target/txc-level-service.war
    • sample-txc-edas/txc-money-service/target/txc-money-service.war
    • sample-txc-edas/txc-client-web/target/txc-client-web.war

結果驗證

本樣例提供了 WebService 和 Console 兩種驗證方式,Console 又可以使用 txc-client-console 和 txc-client-mq 兩個子工程驗證。

  • 使用 WebService 驗證部署結果
    1. 使用瀏覽器訪問地址 http://ip:8080/txc-client-web/client。

      顯示 inc_money、dec_money 和 level 三個表的當前值。

    2. 通過 reset 可以重置 dec_money 的初始值并清空 inc_money 和 level 表的值。
    3. 輸入每次轉款的金額數測試成功的全局事務和余額不足產生異常并回滾的全局事務。
  • 使用 Console 驗證部署結果
    • 使用 txc-client-console 子工程驗證:
      1. 將 sample-txc-edas 工程上傳到 ECS 上。
      2. 修改數據源配置。
      3. 在 sample-txc-edas 目錄下執行 build.sh, 編譯樣例工程。
      4. 設置運行時環境變量,將下面的各參數的值(xxxx)替換為實際配置。如果需要,可以咨詢 EDAS 技術支持人員。
        export JAVA_OPTS="-Dproject.name=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx -Dtenant.id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx -Dspas.identity=/home/admin/.spas_key/default -Daddress.server.domain=xxxx -Daddress.server.port=xxxx -Dconfigserver.client.port=xxxx -DJM.LOG.RETAIN.COUNT=7 -DJM.LOG.FILE.SIZE=300MB"
      5. sample-txc-edas/txc-client-console/client/bin 目錄下執行 run.sh,查看執行結果。
    • 使用 txc-client-mq 子工程驗證:
      1. 將 sample-txc-edas 工程上傳到 ECS 上。
      2. 修改數據源配置。
      3. 在 sample-txc-edas 目錄下執行 build.sh, 編譯樣例工程。
      4. 設置運行時環境變量,將下面的各參數的值(xxxx)替換為實際配置。如果需要,可以咨詢 EDAS 技術支持人員。
        export JAVA_OPTS="-Dproject.name=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx -Dtenant.id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx -Dspas.identity=/home/admin/.spas_key/default -Daddress.server.domain=xxxx -Daddress.server.port=xxxx -Dconfigserver.client.port=xxxx -DJM.LOG.RETAIN.COUNT=7 -DJM.LOG.FILE.SIZE=300MB"
      5. sample-txc-edas/txc-client-mq/client/bin 目錄下執行 run.sh,查看 MQ 的 Provider 執行結果。
      6. 將 sample-mq-consumer 工程上傳到 ECS。
      7. sample-mq-consumer/src/main/java/com/taobao/txc/tests 路徑打開 SMSListener.java,修改其中的 xxxxx 為申請的 MQ 配置。
      8. 在 sample-mq-consumer 目錄下執行 build.sh,編譯該樣例工程。
      9. 編譯完成后,在 sample-mq-consumer/client/bin 目錄下執行 run.sh,可以消費掉剛剛 sample-txc-edas/txc-client-mq 工程生產出來的 MQ 消息。

執行結果

  1. 使用 webService 方式驗證部署結果。

    1. 訪問 txc-client-web 客戶端應用的地址:http://ip:8080/txc-client-web/client

    2. 首先顯示的是 inc_money,dec_money,level 三個表的當前值。

    3. 通過 reset 可以重置 dec_money 的初始值并清空 inc_money 和 level 表的值。

    4. 輸入每次轉款的金額數測試成功的全局事務和余額不足產生異常并回滾的全局事務。

  2. 使用 txc-client-console 子工程的 console 方式驗證服務部署結果。

    1. 將 sample-txc-edas 整個工程拷貝到 ECS 服務器上,按步驟(4)修改參數配置,然后在 sample-txc-edas 目錄下執行 build.sh 完成工程編譯。

    2. 設置運行時環境變量,將下面的 xxxx 替換為自己的配置,可以咨詢 EDAS 管理人員詢問。

export JAVA_OPTS="-Dproject.name=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx -Dtenant.id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx -Dspas.identity=/home/admin/.spas_key/default -Daddress.server.domain=xxxx -Daddress.server.port=xxxx -Dconfigserver.client.port=xxxx -DJM.LOG.RETAIN.COUNT=7 -DJM.LOG.FILE.SIZE=300MB"
            
  1. 在 sample-txc-edas/txc-client-console/client/bin 目錄下執行 run.sh,可以看到執行結果。

  2. 使用 txc-client-mq 子工程的 console 方式驗證綜合了 MQ 業務的服務部署結果。

  3. 將 sample-txc-edas 整個工程拷貝到 ECS 服務器上,按步驟(4)修改參數配置,然后在 sample-txc-edas 目錄下執行 build.sh 完成工程編譯。

  4. 設置運行時環境變量,將下面的 xxxx 替換為自己的配置,可以咨詢 EDAS 管理人員詢問。

export JAVA_OPTS="-Dproject.name=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx -Dtenant.id=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx -Dspas.identity=/home/admin/.spas_key/default -Daddress.server.domain=xxxx -Daddress.server.port=xxxx -Dconfigserver.client.port=xxxx -DJM.LOG.RETAIN.COUNT=7 -DJM.LOG.FILE.SIZE=300MB"
            
  1. 在 sample-txc-edas/txc-client-mq/client/bin 目錄下執行 run.sh,可以看到 MQ 的provider執行結果。

  2. 將 sample-mq-consumer 工程拷貝到 ECS 服務器中,在 sample-mq-consumer/src/main/java/com/taobao/txc/tests 中找到 SMSListener.java,修改其中的 xxxxx 為申請的 MQ 配置。在 sample-mq-consumer 目錄下執行 build.sh 編譯該工程,編譯完成后在 sample-mq-consumer/client/bin 目錄下執行 run.sh 可以消費掉剛剛 sample-txc-edas/txc-client-mq 工程生產出來的 MQ 消息。