Seata Server整合Nacos服务中心
配置好 Seata Server
持久化之后,还要考虑一个问题:存在分布式事务的微服务实例是如何与 Seata
组件通信的呢?
在微服务架构下,当然离不开服务注册与服务发现的机制。此时又要请出 “老朋友” Nacos
了。Seata Server
是可以作为一个服务实例注册到 Nacos
服务中心的,进而需要引入分布式事务组件的微服务(如订单服务、购物车服务和商品服务),然后就能够通过服务发现与 Seata Server
进行通信。接下来,笔者将讲解如何设置 Seata Server
的服务注册功能。
配置Nacos的连接信息
在 Seata
安装目录下的 conf
文件夹中,有一个名称为 registry.conf
的文件,这个文件就是用来配置 Seata Server
服务发现功能的。打开这个文件,并做如下修改。
-
修改服务中心的技术选项。
默认为
file
,同样支持nacos
、eureka
、redis
、zk
、consul
、etcd3
、sofa
等服务中心。这里需要把type
配置项修改为nacos
,代码如下:registry { # file, nacos, eureka, redis, zk, consul, etcd3, sofa type = "nacos" }
-
配置
Nacos
的连接信息。相关的配置项同样是在
registry.conf
文件中,把Nacos
服务中心的相关连接信息配置好即可。最终配置内容如下:registry { # file, nacos, eureka, redis, zk, consul, etcd3, sofa type = "nacos" nacos { application = "seata-server" serverAddr = "127.0.0.1:8848" group = "DEFAULT_GROUP" namespace = "public" cluster = "default" username = "nacos" password = "nacos" } }
启动Seata Server
所有的准备事项都已经做好了,就差最后的临门一脚。来启动 Seata Server
吧!
启动方式比较简单,Seata
安装目录下的 bin
文件夹中存放着启动 Seata Server
的脚本文件。根据操作系统,选择直接运行 seata-server.sh
文件或 seata-server.bat
文件即可。比如,在 Linux
系统下就可以直接运行下面的 Shell
语句:
# 1.使用cd命令进入bin目录,根据自己的目录名称来输入
cd /seata-1.4.2/bin
# 2.执行seata-server.sh脚本 (-p 8091 表示启动的端口号,可自行修改)
./seata-server.sh -p 8091
如果在控制台中没有看到错误日志,而是看到了下面这两行日志输出:
INFO --- [main] com.alibaba.druid.pool.DruidDataSource
: {dataSource-1} inited
INFO --- [main] i.s.core.rpc.netty.NettyServerBootstrap
: Server started, listen port: 8091
则表示 Seata Server
启动成功。同时,MySQL
数据源对象也初始化成功,即成功连接到 MySQL
数据库了。之后,还需要验证 Seata Server
服务注册流程是否成功。进入 Nacos
控制台,单击 “服务管理” 中的服务列表,可以看到列表中已经存在 seata-server
服务的服务信息,如图 10-19 所示。

启动 Seata Server
过程中可能遇到的问题列举如下。
-
数据库无法连接,需要检查数据库连接信息和
driverClassName
配置项的配置是否正确,新版本(5.7 及以上版本)的MySQL
需要使用com.mysql.cj.jdbc.Driver
这个驱动类。 -
服务中心无法连接,同样需要检查一下配置文件,查看具体的报错信息。
-
端口占用。默认端口号为
8091
,可能重复启动了Seata Server
,关闭重复的进程即可。或者通过-p
参数修改Seata Server
的启动端口号。
读者在启动时一定要关注启动日志,有任何问题都会在日志信息中详细地显示出来,看到错误日志后再有针对性地处理即可。搭建 Seata Server
并不复杂,首先配置它的持久化模式,创建数据库并导入数据库和表,修改 file.conf
配置文件,其次是配置 Seata Server
的服务注册,修改 registry.conf
文件中的内容即可,最后执行命令启动 Seata Server
。