GTS SDK 2.8.31 版本开始,GTS 全面支持原生 Spring Cloud 应用,包括 RestTemplate 和 Feign 两种方式。
前提条件
在使用原生 Spring Cloud 应用样例前,请先完成以下工作:- 数据库依赖 MySQL,准备一个可用的 MySQL 环境(也可以是阿里云的 RDS)。
- 构建样例工程依赖 Maven,准备一个可用的 Maven 环境。
样例简介
该样例模拟了一个用户订购商品的业务系统,包含 3 个微服务:
- Storage:库存服务,扣减指定商品的库存数量。
- Order:订单服务,根据采购请求生成订单。
- Account:账户服务,从用户账户中扣减金额。
订购商品的业务流程如下图所示:
- Business 开启一个 GTS 管理的全局事务。
- Business 调用 Storage 和 Order。
- Order 调用 Account。
GTS 将保障整个服务调用链路上的数据一致性。
步骤一:下载样例工程
样例工程详情请参见 Spring Cloud原生支持样例源代码。
步骤二:构建样例工程
- 创建一个用于运行样例的数据库,执行工程中的
init.sql
脚本,建立相关表。 - 构建样例工程。
- 构建样例工程依赖 Maven,准备一个可用的 Maven 环境。
- 在样例工程的根目录下,执行
mvn clean install
命令。
SDK 包是由common/lib里的download-maven-plugin
插件通过wget命令从 GTS 官网下载的。如果您的环境不能执行wget命令,上面的 Maven 构建会失败。这种情况下,请您按以下方式操作:- 手工下载最新的 SDK 开发包,并放在 common/lib 目录下。
- 在工程 pom.xml 文件的
modules
中将common
删掉。<modules> <!--<module>common</module>--> <module>bussiness</module> <module>account</module> <module>storage</module> <module>order</module> <module>eureka</module> </modules>
- 重新执行
mvn clean install
命令。
运行成功后common/lib
目录下会生成 GTS 的 SDK 包,包括:- 客户端主包:txc-client-${gts.sdk.version}.jar
- Spring Cloud 原生支持包:txc-client-springcloud-${gts.sdk.version}.jar
步骤三:导入样例工程到 IDE
为了方便运行和理解,建议您把工程导入到 IDE 中。
步骤四:运行样例工程
- 分别运行样例工程中 5 个 module 的 Main 方法,启动服务。
- Eureke:EurekaServerApplication
- Storage:StorageApplication
- Order:OrderApplication
- Account:AccountApplication
- Business:BusinessApplication
- 服务启动成功后,通过浏览器访问 http://127.0.0.1:8084/purchase 来调用订购业务。说明 可选的调用参数请阅读样例中的 BusinessController.java 的代码来了解。
关键配置和运行机制解读
application.properties
中,spring.cloud.txc
前缀的一系列配置是 GTS 关键配置,说明如下:
- GTS 全局事务调用链路上的每个服务都要做这些配置,例如样例中的 Business/Storage/Order/Account。
spring.cloud.txc.txcAppName
:为每个服务定义一个全局唯一的名字。spring.cloud.txc.txcServerGroup
:GTS 服务实例名。- 在本地运行通过公网访问 GTS 服务时,请使用公共的实例
txc_test_public.1129361738553704.QD
并配合使用下面的spring.cloud.txc.url
配置。 - 在正式环境 ECS 上运行时,请使用您订购的 GTS 服务实例全名,并配合使用下面的
spring.cloud.txc.accessKey
和spring.cloud.txc.accessKey
配置。
- 在本地运行通过公网访问 GTS 服务时,请使用公共的实例
spring.cloud.txc.url
:公网访问 GTS 服务的接入地址,固定值https://test-cs-gts.aliyuncs.com
。这个配置仅在本地公网访问时需要。spring.cloud.txc.accessKey
和spring.cloud.txc.secretKey
:在 ECS 上正式运行,这里配置您 GTS 服务实例使用者的 AccessKey ID 和 AccessKey Secret 用于鉴权。默认是使用订购 GTS 服务实例的用户(即实例全名中间部分账号ID 对应用户)的 AccessKey ID 和 AccessKey Secret。也可以使用 RAM 授权的用户 AccessKey ID 和 AccessKey Secret,具体方法请参见为RAM用户授权事务分组。