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-groupservice:grouplist:default: 127.0.0.1:8091vgroup-mapping:mall-group: default
2.4方法上添加注解
只需在business-service提供的Controller方法中添加注解`@GlobalTransactional` 即可
