微服务:Nacos注册中心

news2024/11/26 2:37:12

在这里插入图片描述

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~
个人主页:.29.的博客
学习社区:进去逛一逛~

在这里插入图片描述



一、服务注册与发现


1.启动Nacos

首先,启动Nacos并访问Web端控制台

进入nacos/bin目录下,启动nacos服务:

Windows版启动命令:startup.cmd -m standalone

Linux版启动命令:sh startup.sh -m standalone

Nacos页面的账户与密码均为nacos

在这里插入图片描述


2.引入依赖

①父工程依赖

父工程中导入阿里巴巴相关依赖,用于对Nacos依赖进行版本控制。

<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>
②客户端依赖
<!-- nacos客户端依赖包 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>


3.添加配置

在微服务的application.yml配置文件中添加nacos的服务地址,当微服务启动时,就会完成服务信息的注册,信息列表可在Nacos控制台查看详情。

spring:
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos服务地址
  • 到这里,就完成了nacos的基本配置,可以让微服务借助Nacos进行服务注册与服务发现。



二、Nacos服务分级存储模型


1.概念

  • 一级是服务
  • 二级是集群
  • 三级是实例

在这里插入图片描述

  • 服务跨集群调用问题:
    • 服务调用尽可能选择本地集群的服务,跨集群调用延迟较高,当本地集群不可访问时,再去访问其他集群。

2.配置集群属性

修改application.yml配置文件,添加cluster-name配置属性,以配置集群信息,具体内容如下:

spring:
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos服务地址
      discovery:
        cluster-name: HZ #集群名称,可自定义
  • 配置完成后,可重启微服务,在nacos的Web端控制台页面上查看集群变化。



三、NacosRule负载均衡


1.实现NacosRule

在上述Nacos服务分级存储模型的集群属性配置完成的基础上,在application.xml配置文件中添加以下配置,来指定对应服务负载均衡规则:

userservice: # 要做配置的微服务名称,即配置会作用到的微服务。
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule  # 使用Nacos负载均衡规则
  • NacosRule负载均衡策略
    • ①优先选择本地集群(同一集群)服务实例列表。
    • ②本地集群找不到服务提供者,才去其他集群寻找,并且会报警告。
    • ③确定了可用实例列表后,再采用随机负载均衡挑选实例。

2.根据权重负载均衡

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

  • 服务设备性能有差异,部分实例所在的机器性能较好,另一些较差,我们希望性能好的机器承担更多的用户请求。
  • Nacos中,就提供了权重配置来控制访问频率的功能,权重越大则访问频率越高。

Nacos控制台

  1. 在Nacos控制台可以设置实例的权重值,首先选中实例后面的编辑按钮

在这里插入图片描述

  1. 自定义权重后,保存设置即可

在这里插入图片描述

  • 实例的权重控制:
      1. Nacos控制台可以控制实例的权重值,0~1之间。
      2. 同集群内的多个实例,权重越高被访问的频率越高。
      3. 权重设置为0则完全不会被访问。



四、环境隔离 - namespace


Nacos中服务存储和数据存储的最外层都是一个名为namespace的东西,用来做最外层的隔离。


Nacos控制台

  1. 新建命名空间

在这里插入图片描述

  1. 自定义命名空间信息

在这里插入图片描述

  1. 创建成功

在这里插入图片描述


可在微服务的application.yml配置文件中指定微服务的Nacos命名空间,下述配置完并重启微服务,微服务的namespace就会改变。

spring:
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos服务地址
      discovery:
        cluster-name: GD #集群名称
        namespace: ec10a576-86b6-45eb-ba7c-c0647b6ef69a #命名空间ID,这里是dev环境
  • Nacos环境隔离
      1. namespace用来做环境隔离;
      2. 每个namespace都有唯一id;
      3. 不同namespace下的服务不可见(无法跨namespace远程调用);



五、Nacos注册中心原理


1.流程原理分析

  • 服务提供者启动时注册信息。
  • 服务提供者为临时实例:采用心跳监控,向每30秒发送心跳请求向nacos汇报状态。
  • 服务提供者非临时实例:nacos会主动询问其状态。
  • 服务消费者远程调用服务提供者时,会定时从nacos拉取服务列表,更新服务列表缓存。
  • 当nacos注册中心的服务列表更新时,nacos还会主动推送消息给服务消费者,以更新服务列表缓存。

在这里插入图片描述


2.临时实例和非临时实例

  • 服务注册到Nacos时,可以选择注册为临时实例或非临时实例,通过application.yml中添加配置消息来设置:
