当前位置: 首页 > news >正文

【SpringCloud组件——Nacos】

前置准备:

分别提供订单系统(OrderService)和用户系统(UserService)。订单系统主要负责订单相关信息的处理,用户系统主要负责用户相关信息的处理。

一、服务注册与发现

1.1、在父工程当中引入Nacos依赖

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

 1.2、修改配置文件

  cloud:nacos:server-addr: localhost:8849 #nacos服务地址

 1.3、Nacos服务分级存储

 Nacos服务分级存储的主旨是:服务尽可能的调用本地集群提供的服务,跨集群调用延迟较高,本地集群提供的服务不可用时,再去访问其他集群提供的服务。

什么意思呢?看图:

左边为一个集群(HZ),右边也是一个集群(SH),两个集群内部都存在orderService和userService,当某个集群(HZ)的orderService调用userService时,会先查看本集群(HZ)是否提供该服务,提供则直接调用,不提供则调用其它集群(SH)的userService进行远程调用。 

如何设置集群属性?

在nacos配置项下面添加如下属性即可

        discovery:cluster-name: HZ #集群名称:这里HZ代指杭州

 总结:

1.4、NacosRule负载均衡

       将orderService注册到HZ集群,userService1和userService2注册到HZ集群,userService3注册到上海集群,按照1.3的描述,orderService会优先调用本集群提供的服务,即userService1和userService2,但是经过测试,在三个userService都无故障的情况下,三个服务都被orderService调用了,这又是为什么?负载均衡规则需要采用NacosRule!

userservice:ribbon:NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule #针对某微服务设置其负载均衡规则

NacosRule:优先选择本地集群,再在本机集群采用随机的方式选择服务实例。 

1.5、Nacos根据权重负载均衡

 

 

说明:刚注册的实例默认权重为1,按照上图,将8081的权重设为0.1,随后使用orderService连续调用userService,两个实例的访问比例就会趋近于权重比值。

小技巧:当我们对某服务进行更新上线时,可以先将更新后的实例权重调成0,进行服务注册后设的较小一些,观察其是否出现BUG等问题,等观察一段时间后发现没有出现什么问题的时候,就可以将该实例的权重调的大一些,将其他实例的权重调的小一些(例如:0),这样做的目的在于逐个实例完成更新,这样就可以实现用户无感知的系统更新。

1.6、Nacos环境隔离 

环境隔离的主要作用:将dev、prod、test环境下的服务区分开来。 

 2.在配置文件当中配置环境ID

在Nacos配置下配置如下属性:

        discovery:namespace: 1bed7a99-086a-4766-a66f-891b508468b7 #指定空间

  

二、Nacos和Rureka对比

 Nacos和Eureka异同:

同:

1、消费者会将拉取到的服务列表缓存到本地,后续使用直接从缓存当中取

2、消费者会定期拉取最新的服务列表(每隔30s)

异:

3、Nacos会把服务的提供者划分为临时实例和非临时实例。

①临时实例:会主动向Nacos发送心跳检测,告知Nacos自己的健康状态,一旦不发了,nacos就会默认你宕机了,就会将你从服务列表剔除。(和Eureka完全一致)

②非临时实例:nacos主动发请求询问非临时实例的健康状态,一旦某天非临时实例真的挂掉了,nacos也不会将他剔除掉,而是将其标记为不健康,等待该实例健康乐再对外提供服务。

4、在消费者拉取玩服务列表的这段时间里,一旦Nacos发现某个服务的实例挂了,nacos会立即将服务列表变更推送给消费者。

 如何设置临时实例和非临时实例:

在配置文件的nacos配置当中添加如下属性:

ephemeral: false #是否是临时实例

三、配置中心

3.1、统一配置管理

在以往的开发过程当中,我们习惯性的将系统的配置都写在配置文件当中,一旦某项配置发生变更时,我们以往采取的做法是在配置文件当中逐个进行修改。Nacos提供了配置管理,我们只需要在代码当中获取其配置即可,后续配置信息一旦发生改变,我们也无需在代码层面进行任何修改,而是由nacos告知系统配置发生了改变,并采用新的配置。

3.1.1、新建配置

 Data ID:服务名称-配置环境(dev、test、prod).yaml(或properties)

3.1.2、读取Nacos上的配置文件

