Nacos 是阿里开源的一个 服务注册中心 + 配置中心。
Nacos 是 Spring Cloud / 微服务项目里的"通讯录 + 配置仓库"。
它主要解决两个问题:
1. 服务之间怎么找到彼此?
2. 配置文件怎么统一管理?
1. Nacos 解决什么问题?
假设你现在有三个服务:
用户服务 user-service
订单服务 order-service
商品服务 product-service
订单服务想调用用户服务。
普通写法可能是:
http://localhost:8081/user/1
但是在真实项目中,问题来了:
user-service 可能有多台机器
IP 地址可能变化
端口可能变化
服务可能上线或下线
所以不能把地址写死。
这时候就需要 Nacos。
2. Nacos 的第一个作用:服务注册与发现
服务注册
每个服务启动后,会主动告诉 Nacos:
我是 user-service
我的地址是 192.168.1.10:8081
我现在活着
类似去派出所登记户口。
服务发现
订单服务想调用用户服务时,不需要自己记 IP。
它只需要问 Nacos:
user-service 在哪里?
Nacos 返回:
192.168.1.10:8081
192.168.1.11:8081
192.168.1.12:8081
然后订单服务选择其中一个去调用。
3. 用 Python 类比
你可以这样理解:
没有 Nacos
USER_SERVICE_URL = "http://192.168.1.10:8081"
写死地址。
有 Nacos
USER_SERVICE_NAME = "user-service"
我不关心具体 IP,只关心服务名字。
真正地址由 Nacos 帮我找。
4. Nacos 的第二个作用:配置中心
你之前问过 application.yml。
普通 Spring Boot 项目里配置写在本地:
server:
port: 8080
spring:
datasource:
url: jdbc:mysql://localhost:3306/test
username: root
password: 123456
但是微服务项目多了以后,每个服务都有配置:
user-service 的 application.yml
order-service 的 application.yml
product-service 的 application.yml
pay-service 的 application.yml
配置散落在每个项目里,改起来很麻烦。
这时候可以把配置放到 Nacos 里统一管理。
5. Nacos 作为配置中心时的作用
比如数据库地址变了。
没有 Nacos 时:
你要挨个修改每个项目的 application.yml
重新打包
重新部署
有 Nacos 时:
在 Nacos 控制台修改配置
服务自动读取新配置
所以 Nacos 像一个远程配置仓库。
6. Nacos 在项目里的位置
一个微服务系统大概是这样:
Nacos
┌────────┴────────┐
│ │
服务注册中心 配置中心
│ │
│ │
┌───────┼────────┐ │
│ │ │ │
用户服务 订单服务 商品服务 统一读取配置
7. Spring Boot 项目怎么接入 Nacos?
通常要做三件事。
第一步:加依赖
在 pom.xml 里加 Nacos 相关依赖。
例如服务注册发现:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
配置中心:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
第二步:写配置
在 application.yml 里配置 Nacos 地址:
spring:
application:
name: user-service
cloud:
nacos:
server-addr: localhost:8848
discovery:
enabled: true
意思是:
当前服务名叫 user-service
Nacos 地址是 localhost:8848
启动后注册到 Nacos
第三步:启动 Nacos 服务端
Nacos 不是一个普通依赖,它还需要单独启动一个 Nacos Server。
启动后一般可以访问:
http://localhost:8848/nacos
它有一个网页控制台,可以看到服务列表和配置列表。
8. Nacos 和 application.yml 的关系
这点很重要。
application.yml 不是被 Nacos 完全替代,而是变成:
application.yml:写一些启动时必须知道的基础配置
Nacos:写业务运行中的公共配置、动态配置
比如:
spring:
application:
name: user-service
cloud:
nacos:
server-addr: localhost:8848
这些仍然要写在本地。
因为程序得先知道:
我要去哪里找 Nacos?
我的服务名叫什么?
然后才能从 Nacos 拉取更多配置。
9. Nacos 和 Maven、application.yml 的关系
你可以把它们放在一起理解:
| 名称 | 作用 |
|---|---|
pom.xml |
告诉项目需要哪些依赖 |
application.yml |
本地运行配置 |
Nacos |
远程服务注册中心 + 远程配置中心 |
更直白地说:
pom.xml:我要用 Nacos 这个工具
application.yml:Nacos 在哪里
Nacos:真正管理服务地址和配置
10. Nacos 总结
Nacos 是微服务项目里的基础组件,主要有两个作用:
服务注册与发现:让服务之间通过服务名互相找到
配置中心:把配置统一放到 Nacos 里管理
Nacos 不是写业务代码的东西,而是用来管理"服务地址"和"配置"的中间件。