Nacos
1、Nacos简介
Nacos是阿里巴巴开源的服务注册中心以及配置中心,致力于给开发者提供一款便捷、简单上手的开源框架。快速实现动态服务发现、服务配置、服务元数据及流量管理。
一个Nacos干掉了Spring Cloud的三大组件,分别是注册中心Eureka
、服务配置Config
,服务总线Bus
。
2、安装
下载
https://github.com/alibaba/nacos/releases
上传服务器解压
1 2 | unzip nacos-server-$version.zip 或者 tar -xvf nacos-server-$version.tar.gz cd nacos/bin |
直接启动 sh startup.sh -m standalone ,可单机模式运行。
修改数据库配置(可部署为集群)
vim conf/application.properties
在nacos的解压目录nacos/的conf目录下,有配置文件cluster.conf,请每行配置成ip:port。(请配置3个或3个以上节点)
启动服务器
Linux/Unix/Mac
启动命令(standalone代表着单机模式运行,非集群模式):
1 | sh startup.sh -m standalone |
如果您使用的是ubuntu系统,或者运行脚本报错提示[[符号找不到,可尝试如下运行:
1 | bash startup.sh -m standalone |
Windows
启动命令(standalone代表着单机模式运行,非集群模式):
1 | startup.cmd -m standalone |
关闭服务器
Linux/Unix/Mac
1 | sh shutdown.sh |
Windows
1 | shutdown.cmd |
在浏览器输入http://localhost:8848/nacos
进入Nacos的登录界面。
用户名:nacos;密码:nacos
3、服务注册发现
创建了两个模块,分别是nacos-provider(服务提供者)、nacos-consumer(服务消费者),职责如下:
添加Maven依赖
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> </dependencies>
配置YML文件
nacos-provider:注册进入nacos-server,对外暴露服务
spring: application: name: nacos_provide cloud: nacos: config: server-addr: ip:8848 file-extension: yaml prefix: nacos discovery: server-addr: ip:8848 enabled: true service: ${spring.application.name} #默认为该值 server: port: 8886
nacos-consumer:注册进入nacos-server,调用nacos-provider的服务
spring: application: name: nacos_consumer cloud: nacos: config: server-addr: ip:8848 file-extension: yaml prefix: nacos discovery: server-addr: ip:8848 server: port: 8887
开启服务注册发现功能
@SpringBootApplication @EnableDiscoveryClient public class NacosConsumerApp { public static void main(String[] args) { SpringApplication.run(NacosConsumerApp.class,args); } }
4、启动配置管理
添加依赖
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>2.0.2.RELEASE</version>
</dependency>
配置YAML文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | spring: profiles: active: local application: name: ${ino.artifactId} cloud: nacos: discovery: server-addr: ${ino.nacos-sever-adr} namespace: ${ino.nacos-nampace} group: ${ino.nacos-group} config: server-addr: ${ino.nacos-sever-adr} namespace: ${ino.nacos-nampace} group: ${ino.nacos-group} # 默认是properties格式,添加对应分组的配置stp-demo3-busi.yaml file-extension: yaml |
Data ID
dataId是一个配置的唯一标识,格式:
${prefix}-${spring.profiles.active}.${file-extension}
prefix:前缀,默认是spring.application.name的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
spring.profiles.active:即为当前环境对应的 profile。当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。
Namespace
多环境隔离配置,解决多环境及多租户数据的隔离问题 在多套不同的环境下,可以根据指定的环境创建不同的Namespace,实现多环境的数据隔离。
Nacos中默认提供的命名空间则是public,Namespace必须在
bootstrap.yml
配置文件中指定,否则不生效。
配置见上的yml文件
Group
不同业务配置隔离。
有两个微服务,一个是订单系统,一个是用户系统,但是他们有着相同的配置,比如datasource-url,那么如何区分呢?
Group 默认为 DEFAULT_GROUP,可以通过 spring.cloud.nacos.config.group 来配置,当配置项太多或者有重名时,可以通过分组来方便管理。
5、Nacos 配置中心原理
链接 :https://www.jianshu.com/p/38b5452c9fec
Nacos 服务端保存了配置信息,客户端连接到服务端之后,根据 dataID,group可以获取到具体的配置信息,当服务端的配置发生变更时,客户端会收到通知。
Nacos 并不是通过推的方式将服务端最新的配置信息发送给客户端的,而是客户端维护了一个长轮询的任务,定时去拉取发生变更的配置信息,然后将最新的数据推送给 Listener 的持有者。
Nacos 服务端创建了相关的配置项后,客户端就可以进行监听了。
客户端是通过一个定时任务来检查自己监听的配置项的数据的,一旦服务端的数据发生变化时,客户端将会获取到最新的数据,并将最新的数据保存在一个 CacheData 对象中,然后会重新计算 CacheData 的 md5 属性的值,此时就会对该 CacheData 所绑定的 Listener 触发 receiveConfigInfo 回调。
注:
nacos作为配置中心,配置数据库和redis链接,修改数据库链接,服务端收到更新,但服务还是使用原来的数据库链接,不使用修改后的链接。可以把应用重新启动一下,对于像mysql来说,原先的session 不生效,新的链接才能生效
6、nacos和eureka功能对比
功能模块 | nacos | eureka | 功能说明 |
注册中心 | √ | √ | 服务治理,服务中心化注册 |
配置中心 | √ | × | eureka需要配合springcloud config实现 |
配置动态刷新 | √ | × | nacos通过netty保持tcp长链接进行推送,eureka需要配合mq实现配置动态刷新 |
可用区az | √ | √ | 对服务集群划分不同区域,实现区域隔离,并提供灾难级自动切换 |
分组 | √ | × | nacos根据不同的业务、环境进行分组管理(namespace,group) |
元数据 | √ | √ | 提供服务标签数据(环境、服务标识) |
权重 | √ | × | nacos提供权重设置,调整承载流量压力 |
健康检查 | √ | √ | nacos提供服务端或者客户端发起的健康监测,eureka是有客户端发起心跳 |
负载均衡 | √ | √ | 均提供负载均衡策略,eureka采用ribbon |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异