一、Nacos 是什么(核心理解)
Nacos =
注册中心 + 配置中心
在微服务里它解决两件事:
1️⃣ 服务注册与发现
比如:
user-service 运行在 192.168.1.10:8081
order-service 不需要写死IP
改成:
order-service → Nacos → 找 user-service
2️⃣ 配置中心
统一管理配置:
user-service.yaml
order-service.yaml
修改后不用重启。
🧠 二、Nacos 注册中心本质(重点)
Nacos 本质是:
一个"服务信息数据库 + 心跳管理系统"
它保存的是:
服务名 → 实例列表(IP + port + 状态)
例如:
user-service:
- 192.168.1.10:8081
- 192.168.1.11:8081
🔁 三、Nacos 自动注册全过程(重点中的重点)
你面试必须能讲这个流程👇
🚀 1. 服务启动阶段
Spring Boot 启动:
UserServiceApplication 启动
↓
Spring Cloud Nacos 自动加载
↓
准备注册服务
🚀 2. 自动注册发生(关键)
Spring Cloud 做了一个事:
👉 自动帮你调用 Nacos API 注册服务
等价于:
POST /nacos/v1/ns/instance/register
注册内容:
{
"serviceName": "user-service",
"ip": "192.168.1.10",
"port": 8081
}
🚀 3. Nacos 存储服务信息
Nacos 内部:
serviceMap
└── user-service
├── instance1
└── instance2
🚀 4. 客户端缓存服务列表
order-service 会:
从 Nacos 拉取 user-service 列表
缓存到本地
👉 之后调用不一定每次都查 Nacos
🚀 5. 调用流程(完整链路)
order-service 调用 user-service
1️⃣ 先查本地缓存
2️⃣ 没有则查 Nacos
3️⃣ 获取 IP 列表
4️⃣ 负载均衡选择一个实例
5️⃣ 发 HTTP 请求
💓 四、心跳机制(非常重要)
Nacos 会维护一个机制:
1️⃣ 服务每隔 5 秒发送心跳
user-service → Nacos
"我还活着"
2️⃣ 如果超过 15 秒没心跳
Nacos 标记服务为:
❌ 不健康
3️⃣ 超过 30 秒
直接剔除服务
📌 面试一句话总结:
Nacos 通过"心跳机制"保证服务存活状态。
🧩 五、临时实例 vs 永久实例(重点)
1️⃣ 临时实例(默认)
ephemeral: true
特点:
- 依赖心跳
- 心跳断 → 立刻下线
- 常用于 Spring Cloud 微服务
👉 ✔ 推荐使用
2️⃣ 永久实例
ephemeral: false
特点:
- 不靠心跳
- 不会自动剔除
- 需要手动删除
📌 面试回答:
Spring Cloud 默认使用临时实例,依赖心跳机制保证健康状态。
⚙️ 六、Spring Boot 如何自动注册(重点代码)
1️⃣ 添加依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2️⃣ 配置文件(关键)
spring:
application:
name: user-service # 服务名(注册到Nacos的名字)
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
3️⃣ 启动类无需写注册代码
@SpringBootApplication
public class UserServiceApplication {
public static void main(String[] args) {
SpringApplication.run(UserServiceApplication.class, args);
}
}
❗重点:为什么不用写注册代码?
因为:
Spring Cloud Alibaba 自动帮你做了注册逻辑(SPI + Listener机制)
🧠 七、自动注册底层原理(面试加分点)
Spring Boot 启动后:
1️⃣ Spring Context Refresh
2️⃣ NacosAutoServiceRegistration 触发
3️⃣ 获取 applicationName
4️⃣ 获取 IP + port
5️⃣ 调用 Nacos API 注册
核心类(面试可以说)
NacosAutoServiceRegistration
NacosServiceRegistry
NacosNamingService
🔄 八、服务发现机制(补充理解)
1️⃣ 拉取模式
服务启动 → 拉取服务列表 → 缓存
2️⃣ 订阅模式(重要)
order-service 订阅 user-service
↓
user-service 变化
↓
Nacos 推送变更
↓
本地缓存更新
👉 这叫 Push + Pull 结合机制
⚖️ 九、Nacos vs Eureka(面试必问)
| 对比 | Nacos | Eureka |
|---|---|---|
| 模型 | AP + CP可切换 | AP |
| 功能 | 注册+配置 | 只有注册 |
| 健康检查 | 心跳+主动探测 | 心跳 |
| 推送能力 | 支持 | 不支持 |
🚨 十、企业真实用法(很重要)
Nacos 在公司一般这样用:
微服务全部注册到 Nacos
↓
Gateway 通过 Nacos 路由
↓
Feign 调用服务
↓
配置统一放 Nacos
🧾 十一、面试标准回答模板(直接背)
如果面试问:
❓ Nacos 如何实现服务注册?
你可以这样说:
👉 标准回答:
Nacos 是一个注册中心,微服务启动时会通过 Spring Cloud Alibaba 自动注册机制,将服务名、IP、端口等信息注册到 Nacos。
底层通过 NacosAutoServiceRegistration 监听 Spring 容器启动事件,调用 Nacos NamingService 完成注册。
注册成功后,服务会以"临时实例"形式存在,并通过心跳机制维持存活状态,如果心跳超时,Nacos 会自动剔除实例。
同时消费者会订阅服务列表,Nacos 会通过推送机制更新本地缓存,实现服务发现。