微服务:Nacos注册中心

国内公司一般都推崇阿里巴巴的技术,比如注册中心,SpringCloudAlibaba也推出了一个名为Nacos的注册中心。

1.认识Nacos

Nacos是阿里巴巴的产品,现在是SpringCloud中的一个组件。相比Eureka功能更加丰富,在国内受欢迎程度较高。

Nacos的启动:安装好Nacos后,在下载文件中找到nacos\bin ,在其中打开cmd黑窗口,并输入 startup.cmd -m standalone  

打开浏览器,输入该网址后,可以跳转到该界面,表示Nacos启动完成:

2. Nacos的服务注册

Nacos是SpringCloudAlibaba的组件,而SpringCloudAlibaba也遵循SpringCloud中定义的服务注册、服务发现规范。因此使用Nacos和使用Eureka对于微服务来说,并没有太大区别。

主要差异在于:

  • 依赖不同

  • 服务地址不同

2.1. 引入依赖

在cloud-demo父工程的pom文件中的<dependencies>中引入SpringCloudAlibaba的依赖:

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.2.6.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>
</dependency>

注意:不要忘了注释掉eureka的依赖。

2.2. 配置Nacos地址

在user-service和order-service的application.yml中添加nacos地址:

spring:cloud:nacos:server-addr: localhost:8848

注意:不要忘了注释掉eureka的地址

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

3.1. 给微服务配置

如给user-service配置集群:

修改user-service的application.yml文件,添加集群配置:

spring:cloud:nacos:server-addr: localhost:8848discovery:cluster-name: HZ # 集群名称

重启两个user-service实例后,我们可以在nacos控制台看到下面结果:

如果我们再复制一个user-service启动类并且添加属性:

-Dserver.port=8083 -Dspring.cloud.nacos.discovery.cluster-name=SH  //SH表示 上海

启动UserApplication3后再次查看nacos控制台:

3.2. 同集群优先的负载均衡

未配置负载均衡策略的情况下,是默认轮询的,并不能根据提供者和消费者同集群来优先实现负载均衡

因此Nacos中提供了一个NacosRule的实现,可以优先从同集群中挑选实例

3.2.1. 给order-service配置集群信息

修改order-service的application.yml文件:

spring:cloud:nacos:server-addr: localhost:8848discovery:cluster-name: HZ # 集群名称

3.2.2. 修改负载均衡规则

修改order-service的application.yml文件,修改负载均衡规则:

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

改为了同集群优先挑选实例

3.3. 权重配置

实际部署中会出现这样的场景:

服务器设备性能有差异,部分实例所在机器性能较好,另一些较差,我们希望性能好的机器承担更多的用户请求。

但默认情况下NacosRule是同集群内随机挑选,不会考虑机器的性能问题。

因此,Nacos提供了权重配置来控制访问频率,权重越大则访问频率越高。

在nacos控制台,找到user-service的实例列表,点击编辑,即可修改权重:

如果在同集群优先的情况下,结果依然会优先考虑同集群优先,除非把同集群的实例权重改为0,才会跨集群调用

注意:如果权重修改为0,则该实例将不会被访问

4.环境隔离

Nacos提供了namespace来实现环境隔离功能。

  • nacos中可以有多个namespace

  • namespace下可以有group、service等

  • 不同namespace之间相互隔离,例如不同namespace的服务互相不可见

4.1.创建namespace

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

我们可以进入命名空间,点击页面新增按钮,添加一个namespace:

                        

然后,填写表单:

就能在页面看到一个新的namespace:

4.2. 给微服务配置namespace

给微服务配置namespace只能通过修改配置来实现。

例如,修改order-service的application.yml文件:

spring:cloud:nacos:server-addr: localhost:8848discovery:cluster-name: HZnamespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 # 命名空间,填ID

重启order-service后,访问控制台,可以看到下面的结果:

此时访问order-service,因为namespace不同,会导致找不到userservice,控制台会报错:

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

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

相关文章

「Vue3系列」Vue3 组件

