微服务-Nacos(注册中心)

Nacos是SpringCloud的一个功能非常强大的组件,想比eureka的功能更加丰富

官方的nacos简介

Nacos(全称:Naming and Configuration Service)是一个开源的动态服务发现、配置管理和服务管理平台。它由阿里巴巴集团开发并贡献给开源社区,旨在帮助开发者更好地构建和管理微服务架构。

Nacos提供了以下核心功能:

  1. 服务发现和注册:Nacos充当了服务注册中心的角色,允许开发者方便地注册、发现和管理微服务实例。它使用了一致性哈希算法来实现服务的负载均衡,并提供了多种方式来进行服务的发现和调用。

  2. 动态配置管理:Nacos可以集中管理应用程序的配置信息。开发者可以使用Nacos动态地更新和发布配置,而无需重新部署或重启应用程序。这样可以提高配置的灵活性和可维护性,同时减少了配置管理的复杂性。

  3. 服务健康监测:Nacos可以监测和报告微服务的健康状态。它可以定期进行心跳检查,并通过心跳数据来判断服务是否可用。当某个服务不可用时,Nacos可以及时发出警报,并协助进行故障排查和恢复。

  • 动态路由和负载均衡:Nacos提供了动态路由和负载均衡的功能,使开发者可以灵活地管理和调整请求的路由策略。它支持基于权重、一致性哈希和最少活跃数等多种负载均衡算法,同时也可以与其他开源组件(如Nginx和OpenResty)集成。

        总而言之,Nacos提供了一套完整的微服务基础设施,帮助开发者更好地构建、管理和调整微服务架构。它具有开源、易用、高可用和可扩展等特点,在业界得到了广泛的应用和认可。

Nacos安装

Windows安装

  • 下载安装包

在Nacos的GitHub页面,提供有下载链接,可以下载编译好的Nacos服务端或者源代码:

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

GitHub的Release下载页:Releases · alibaba/nacos · GitHub

  • 解压(任意的非中文目录)
  • 端口配置
  • Nacos的默认端口是8848,如果你电脑上的其它进程占用了8848端口,进入nacos的conf目录中进行修改
  • 启动(进入bin目录)

打开cmd执行命令:

