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服务进行账户余额的扣减。
1.2.2表的设计
2.使用Seata实现分布式事务步骤
2.1seata-server的配置和启动
- 下载seata-server:http://seata.io/zh-cn/blog/download.html
- 解压
- 启动
①linux/mac
$ sh seata-server.sh
②windows
.\seata-server.bat
2.2数据库添加表
CREATE TABLE `undo_log` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`branch_id` bigint(20) NOT NULL,
`xid` varchar(100) NOT NULL,
`context` varchar(128) NOT NULL,
`rollback_info` longblob NOT NULL,
`log_status` int(11) NOT NULL,
`log_created` datetime NOT NULL,
`log_modified` datetime NOT NULL,
`ext` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `ux_undo_log` (`xid`,`branch_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
注:业务设计的每一个数据库中都要创建一个undo_log表,
2.3各个服务的配置
2.3.1pom文件(官方推荐)
<dependency>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
<version>1.3.0</version>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
<exclusions>
<exclusion>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
</exclusion>
</exclusions>
</dependency>
2.3.2yml文件(seata相关的配置)
seata:
tx-service-group: mall-group
service:
grouplist:
default: 127.0.0.1:8091
vgroup-mapping:
mall-group: default
2.4方法上添加注解
只需在business-service提供的Controller方法中添加注解`@GlobalTransactional` 即可