Seata Server整合Nacos服务中心

配置好 Seata Server 持久化之后,还要考虑一个问题:存在分布式事务的微服务实例是如何与 Seata 组件通信的呢?

在微服务架构下,当然离不开服务注册与服务发现的机制。此时又要请出 “老朋友” Nacos 了。Seata Server 是可以作为一个服务实例注册到 Nacos 服务中心的,进而需要引入分布式事务组件的微服务(如订单服务、购物车服务和商品服务),然后就能够通过服务发现与 Seata Server 进行通信。接下来,笔者将讲解如何设置 Seata Server 的服务注册功能。

配置Nacos的连接信息

Seata 安装目录下的 conf 文件夹中,有一个名称为 registry.conf 的文件,这个文件就是用来配置 Seata Server 服务发现功能的。打开这个文件,并做如下修改。

  1. 修改服务中心的技术选项。

    默认为 file,同样支持 nacoseurekarediszkconsuletcd3sofa 等服务中心。这里需要把 type 配置项修改为 nacos,代码如下:

    registry {
      # file, nacos, eureka, redis, zk, consul, etcd3, sofa
      type = "nacos"
    }
  2. 配置 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 所示。

image 2025 04 18 10 53 07 122
Figure 1. 图10-19 Seata 组件成功注册至 Nacos 中

启动 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