1.环境描述

1.1框架和服务使用的版本

①SpringBoot-2.2.9
②SpringCloud-Hoxton.SR3
③Seata-1.3.0
④nacos-1.3.0

1.2服务的运转流程和表

①order-service:订单服务
②storage-service:仓储服务
③account-service:用户账户服务
④business-service:中台

1.2.1运转流程

调用order-service进行订单的生成,之后,调用storage-service进行减库存操作,最后调用account-service服务进行账户余额的扣减。
image.png

1.2.2表的设计

每个服务各操作一张数据表。
image.png

2.使用Seata实现分布式事务步骤

2.1seata-server的配置和启动

  1. 下载seata-server:http://seata.io/zh-cn/blog/download.html
  2. 解压
  3. 启动

①linux/mac

  1. $ sh seata-server.sh

②windows

  1. .\seata-server.bat

2.2数据库添加表

  1. CREATE TABLE `undo_log` (
  2. `id` bigint(20) NOT NULL AUTO_INCREMENT,
  3. `branch_id` bigint(20) NOT NULL,
  4. `xid` varchar(100) NOT NULL,
  5. `context` varchar(128) NOT NULL,
  6. `rollback_info` longblob NOT NULL,
  7. `log_status` int(11) NOT NULL,
  8. `log_created` datetime NOT NULL,
  9. `log_modified` datetime NOT NULL,
  10. `ext` varchar(100) DEFAULT NULL,
  11. PRIMARY KEY (`id`),
  12. UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
  13. ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;

注:业务设计的每一个数据库中都要创建一个undo_log表,

2.3各个服务的配置

2.3.1pom文件(官方推荐)

  1. <dependency>
  2. <groupId>io.seata</groupId>
  3. <artifactId>seata-spring-boot-starter</artifactId>
  4. <version>1.3.0</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>com.alibaba.cloud</groupId>
  8. <artifactId>spring-cloud-starter-alibaba-seata</artifactId>
  9. <exclusions>
  10. <exclusion>
  11. <groupId>io.seata</groupId>
  12. <artifactId>seata-spring-boot-starter</artifactId>
  13. </exclusion>
  14. </exclusions>
  15. </dependency>

注:每个服务的pom中,都添加这个依赖

2.3.2yml文件(seata相关的配置)

  1. seata:
  2. tx-service-group: mall-group
  3. service:
  4. grouplist:
  5. default: 127.0.0.1:8091
  6. vgroup-mapping:
  7. mall-group: default

2.4方法上添加注解

  1. 只需在business-service提供的Controller方法中添加注解`@GlobalTransactional` 即可

2.5代码仓库

https://gitee.com/gao_xi/seata-demo.git