一文吃透 Nacos:从安装到微服务实战,替代 Eureka 真香
一文吃透 Nacos:从安装到微服务实战,替代 Eureka 真香
在微服务架构里,注册中心是服务治理的核心。随着 Eureka 2.0 闭源,阿里开源的 Nacos 凭借一站式服务发现、配置管理、动态 DNS 等能力,迅速成为国内微服务开发的首选方案。
这篇文章就基于实战课件,带你从安装、服务注册发现、负载均衡、健康检查、环境隔离、配置中心到与 Eureka 对比,一次性学会 Nacos 全流程使用。
一、Nacos 是什么?
Nacos(Dynamic Naming and Configuration Service)是阿里开源的微服务注册中心 + 配置中心,定位是:更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
核心亮点
-
2018 年开源,对标 Eureka,Star 远超 Eureka
-
一站式:注册中心 + 配置中心 + 服务管理
-
支持 Java/Go/C++/Node.js/Python 等主流语言
-
国内大厂广泛使用:蔚来、理想、中国移动、爱奇艺、虎牙等
二、Windows 单机安装 Nacos(2.2.3 稳定版)
学习阶段直接用单机模式,步骤极简:
1. 下载安装包
官方稳定版:2.2.3
下载地址:https://github.com/alibaba/nacos/releases/tag/2.2.3
2. 解压并修改启动模式
-
解压到非中文路径
-
打开
/bin/startup\.cmd -
找到
set MODE=\&\#34;cluster\&\#34;,改为:set MODE="standalone"
3. 启动 Nacos
双击 startup\.cmd,看到:
nacos is starting with standalone
Tomcat started on port(s): 8848 (http)
Nacos started successfully in stand alone mode
访问控制台:http://127.0.0.1:8848/nacos
默认账号密码:nacos/nacos
4. 常见问题
-
集群模式报错:必须改成 standalone
-
8848 端口冲突
-
杀进程:
netstat \-ano\|findstr \&\#34;8848\&\#34;→taskkill /pid xxx \-f -
改端口:
/conf/application\.properties→server\.port=新端口
-
三、Spring Cloud 整合 Nacos:服务注册与发现
Nacos 完全兼容 Spring Cloud 规范,替换 Eureka 成本极低。
1. 引入依赖
父工程管理版本
<properties>
<spring-cloud-alibaba.version>2022.0.0.0-RC2</spring-cloud-alibaba.version>
</properties>
<dependencyManagement>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-alibaba-dependencies</artifactId>
<version>${spring-cloud-alibaba.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencyManagement>
微服务引入 Nacos 与负载均衡
<!-- 服务注册发现 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<!-- 负载均衡 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
2. 配置 Nacos 地址
spring:
application:
name: product-service # 服务名
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848 # Nacos 地址
3. 开启负载均衡
@Configuration
public class BeanConfig {
@Bean
@LoadBalanced
public RestTemplate restTemplate(){
return new RestTemplate();
}
}
4. 远程调用(服务名替代 IP)
String url = "http://product-service/product/" + orderInfo.getProductId();
ProductInfo productInfo = restTemplate.getForObject(url, ProductInfo.class);
启动服务后,在 Nacos 控制台服务列表即可看到注册成功的服务。
四、Nacos 负载均衡:权重、集群优先、服务下线
Nacos 提供比默认负载均衡更强大的流量控制能力。
1. 服务手动上下线
控制台:服务管理 → 服务列表 → 详情 → 下线
下线后流量不再分发,恢复上线即可重新接收请求。
2. 权重配置(按权重分发流量)
-
编辑实例 → 修改权重(默认 1)
-
开启 Nacos 负载均衡:
spring: cloud: loadbalancer: nacos: enabled: true
3. 同集群优先访问(同城 / 同机房优先)
-
给服务配置集群名:
spring.cloud.nacos.discovery.cluster-name=SH # 上海 -
启动参数指定不同集群:
-Dserver.port=9091 -Dspring.cloud.nacos.discovery.cluster-name=BJ -
同集群服务优先调用,跨集群只做兜底。
五、Nacos 健康检查:临时实例 vs 永久实例
Nacos 有两种健康检查机制,和实例类型强绑定:
1. 实例类型
-
临时实例(默认):宕机超时而被剔除,用客户端心跳上报
-
非临时实例(永久实例):宕机不删除,用服务端反向探测
2. 配置永久实例
spring:
cloud:
nacos:
discovery:
ephemeral: false # 永久实例
3. 常见问题
-
实例类型不能直接改:停 Nacos → 删除
/data/protocol/raft→ 重启 -
服务正常但健康检查失败:检查网络 / 端口 / 防火墙
六、环境隔离:Namespace 命名空间
企业必备:开发 / 测试 / 生产环境互相隔离。
1. 控制台创建 Namespace
-
左侧:命名空间 → 新建
-
生成唯一 ID,如:
51152a13\-7911\-49e3\-bbdc\-16fd5670a257
2. 微服务指定 Namespace
spring:
cloud:
nacos:
discovery:
namespace: 51152a13-7911-49e3-bbdc-16fd5670a257
不同 Namespace 的服务不可见、不可调用。
七、Nacos 配置中心:统一管理、热更新
微服务配置散落在各个项目,修改要重启?Nacos 配置中心一键解决。
1. 引入依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!-- Spring Cloud 2020+ 必须加 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
2. bootstrap.yml 配置(优先加载)
spring:
application:
name: product-service # 必须和 Nacos DataID 一致
cloud:
nacos:
config:
server-addr: 127.0.0.1:8848
namespace: 51152a13-7911-49e3-bbdc-16fd5670a257
3. 开启配置热更新
@RestController
@RefreshScope // 配置自动刷新
@RequestMapping("/config")
public class NacosController {
@Value("${nacos.test.num:0}")
private Integer nacosNum;
@GetMapping("/get")
public Integer get() {
return nacosNum;
}
}
4. DataID 规则(多环境兼容)
${prefix}-${spring.profiles.active}.${file-extension}
-
优先级:
dev环境配置 > 默认配置 -
支持
properties/yaml
八、Linux 部署微服务 + Nacos
-
打包微服务为 jar
-
上传服务器,启动 Nacos:
bash startup.sh -m standalone -
后台启动服务:
nohup java -jar product-service.jar --server.port=9090 > logs/product.log &
九、Nacos vs Eureka:到底强在哪?
| 对比项 | Eureka | Nacos |
|---|---|---|
| 功能 | 仅注册中心 | 注册中心 + 配置中心 + 服务管理 |
| CAP 原则 | AP | 可切换 AP/CP,默认 AP |
| 健康检查 | 客户端心跳 | 临时实例心跳 / 永久实例探测 |
| 服务更新 | 客户端定时拉取 | 服务端实时推送 |
| 负载均衡 | 基础轮询 | 权重、集群优先、同机房优先 |
| 社区与生态 | 2.0 闭源 | 活跃更新,国内主流 |
一句话总结:Nacos 是 Eureka 的全面升级版,一站式解决微服务注册、配置、流量管控问题。
十、总结
Nacos 作为 Spring Cloud Alibaba 核心组件,安装简单、接入平滑、功能强大,完全可以替代 Eureka 成为微服务架构的标配注册中心与配置中心。
本文覆盖:
-
Nacos 单机安装与排错
-
Spring Cloud 服务注册发现
-
权重 / 集群负载均衡
-
健康检查与实例类型
-
Namespace 环境隔离
-
配置中心热更新
-
与 Eureka 对比
掌握这些,微服务服务治理基本就稳了。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐

所有评论(0)