你共我, · 1月1日 · 重庆

分布式事务解决方案Seata初体验

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);

推荐阅读
关注数
1
文章数
1
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息