该样例综合了 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 集群中创建 Java Web 应用
    • 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 消息。