【微服务 SpringCloudAlibaba】实用篇 · Nacos注册中心
微服务(5)
文章目录
- 微服务(5)
- 1. 认识和安装Nacos
- 2. 服务注册到nacos和拉取服务
- 1)引入依赖
- 2)配置nacos地址
- 3)重启
- 3. 服务分级存储模型
- 3.1 给user-service配置集群
- 3.2 同集群优先的负载均衡
- 4. 权重配置
- 5. 环境隔离
- 5.1 创建namespace
- 5.2 给微服务配置namespace
- 6. Nacos与Eureka的区别
微服务(5)
国内公司一般都推崇阿里巴巴的技术,比如注册中心,SpringCloudAlibaba也推出了一个名为Nacos的注册中心。
而我们现在差不多在学习SpringCloudAlibaba了,它与SpringCloud的关系就有点像SpringBoot与SpringMVC,SpringBoot引入SpringWeb框架就可以说是SpringMVC项目了,也可以说还是SpringBoot项目,只是SpringBoot接纳SpringMVC
这个也一样,SpringCloud项目换上SpringCloudAlibaba的一些组件,也可以说是SpringCloudAlibaba项目咯(框架升级的感觉),也可以说还是SpringCloud项目,只是SpringCloud接纳了SpringCloudAlibaba的一些组件
- SpringCloudAlibaba可以说是SpringCloud在开发过程中,添加了一些组件之后的一个升级态
1. 认识和安装Nacos
Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高。
- 也可以说,我们现在就在学SpringCloudeAlibaba的一个内容了

资源地址:资源 · 游离态/云服务 - 码云 - 开源中国 (gitee.com)
将它下载到一个非中文目录后:
目录说明:
- bin:启动脚本
- conf:配置文件
端口配置:
- Nacos的默认端口是8848,如果你电脑上的其它进程占用了8848端口,请先尝试关闭该进程。
如果无法关闭占用8848端口的进程,也可以进入nacos的conf目录,修改配置文件中的端口:
修改其中的内容:
启动:进入bin目录后(双击startup.cmd)或者用命令行输入命令
./startup.cmd -m standalone执行后的效果如图:
在浏览器输入地址:http://127.0.0.1:8848/nacos即可,
默认的账号和密码都是nacos,进入后:
2. 服务注册到nacos和拉取服务
Nacos是SpringCloudAlibaba的组件,而SpringCloudAlibaba也遵循SpringCloud中定义的服务注册、服务发现规范。
- 典型的接口规范一致,具体实现却可以是多样的

因此使用Nacos和使用Eureka对于微服务来说,并没有太大区别。
主要差异在于:
- 依赖不同
- 服务地址不同
1)引入依赖
在cloud-demo父工程的pom文件中的<dependencyManagement>中引入SpringCloudAlibaba的依赖:
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.2.5.RELEASE</version><type>pom</type><scope>import</scope>
</dependency>

然后在user-service和order-service中的pom文件中引入nacos-discovery依赖:
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>2.2.5.RELEASE</version>
</dependency>
- 理论上在父工程的pom已经对版本进行管理了,version标签就不需要加了,但是我的那边不加导入不了依赖😫😫😫

注意:不要忘了注释掉eureka的依赖。
2)配置nacos地址
在user-service和order-service的application.yml中添加nacos地址:
spring:cloud:nacos:server-addr: localhost:8848
注意:不要忘了注释掉eureka的地址
- 注意结构:
spring.cloud.nacos.server-addr!
3)重启
代码不用动
重启微服务后
访问正常:

登录nacos管理页面,可以看到微服务信息:

查看详情:

3. 服务分级存储模型
一个服务可以有多个实例,例如我们的user-service,可以有:
- 127.0.0.1:8081
- 127.0.0.1:8082
- 127.0.0.1:8083
- ……
假如这些实例分布于全国各地的不同机房,例如:
- 127.0.0.1:8081,在上海机房
- 127.0.0.1:8082,在上海机房
- 127.0.0.1:8083,在广东机房
- ……
Nacos就将同一机房内的实例 划分为一个集群。
- 可以有多个集群(在多个地区)
也就是说
user-service是服务
- 一个服务可以包含多个集群,如杭州、上海,而每个集群下
- 可以有多个实例,形成分级模型,如图:
同一个机房,也就是说一个集群,里面的实例可能不同,可能是来自别的微服务的服务,而以上分级,单看一个服务也没问题
-
微服务互相访问时,应该尽可能访问同集群实例,因为本地访问速度更快
-
当本集群内不可用时,才访问其它集群
-
所以我们不应该将本地集群和外地集群**“一视同仁”**
例如:

一个机房内的order-service应该优先访问同机房的user-service。

