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

前提條件

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

樣例邏輯說明

DecMoney 賬號向 IncMoney 賬號轉(zhuǎn)賬,IncMoney 會根據(jù)當(dāng)前賬號余額更新用戶相應(yīng)的 Level。業(yè)務(wù)為了模擬應(yīng)用異常產(chǎn)生,故意先給 IncMoney 打款,然后從 DecMoney 扣款后檢查 DecMoney 余額,如果為負(fù)值則拋出應(yīng)用異常導(dǎo)致全局事務(wù)回滾。

該業(yè)務(wù)的展現(xiàn)方式有兩種,分別是 Web 方式和 Console 方式。此外,還提供了一種帶有 MQ 操作的 Console 方式客戶端。

樣例模塊說明

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

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

搭建樣例

  1. 下載樣例 txc-yun-sample
  2. 根據(jù)數(shù)據(jù)源的使用情況,修改數(shù)據(jù)源配置。
    • 同時擁有 DRDS 數(shù)據(jù)源和 RDS 數(shù)據(jù)源,并在上述數(shù)據(jù)源配置文件中配置了它們。則在服務(wù)發(fā)布后,您將同時有兩個分組,一個是 DRDS 的,一個是 RDS 的。
    • 使用 RDS 數(shù)據(jù)源
      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 數(shù)據(jù)源
      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 目錄下執(zhí)行 build.sh,編譯樣例工程。
  4. 將下列編譯完成的 WAR 包部署到 EDAS 中。部署操作請參見在ECS集群中創(chuàng)建并部署應(yīng)用
    • 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

結(jié)果驗證

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

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

      顯示 inc_money、dec_money 和 level 三個表的當(dāng)前值。

    2. 通過 reset 可以重置 dec_money 的初始值并清空 inc_money 和 level 表的值。
    3. 輸入每次轉(zhuǎn)款的金額數(shù)測試成功的全局事務(wù)和余額不足產(chǎn)生異常并回滾的全局事務(wù)。
  • 使用 Console 驗證部署結(jié)果
    • 使用 txc-client-console 子工程驗證:
      1. 將 sample-txc-edas 工程上傳到 ECS 上。
      2. 修改數(shù)據(jù)源配置。
      3. 在 sample-txc-edas 目錄下執(zhí)行 build.sh, 編譯樣例工程。
      4. 設(shè)置運行時環(huán)境變量,將下面的各參數(shù)的值(xxxx)替換為實際配置。如果需要,可以咨詢 EDAS 技術(shù)支持人員。
        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 目錄下執(zhí)行 run.sh,查看執(zhí)行結(jié)果。
    • 使用 txc-client-mq 子工程驗證:
      1. 將 sample-txc-edas 工程上傳到 ECS 上。
      2. 修改數(shù)據(jù)源配置。
      3. 在 sample-txc-edas 目錄下執(zhí)行 build.sh, 編譯樣例工程。
      4. 設(shè)置運行時環(huán)境變量,將下面的各參數(shù)的值(xxxx)替換為實際配置。如果需要,可以咨詢 EDAS 技術(shù)支持人員。
        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 目錄下執(zhí)行 run.sh,查看 MQ 的 Provider 執(zhí)行結(jié)果。
      6. 將 sample-mq-consumer 工程上傳到 ECS。
      7. sample-mq-consumer/src/main/java/com/taobao/txc/tests 路徑打開 SMSListener.java,修改其中的 xxxxx 為申請的 MQ 配置。
      8. 在 sample-mq-consumer 目錄下執(zhí)行 build.sh,編譯該樣例工程。
      9. 編譯完成后,在 sample-mq-consumer/client/bin 目錄下執(zhí)行 run.sh,可以消費掉剛剛 sample-txc-edas/txc-client-mq 工程生產(chǎn)出來的 MQ 消息。

執(zhí)行結(jié)果

  1. 使用 webService 方式驗證部署結(jié)果。

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

    2. 首先顯示的是 inc_money,dec_money,level 三個表的當(dāng)前值。

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

    4. 輸入每次轉(zhuǎn)款的金額數(shù)測試成功的全局事務(wù)和余額不足產(chǎn)生異常并回滾的全局事務(wù)。

  2. 使用 txc-client-console 子工程的 console 方式驗證服務(wù)部署結(jié)果。

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

    2. 設(shè)置運行時環(huán)境變量,將下面的 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 目錄下執(zhí)行 run.sh,可以看到執(zhí)行結(jié)果。

  2. 使用 txc-client-mq 子工程的 console 方式驗證綜合了 MQ 業(yè)務(wù)的服務(wù)部署結(jié)果。

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

  4. 設(shè)置運行時環(huán)境變量,將下面的 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 目錄下執(zhí)行 run.sh,可以看到 MQ 的provider執(zhí)行結(jié)果。

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