Nacos注册中心和服务发现

news2024/9/22 5:12:40

Nacos注册中心

image-20240119150425660

01 认识和安装Nacos

Nacos比Eureka功能更为丰富,是SpringCloud中的一个组件,Nacos是阿里巴巴的产品,在国内更流行。

NACOS功能:服务发现(对标Eureka)、配置管理、服务管理

下载见:D:\zwx\weifuwu\nacos-server-1.4.1或者在官网

GitHub主页:https://github.com/alibaba/nacos

GitHub的Release下载页:https://github.com/alibaba/nacos/releases

在nacos文件bin页面中cmd打开终端

image-20240119173211930

输入启动语句:startup.cmd -m standalone -m表示模式 standalone表示单机启动

image-20240119173156055

在浏览器输入上图中Console地址 http://10.0.4.94:8848/nacos/index.html 进行登录,初始账号密码均为nacos

image-20240119173015326

登录成功显示如下

image-20240119173441467

02 Nacos快速入门

服务注册到 Nacos

1.在cloud-demo父工程中添加spring-cloud-alilbaba的管理依赖:

<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>

2.注释掉order-service和user-service中pom文件和yml文件中原有的eureka依赖和配置

3.在order-service和user-service的pom中添加nacos的客户端依赖

<!-- nacos客户端依赖 -->
<dependency>    
	<groupId>com.alibaba.cloud</groupId>    
	<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

4.修改user-service&order-service中的application.yml文件,注释eureka地址,添加nacos地址:

image-20240122085035126

5.启动并测试

image-20240122085100557

image-20240122092646687

03 Nacos服务分级存储模型

服务—>集群—>实例

image-20240122093133749

为什么要多加一个集群,地域划分

image-20240122093351886

没有配置集群之前,集群是DEFAULT

image-20240122093535831

配置服务集群

image-20240122101528913

image-20240122101850782

image-20240122102336141

小结

image-20240122102129914

04 NacosRule负载均衡

目的:要实现Orderservice远程调用userservice时,优先选择本地集群

先配置orderservice yml中集群

image-20240122103120997

得到结果如下image-20240122103148024

进入浏览器页面访问http://localhost:8080/order/101~6

但8081 8081 8082每个进行了两次sql查询,轮询的负载均衡方式,并没有采用优先同集群

image-20240122103359029

需要在order-service的yml中设置负载均衡的IRule为NacosRule,这个规则优先会寻找与自己同集群的服务,在本地集群中随机选择实例

userservice: 
	ribbon:  
		NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则 

之后进入浏览器页面访问http://localhost:8080/order/101~6 结果如下

image-20240122104411109

8082也是HZ集群image-20240122104436694

image-20240122104635332

如果将8081,8082都关掉

image-20240122105149403

再进入浏览器页面访问http://localhost:8080/order/101~3 结果如下

也就是说NacosRule如果没有本地集群,也是会去找别的集群的

image-20240122105430065

但是在orderservice中会出现WARN

