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

文章导读
从 Eureka 迁移到 Nacos 主要需要修改项目依赖、配置文件和服务启动注解。适用于 Spring Cloud 微服务架构,风险边界在于 Spring Cloud 版本与 Nacos 版本的兼容性以及双注册时的 Bean 冲突。
📋 目录
  1. 快速处理思路
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
  7. 参考来源
A A

从 Eureka 迁移到 Nacos 主要需要修改项目依赖、配置文件和服务启动注解。适用于 Spring Cloud 微服务架构,风险边界在于 Spring Cloud 版本与 Nacos 版本的兼容性以及双注册时的 Bean 冲突。

先说结论:迁移核心是替换依赖包并指向 Nacos 地址,生产环境建议采用双注册双订阅模式平滑过渡。

  • 适合:Spring Cloud 微服务架构升级
  • 先准备:确认 Spring Cloud Alibaba 与 Spring Boot 版本对应关系
  • 验收:在 Nacos 控制台能看到服务实例且调用正常

快速处理思路

迁移工作主要集中在构建配置和启动配置两部分,无需大量重写业务代码。

1. 依赖修改

移除 Eureka 相关依赖,引入 Nacos Discovery 依赖。若使用 Gradle,需在 build.gradle 中调整;若使用 Maven,修改 pom.xml。

2. 配置文件修改

将注册中心地址从 Eureka Server 地址改为 Nacos Server 地址。建议将配置文件名改为 bootstrap.yaml 以便支持配置中心功能。

3. 注解调整

移除启动类上的 @EnableEurekaClient 注解,Nacos 通常支持自动发现,无需额外注解。

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

为什么会这样

Eureka 已进入维护模式且闭源,而 Nacos 集成了服务发现与配置管理功能。迁移是为了解决 Eureka 缺乏配置管理、实时性较低以及社区停止维护的问题。Nacos 支持 AP 和 CP 两种一致性协议,比 Eureka 仅支持 AP 更灵活,且提供控制台 UI 便于管理。

分步处理

步骤 1:修改项目依赖

在 pom.xml 中去掉 spring-cloud-starter-netflix-eureka-server 或 eureka-client 依赖。新增 spring-cloud-starter-alibaba-nacos-discovery 依赖。若使用配置中心功能,还需引入 spring-cloud-starter-alibaba-nacos-config。

步骤 2:配置注册中心地址

在 bootstrap.yaml 或 application.yaml 中配置 Nacos 地址。关键配置项为 spring.cloud.nacos.discovery.server-addr,格式为 IP:8848。若需命名空间隔离,配置 namespace 字段。

步骤 3:处理启动类注解

检查主启动类,删除 @EnableEurekaClient 注解。Spring Cloud Alibaba 通常会自动装配 Nacos 服务注册功能,无需额外开启。

步骤 4:引入 Bootstrap 依赖

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

若使用 bootstrap.yaml 加载配置,需确保引入了 spring-cloud-starter-bootstrap 依赖,否则配置文件可能不生效。

怎么验证是否生效

1. 控制台检查

登录 Nacos 控制台(默认 http://IP:8848/nacos),在服务列表页面查看是否有服务实例注册上线。

2. 日志检查

启动微服务实例,观察日志中是否有 Nacos 相关的初始化日志,确认无 Bean 冲突报错。

3. 调用测试

使用服务消费者调用服务提供者,确认服务发现负载均衡正常,无 404 或连接拒绝错误。

常见坑

1. 版本兼容性

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

Spring Boot、Spring Cloud 与 Spring Cloud Alibaba 版本需严格对应。公开资料中没有看到可靠的量化数据说明版本错配的具体报错率,但版本不一致会导致启动失败。

2. 双注册 Bean 冲突

若采用双注册双订阅模式过渡,同时引入 Eureka 和 Nacos 依赖可能导致 AutoServiceRegistration Bean 冲突。需通过配置排除或手动指定其中一个。

3. 配置文件优先级

bootstrap.yaml 的加载优先级高于 application.yaml。若配置未生效,检查是否缺少 bootstrap 依赖或文件名拼写错误。

常见问题

迁移后需要重启所有服务吗?

需要。修改依赖和配置文件后,所有微服务实例必须重启才能加载新的注册中心配置。

如何保留 Eureka 实现平滑迁移?

采用双注册双订阅模式,同时在配置中保留 Eureka 地址并新增 Nacos 地址,确保消费者能从两个中心获取服务列表。

Nacos 配置中心如何动态刷新?

在配置类上添加 @RefreshScope 注解,并结合 @Value 注解获取配置,即可实现配置变更无需重启服务。

参考来源

  • 注册中心从 Eureka 换到 Nacos 需要做什么改动 - 月月月芽 moon (github.com/alibaba/nacos/releases/tag/2.2.3)
  • 微服务 Eureka 转为 nacos (nacos.io/download/nacos-server)
  • 迁移 Eureka 至 Nacos:双注册双订阅模式实践指南
  • 微服务平滑迁移注册中心 Eureka 到 Nacos
  • Nacos - 从 Eureka/ZooKeeper 迁移至 Nacos 全流程指南