问题引出及解决:

SpringBoot启动时会先读取Nacos上的配置文件,再读取本地的配置文件,两者进行结合进行使用,我们遇到的问题是什么呢?我们不读取本地配置文件如何知道Nacos的地址呢?SpringBoot有一个比application更优先执行的配置文件-》bootstrap.yml文件,将nacos的地址信息配置在这个文件当中即可。

spring:application:name: userservice #服务名称profiles:active: dev #环境cloud:nacos:server-addr: localhost:80config:file-extension: yaml #文件格式

3.1.3、引入nacos配置管理依赖

        <!--nacos配置管理依赖--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency>

 3.1.4、从nacos当中读取配置

    @Value("${pattern.dateformat}")public String dateformat;@GetMapping("/now")public String now(){return LocalDateTime.now().format(DateTimeFormatter.ofPattern(properties.dateformat));}

3.2、配置热更新

 

 

3.3、多环境配置共享

微服务启动时会从nacos读取多个配置文件:

  • 【spring.application.name】-【spring.profiles.acive】.yaml(例如:userservice-dev.yaml)
  • 【spring.application.name】.yaml(例如:userservice.yaml)

无论profiles如何变化,【spring.application.name】.yaml这个配置文件一定会加载,因此多环境共享配置文件可以写入这个文件。

特殊情况:

1、假设在userservice-dev.yaml和userservice.yaml当中存在相同的配置,那么会读取谁的配置进行使用呢?

结论1:userservice-dev.yaml配置的优先级>userservice.yaml配置的优先级

2、假设在userservice.yaml和本地配置当中也存在相同的配置,又会读取谁的配置进行使用呢?

结论2:userservice.yaml配置的优先级>本地配置的优先级

四、Nacos集群

 参考:Nacos集群的搭建过程详解

相关文章:

【SpringCloud组件——Nacos】

前置准备&#xff1a; 分别提供订单系统&#xff08;OrderService&#xff09;和用户系统&#xff08;UserService&#xff09;。订单系统主要负责订单相关信息的处理&#xff0c;用户系统主要负责用户相关信息的处理。 一、服务注册与发现 1.1、在父工程当中引入Nacos依赖 …...

pinia状态管理 用法

Pinia是一个用于vue的状态管理库&#xff0c;类似于vuex,是vue的另一种状态管理工具。 Pinia 是 Vue 的存储库&#xff0c;它允许跨组件/页面共享状态。实际上&#xff0c;Pinia就是Vuex的升级版&#xff0c;官网也说过&#xff0c;为了尊重原作者&#xff0c;所以取名pinia&am…...

Oracle客户端版本安装

一、版本准备 Oracle版本下载官网&#xff1a;Instant Client for Linux x86-64 (64-bit) | Oracle 中国 进入网站下载对应的oracle版本&#xff0c;通常环境所用的包有&#xff1a;basic、sdk、sdkplus三个包。包的类型分为rpm和zip包&#xff0c;均可以下载&#xff0c;当前…...

基于Android studio二手车交易系统app

客户端&#xff1a; 用户注册&#xff1a;通过输入用户名&#xff0c;密码&#xff0c;所在地&#xff0c;联系地址以及电话和电子邮件等信息进行用户信息的注册。 二手车查看&#xff1a;用户注册登录系统后&#xff0c;可以查看二手车的基本信息&#xff0c;通过二手车的品牌…...

【LCD应用编程】绘制点、线、矩形框

之前获取LCD屏幕参数信息时了解到&#xff0c;LCD屏是 FrameBuffer 设备&#xff0c;操作 FrameBuffer 设备 其实就是在读写 /dev/fb0 文件。除此之外&#xff0c;LCD屏上包含多个像素点&#xff0c;绘制点、线、矩形框本质是在修改这些像素点的颜色。 目录 1、定义 lcd_color…...

第八篇、基于Arduino uno,获取MAX30102心率传感器的心率信息——结果导向

0、结果 说明&#xff1a;先来看看串口调试助手显示的结果&#xff0c;第一个值是原始的IR值&#xff0c;第二个值是实时的心跳&#xff0c;第三个值是平均心跳&#xff0c;如果是你想要的&#xff0c;可以接着往下看。 1、外观 说明&#xff1a;MAX30102心率传感器的外观如下…...