目前我们没有设置集群,为DEFAULT
3.1 给user-service配置集群
为了模拟得更加真实,我再多加一个user-service实例:

修改user-service的application.yml文件,添加集群配置:
spring:cloud:nacos:server-addr: localhost:8848discovery:cluster-name: GD # 集群名称
先把服务都停掉,重启两个user-service实例后

再改下配置,这个时候启动第三个实例,用的就是这个yml配置:

查看网站:

三个分别是
- GD
- SH
- DEFAULT
- 只不过没有一个实例
查看详情:

3.2 同集群优先的负载均衡
默认的ZoneAvoidanceRule并不能实现根据同集群优先来实现负载均衡。
因此Nacos中提供了一个NacosRule的实现,可以优先从同集群中挑选实例,实在不行才到外地
- NacosRule又是经典的集大成者,就是杂合多种规则,取众之所长
1)给order-service(消费者)配置集群信息
修改order-service的application.yml文件,添加集群配置:
spring:cloud:nacos:server-addr: localhost:8848discovery:cluster-name: SH # 集群名称

2)修改负载均衡规则
修改order-service的application.yml文件,修改负载均衡规则:
userservice:ribbon:NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则

我就不对比实验了,如果不设置这个规则,则就是默认的轮询规则、或者配置中的规则…
但是我这样设置之后,我们期待的效果是本地:也就是GD访问的次数要多一点才对,看一下效果吧~
启动order-service,浏览器访问10次101:
日志都在本地(SH)服务那,说明已经成功啦
我们换order-service到GD,在发送101-108,你会发现它在本地的两个服务的调度是随机的:
要是本地的都挂了的话:
- 我将orderservice改为SH,停掉SH的服务,启动两个GD的服务
在跨集群服务随机调度咯:
在orderservice里:
- 警告日志,提醒我们重启同集群服务
4. 权重配置
实际部署中会出现这样的场景:
- 服务器设备性能有差异,部分实例所在机器性能较好,另一些较差,我们希望性能好的机器承担更多的用户请求
- 但默认情况下NacosRule是同集群内随机挑选,不会考虑机器的性能问题
因此,NacosRule提供了权重配置来控制访问频率,权重越大则访问频率越高。
- 即**通过权重影响随机选中的概率**
在nacos控制台,找到user-service的实例列表,点击编辑,即可修改权重:

在弹出的编辑窗口,修改权重:
- 设置的值大于等于0就行了,之后这个集群各个服务被选中的概率的比值就等于权重的比值~

点击确认后,浏览器访问十次接口试一下:
频次差得将近十倍
注意:如果权重修改为0,则该实例永远不会被访问
这有个妙用就是,一个服务要进行升级,可以将权重设置为0,那么就负载均衡就不会轮它,就不会担心停掉后,那nacos还意识不到这个服务挂了(因为用户时时刻刻都在访问呀,难道每次更新都要等个夜黑风高的夜晚吗🤣)…
5. 环境隔离
Nacos提供了namespace来实现环境隔离功能。
- nacos中可以有多个namespace
- namespace下可以有group、service等
- group不过就是把业务相关度高的放在一个组,可能会有点益处,差不多就那个意思,了解即可
- 不同namespace之间相互隔离,例如不同namespace的服务互相不可见
没有namespace的概念之前,我们的服务可以访问到其他的所有服务,因为都可以见
但是在一些业务里,我们是不希望服务A访问服务B的,虽然可以通过行为规范去限制,但是还是得“强硬点”,也就是来了个命名空间,让服务A不可见服务B,服务B不可见服务A
当然在开发设计上是可以不用namespace的,非必须~

5.1 创建namespace
默认情况下,所有service、data、group都在同一个namespace,名为public:

我们可以点击页面新增按钮,添加一个namespace:

确认后:

回到服务列表:


- 空空如也~
设置namespace是很严肃的,涉及业务不可见性的,所以这里修改不了,要在代码那修改~
5.2 给微服务配置namespace
给微服务配置namespace只能通过修改配置来实现。
例如,修改order-service的application.yml文件:
spring:cloud:nacos:server-addr: localhost:8848discovery:cluster-name: HZnamespace: 3dcc6119-bdd8-46f1-a183-9904cc1ac98b # 命名空间,填ID

- 记得填自己的命名空间id
重启order-service后,访问控制台,可以看到下面的结果:

此时访问order-service,因为namespace不同,会导致找不到userservice,控制台会报错:
- 因为他们已经是两个世界的人了🤣🤣🤣

