从 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 支持 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 依赖
若使用 bootstrap.yaml 加载配置,需确保引入了 spring-cloud-starter-bootstrap 依赖,否则配置文件可能不生效。
怎么验证是否生效
1. 控制台检查
登录 Nacos 控制台(默认 http://IP:8848/nacos),在服务列表页面查看是否有服务实例注册上线。
2. 日志检查
启动微服务实例,观察日志中是否有 Nacos 相关的初始化日志,确认无 Bean 冲突报错。
3. 调用测试
使用服务消费者调用服务提供者,确认服务发现负载均衡正常,无 404 或连接拒绝错误。
常见坑
1. 版本兼容性
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 全流程指南