spring:
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos服务地址
      discovery:
        ephemeral: false # 是否是临时实例

3.总结

  • Nacos与Eureka的共同点:
      1. 都支持服务注册和服务拉取。
      2. 都支持服务提供者心跳方式做健康检测。
  • Nacos和Eureka区别:
      1. Nacos支持服务端主动检测提供者状态:临时实例采取心跳模式,非临时实例采取主动检测模式。
      2. 临时实例心跳不正常会被剔除,非临时实例则不会被剔除。
      3. Nacos支持服务列表变更的消息推送模式,服务列表更新更及时。
      4. Nacos集群默认采用AP方式(强调数据可用性),当集群中存在非临时实例时,采用CP模式(强调数据可靠性、一致性);Eureka集群采用AP方式。




在这里插入图片描述

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

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

相关文章

【算法每日一练】

蛮有意思的的一道题&#xff0c;最后要判断能否成为一种1~n的全排列&#xff0c;我最这样做的&#xff1a; 整个数组先排序一下。假设遍历到了i&#xff0c;那就判断前面b和r的个数&#xff0c;但是有想到了后面可能还会对前面的结果产生影响&#xff0c;所以就抛弃了这个想法…

项目|保障房房产管理系统,政务房产解决方案

一、系统概况 保障房管理系统是是为了落实中央关于住房保障的相关政策&#xff0c;实现对低收入家庭住房状况的调查管理、保障计划及落实管理、保障申请及审核管理、保障户和保障房源档案管理等。 针对政府保障房产管理的一站式解决方案&#xff0c;专注于为解决复杂、繁琐的…

java-stream流案例

需求 代码 Vote类 // 1. 定义一个投票类 public class Vote {private String name;private ArrayList<String> voteList;public Vote(String name, ArrayList<String> voteList) {this.name name;this.voteList voteList;}public String getName() {return nam…

《Fundamentals of Power Electronics》——三端电池的旋转、负载差分连接

以下是关于三端电池的旋转的相关知识点&#xff1a; Buck电路、Boost电路和Buck-Boost电路均包含一个与单刀单掷开关相连的电感。如下图所示。 将上图中的电感和开关网络视为一个标有a,b,c三端的基础电池。该电池在电源和负载之间有三种不同的连接方式。a-A b-B c-C连接方式组…

数字信号的产生与检测——DSP学习笔记六

本专栏的博客的图片大部分来源于老师的PPT&#xff0c;本博客只是博主对于上课内容的知识结构的分析和梳理。 几种数字信号的产生 正弦波信号 多项式逼近(除了泰勒展开&#xff0c;还有一种方法是切比雪夫逼近法&#xff0c;感兴趣可以自己去了解一下&#xff09; 查找表 核心思…

可编程SG-8018系列晶体振荡器

近年来&#xff0c;由于越来越需要更小的电子设备&#xff0c;使其在更广泛的环境中具有更大的功率和功能包括极端0.工厂和工厂设备。爱普生晶振针对市场将开发了可编程晶体振荡器系列产品新的SG-8018系列产品,共四种型号分别为SG-8018CA、SG-8018CB、SG-8018CE、SG8018CG&…

Asp .Net Core 系列:国际化多语言配置

文章目录 概述术语 本地化器IStringLocalizer在服务类中使用本地化 IStringLocalizerFactoryIHtmlLocalizerIViewLocalizer 资源文件区域性回退 配置 CultureProvider内置的 RequestCultureProvider实现自定义 RequestCultureProvider使用 Json 资源文件 设计原理IStringLocali…

Java小白福音丨保姆级的JDK+Eclipse+其他常用软件安装教程!

是的我看见到处是阳光 JDK正在安装 新世界来得像梦一样 让我暖洋洋 你的Java学习还在继续吗 你的JDK安装了吗 这儿有一份开发软件安装新教程 你不想学学吗 明天一早&#xff0c; 我猜阳光会好 我要把自己打扫 把破旧的套路丢掉 哦这样多好 加油吧Java少年 前言 想学习Java&…

使用 SSH 密钥配置 Git 账号需要以下步骤

1、生成 SSH 密钥&#xff1a; 如果你还没有 SSH 密钥&#xff0c;可以使用以下命令在电脑终端中生成一个新的 SSH 密钥&#xff1a; ssh-keygen -t rsa -b 4096 -f /Users/XXXX/.ssh/id_rsa_my_personal -C "your_emailexample.com" ssh-keygen 是用于生成 SSH 密…

