从 Eureka 迁移到 Nacos 服务注册发现需要修改哪些核心配置?

文章导读
迁移核心在于替换依赖包并修改注册中心地址配置,生产环境建议先采用双注册双订阅模式过渡,确认无误后再完全移除 Eureka。
📋 目录
  1. A 核心配置修改清单
  2. B 版本兼容性对照
  3. C 双注册过渡方案配置
  4. D Nacos 服务端部署说明
  5. E 验证与排查
  6. F 回滚方案
  7. G 参考文档
A A

迁移核心在于替换依赖包并修改注册中心地址配置,生产环境建议先采用双注册双订阅模式过渡,确认无误后再完全移除 Eureka。

先说结论:配置修改主要集中在 Maven/Gradle 依赖替换和 application.yml 中的注册中心地址变更,平滑迁移需保留双注册能力。

  • 适合:基于 Spring Cloud 构建且希望整合配置中心与注册中心的微服务架构。
  • 先准备:搭建好 Nacos 服务端集群,备份原有 Eureka 配置及依赖版本信息。
  • 验收:在 Nacos 控制台能看到服务实例列表,且服务间调用正常无报错。

核心配置修改清单

根据迁移策略不同,依赖调整分为两种场景。请根据实际需求选择:

场景一:双注册过渡(推荐生产环境)

暂时保留 Eureka 依赖,同时引入 Nacos 依赖,实现服务同时向两个注册中心注册。

<!-- 保留 Eureka 依赖 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

<!-- 新增 Nacos 依赖 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

场景二:直接切换

完全移除 Eureka,仅使用 Nacos。注意 Spring Cloud 2020.0.0 及以上版本移除了 Ribbon,需显式引入负载均衡器。

<!-- 移除 Eureka 依赖 -->

<!-- 新增 Nacos 依赖 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

<!-- Spring Cloud 2020+ 必须引入负载均衡器 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-loadbalancer</artifactId>
</dependency>

版本兼容性对照

Spring Cloud Alibaba 版本需与 Spring Cloud 版本严格对应,否则可能导致启动失败或配置不生效。参考对照如下:

Spring Cloud 版本Spring Cloud Alibaba 版本备注
2020.0.x2021.0.1.0+需引入 spring-cloud-starter-loadbalancer
2021.0.x2021.0.4.0+稳定推荐版本
2022.0.x2022.0.0.0+适配 Spring Boot 3.x

双注册过渡方案配置

在 application.yml 中同时配置 Eureka 和 Nacos 地址。注意命名空间和分组的配置。

spring:
  application:
    name: your-service-name
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        # 可选:指定命名空间 ID(非名称)
        # namespace: your-namespace-id
        # 可选:指定分组
        # group: DEFAULT_GROUP
    service-registry:
      auto-registration:
        enabled: true

# 过渡期保留 Eureka 配置
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
    register-with-eureka: true
    fetch-registry: true

若启动报错 Bean 冲突(AutoServiceRegistration),可尝试通过配置排除其中一个注册中心的自动注册功能,或确保使用支持双注册的 Starter 版本。

Nacos 服务端部署说明

1. 单机模式(开发/测试)

默认模式,数据存储在 Derby 数据库。

从 Eureka 迁移到 Nacos 服务注册发现需要修改哪些核心配置?
sh startup.sh -m standalone

2. 集群模式(生产环境)

至少 3 个节点,使用 MySQL 持久化数据以保证高可用。修改 conf/cluster.conf 配置节点 IP。

sh startup.sh -m cluster

注意:生产环境务必配置安全组放行 8848 端口,并修改默认账号密码。

验证与排查

1. 控制台检查

登录 Nacos 控制台(默认 http://ip:8848/nacos),进入“服务管理”->“服务列表”,查看是否有对应服务名及健康实例数。

2. 日志观察

启动微服务时,搜索日志关键字。成功连接 Nacos 通常会有"Registering service with Nacos"或"init nacos ok"。若连接失败,日志会报 Connection refused 或 Authentication failed。

3. 调用测试

使用 curl 或 Postman 访问服务接口,确认服务间 Feign 或 RestTemplate 调用能正常解析域名。例如:

curl http://localhost:8080/actuator/health

4. 常见错误排查

  • No servers available:检查是否遗漏 spring-cloud-starter-loadbalancer 依赖(针对 SC 2020+)。
  • 版本不兼容:对照版本兼容性表,检查父工程依赖管理版本。
  • 网络连通性:在客户端服务器 telnet nacos-ip 8848 测试端口连通性。

回滚方案

若迁移后出现严重问题,需立即回滚:

  1. 还原 Maven/Gradle 依赖配置,移除 Nacos 依赖,恢复 Eureka 依赖。
  2. 还原 application.yml 配置文件备份。
  3. 重启微服务实例。
  4. 验证 Eureka 控制台服务列表是否恢复。

参考文档