该样例工程介绍 AT 模式下,Spring Cloud 框架如何通过 GTS 保证跨数据库转账的分布式事务的一致性。

样例逻辑说明

模拟转账业务,从 A 账户扣款给 B 账户打款。应用程序通过调用扣款微服务和存款微服务完成转账业务。

  • eureka-locator:微服务的注册中心
  • eureka-consumer:应用程序
  • eureka-provider:扣款服务
  • eureka-provider2:存款服务

搭建样例

  1. 初始化数据库。
    1. 分别在两个数据库执行 txc_undo_log.sql,创建 txc_undo_log 表。
    2. 分别在两个数据库执行 txc_sample_springcloud.sql 中的相关命令,创建 account 表。
  2. 下载样例 txc-yun-sample并上传到 ECS 上。
  3. 修改样例配置。
    1. 分别找到并打开 sample-txc-springcloud 样例下 eureka-consumereureka-providereureka-provider2 三个文件中的 config.java 文件,在 txcTransactionScaner 方法中修改 GTS 的逻辑组名。
    2. 分别找到并打开 eureka-consumereureka-providereureka-provider2 三个文件中的 application.properties 文件,将 accessKeysecretKey 的值修改为您实际账号的值。
    3. 分别找到并打开 eureka-consumereureka-providereureka-provider2 三个文件中的 application.properties 文件,将数据库的 urlusernamepassword 的值修改为您实际使用的值。
  4. 运行 txc-yun-sample/sample-txc-springcloud 目录下的 sh build.sh 脚本,编译工程。
    编译后会在相应文件中生产 client 目录。
  5. 运行样例。
    1. 运行 eureka-locator/client/bin 目录下的 locator.sh 脚本,启动注册中心。
    2. 运行 eureka-provider/client/bin 目录下的 provider1_run.sh 脚本,启动扣款服务。
    3. 运行 eureka-provider2/client/bin 目录下的 provider2_run.sh 脚本,启动存款服务。
    4. 运行 eureka-consumer/client/bin 目录下的 consumer_run.sh 脚本,启动样例。

结果验证

  1. 使用浏览器访问地址 http://<ECS IP>:9000。
    初始化金额
  2. 在页面中输入转账金额,然后单击提交
    提交转账
  3. 余额不足,转账失败,全局事务回滚。
    事务回滚