前言

  1. 由于BladeX底层做了seata的配置优化,省去了不少繁琐的配置,所以对于应用服务来说,几乎是无感接入
  2. order为订单服务,storage为库存服务,本章将以这两个服务讲解如何对接到Seata实现分布式事务
  3. 打开BladeX-Biz工程,找到如下项目

对接准备

  1. 需要接入seata的服务pom.xml引入分布式事务依赖
  2. LauncherServiceImpl开启seata基础配置, 系统会根据服务名自动注册配置,所以无需修改,打开即可
  3. 程序启动器使用seata专用的注解
  4. 在接口的第一层请求方法加上对应的两个注解
  5. 这里以docker为例,保持seata服务开启状态
  6. 使用sql创建seata_orderseata_storage的库
  7. 对应数据库结果如下
  8. 两张表的初始数据如下


服务启动

  1. 启动blade-seata-order服务

  2. 启动完毕后查看控制台,可以看到服务注册成功
  3. 同样启动balde-seata-storage服务
  4. 启动完毕查看控制台,服务同样注册成功

分布式事务测试

  1. 开启BladeX的核心服务以获取token
  2. 开启BladeX-Biz的网关服务
  3. 调用oauth2接口,获取token
  4. 填入order接口 [POST][http://localhost/blade-seata-order/order/create] 并配置token请求头
  5. 先测试普通正常调用的情况,返回操作成功
  6. 对应数据变化如下

  7. 下面我们调大数值,测试模拟异常的情况,返回创建订单失败
  8. 对应数据没有变化,那是不是回滚成功了呢?下面我们来看控制台的数据

分布式事务验证

  1. 打开blade-seata-storage的控制台,可以看到如下日志
  2. 打开docker控制台,可以看到如下日志
  3. 再结合数据库数据没有变化,说明分布式事务成功回滚
  4. 为了再次验证准确性,我们重复第一次的调用,模拟订单成功
  5. 查看数据库的数据,发现主键从2跳跃至3,说明上一个请求确实是数据入库又被回滚了

后记

  • seata目前已经发布至1.x版本,可以用于生产环境,但每个版本配置变化较大,希望大家跟着bladex的主分支版本来
  • 测试下来感觉seata的file模式足够使用,集群可以考虑file+db模式。
  • nacos模式配置使用复杂,目前版本遗留有些许问题,所以暂时不推荐对接nacos,推荐直接使用file+db模式。