迁移核心在于替换依赖包并修改注册中心地址配置,生产环境建议先采用双注册双订阅模式过渡,确认无误后再完全移除 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.x | 2021.0.1.0+ | 需引入 spring-cloud-starter-loadbalancer |
| 2021.0.x | 2021.0.4.0+ | 稳定推荐版本 |
| 2022.0.x | 2022.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 数据库。
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 测试端口连通性。
回滚方案
若迁移后出现严重问题,需立即回滚:
- 还原 Maven/Gradle 依赖配置,移除 Nacos 依赖,恢复 Eureka 依赖。
- 还原 application.yml 配置文件备份。
- 重启微服务实例。
- 验证 Eureka 控制台服务列表是否恢复。