1、案例搭建
1.1、业务说明
本案例演示的是下单的过程,具体流程包括:
扣减库存
扣减账户余额
创建订单
我们知道这是一个典型的分布式场景,这三个环节要么同时成功,要么一起失败回滚
1.2、项目搭建
我的项目结构大致如下图所示,需要注意的是在这之上还有一个,所以要注意pom文件要注意一下
1.2.1、seta-demo
seata-demo作为演示代码的父工程,下面包含狂起来的几个模块,pom文件如下:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.7.15</version>
<scope>import</scope>
<type>pom</type>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.32</version>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.6</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.30</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
<version>3.2.6</version>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-nacos-spring-boot-starter</artifactId>
<version>3.2.6</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.27</version>
</dependency>
</dependencies></dependencyManagement>
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
1.2.2、seata-mall
1.2.2.1、pom文件版本依赖
<dependencies>
<dependency>
<groupId>com.study</groupId>
<artifactId>mall-order-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.study</groupId>
<artifactId>mall-user-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.study</groupId>
<artifactId>mall-product-api</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-nacos-spring-boot-starter</artifactId>
</dependency></dependencies>
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
1.2.2.2、配置文件
application.properties
server.port=8080
spring.application.name=seata-mall
dubbo.application.name=seata-mall
dubbo.registry.address=nacos://${NACOS_ADDRESS}
dubbo.registry.parameters.username=${NACOS_USERNAME}
dubbo.registry.parameters.password=${NACOS_PASSWORD}
dubbo.consumer.check=false
dubbo.application.qos-port=22220
dubbo.protocol.name=tri
dubbo.protocol.port=50050
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
1.2.2.3、启动类
SeataMallBootstrap.java
@EnableDubbo
@SpringBootApplication
public class SeataMallBootstrap {
public static void main(String[] args) {
SpringApplication.run(SeataMallBootstrap.class, args);
}}
1.
2.
3.
4.
5.
6.
7.
8.
1.2.2.4、业务接口和实现类
IBusinessService.java
public interface IBusinessService {
/**
* 下单
* @param userId 用户ID
* @param productId 商品ID
* @param number 数量
* @return
*/
String order(String userId, String productId, Integer number);