01-22 10:52:35:208 WARN 13980 — [nio-8080-exec-1] c.alibaba.cloud.nacos.ribbon.NacosRule : A cross-cluster call occurs,name = userservice, clusterName = HZ, instance = [Instance{instanceId=‘10.0.4.94#8083#SH#DEFAULT_GROUP@@userservice’, ip=‘10.0.4.94’, port=8083, weight=1.0, healthy=true, enabled=true, ephemeral=true, clusterName=‘SH’, serviceName=‘DEFAULT_GROUP@@userservice’, metadata={preserved.register.source=SPRING_CLOUD}}]

解释:一个跨集群访问发生了,你想访问的是HZ集群,但访问到的确定SH集群

image-20240122110049373

05 根据权重负载均衡

com.alibaba.cloud.nacos.ribbon.NacosRule 在集群中是随机。而同一集群中有些设备性能好,有些设备性能差,我们希望让性能好的机器承担更多的请求,因此需要根据权重负载均衡。

权重设置方式如下图(权重值 0~1)

image-20240122110547465

将8081端口权重调到0.1

image-20240122110851054

进入浏览器页面访问http://localhost:8080/order/101~6。对比同一集群 8081、8082中反应的情况

六次服务中有五次访问到8082,只有1次访问到8081。差不多就是这个样子!

image-20240122111120668

image-20240122111143537

若把8081权重从0.1调成0,则无论访问多少次,8081都不会被访问。

但权重0可用于版本升级。比如将8081权重调成0,再对8081停机做版本升级,升级完成后,再把8081权重调小点 放少数用户进来做测试看看行不行 若没什么问题则可扩大权重。(平滑升级,用户没有感知)

小结

image-20240122111929258

06 Nacos环境隔离

环境隔离 - namespace 命名空间

image-20240122112249893

namespace使用演示

image-20240122112730238

image-20240122112825860

在服务列表中也体现了命名空间如下图

image-20240122112904032

image-20240122112922703

怎么去修改一个服务的命名空间呢?比如我想修改一个服务的命名空间为dev

答:在yml中添加namespace

例如:修改order-service的application.yml,添加namespace

image-20240122140615072

然后重启orderservice,打开nacos管理页面,可以看到orderservice出现在命名空间dev中

image-20240122140750264

此时访问http://localhost:8080/order/101 失效, 因orderservice与userservice不在同一命名空间,无法从userservice中获取用户信息而导致访问

image-20240122141216768

代码报错如下

01-22 14:12:08:226 ERROR 25516 — [nio-8080-exec-6] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.IllegalStateException: No instances available for userservice] with root cause

image-20240122141309980

小结

image-20240122141504548

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1436743.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【EI会议征稿通知】第三届智能控制与应用技术国际学术会议(AICAT 2024)

第三届智能控制与应用技术国际学术会议&#xff08;AICAT 2024&#xff09; 2024 3rd International Symposium on Artificial Intelligence Control and Application Technology 2024年第三届智能控制与应用技术国际学术会议&#xff08;AICAT 2024&#xff09;定于2024年5月…

jquery写表格,通过后端传值,并合并单元格

<!DOCTYPE html> <html> <head><title>Table Using jQuery</title><style>#tableWrapper {width: 100%;height: 200px; /* 设置表格容器的高度 */overflow: auto; /* 添加滚动条 */margin-top: -10px; /* 负的外边距值&#xff0c;根据实际…

BT656视频传输标准

前言 凡是做模拟信号采集的&#xff0c;很少不涉及BT.656标准的&#xff0c;因为常见的模拟视频信号采集芯片都支持输出BT.656的数字信号&#xff0c;那么&#xff0c;BT.656到底是何种格式呢&#xff1f; 本文将主要介绍 标准的 8bit BT656&#xff08;4:2:2&#xff09;YCbC…

时间序列预测 —— DeepAR 模型

时间序列预测 —— DeepAR 模型 DeepAR 模型是一种专门用于处理时间序列概率预测的深度学习模型&#xff0c;它可以自动学习数据中的复杂模式&#xff0c;提高预测的准确性。本文将介绍 DeepAR 模型的理论基础、优缺点&#xff0c;并通过 Python 实现单步预测和多步预测的完整…

git整合分支的两种方法——合并(Merge)、变基(Rebase)

问题描述&#xff1a; 初次向git上传本地代码或者更新代码时&#xff0c;总是会遇到以下两个选项。有时候&#xff0c;只是想更新一下代码&#xff0c;没想到&#xff0c;直接更新了最新的代码&#xff0c;但是自己本地的代码并没有和git上的代码融合&#xff0c;反而被覆盖了…

坚持刷题 | 二叉树的直径

文章目录 题目考察点代码实现实现总结方便用迭代的方式实现吗&#xff1f;迭代实现迭代实现总结 Hello&#xff0c;大家好&#xff0c;我是阿月。坚持话题&#xff0c;老年痴呆追不上我&#xff0c;今天还有时间&#xff0c;那就再来一题吧&#xff1a;二叉树的直径 题目 543.…

子集枚举介绍

集合枚举的意思是从一个集合中找出它的所有子集。集合中每个元素都可以被选或不选&#xff0c;含有n个元素的集合总共有个子集&#xff08;包括全集和空集&#xff09; 例如考虑集合和它的4个子集、、、&#xff0c;按照某个顺序&#xff0c;把全集A中的每个元素在每个子集中的…

Visual Studio 2010+C#实现信源和信息熵

1. 设计要求 以图形界面的方式设计一套程序&#xff0c;该程序可以实现以下功能&#xff1a; 从输入框输入单个或多个概率&#xff0c;然后使用者可以通过相关按钮的点击求解相应的对数&#xff0c;自信息以及信息熵程序要能够实现马尔可夫信源转移概率矩阵的输入并且可以计算…

计算机网络-差错控制(纠错编码 海明码 纠错方法)

文章目录 纠错编码-海明码海明距离1.确定校验码位数r2.确定校验码和数据的位置3.求出校验码的值4.检错并纠错纠错方法1纠错方法2 小结 纠错编码-海明码 奇偶校验码&#xff1a;只能发现错误不能找到错误位置和纠正错误 海明距离 如果找到码距为1&#xff0c;那肯定为1了&…

鸿蒙开发-UI-组件导航-Tabs

鸿蒙开发-UI-组件 鸿蒙开发-UI-组件2 鸿蒙开发-UI-组件3 鸿蒙开发-UI-气泡/菜单 鸿蒙开发-UI-页面路由 鸿蒙开发-UI-组件导航-Navigation 文章目录 一、基本概念 二、导航 1.底部导航 2.顶部导航 3.侧边导航 4.导航栏限制滑动 三、导航栏 1.固定导航栏 2.滚动导航栏 3…

莉莉与神奇花朵的冒险

现在&#xff0c;我将根据这些步骤编写一个对话形式的童话故事。 在很久很久以前的一个小村庄里&#xff0c;有一个勤劳善良的小女孩叫莉莉。她住在一间小茅屋里&#xff0c;和她的奶奶一起生活。奶奶年纪大了&#xff0c;行动不便&#xff0c;所以莉莉每天都要照顾她。 一天&a…

【多模态大模型】跨越视觉-语言界限:BLIP的多任务精细处理策略

BLIP 核心思想MED架构和CapFilt方法效果 总结CLIP模型 VS BLIP模型CLIP模型BLIP模型 核心思想 论文&#xff1a;https://proceedings.mlr.press/v162/li22n/li22n.pdf 代码&#xff1a;https://github.com/salesforce/BLIP BLIP&#xff08;Bootstrapping Language-Image Pre…

win11安装MySql5.7

1、下载 打开下载链接&#xff1a;MySQL :: Download MySQL Installer 2、安装 2.1、安装界面 2.2、选择自定义安装 2.3、根据自己系统的位数进行选择是X64还是X86 2.4、选择安装路径 2.5、继续下一步 2.6、选择服务器专用&#xff0c;端口是3306 2.7、设置密码 2.8、设置服…

python函数入参、类成员引用支持灵活参数可配

一、背景 python编码时&#xff0c;有可能在不同场景下输入修改的参数&#xff0c;不方便直接写死&#xff0c;因此需要灵活配置这些函数入参&#xff0c;类成员 二、函数入参支持灵活可配 场景&#xff1a;如下场景&#xff0c;对于hello函数&#xff0c;不同场景下想要对不…

async/await使用过程中,要注意的问题

问: const getData async () >{ console.log(触发了getData接口) let resultData await getActivityInfo(activityId); console.log(resultData,resultData) let id resultData.id; let shareImg resultData.shareImg let shareSubtitle resultData.shareSubtit…

T-Sql 也能更新修改查询JSON?

今天看见一个澳洲项目里面使用了 JSON_VALUE 这样的函数解析 JSON 我倍感诧异&#xff0c;我印象当中Sql Server并不支持JOSN的相关操作&#xff0c;他最多只把JSON当成一个字符串来存储&#xff0c;更不要说去解析&#xff0c;查询和更新了 我随后查询了下此函数&#xff0c;…

美颜SDK是什么?探秘直播美颜SDK在视频社交平台中的应用

当今&#xff0c;美颜SDK正扮演着改变用户体验的“角色”&#xff0c;本篇文章&#xff0c;小编将为大家讲述美颜SDK的概念、原理以及在视频社交平台中的广泛应用。 一、什么是美颜SDK&#xff1f; 美颜SDK是一套软件工具包&#xff0c;提供了一系列美颜算法和功能&#xff…

基础面试题整理6之Redis

1.Redis的应用场景 Redis支持类型&#xff1a;String、hash、set、zset、list String类型 hash类型 set类型 zset类型 list类型 一般用作缓存&#xff0c;例如 如何同时操作同一功能 2.redis是单线程 Redis服务端(数据操作)是单线程&#xff0c;所以Redis是并发安全的,因…

页面模块向上渐变显示效果实现

ps: 先祝各位朋友新春快乐 ^o^/ 想要首页不那么枯燥无味吗&#xff1f;还在未首页过于单调而苦恼吧&#xff0c;来试试这个吧&#xff08;大佬请忽略上述语句o&#xff09; 今天要实现一个页面线上渐变显示的效果&#xff0c;用来丰富首页等页面&#xff1a; 这里先随机建立几…

哈希加密Python实现

一、代码 from cryptography.fernet import Fernet import os import bcrypt# 密钥管理和对称加密相关 def save_key_to_file(key: bytes, key_path: str):with open(key_path, wb) as file:file.write(key)def load_key_from_file(key_path: str) -> bytes:if not os.path…