【MySQL】MySQL主从同步延迟原因与解决方案

文章目录 一、MySQL数据库主从同步延迟产生的原因二、关于DDL和DML三、主从延时排查方法四、解决方案3.1 解决从库复制延迟的问题&#xff1a;3.2 MySql数据库从库同步其他问题及解决方案 一、MySQL数据库主从同步延迟产生的原因 MySQL的主从复制都是单线程的操作&#xff0c;…...

学C的第二十二天【深度剖析数据在内存中的存储:1. 数据类型介绍;2. 整型在内存中的存储】

相关代码gitee自取&#xff1a;C语言学习日记: 加油努力 (gitee.com) 接上期&#xff1a;学C的第二十一天【初阶测评讲解&#xff1a;1. 计算递归了几次&#xff1b;2. 判断 do while 循环执行了几次&#xff1b;3. 求输入的两个数的最小公倍数&#xff1b;4. 将一句话的单词进…...

测试计划模板一

测试计划 修订历史记录 版本        日期       AMD       修订者      说明      1.0 XXXX年XX月XX (A-添加,M-修改,D-删除) 目录 1. 简介.. 4 1. 1目的... 4 1. 2背景... 4...

【利用AI让知识体系化】5种创建型模式

文章目录 创建型模式简介工厂模式抽象工厂模式单例模式建造者模式原型模式 创建型模式 简介 创建型模式&#xff0c;顾名思义&#xff0c;是用来创建对象的模式。在软件开发中&#xff0c;对象的创建往往比一般的编程任务更为复杂&#xff0c;可能涉及到一些琐碎、复杂的过程…...

Unity的UnityStats: 属性详解与实用案例

UnityStats 属性详解 UnityStats 是 Unity 引擎提供的一个用于监测游戏性能的工具&#xff0c;它提供了一系列的属性值&#xff0c;可以帮助开发者解游戏的运行情况&#xff0c;从而进行优化。本文将详细介绍 UnityStats 的每个属性值&#xff0c;并提供多个使用例子帮助开发者…...

TDengine集群搭建

我这里用三台服务器搭建集群 1、如果搭建集群的物理节点上之前安装过TDengine先卸载清空&#xff0c;直接执行以下4条命令 rmtaos rm -rf /var/lib/taos rm -rf /var/log/taos rm -rf /etc/taos2、确保集群中所有主机开放端口 6030-6043/tcp&#xff0c;6060/tcp&#xff0c;…...

Android 12.0无源码apk设置默认启动Launcher的相关属性

1.概述 在12.0的系统产品开发中,对于一些产品的需求,需要将一些无源码app的某个MainActivity作为启动Launcher页面的功能实现,由于没有源码,所以需要 利用PMS的安装解析apk的AndroidManifest.xml的时候,在判断是某个Activity的时候,设置Lancher属性来实现某些功能 2.无源…...

js深拷贝和浅拷贝

&#x1f449;十分钟学会 前端面试题 js 深拷贝与浅拷贝_前端深拷贝和浅拷贝面试题_Mar-30的博客-CSDN博客 目录 背景&#xff1a; 概念&#xff1a;核心是创建新地址 方法&#xff1a; 浅拷贝&#xff1a; Object.assign() 方法&#xff1a;Object.assign(拷贝的对象&am…...

CANopenNode Master 配置

文章目录 CANopenNode 简介CANopenNode 主栈SDO ClientPDO 通讯参数RPDO 通讯参数RPDO 通信参数设置实例TPDO 通讯参数TPDO 通信参数设置实例 PDO 映射参数RPDO 映射参数设置实例TPDO 映射参数设置实例 CANopenNode 简介 CANopenNode 是一个开源的免费的开源 CANopen 协议栈。…...

HW之轻量级内网资产探测漏洞扫描工具

简介 RGPScan是一款支持弱口令爆破的内网资产探测漏洞扫描工具&#xff0c;集成了Xray与Nuclei的Poc 工具定位 内网资产探测、通用漏洞扫描、弱口令爆破、端口转发、内网穿透、SOCK5 主机[IP&域名]存活检测&#xff0c;支持PING/ICMP模式 端口[IP&域名]服务扫描 网…...

算法练习-2:送外卖

