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。