全部产品
弹性计算 会员服务 网络 安全 移动云 数加·大数据分析及展现 数加·大数据应用 管理与监控 云通信 阿里云办公 培训与认证 智能硬件
存储与CDN 数据库 域名与网站(万网) 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 更多
全局事务服务 GTS

sample-txc-mt-compensate-simple 样例工程

更新时间:2018-06-12 22:24:06

业务逻辑说明

本案例模拟了用户下订单、减库存的业务逻辑。客户端(MTResourceCompensateClient)通过调用订单服务(MtServiceRollin)创建订单,之后通过调用库存服务(MtServiceRollout)扣库存。其中订单服务读写订单库,库存服务读写库存数据库。由 GTS 保证跨服务事务的一致性。

该样例展示了 GTS 在 MT 模式下,补偿型事务的使用方式。MT 模式下,GTS 允许应用介入事务的两阶段提交。补偿型事务中,需要应用在一阶段做实现具体的业务操作,第二阶段实现提交或者回滚操作。在 MT 模式下,对于每一个业务表,需要创建一个临时业务表用于临时存储业务数据。例如对于 Orders 表需要创建对应的临时表 temp_orders,Stock 表需要创建临时表 temp_stock,临时表必须包含 xid 和 branchid 两个字段。

以库存服务为例进行说明。在一阶段即 rollout 方法中首先将相关业务数据商品 ID(pid)和商品数据(number)插入到临时表 temp_stock 中用于后续失败的回滚,之后判断库存是否充足,如果不充足直接抛出异常。如果库存充足,执行具体扣库存操作。第二阶段如果执行成功,只需将一阶段插入到临时表中的业务数据删除即可,如果失败则调用回滚方法。

案例搭建方法

  1. 从 GTS 控制台申请事务分组。

  2. 需要两台 RDS,一台 ECS 用于部署本应用。

  3. 通过 sample-txc-mt-compensate-simpl.sql 在第一个数据库创建 Orders 表和 temp_orders 表,在第二个数据库创建 Stock 表和 temp_stock 表。

  4. 把该工程拷贝到 ECS 服务器上,找到 sample-txc-mt-compensate-simple /src/main/resources 目录下的 mt-client-context.xml 文件。

    1. 对该文件中的两个数据源进行修改,分别替换为两个 RDS 的数据源。

    2. 将该文件中 <constructor-arg value="xxx"/>的 xxx 替换为申请的 GTS 组 ID。

    3. 将该文件中 <property name=" accessKey" value="xxx"/><property name=" secretKey" value="xxx"/> 的 xxx 分别替换为您阿里云账户的 Access Key ID 和 Access Key Secret。

  5. 在 sample-txc-mt-compensate-simple 目录下执行 build.sh 编译本工程。编译完成后在 sample-txc-mt-compensate-simple/client/bin 目录下执行 run.sh 可以看到运行结果。

  6. Java 源代码在 /sample-txc-mt-compensate-simple /src/main/java/com/taobao/txc/tests 目录下,可以根据业务需求修改。

本文导读目录