startup.cmd -m standalone
  •  访问(http://127.0.0.1:8848/nacos )账号密码都是nacos

Linux安装

  • 安装jdk

在java官网可以下载jdk的jar包,将下载好的jar包上传到某个目录(例如/user/local/)

解压后重命名为java

tar -xvf jdk-8u144-linux-x64.tar.gz

配置环境变量:

export JAVA_HOME=/usr/local/java
export PATH=$PATH:$JAVA_HOME/bin

设置环境变量:

source /etc/profile
  • 上传安装包

上传到Linux服务器的某个目录(例如:/user/local/src)

  • 解压

命令解压压缩安装包

tar -xvf nacos-server-1.4.1.tar.gz

删除安装包:

rm -rf nacos-server-1.4.1.tar.gz
  • 端口配置
  • 启动
sh startup.sh -m standalone

SpringCloud引入nacos

1.在父工程中引入对应的依赖:

<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.注释掉原来AB服务中的eureka依赖

3.在nacos客户端引入相应的依赖:

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

4.修改A、B服务中的yml文件,注释掉eureka地址,添加nacos地址

spring:cloud:nacos:server-addr: nacos:8848 # nacos服务地址

总结:

1.Nacos服务搭建

  • 下载安装包
  • 解压
  • 在bin目录下运行指令:startup.cmd -m standalone

2.Nacos服务注册或发现

  • 引入nacos.discovery依赖
  • 配置nacos地址spring.cloud.nacos.server-addr

Nacos服务分级存储模型

 服务集群属性

1.修改对应服务的yml文件,添加如下内容

spring:cloud:nacos:server-addr: nacos:8848 # nacos服务地址discovery:cluster-name:SM #配置集群名称,也就是说机房的位置

总结:

1.Nacos服务分级存储模型

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

2.如何设置实例的集群属性

  • 修改对应的yml文件,添加spring.cloud.nacos.discovery.cluster-name属性即可

        在我们生产的过程中,负载均衡肯定是优先找离自己最近的服务(相同的集群),那么我们在Spring中该如何配置去优先寻找与自己同集群的服务呢?

根据集群进行负载均衡

1.修改A服务中的yml文件,设置集群为SM

spring:cloud:nacos:server-addr: nacos:8848 # nacos服务地址discovery:cluster-name: SM

2.在A服务中设置负载均衡的IRule为NacosRule,这个规则会优先找与自己同集群的服务

userservice:ribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRul

根据权重进行负载均衡

       在实际的应用时,我们会遇到这样的情况,有些服务器设备差,我们希望它承担用户请求少一点,有的服务器设备好,我们希望它承担的用户请求多一点

Nacos支持权重配置来控制访问频率,权重越大则访问频率越高[0,1]

环境隔离-namespace

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

 在Nacos控制台可以创建namespace,用来隔离不同的环境(命名空间->新建命名空间)

 cluster-name: SMdiscovery:#命名空间IDnamespace: 4d6ce343-9e1b-44df-a90f-2cf2b6b3d177 # dev环境

每个隔离环境都有唯一的id         不同的环境下的服务互相不可见

Nacos注册中心原理

 我们可以设置该服务是否是临时实例:

spring:cloud:nacos:discovery:ephemeral: false # 是否是临时实例

临时实例宕机时,会从nacos的服务列表中剔除,而非临时实例则不会


Nacos和eureka的共同担点:

  • 都支持服务注册和服务拉取
  • 都支持服务提供者心跳方式做健康检测

Nacos与Eureka的区别:

  • Nacos支持服务端主动检测提供者的状态:临时实例采用心跳模式,非临时实例采用主动检测模式
  • 临时实例心跳不正常会被剔除,非临时实例则不会被剔除
  • Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
  • Nacos集群默认采用的是ap模式(一致性较弱,可用性较强),当集群当存在非临时实例时,采用cp模式(一致性较强,可用性较弱),Eureka采用ap模式

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

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

相关文章

【设计模式——学习笔记】23种设计模式——策略模式Strategy(原理讲解+应用场景介绍+案例介绍+Java代码实现)

文章目录 案例引入传统方案实现实现分析 介绍基本介绍登场角色 案例实现案例一类图实现 案例二类图实现问答 策略模式在JDK源码中的使用总结文章说明 案例引入 有各种鸭子&#xff0c;比如野鸭、北京鸭、水鸭等。 鸭子有各种行为&#xff0c;比如走路、叫、飞行等。不同鸭子的…

安防监控视频云存储EasyCVR平台H.265转码功能更新:新增分辨率配置

安防视频集中存储EasyCVR视频监控综合管理平台可以根据不同的场景需求&#xff0c;让平台在内网、专网、VPN、广域网、互联网等各种环境下进行音视频的采集、接入与多端分发。在视频能力上&#xff0c;视频云存储平台EasyCVR可实现视频实时直播、云端录像、视频云存储、视频存储…

C++ string类详解

⭐️ string string 是表示字符串的字符串类&#xff0c;该类的接口与常规容器的接口基本一致&#xff0c;还有一些额外的操作 string 的常规操作&#xff0c;在使用 string 类时&#xff0c;需要使用 #include <string> 以及 using namespace std;。 ✨ 帮助文档&…

【HarmonyOS】服务卡片 API6 JSUI跳转不同页面

【引言】 “JS卡片支持为组件设置action&#xff0c;包括router事件和message事件&#xff0c;其中router事件用于应用跳。若设置router事件&#xff0c;则action属性值为"router"&#xff1b;abilityName为卡片提供方应用的跳转目标Ability名&#xff1b;params中的…

Spring Security6 最新版配置该怎么写,该如何实现动态权限管理

Spring Security 在最近几个版本中配置的写法都有一些变化&#xff0c;很多常见的方法都废弃了&#xff0c;并且将在未来的 Spring Security7 中移除&#xff0c;因此又补充了一些新的内容&#xff0c;重新发一下&#xff0c;供各位使用 Spring Security 的小伙伴们参考。 接下…

LeetCode--HOT100题(33)

目录 题目描述&#xff1a;148. 排序链表&#xff08;中等&#xff09;题目接口解题思路代码 PS: 题目描述&#xff1a;148. 排序链表&#xff08;中等&#xff09; 给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 LeetCode做题链接&#xff1…

VR/AR眼镜方案,MTK联发科平台智能眼镜安卓主板设计方案

随着人工智能在不同领域的逐渐深入&#xff0c;人们对一款产品的需求不再局限于某种单一的功能或单一场景&#xff0c;尤其是在工业医疗等专业领域&#xff0c;加快数字化转型才能实现产业的升级。 AR智能眼镜&#xff0c;是一个可以让现场作业更智能的综合管控设备。采用移动…

Hlang--用Python写个编程语言-函数与基本数据结构实现

文章目录 前言语法表述解析器修改词法解析函数节点函数节点解析List的解析实现解释器节点函数操作String和List处理总结前言 okey,经过一段时间的努力,接下来要实现的是函数。当然还有对应的基本数据结构,那么之后的话,我们的工作就开始进一步转换了。 那么在这块我们要实…

vscode搭建java开发环境

一、配置extensions环境变量VSCODE_EXTENSIONS 该环境变量路径下的存放安装组件&#xff1a; 二、setting配置文件 {"java.jdt.ls.java.home": "e:\\software\\jdk\\jdk17",// java运行环境"java.configuration.runtimes": [{"name":…

vscode远程连接Linux失败,提示过程试图写入的管道不存在(三种解决办法)

vscode报错如下&#xff1a; 一、第一种情况 原因是本地的known_hosts文件记录服务器信息与现服务器的信息冲突了&#xff0c;导致连接失败。 解决方案就是把本地的known_hosts的原服务器信息全部删掉&#xff0c;然后重新连接。 二、第二种情况 在编写配置文件config时&…

批量提取文件名到excel,详细的提取步骤

如何批量提取文件名到excel&#xff1f;我们的电脑中可能存储着数量非常多的电子文件&#xff0c;现在需要快速将这些文件的名称全部提取到Excel中。虽然少量数据可以通过复制粘贴的方式轻松完成&#xff0c;但是对于上万个数据而言&#xff0c;复制粘贴都是行不通的&#xff0…

XQuery创建BaseX数据库实例

XQuery创建BaseX数据库实例 文章目录 XQuery创建BaseX数据库实例1、准备工作2、demo目录结构3、IDEA配置BaseX4、工具类BaseXClient5、Example 1、准备工作 开发工具&#xff1a; IDEAOxygen 技术&#xff1a; JavaBaseXXpathXquery BaseX需要阅读的文档&#xff1a; htt…

centos安装elasticsearch7.9

安装es 下载elasticsearch安装包解压安装包,并修改配置文件解压进入目录修改配置文件 添加用户&#xff0c;并修改所有者切换用户&#xff0c;运行es如何迁移旧版本的数据 下载elasticsearch安装包 下载地址如下&#xff0c;版本号可以替换成自己想要的。 这里需要注意一点&am…

[Java优选系列第2弹]SpringMVC入门教程:从零开始搭建一个Web应用程序

想和你们分享我眼里的代码世界&#x1f5fa;️ 优选系列持续更新中&#x1f4ab; 一直在等你&#xff0c;你终于来啦&#x1f496; 绿色代表解释说明 黄色代表重点 红色代表精髓 SpringMVC是一个基于Java的Web框架&#xff0c;它使用了MVC&…

AI问答:JSBridge / WebView 与 Native 通信

一、理解JSBridge JSBridge是一种连接JavaScript和Native代码的桥梁&#xff0c;它提供了一种方法&#xff0c;使得JavaScript可以直接调用Native的代码&#xff0c;同时使得Native的代码也能直接调用JavaScript的方法&#xff0c;从而实现了JavaScript和Native之间的相互调用和…

LeetCode——二叉树篇(四)

刷题顺序及思路来源于代码随想录&#xff0c;网站地址&#xff1a;https://programmercarl.com 二叉树的定义及创建见&#xff1a; LeetCode ACM模式——二叉树篇&#xff08;一&#xff09;_要向着光的博客-CSDN博客 目录 101. 对称二叉树 递归 使用队列 100. 相同的树 …

无涯教程-Perl - setnetent函数

描述 该函数应在第一次调用getnetent之前调用。 STAYOPEN参数是可选的,在大多数系统上未使用。当getnetent()从网络数据库的下一行检索信息时,setnetent会将枚举设置(或重置)为主机条目集的开头。 语法 以下是此函数的简单语法- setnetent STAYOPEN返回值 此函数不返回任何…

如何使用Redis实现附近商家查询

导读 在日常生活中&#xff0c;我们经常能看见查询附近商家的功能。 常见的场景有&#xff0c;比如你在点外卖的时候&#xff0c;就可能需要按照距离查询附近几百米或者几公里的商家。 本文将介绍如何使用Redis实现按照距离查询附近商户的功能&#xff0c;并以SpringBoot项目…

H13-922题库 HCIP-GaussDB-OLAP V1.5

**H13-922 V1.5 GaussDB(DWS) OLAP题库 华为认证GaussDB OLAP数据库高级工程师HCIP-GaussDB-OLAP V1.0自2019年10月18日起&#xff0c;正式在中国区发布。当前版本V1.5 考试前提&#xff1a; 掌握基本的数据库基础知识、掌握数据仓库运维的基础知识、掌握基本Linux运维知识、…