介绍: 本文介绍了如何使用 Docker 搭建 Seata 的分布式事务管理器,并使用 Spring Cloud Alibaba 的 Seata 集成,以及在这过程中的一些坑。
引入依赖
引入 Spring Cloud Alibaba 相关依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>2021.0.5.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
引入 Seata 相关依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-seata</artifactId>
<version>2021.0.5.0</version>
<exclusions>
<exclusion>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
</exclusion>
<exclusion>
<groupId>io.seata</groupId>
<artifactId>seata-all</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.seata</groupId>
<artifactId>seata-spring-boot-starter</artifactId>
<version>1.6.1</version>
</dependency>
使用 Docker 部署 Seata
注意:我使用的是 Nacos 作为注册中心,使用的是 DB 存储,所以先要把 Nacos 和 MySQL 启动起来
部署 MySQL
docker-compose.yml
文件内容:
services:
mysql:
image: mysql:8
container_name: mysql
environment:
LANG: C.UTF-8
# 设置数据库密码
MYSQL_ROOT_PASSWORD: 12345678
ports:
- "3306:3306"
command:
- '--character-set-server=utf8mb4'
- '--collation-server=utf8mb4_unicode_ci'
volumes:
- ./mysql-data:/var/lib/mysql
restart: always
部署 Nacos
services:
nacos:
image: nacos/nacos-server:v2.2.0-slim
container_name: Nacos
ports:
- "8848:8848"
- "9848:9848"
- "9849:9849"
volumes:
- ./nacos-data:/home/nacos/data
environment:
- MODE=standalone # 单节点模式启动
- PREFER_HOST_MODE=hostname # 支持 hostname
- TZ=Asia/Shanghai # 控制时区
注意将服务器上面的这三个端口都放开,不然连接不上
部署 Seata
创建命名空间
在 Nacos 上创建一个新的命名空间:distributed-transaction
,Seata 的服务和配置文件都放到这个命名空间中