n 个小区排成一列&#xff0c;编号为从 0 到 n-1 。一开始&#xff0c;美团外卖员在第0号小区&#xff0c;目标为位于第 n-1 个小区的配送站。 给定两个整数数列 a[0]~a[n-1] 和 b[0]~b[n-1] &#xff0c;在每个小区 i 里你有两种选择&#xff1a; 1) 选择a&#xff1a;向前 a[…...

八股总结(六):Android基础:四大组件与UI控件

文章目录 Activity一个APP的启动过程基本概念总图zygote是什么&#xff1f;有什么作用&#xff1f;SystemServer是什么&#xff1f;有什么用&#xff0c;与zygote的关系是什么&#xff1f;为什么称为服务端对象&#xff1f;APP、AMS、zygote是三个独立的进程&#xff0c;他们之…...

【P46】JMeter 响应断言(Response Assertion)

文章目录 一、响应断言&#xff08;Response Assertion&#xff09; 参数说明二、准备工作三、测试计划设计3.1、包括3.2、匹配3.3、相等3.4、字符串3.5、字符串3.6、或者 一、响应断言&#xff08;Response Assertion&#xff09; 参数说明 可以对 Jmeter 取样器的响应消息进…...

19-02 基于业务量级的架构技术选型演进

从零开始——单服务应用 单体应用技术选型 &#xff08;GitHub、Gitee…&#xff09;搜索是否有线程的产品用最熟悉的技术&#xff0c;最快的速度上线如果有经费&#xff1a;考虑商业化解决方案 个人小程序怎么做技术选型的 搜索是否有快速搭建下程序的软件技术选型 后端技…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

stm32G473的flash模式是单bank还是双bank?

今天突然有人stm32G473的flash模式是单bank还是双bank&#xff1f;由于时间太久&#xff0c;我真忘记了。搜搜发现&#xff0c;还真有人和我一样。见下面的链接&#xff1a;https://shequ.stmicroelectronics.cn/forum.php?modviewthread&tid644563 根据STM32G4系列参考手…...

centos 7 部署awstats 网站访问检测

一、基础环境准备&#xff08;两种安装方式都要做&#xff09; bash # 安装必要依赖 yum install -y httpd perl mod_perl perl-Time-HiRes perl-DateTime systemctl enable httpd # 设置 Apache 开机自启 systemctl start httpd # 启动 Apache二、安装 AWStats&#xff0…...

【位运算】消失的两个数字(hard)

消失的两个数字&#xff08;hard&#xff09; 题⽬描述&#xff1a;解法&#xff08;位运算&#xff09;&#xff1a;Java 算法代码&#xff1a;更简便代码 题⽬链接&#xff1a;⾯试题 17.19. 消失的两个数字 题⽬描述&#xff1a; 给定⼀个数组&#xff0c;包含从 1 到 N 所有…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

Java多线程实现之Callable接口深度解析

Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...

Python爬虫(二):爬虫完整流程

爬虫完整流程详解&#xff08;7大核心步骤实战技巧&#xff09; 一、爬虫完整工作流程 以下是爬虫开发的完整流程&#xff0c;我将结合具体技术点和实战经验展开说明&#xff1a; 1. 目标分析与前期准备 网站技术分析&#xff1a; 使用浏览器开发者工具&#xff08;F12&…...

WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)

一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解&#xff0c;适合用作学习或写简历项目背景说明。 &#x1f9e0; 一、概念简介&#xff1a;Solidity 合约开发 Solidity 是一种专门为 以太坊&#xff08;Ethereum&#xff09;平台编写智能合约的高级编…...

Linux离线(zip方式)安装docker

目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1&#xff1a;修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本&#xff1a;CentOS 7 64位 内核版本&#xff1a;3.10.0 相关命令&#xff1a; uname -rcat /etc/os-rele…...

消防一体化安全管控平台:构建消防“一张图”和APP统一管理

在城市的某个角落&#xff0c;一场突如其来的火灾打破了平静。熊熊烈火迅速蔓延&#xff0c;滚滚浓烟弥漫开来&#xff0c;周围群众的生命财产安全受到严重威胁。就在这千钧一发之际&#xff0c;消防救援队伍迅速行动&#xff0c;而豪越科技消防一体化安全管控平台构建的消防“…...