文章目录 一、Vue3 组件二、Vue3 组件实例三、Vue3 官方组件四、Vue3 常用组件五、相关链接 一、Vue3 组件 Vue3 是 Vue.js 的最新版本&#xff0c;它引入了许多新的特性和改进。在 Vue3 中&#xff0c;组件是构建应用程序的核心部分&#xff0c;它们可以重用、组合和嵌套。Vu…

express+mysql+vue,从零搭建一个商城管理系统10--添加商品

提示&#xff1a;学习express&#xff0c;搭建管理系统 文章目录 前言一、新建models/goods.js二、新建routes/goods.js三、添加goods表四、添加商品总结 前言 需求&#xff1a;主要学习express&#xff0c;所以先写service部分 一、新建models/goods.js models/goods.js con…

Nodejs 第四十八章(ioredis)

ioredis 是一个强大且流行的 Node.js 库&#xff0c;用于与 Redis 进行交互。Redis 是一个开源的内存数据结构存储系统。ioredis 提供了一个简单高效的 API&#xff0c;供 Node.js 应用程序与 Redis 服务器进行通信。 以下是 ioredis 的一些主要特点&#xff1a; 高性能&…

Android开发者该学习哪些东西提高竞争力,Github上最值得学习的10个Android开源项目

什么是 HTTPS? HTTPS (基于安全套接字层的超文本传输协议 或者是 HTTP over SSL) 是一个 Netscape 开发的 Web 协议。 你也可以说&#xff1a;HTTPS HTTP SSL HTTPS 在 HTTP 应用层的基础上使用安全套接字层作为子层。 为什么需要 HTTPS &#xff1f; 超文本传输协议 (…

Linux 查看硬件常用命令

lshw 显示完整的硬件信息&#xff0c;需要以管理员权限运行。 lshw lspci&#xff1a; 该命令用于列出所有连接到PCI总线的设备信息。 lspci lsusb&#xff1a; 该命令用于列出所有连接到USB总线的设备信息。 lsusb lsblk&#xff1a; 该命令用于列出块设备&#xff08;硬…

Apache Log4j 远程代码执行漏洞的终极解决方案

1.背景 最近一个老系统被检查出有Apache Log4j 远程代码执行漏洞&#xff0c;需要解决此问题&#xff0c;基于此&#xff0c;写此文章记录一下 2.问题分析 老生常谈了&#xff0c;之前发现此漏洞&#xff0c;处理方案都是升级jar包 但是&#xff0c;漏洞随着时间一直有出现&…

第三百八十三回

文章目录 1. 概念介绍2 使用方法3 示例代码 我们在上一章回中介绍了ModalBarrier组件相关的内容&#xff0c;本章回中将介绍Visibility组件.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章回中介绍的Visibility组件是一种容器类组件&#xff0c;主要…

图像质量评价指标计算python代码,PSNR,SSIM,fsim,niqe,lpips,rmse,德尔塔δe

图像质量评价指标计算python&#xff0c;PSNR&#xff0c;SSIM&#xff0c;fsim&#xff0c;niqe&#xff0c;lpips&#xff0c;rmse&#xff0c;德尔塔δe import numpy as np from skimage.metrics import structural_similarity as ssim from skimage.metrics import peak_s…

【LeetCode】第 387 场周赛

3069. 将元素分配到两个数组中 I 给你一个下标从 1 开始、包含 不同 整数的数组 nums &#xff0c;数组长度为 n 。 你需要通过 n 次操作&#xff0c;将 nums 中的所有元素分配到两个数组 arr1 和 arr2 中。在第一次操作中&#xff0c;将 nums[1] 追加到 arr1 。在第二次操作…

SpringBoot之获取Spring容器上下文组件的工具类封装

SpringBoot之获取Spring容器上下文组件的工具类封装 文章目录 SpringBoot之获取Spring容器上下文组件的工具类封装1. SpringBoot版本2. Spring容器上下文工具类封装 如在一个普通类中获取HttpServletRequest、HttpServletResponse…等等以工具类的形式getBen,而不需要Component…