不过一个微服务的实例可以不在一个命名空间里,
例如这里我把其中一个userservice的实例放在orderservice的命名空间里,这样orderservice还是可以执行相应的业务
- 但是我个人觉得这种行为很傻,很没有必要,要这么做干啥子要有命名空间
6. Nacos与Eureka的区别
两者的主要区别在于Nacos的服务实例分为两种类型:
-
临时实例:如果实例宕机超过一定时间,会从服务列表剔除,默认的类型。
-
非临时实例:如果实例宕机,不会从服务列表剔除,也可以叫永久实例。

- 默认情况下,都是临时实例
配置一个服务实例为永久实例:
spring:cloud:nacos:discovery:ephemeral: false # 设置为非临时实例


Nacos和Eureka整体结构类似:
- 服务注册
- 服务拉取
- 心跳等待
但是也存在一些差异:

-
Nacos与eureka的共同点
- 都支持服务注册和服务拉取
- 都支持服务提供者心跳方式做健康检测
-
Nacos与Eureka的区别
- Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式(心跳检测频率要比eureka快);非临时实例采用主动检测模式
- (ಥ _ ಥ),对非临时实例主动嘘寒问暖
- 临时实例心跳不正常会被剔除;非临时实例则不会被剔除,被标记为不健康

例如我把非临时的orderservice实例停掉,nacos看他跟亲儿子一样,没有直接剔除~

