Sample-txc-edas 综合了 GTS、EDAS 及 MQ 的使用,通过 console 和 web 两种方式充分展现了用户的使用场景,是 EDAS 上部署 GTS 的进阶案例,该案例可以让用户对 GTS 使用场景有更全面的理解。
应用场景
现代 IT 应用中,服务化的模式得到了广泛使用。在大型的系统中,比如电商,会划分出多个应用系统,GTS 将调用这些服务的操作加入到一个全局事务中,让他们要么同时成功,要么同时失败,保证了各个系统的数据一致性。
业务逻辑
从 DecMoney 扣款,给 IncMoney 打款。IncMoney 打款服务中会根据 IncMoney 目前余额更新用户相应的 Level。业务为了模拟应用异常产生,故意先给 IncMoney 打款,然后从 DecMoney 扣款后检查 DecMoney 余额,如果为负值则抛出应用异常导致全局事务回滚。
该业务的展现方式有两种,分别是 web 方式、console 方式。此外,还提供了一种带有 MQ 操作 的 console 方式客户端。
前提条件
-
已申请事务分组。
-
已开通 EDAS 服务 和 MQ 服务。
-
准备三台 ECS 用于部署 EDAS 服务。详情请参见 创建资源。
ECS 需要按照 EDAS 要求安装 EDAS Agent 服务。
-
从 EDAS 控制台申请两个 EDAS 应用分组,分组名称分别为:txc-edas-drds-test,txc-edas-rds-test。
特别说明:因为样例程序包含 DRDS 以及 RDS 的两个测试用例,所以客户可以根据需要申请 DRDS 或 RDS 服务。
- 使用 EDAS+DRDS 用例,需要建表:txc_sample_edas_drds.sql。
- 使用 EDAS+RDS 用例,需要建表:txc_undo_log.sql、txc_sample_edas_rds.sql。
操作步骤
-
对工程中所有的 RDS 和 DRDS 数据源、MQ 配置、GTS 组配置等进行相应修改。主要涉及的文件如下,对文件中 xxxxx 进行配置:
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-client-web/src/main/resources/txc-2-client-drds.xml
sample-txc-edas/txc-client-mq/src/main/resources/txc-2-client-rds.xml
sample-txc-edas/txc-client-console/src/main/resources/txc-2-client-rds.xml
注意:根据数据源的使用情况,可以有选择的配置数据源。
-
如果您同时拥有 DRDS 数据源和 RDS 数据源,并在上述数据源配置文件中配置了它们,那么您服务发布后,您将同时有两个分组,一个是 DRDS 的,一个是 RDS 的。
-
如果您只有 RDS 数据源,请删除下面文件中的 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
并将下面文件中的 version 字段由1.1.1改为1.1.2,所有“DRDS”替换为“RDS” 。
sample-txc-edas/txc-client-web/src/main/resources/hsf-consumer-beans-drds.xml
- 如果您使用的是 DRDS 数据源,请删除下面文件中的 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
并将下面文件中的 version 字段由1.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
-
在 sample-txc-edas 目录下执行 build.sh 完成工程编译。通过 EDAS 控制台上传并启动下面三 个 war。
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 方式验证部署结果。
-
访问 txc-client-web 客户端应用的地址:http://ip:8080/txc-client-web/client
-
首先显示的是 inc_money,dec_money,level 三个表的当前值。
-
通过 reset 可以重置 dec_money 的初始值并清空 inc_money 和 level 表的值。
-
输入每次转款的金额数测试成功的全局事务和余额不足产生异常并回滚的全局事务。
-
-
使用 txc-client-console 子工程的 console 方式验证服务部署结果。
-
将 sample-txc-edas 整个工程拷贝到 ECS 服务器上,按步骤(4)修改参数配置,然后在 sample-txc-edas 目录下执行 build.sh 完成工程编译。
-
设置运行时环境变量,将下面的 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"
-
在 sample-txc-edas/txc-client-console/client/bin 目录下执行 run.sh,可以看到执行结果。
-
-
使用 txc-client-mq 子工程的 console 方式验证综合了 MQ 业务的服务部署结果。
-
将 sample-txc-edas 整个工程拷贝到 ECS 服务器上,按步骤(4)修改参数配置,然后在 sample-txc-edas 目录下执行 build.sh 完成工程编译。
-
设置运行时环境变量,将下面的 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"
-
在 sample-txc-edas/txc-client-mq/client/bin 目录下执行 run.sh,可以看到 MQ 的provider执行结果。
-
将 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 消息。
-
结果验证
上述 GTS 配置之后应用中服务端访问的多个数据源中的数据会保持强一致,一旦有异常返回给带 TxcTransaction 注解的方法或者事务参与者挂掉,都会导致这个全局事务数据回滚到之前的状态。
原创文章,作者:网友投稿,如若转载,请注明出处:https://www.cloudads.cn/archives/33905.html