win11环境下使用hane WIN NFS Server搭建nfs服务

如题&#xff0c;服务端使用hane win nfs server&#xff0c;客户端也是使用wins系统。 S1&#xff0c;安装nfs服务器端&#xff0c;wins系列除了server系列可以使用nfs服务端&#xff0c;其余必须使用额外的组件来实现NFS文件系统的功能。 Networking Software for Windows …

系统学习Python——装饰器:直接管理函数和类

分类目录&#xff1a;《系统学习Python》总目录 在《系统学习Python——装饰器》系列文章中&#xff0c;我们的大多数示例都设计来拦截函数和实例创建调用。这对于装饰器来说很典型&#xff0c;但是它们并不限于这一角色。因为装饰器通过装饰器代码来运行新的函数和类&#xff…

Nodejs 第四十六章(redis持久化)

redis持久化 Redis提供两种持久化方式&#xff1a; RDB&#xff08;Redis Database&#xff09;持久化&#xff1a;RDB是一种快照的形式&#xff0c;它会将内存中的数据定期保存到磁盘上。可以通过配置Redis服务器&#xff0c;设置自动触发RDB快照的条件&#xff0c;比如在指…

C#进阶高级语法之LINQ:深入分析LINQ的查询表达式、延迟执行与PLINQ高级特性

LINQ&#xff08;Language-Integrated Query&#xff09;是.NET框架的一个强大的查询语言&#xff0c;它可以用来查询各种数据源&#xff0c;如集合、数据库等。LINQ提供了许多高级特性&#xff0c;包括LINQ查询表达式、deferred execution和PLINQ&#xff08;并行LINQ&#xf…

力扣每日一题 用栈实现队列

Problem: 232. 用栈实现队列 文章目录 思路复杂度&#x1f496; 朴素版&#x1f496; 优化版 思路 &#x1f468;‍&#x1f3eb; 路飞题解 复杂度 时间复杂度: 添加时间复杂度, 示例&#xff1a; O ( n ) O(n) O(n) 空间复杂度: 添加空间复杂度, 示例&#xff1a; O ( …

Linux系统的服务/进程

系统守护进程&#xff08;服务&#xff09; •服务就是运行在网络服务器上监听用户请求的进程 •服务是通过端口号来区分的 常见的服务及其对应的端口 1.ftp&#xff1a;21 FTP指的是文件传输协议&#xff0c;它是用于在计算机网络上进行文件传输的标准网络协议。通过FTP&am…

HTTP协议与HTTPS协议

HTTP协议 HTTP协议是一个无状态的协议&#xff0c; 服务器不维护任何有关客户端之前所发请求的消息。 是一种懒政&#xff0c;有状态协议就会更加复杂&#xff0c;需要维护状态&#xff08;历史信息&#xff09;,要是客户或者服务器失效,会产生状态不一致(状态前后不对称),解决…

【Python 常用脚本及命令系列 2.4 -- int 将字符串数字转为数值】

文章目录 Python int() 函数python 将字符串数字转为数值type 函数使用 Python int() 函数 int() 函数用于将一个字符串或数字转换为整型。 以下是 int() 方法的语法: class int(x, base10)x – 字符串或数字。base – 进制数&#xff0c;默认十进制&#xff0c;如果是16进制…

C++对象内存模型布局详解

目录 本文主要内容如下&#xff1a; 最后还有一些问题&#xff1a; 一、理解虚函数表 二、对象模型概述 三、继承下的C对象模型 单继承&#xff1a; 多继承&#xff1a; 一般的多继承&#xff08;非菱形继承&#xff09;&#xff1a; 菱形继承&#xff1a; 五、虚继承…

【牛客】VL64 时钟切换

描述 题目描述&#xff1a; 存在两个同步的倍频时钟clk0 clk1,已知clk0是clk1的二倍频&#xff0c;现在要设计一个切换电路&#xff0c;sel选择时候进行切换&#xff0c;要求没有毛刺。 信号示意图&#xff1a; 波形示意图&#xff1a; 输入描述&#xff1a; clk0 clk1为时…