前言
- 由于BladeX底层做了seata的配置优化,省去了不少繁琐的配置,所以对于应用服务来说,几乎是无感接入
- order为订单服务,storage为库存服务,本章将以这两个服务讲解如何对接到Seata实现分布式事务
- 打开BladeX-Biz工程,找到如下项目
对接准备
- 需要接入seata的服务pom.xml引入分布式事务依赖
- LauncherServiceImpl开启seata基础配置, 系统会根据服务名自动注册配置,所以无需修改,打开即可
- 程序启动器使用seata专用的注解
- 在接口的第一层请求方法加上对应的两个注解
- 这里以docker为例,保持seata服务开启状态
- 使用sql创建
seata_order
和seata_storage
的库 - 对应数据库结果如下
- 两张表的初始数据如下
服务启动
- 启动blade-seata-order服务
- 启动完毕后查看控制台,可以看到服务注册成功
- 同样启动balde-seata-storage服务
- 启动完毕查看控制台,服务同样注册成功
分布式事务测试
- 开启BladeX的核心服务以获取token
- 开启BladeX-Biz的网关服务
- 调用oauth2接口,获取token
- 填入order接口 [POST][http://localhost/blade-seata-order/order/create] 并配置token请求头
- 先测试普通正常调用的情况,返回操作成功
- 对应数据变化如下
- 下面我们调大数值,测试模拟异常的情况,返回创建订单失败
- 对应数据没有变化,那是不是回滚成功了呢?下面我们来看控制台的数据
分布式事务验证
- 打开blade-seata-storage的控制台,可以看到如下日志
- 打开docker控制台,可以看到如下日志
- 再结合数据库数据没有变化,说明分布式事务成功回滚
- 为了再次验证准确性,我们重复第一次的调用,模拟订单成功
- 查看数据库的数据,发现主键从2跳跃至3,说明上一个请求确实是数据入库又被回滚了
后记
- seata目前已经发布至1.x版本,可以用于生产环境,但每个版本配置变化较大,希望大家跟着bladex的主分支版本来
- 测试下来感觉seata的file模式足够使用,集群可以考虑file+db模式。
- nacos模式配置使用复杂,目前版本遗留有些许问题,所以暂时不推荐对接nacos,推荐直接使用file+db模式。