面试:Redis

目录 一、缓存穿透 1、解决方案一&#xff1a; 2、解决方案二&#xff1a; 二、缓存击穿 1、解决方案一&#xff1a; 2、解决方案二&#xff1a; 三、缓存雪崩 1、解决方案一&#xff1a; 2、解决方案二&#xff1a; 3、解决方案三&#xff1a; 4、解决方案四&#x…

Java对象在堆和栈上的存储(对象布局,待完善)

0、前言 这里提到的 Java 对象不仅仅包含引用类型&#xff08;Object&#xff09;&#xff0c;还包含基本数据类型&#xff08;boolean、int、long、float、double&#xff09;。文中部分图片来源于 B站 黑马程序员。 1、在栈上的数据存储 1.1、局部变量 局部变量包含以下情…

过滤器Filter --学习笔记

什么是Filter&#xff1f; Filter表示过滤器&#xff0c;是 JavaWeb三大组件(Servlet、Filter、Listener)之一过滤器可以把对资源的请求拦截下来&#xff0c;从而实现一些特殊的功能过滤器一般完成一些通用的操作&#xff0c;比如&#xff1a;登录校验、统一编码处理、敏感字符…

NLP发展及其详解

一、RNN(循环神经网络) 在这里附上一个很好的笔记 零基础入门深度学习(5) - 循环神经网络 RNN(循环神经网络)的结构特点在于其循环单元的设计,这种设计允许网络在处理序列数据时保持对之前信息的记忆。下面详细解释RNN的结构: 循环单元:RNN的循环单元是网络的核心,它…

《QT实用小工具·四十五》可以在界面上游泳的小鱼

1、概述 源码放在文章末尾 该项目实现了灵动的小鱼&#xff0c;可以在界面上跟随鼠标点击自由的游泳&#xff0c;项目demo演示如下所示&#xff1a; 项目部分代码如下所示&#xff1a; #include "magicfish.h" #include <QtMath> #include <QPainter>…

怎么设置 idea terminal 窗口的编码格式

1 修改Terminal 窗口为 Git bash 窗口 打开 settings 设置界面&#xff0c;选择 Tools 中的 Terminal (File -> settings -> Tools -> Terminal) 修改 Shell path 为你的 Git bash 安装路径&#xff0c;我的在 C:\my_software\java\Git\bin\bash.exe 2 解决中文显示…

【UE5】数字人基础

这里主要记录一下自己在实现数字人得过程中涉及导XSens惯性动捕&#xff0c;视频动捕&#xff0c;LiveLinkFace表捕&#xff0c;GRoom物理头发等。 一、导入骨骼网格体 骨骼网格体即模型要在模型雕刻阶段就要雕刻好表捕所需的表情体(blendshape)&#xff0c;后面表捕的效果直…

干货满满,Apollo7周年大会的心得体会

在云计算、人工智能、大数据等技术的助力下&#xff0c;自动驾驶已成为现代科技的一个标志性领域。 Apollo是一个开放、完整、安全的自动驾驶平台&#xff0c;助力开发者快速搭建自动驾驶系统。 Apollo开放平台自诞生以来&#xff0c;就扮演着这一领域的引领者角色。而今&…

Zynq 7000 系列之启动模式—Quad-SPI启动

Quad-SPI启动是一种高效的闪存启动方式&#xff0c;它利用Quad-SPI接口的高速数据传输能力来加速启动过程。Quad-SPI&#xff08;四路串行外设接口&#xff09;是一种改进的SPI&#xff08;串行外设接口&#xff09;协议&#xff0c;通过使用四条数据线而不是传统的单条数据线&…

Typora配置PicGo图床,将图片文件上传到gitee厂库,获取图片链接显示在md文件中

Typora配置PicGo图床&#xff0c;将图片文件上传到gitee厂库&#xff0c;获取图片链接显示在md文件中 创建Gitee创库和配置私人令牌 名字、路径、描述自己随便添&#xff0c;但是必须开源&#xff0c;链接才能可以访问&#xff1a; 进入偏好设置 > 图像 > 选择PicGo-Cor…

基于java+springboot+vue实现的物流管理系统(文末源码+Lw)208

摘 要 社会发展日新月异&#xff0c;用计算机应用实现数据管理功能已经算是很完善的了&#xff0c;但是随着移动互联网的到来&#xff0c;处理信息不再受制于地理位置的限制&#xff0c;处理信息及时高效&#xff0c;备受人们的喜爱。本次开发一套物流管理系统有管理员和用户…