GTS 从 2.8.18 版本开始支持 Dubbo。您无需再关心全局事务上下文 XID 在服务调用链路上的传播,进一步简化了编程模型。
前提条件
在使用样例前,请先完成以下工作:
- 准备两个 RDS 实例,用户创建数据库。
- 准备一个 ECS 实例,用于部署本样例。
实现原理
基于 Dubbo 的 Filter 机制,GTS 的 SDK 内置了专门用于在调用链路上传播事务上下文的 TransactionPropagationFilter
,有需要有用户可以对这个类进行 DEBUG 来了解事务传播的机制。
说明
- Java 运行环境的最低要求是 1.8。
- 只支持 2.7.0 及以上版本的 Dubbo,即
org.apache.dubbo
Group 的 Dubbo。
样例逻辑说明
该样例模拟了用户下订单、减库存的业务逻辑。客户端(Client)通过调用订单服务(OrderService)创建订单,之后通过调用库存服务(StockService)扣库存。其中在订单服务读写订单数据库、库存服务读写库存数据库过程中,GTS
将保证跨服务事务的一致性。
搭建样例
- 初始化数据库。
- 进入 txc-yun-sample/sql 目录中,执行 txc_undo_log.sql,在两个 RDS 实例中分别创建 txc_undo_log 表。
- 在 RDS1 中创建 orders 表,在 RDS2 中创建 stock 表。
建表语句位于 txc-yun-sample/sql 的 sample-txc-dubbo.sql 文件中。
- 下载样例 txc-yun-sample并上传到 ECS 上。
- 在 IDE 中修改样例配置。
- 将 resource 目录下每个 xml 文件中 constructor-arg value 的值替换为申请好的 GTS 事务分组 ID。
- 将 resource 目录下每个 xml 文件中 accessKey 和 secretKey 的值修改为您实际账号的值。
说明
请使用主账户的 Access Key ID/Access Key Secret。如果使用 RAM 子账户的 Access Key ID/Access Key Secret,需要先使用主账户对子账户进行授权。
- 找到并打开 txc-yun-sample/sample-txc-dubbo/src/main/resources 目录下的 dubbo-order-service.xml 和 dubbo-stock-service.xml 文件,将 url、username和 password 的值修改为您实际使用的值。
- 在 txc-yun-sample/sample-txc-dubbo 目录下执行
build.sh
脚本,编译样例。
编译后会在 sample-txc-dubbo/client/bin 目录下生成 stock_run.sh、order_run.sh 和 client_run.sh 三个运行脚本,分别对应库存服务、订单服务以及客户端。
- 在 txc-yun-sample/sample-txc-dubbo 目录下执行 run.sh 脚本,启动样例。
该脚本会依次启动 order_run.sh(订单服务)、stock_run.sh(库存服务)和 client_run.sh(客户端程序)。