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 将保证跨服务事务的一致性。

搭建样例

  1. 初始化数据库。
    1. 进入 txc-yun-sample/sql 目录中,执行 txc_undo_log.sql,在两个 RDS 实例中分别创建 txc_undo_log 表。
    2. 在 RDS1 中创建 orders 表,在 RDS2 中创建 stock 表。
      建表语句位于 txc-yun-sample/sqlsample-txc-dubbo.sql 文件中。
  2. 下载样例 txc-yun-sample并上传到 ECS 上。
  3. 在 IDE 中修改样例配置。
    1. resource 目录下每个 xml 文件中 constructor-arg value 的值替换为申请好的 GTS 事务分组 ID。
    2. resource 目录下每个 xml 文件中 accessKeysecretKey 的值修改为您实际账号的值。
      说明 请使用主账户的 Access Key ID/Access Key Secret。如果使用 RAM 子账户的 Access Key ID/Access Key Secret,需要先使用主账户对子账户进行授权。
    3. 找到并打开 txc-yun-sample/sample-txc-dubbo/src/main/resources 目录下的 dubbo-order-service.xmldubbo-stock-service.xml 文件,将 urlusernamepassword 的值修改为您实际使用的值。
  4. txc-yun-sample/sample-txc-dubbo 目录下执行 build.sh 脚本,编译样例。
    编译后会在 sample-txc-dubbo/client/bin 目录下生成 stock_run.shorder_run.shclient_run.sh 三个运行脚本,分别对应库存服务、订单服务以及客户端。
  5. txc-yun-sample/sample-txc-dubbo 目录下执行 run.sh 脚本,启动样例。
    该脚本会依次启动 order_run.sh(订单服务)、 stock_run.sh(库存服务)和 client_run.sh(客户端程序)。