Nacos 能替代 Eureka,关键在于支持 AP/CP 模式动态切换:ephemeral=false 时基于 Raft 实现强一致,而 Eureka 是纯 AP 且已停止维护;Nacos 还具备配置中心、多协议服务发现、权重路由、JSON 元数据等云原生能力。
Eureka 是纯 AP 模型,网络分区时宁可返回过期数据也不拒绝请求;Nacos 默认是 AP,但只要把服务注册时的 ephemeral=false,它就自动切到 CP 模式——此时依赖 Raft 协议强一致写入,适合配置中心或强一致性要求的场景(比如权限服务、计费服务)。Eureka 没有这个开关,2.0 已停止维护,连切模式的余地都没有。
ephemeral=true):Nacos 用心跳 + 延迟剔除(默认 15s 无心跳标记不健康,再 30s 后剔除),行为接近 Eureka,但支持自定义超时参数ephemeral=false):Nacos 要求所有节点写入成功才返回注册成功,牺牲部分可用性换一致性Eureka 只管服务地址列表,改个数据库连接串还得重启服务;Nacos 天然带配置中心,spring-cloud-starter-alibaba-nacos-config 引入后,加几行配置就能实现运行时刷新 @Value 或 @ConfigurationProperties。
spring.cloud.nacos.config.server-addr,否则启动报 No spring.config.import property found
Nacos Server 默认占 8848(HTTP API)、9848(gRPC 端口,2.0+ 必须开启),而 Eureka 默认只用 10086。很多人直接双击 startup.cmd 启动失败,却只盯着日志里的 “Failed to bind to port”,忽略真正原因。
conf/application.properties 是否被改乱:重点看 server.port 和 nacos.core.auth.enabled(v2.2+ 默认开启鉴权,首次访问需登录 nacos/nacos)startup.cmd 闪退?打开 CMD 手动执行它,错误会留在窗口里——常见是 JDK 版本不对(Nacos 2.2+ 要 JDK 11+)或 JAVA_HOME 没设对eureka.client.register-with-eureka=false 漏配,导致 Server 自己去注册自己,无限重试# 修改 Nacos 端口示例(conf/application.properties) server.port=9090 nacos.core.rpc.port=9849
Eureka 只支持 HTTP 接口拉取服务列表,客户端必须引入 spring-cloud-starter-netflix-eureka-client;Nacos 支持 HTTP + DNS + gRPC 三种协议,
其中 DNS 模式允许非 Java 服务(如 Go、Python)用标准 dig 命令查服务——这对混合技术栈团队很关键。
user-service ≠ User-Service),Nacos 默认转小写归一化处理,更宽容curl -X PUT 'http://localhost:8848/nacos/v1/ns/instance?serviceName=user&ip=192.168.1.100&port=8080&weight=0.1',Eureka 没这能力,得靠外部 LB 实现metadata)只能塞字符串,Nacos 支持 JSON 结构体,方便传标签、灰度标识、版本号等复杂信息Nacos 和 Eureka 不是简单“功能多 vs 功能少”的关系,而是架构定位不同:Eureka 是单点服务发现组件,Nacos 是面向云原生的服务基础设施。选型时别只看“能不能用”,要看你是否需要配置热更新、多语言互通、跨机房容灾——这些地方,Eureka 的缺失不是靠加中间件能补上的。