- 我将userservice的其中一个实例停了~
可见,这个临时实例这个捡来的儿子🤣,直接被剔除了
- Nacos支持服务列表变更的消息推送模式,服务列表缓存的更新更及时
- 因为如果消费者每个三十秒拉取一次的话,期间缓存不变更的话,有个实例挂了,消费者就很可能访问到这个挂了的接口~
- 及时更新是很有必要的,即使没法避免某些极端事件(例如心跳检测不及时等等巧合的事…)的发生,也能解决绝大多数情况~
- Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式(看看就行了,暂时不讲,这是后面的事)
- Nacos还提供一个的负载均衡规则NacosRule,是一种优良的负载均衡策略
- Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式(心跳检测频率要比eureka快);非临时实例采用主动检测模式
文章到此结束!谢谢观看
可以叫我 小马,我可能写的不好或者有错误,但是一起加油鸭🦆!代码:cloud-demo · 游离态/云服务 - 码云 - 开源中国 (gitee.com)
相关文章:
【微服务 SpringCloudAlibaba】实用篇 · Nacos注册中心
微服务(5) 文章目录 微服务(5)1. 认识和安装Nacos2. 服务注册到nacos和拉取服务1)引入依赖2)配置nacos地址3)重启 3. 服务分级存储模型3.1 给user-service配置集群3.2 同集群优先的负载均衡 4. …...
华为手机安卓扫描安装包apk在哪
1、在文件管理器里找,有的安装包没有搜索到2、在应用市场-我的-安装包管理,它会扫描整个手机,推荐...
IDEA 新版本设置菜单展开
使用了新版本的IDEA 新UI后,常用的file,view,菜单看不见了,不太适应,找了一下,有个配置可以修改。 打开settings里面把show main menu in a separate toolbar勾选上,应用保存就可以了...
Leetcode 350:两个数组的交集II
给你两个整数数组 nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。 示例 1…...
【数据结构】队列的实现与优化指南
一、前言 队列是一种重要的数据结构,它按照“先入先出”(FIFO)的原则管理数据。本文将介绍队列的概念、应用场景,以及如何使用数组实现普通队列和环形队列。 二、内容 2.1 概述 (1)什么是队列࿱…...
视频太大怎么压缩变小?三分钟学会视频压缩
随着科技的不断发展,视频已经成为了我们日常生活中不可或缺的一部分,然而,大尺寸的视频文件常常会给我们带来诸多困扰,例如发送不便、存储空间不足等等,那么,如何将这些过大的视频文件压缩变小呢࿱…...
Rust 泛型
泛型 Generics泛型详解 使用泛型参数,有一个先决条件,必需在使用前对其进行声明: fn largest<T>(list: &[T]) -> T {该泛型函数的作用是从列表中找出最大的值,其中列表中的元素类型为 T。首先 largest<T> 对…...
STM32+2.9inch微雪墨水屏(电子纸)实现显示
本篇文章从硬件原理以及嵌入式编程等角度完整的介绍了墨水屏驱动过程,本例涉及的墨水屏为2.9inch e-Paper V2,它采用的是“微胶囊电泳显示”技术进行图像显示,其基本原理是悬浮在液体中的带电纳米粒子受到电场作用而产生迁移,从而改变显示屏各…...
Hadoop3教程(二十九):(生产调优篇)集群扩容及缩容(白名单与黑名单)
文章目录 (150)添加白名单(151)服役新服务器(152)服务器间数据均衡(153)黑名单退役服务器参考文献 这一章还算是比较重要的。 (150)添加白名单 白名单&#…...
NET7下用WebSocket做简易聊天室
NET7下用WebSocket做简易聊天室 步骤: 建立NET7的MVC视图模型控制器项目创建websocket之间通信的JSON字符串对应的实体类一个房间用同一个Websocketwebsocket集合类,N个房间创建websocket中间件代码Program.cs中的核心代码,使用Websocket聊…...
详解API基础知识
目录 什么是API: API 的设计原则包括: API 的开发流程包括以下几个步骤: API 的使用场景包括: API 的优势包括: 然而,API 也存在一些挑战和问题,例如: 什么是API: API(应用程…...
b树和b+树
二叉树和平衡二叉树 二叉树,每个节点支持两个分支的树结构,相比于单向链表,多了一个分支。 二叉查找树,在二叉树的基础上增加了一个规则,左子树的所有节点的值都小于它的根 节点,右子树的所有子节点都大于它…...
Linux 下 Java 安装字体方法
因上线访问图字体乱码了,因为在windows下设置的微软雅黑,linux默认是没有的,所以需要给jdk安装一个微软雅黑字体。按照步骤来,so easy! 1)首先找到windows下面的字体,不用去其他地方下了&#…...
敏捷开发的实施要素和实现敏捷的实际改进
敏捷开发的实施要素如下: 个体和交互:胜过过程和工具。可以工作的软件:胜过面面俱到的文档。客户合作:胜过合同谈判。响应变化:胜过遵循计划。 敏捷开发过程是一个增量的、迭代的过程,责任人、开发人…...
学会使用Pandas进行数据清洗
大家好,如果你对数据科学感兴趣,那么数据清洗可能对你来说是一个熟悉的术语,本文将向你介绍使用Pandas进行数据清洗的过程。我们的数据通常来自多个资源,而且并不干净,它可能包含缺失值、重复值、错误或不需要的格式等…...
Stable Diffusion WebUI扩展a1111-sd-webui-tagcomplete之Booru风格Tag自动补全功能详细介绍
安装地址 直接附上地址先: Ranting8323 / A1111 Sd Webui Tagcomplete GitCodeGitCode——开源代码托管平台,独立第三方开源社区,Git/Github/Gitlabhttps://gitcode.net/ranting8323/a1111-sd-webui-tagcomplete.git上面是GitCode的地址,下面是GitHub的地址,根据自身情…...
Linux中iostat命令
iostat命令是IO性能分析的常用工具,其是input/output statistics的缩写。 一、安装 yum install sysstat -y二、参数说明 -c: 显示CPU使用情况-d: 显示磁盘使用情况--dec{ 0 | 1 | 2 }: 指定要使用的小数位数,默认为 2-g GROUP_NAME { DEVICE [...] | A…...
Pandas数据处理分析系列3-数据如何预览
Pandas-数据预览 Pandas 导入数据后,我们通常需要对数据进行预览,以便更好的进行数据分析。常见数据预览的方法如下: ①head() 方法 功能:读取数据的前几行,默认显示前5行 语法结构:df.head(行数) df1=pd.read_excel("销售表.xlsx",sheet_name="手机销…...
【汇编语言-王爽】第二章:寄存器
知识点 (一)寄存器 一个典型的CPU由运算器、控制器、寄存器等器件构成,这些器件靠内部总线相连。8086CPU有14个寄存器:AX、BX、CX、DX、SI、DI、SP、BP、IP、CS、SS、DS、ES、PSW。其中AX、BX、CX、DX为通用寄存器,可…...
5G学习笔记之5G频谱
参考:《5G NR通信标准》1. 5G频谱 1G和2G移动业务的频段主要在800MHz~900MHz,存在少数在更高或者更低频段;3G和4G的频段主要在450MHz ~ 6GHz;5G主要是410MHz ~ 6GHz,以及24GHz ~ 52GHz。 5G频谱跨度较大,可…...
AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
vscode(仍待补充)
写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
高等数学(下)题型笔记(八)空间解析几何与向量代数
目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...
学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1
每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...
NLP学习路线图(二十三):长短期记忆网络(LSTM)
在自然语言处理(NLP)领域,我们时刻面临着处理序列数据的核心挑战。无论是理解句子的结构、分析文本的情感,还是实现语言的翻译,都需要模型能够捕捉词语之间依时序产生的复杂依赖关系。传统的神经网络结构在处理这种序列依赖时显得力不从心,而循环神经网络(RNN) 曾被视为…...
浅谈不同二分算法的查找情况
二分算法原理比较简单,但是实际的算法模板却有很多,这一切都源于二分查找问题中的复杂情况和二分算法的边界处理,以下是博主对一些二分算法查找的情况分析。 需要说明的是,以下二分算法都是基于有序序列为升序有序的情况…...
使用 SymPy 进行向量和矩阵的高级操作
在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...
















