该样例工程介绍 AT 模式下,Spring Cloud 框架如何通过 GTS 保证跨数据库转账的分布式事务的一致性。
前提条件
在使用样例前,请先完成以下工作:
- 准备两个 RDS 实例,用户创建数据库。
- 准备一个 ECS 实例,用于部署本样例。
样例逻辑说明
模拟转账业务,从 A 账户扣款给 B 账户打款。应用程序通过调用扣款微服务和存款微服务完成转账业务。
- eureka-locator:微服务的注册中心
- eureka-consumer:应用程序
- eureka-provider:扣款服务
- eureka-provider2:存款服务
搭建样例
- 初始化数据库。
- 分别在两个数据库执行 txc_undo_log.sql,创建 txc_undo_log 表。
- 分别在两个数据库执行 txc_sample_springcloud.sql 中的相关命令,创建 account 表。
- 下载样例 txc-yun-sample并上传到 ECS 上。
- 修改样例配置。
- 分别找到并打开 sample-txc-springcloud 样例下 eureka-consumer、eureka-provider 和 eureka-provider2 三个文件中的 config.java 文件,在 txcTransactionScaner 方法中修改 GTS 的事务分组名称。
- 分别找到并打开 eureka-consumer、eureka-provider 和 eureka-provider2 三个文件中的 application.properties 文件,将 accessKey 和 secretKey 的值修改为您实际账号的值。
- 分别找到并打开 eureka-consumer、eureka-provider 和 eureka-provider2 三个文件中的 application.properties 文件,将数据库的 url、username和 password 的值修改为您实际使用的值。
- 运行 txc-yun-sample/sample-txc-springcloud 目录下的 sh build.sh 脚本,编译工程。
编译后会在相应文件中生产 client 目录。
- 运行样例。
- 运行 eureka-locator/client/bin 目录下的 locator.sh 脚本,启动注册中心。
- 运行 eureka-provider/client/bin 目录下的 provider1_run.sh 脚本,启动扣款服务。
- 运行 eureka-provider2/client/bin 目录下的 provider2_run.sh 脚本,启动存款服务。
- 运行 eureka-consumer/client/bin 目录下的 consumer_run.sh 脚本,启动样例。
结果验证
- 使用浏览器访问地址 http://<ECS IP>:9000。
- 在页面中输入转账金额,然后单击提交。
- 余额不足,转账失败,全局事务回滚。