【SpringCloud】Nacos 注册中心

目 录

  • 一.认识和安装 Nacos
    • 1.Windows安装
      • 1. 下载安装包
      • 2. 解压
      • 3. 端口配置
      • 4. 启动
      • 5. 访问
    • 2.Linux安装
      • 1. 安装JDK
      • 2. 上传安装包
      • 3. 解压
      • 4. 端口配置
      • 5. 启动
  • 二.服务注册到 nacos
    • 1. 引入依赖
    • 2. 配置 nacos 地址
    • 3. 重启
  • 三.服务分级存储模型
    • 1. 给 user-service 配置集群
    • 2. 同集群优先的负载均衡
  • 四.权重配置
  • 五.环境隔离
  • 六.Nacos 与 Eureka 的区别

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

一.认识和安装 Nacos

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

在这里插入图片描述

1.Windows安装

开发阶段采用单机安装即可。

1. 下载安装包

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

GitHub 主页:https://github.com/alibaba/nacos 点击跳转

GitHub 的 Release 下载页:https://github.com/alibaba/nacos/releases 点击跳转

进入到 Release 下载页之后 可以点击 Tags 就能查看到相应的版本了

在这里插入图片描述

此处我下载的是 1.4.1 版本的 Nacos

2. 解压

将这个包解压到任意非中文目录下,如图:

在这里插入图片描述

目录说明:

  • bin:启动脚本
  • conf:配置文件

3. 端口配置

Nacos 的默认端口是 8848,如果你电脑上的其它进程占用了 8848 端口,请先尝试关闭该进程。

如果无法关闭占用 8848 端口的进程,也可以进入 nacos 的 conf 目录,修改配置文件中的端口:

在这里插入图片描述

修改其中的内容:

在这里插入图片描述

4. 启动

启动非常简单,进入 bin 目录,结构如下:

在这里插入图片描述

然后执行命令即可:

  • windows 命令:

.\startup.cmd -m standalone

执行后的效果如图:

在这里插入图片描述

5. 访问

在浏览器输入地址:http://127.0.0.1:8848/nacos 即可:

在这里插入图片描述

默认的账号和密码都是 nacos,进入后:

在这里插入图片描述

2.Linux安装

Linux 或者 Mac 安装方式与 Windows 类似。

1. 安装JDK

Nacos 依赖于 JDK 运行,索引 Linux 上也需要安装 JDK 才行。

上传 jdk 安装包:

在这里插入图片描述

上传到某个目录,例如:/usr/local/

然后解压缩:

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

然后重命名为java

配置环境变量:

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

设置环境变量:

source /etc/profile

2. 上传安装包

如图:

在这里插入图片描述

上传到 Linux 服务器的某个目录,例如 /usr/local/src 目录下:

在这里插入图片描述

3. 解压

命令解压缩安装包:

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

然后删除安装包:

rm -rf nacos-server-1.4.1.tar.gz

目录中最终样式:

在这里插入图片描述

目录内部:

在这里插入图片描述

4. 端口配置

与 windows 中类似

5. 启动

在 nacos/bin 目录中,输入命令启动 Nacos:

sh startup.sh -m standalone

二.服务注册到 nacos

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

主要差异在于:

  • 依赖不同
  • 服务地址不同

1. 引入依赖

在 cloud-demo 父工程的 pom 文件中的 <dependencyManagement> 中引入 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. 配置 nacos 地址

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

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

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

3. 重启

重启微服务后,登录 nacos 管理页面,可以看到微服务信息:

在这里插入图片描述

总结:

  1. Nacos服务搭建
  • 下载安装包
  • 解压
  • 在 bin 目录下运行指令:.\startup.cmd -m standalone
  1. Nacos 服务注册或发现
  • 引入 nacos.discovery 依赖
  • 配置 nacos 地址 spring.cloud.nacos.server-addr

三.服务分级存储模型

一个服务可以有多个实例,例如我们的 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。

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

配置如图所示:

在这里插入图片描述

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

在这里插入图片描述

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

默认的ZoneAvoidanceRule并不能实现根据同集群优先来实现负载均衡。

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

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

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

spring:cloud:nacos:server-addr: localhost:8848discovery:cluster-name: HZ # 集群名称
  1. 修改负载均衡规则

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

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

总结:

  1. NacosRule 负载均衡策略
  • 优先选择同集群服务实例列表
  • 本地集群找不到提供者,才去其它集群寻找,并且会报警告
  • 确定了可用实例列表后,再采用随机负载均衡挑选实例

四.权重配置

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

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

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

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

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

在这里插入图片描述

在弹出的编辑窗口,修改权重:

在这里插入图片描述

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

总结:

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

五.环境隔离

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

  • nacos 中可以有多个 namespace
  • namespace 下可以有 group、service 等
  • 不同 namespace 之间相互隔离,例如不同 namespace 的服务互相不可见

在这里插入图片描述

  1. 创建 namespace

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

在这里插入图片描述

我们可以点击页面新增按钮,添加一个namespace:

在这里插入图片描述

然后,填写表单:

在这里插入图片描述

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

在这里插入图片描述

  1. 给微服务配置 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,控制台会报错:

在这里插入图片描述

总结:

  1. Nacos环境隔离
  • 每个 namespace 都有唯一id
  • 服务设置 namespace 时要写 id 而不是名称
  • 不同 namespace 下的服务互相不可见

六.Nacos 与 Eureka 的区别

Nacos 的服务实例分为两种类型:

  • 临时实例:如果实例宕机超过一定时间,会从服务列表剔除,默认的类型。

  • 非临时实例:如果实例宕机,不会从服务列表剔除,也可以叫永久实例。

配置一个服务实例为永久实例:

spring:cloud:nacos:discovery:ephemeral: false # 设置为非临时实例

Nacos 和 Eureka 整体结构类似,服务注册、服务拉取、心跳等待,但是也存在一些差异:

在这里插入图片描述

  • Nacos 与 eureka 的共同点

    • 都支持服务注册和服务拉取
    • 都支持服务提供者心跳方式做健康检测
  • Nacos 与 Eureka 的区别

    • Nacos 支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
    • 临时实例心跳不正常会被剔除,非临时实例则不会被剔除
    • Nacos 支持服务列表变更的消息推送模式,服务列表更新更及时
    • Nacos 集群默认采用 AP 方式,当集群中存在非临时实例时,采用 CP 模式;Eureka 采用 AP 方式

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

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

相关文章

JavaWeb前端基础(HTML CSS JavaScript)

本文用于检验学习效果&#xff0c;忘记知识就去文末的链接复习 1. HTML 1.1 HTML基础 结构 头<head>身体<body> 内容 图片<img>段落<p>图标<link> 标签 单标签双标签 常用标签 div&#xff1a;分割块span&#xff1a;只占需要的大小p&…

Jones矩阵符号运算

文章目录 Jones向量Jones矩阵 有关Jones矩阵、Jones向量的基本原理&#xff0c;可参考这个&#xff1a; 通过Python理解Jones矩阵&#xff0c;本文主要介绍sympy中提供的有关偏振光学的符号计算工具 Jones向量 Jones向量是描述光线偏振状态的重要工具&#xff0c;例如一个偏振…

LINUX上,用命令cmake编译CLion项目

原来CLion项目是远程到开发板上进行编译&#xff0c;十分方便。现在想在虚拟机环境中编译&#xff0c;更加方便。于是进行了一番研究&#xff0c;还挺简单。 默认编译选项 搜索到的编译命令如下&#xff0c;不适合我的项目。 cmake -B${CMAKE_DIR} -H. 我的编译命令 开始编…

从三个维度看,你的企业是否需要引入精益管理咨询?

在快速变化的商业环境中&#xff0c;企业不断寻求提升自身运营效率和竞争力的方法。其中&#xff0c;精益管理作为一种追求卓越、消除浪费的管理理念&#xff0c;被越来越多的企业所认可。但是&#xff0c;如何判断自己的组织是否需要进行精益企业管理咨询呢&#xff1f;天行健…

141.环形链表

题目描述 解题思路 ——————遍历链表&#xff0c;哈希表记录节点—————— 时间复杂度O(n)&#xff0c;空间复杂度O(n) 1.cur指针遍历链表&#xff0c;并且创建哈希表&#xff0c;用于记录节点的地址 2.每次遍历先判断地址是否在哈希表中&#xff0c;若在则直接返回…

java 方法参数类型为double 可以传 int类型?

在Java语言中&#xff0c;方法的参数类型定义了调用该方法时应传递的数据类型。当一个方法的参数类型被定义为double时&#xff0c;实际上可以向该方法传递一个int类型的参数。这是因为Java支持基本数据类型之间的自动类型转换&#xff08;也称为隐式类型转换&#xff09;&…

【漏洞复现】通天星CMSV6车载视频监控平台FTP匿名访问

Nx01 产品简介 通天星车载视频监控平台软件拥有多种语言版本&#xff0c;应用于公交车车载视频监控、校车车载视频监控、大巴车车载视频监控、物流车载监控、油品运输车载监控等公共交通上。 Nx02 漏洞描述 通天星车载视频监控平台安装完毕后会默认开放端口2121作为ftp服务使用…

多语言婚恋交友APP开发的关键成功因素

随着移动互联网的快速发展&#xff0c;多语言婚恋交友APP的需求和发展逐渐成为了一个备受关注的话题。在全球范围内&#xff0c;人们希望通过移动应用来寻找爱情、建立关系和拓展社交圈子&#xff0c;因此开发一款具有全球影响力的多语言婚恋交友APP成为了许多开发者的目标。针…

Java实现Excel百万级数据的导入(约30s完成)

前言 在遇到大数据量excel&#xff0c;50MB大小或数百万级别的数据读取时&#xff0c;使用常用的POI容易导致读取时内存溢出或者cpu飙升。 本文讨论的是针对xlsx格式的excel文件上传&#xff0c;采用com.monitorjbl.xlsx.StreamingReader 。 什么是StreamReader? StreamReader…

开源低代码平台概况和说明推荐

开源低代码平台是一类允许开发者通过图形化界面和预构建的代码块&#xff0c;而非传统的手动编程方式&#xff0c;来创建应用程序的工具。这些平台通常提供了丰富的功能和特性&#xff0c;帮助开发者更加高效地进行应用开发。 开源低代码平台的概况可以总结为以下几点&#xf…

蓝牙GAP与GATT

GAP 在BLE(蓝牙低功耗)技术中,GAP(Generic Access Profile)负责定义设备如何互相发现、建立连接以及管理连接的过程。GAP是BLE核心规范的一部分,它定义了设备在广播、扫描、连接和断开连接等基本行为上的通用访问方法。 以下是GAP的主要责任: 广播(Advertising): G…

【C++】背包问题

目录 背包问题01 背包背包不装满问题背包必须满问题 完全背包 背包问题 背包问题属于动态规划的一类题型 01 背包 背包不装满问题 背包必须满问题 #include <iostream> using namespace std; const int N 1010; #include <vector> int main() {int n , V;int v[…

【Ambari】Ansible自动化部署大数据集群

目录 一&#xff0e;版本说明和介绍信息 1.1 大数据组件版本 1.2 Apache Components 1.3 Databases支持版本 二&#xff0e;安装包上传和说明 三&#xff0e;服务器基础环境配置 3.1global配置修改 3.2主机名映射配置 3.3免密用户名密码配置 3.4 ansible安装 四. 安…

2024.4.1-[作业记录]-day06-认识 CSS(三大特性、引入方式)

个人主页&#xff1a;学习前端的小z 个人专栏&#xff1a;HTML5和CSS3悦读 本专栏旨在分享记录每日学习的前端知识和学习笔记的归纳总结&#xff0c;欢迎大家在评论区交流讨论&#xff01; day06-认识 CSS(三大特性、引入方式) 文章目录 day06-认识 CSS(三大特性、引入方式)作业…

实践笔记-03 docker buildx 使用

docker buildx 使用 1.启用docker buildx2.启用 binfmt_misc3.从默认的构建器切换到多平台构建器3.1创建buildkitd.toml文件&#xff08;私有仓库是http没有证书的情况下&#xff0c;需要配置&#xff09;3.2创建构建器并使用新创建的构建器 4.构建多架构镜像并推送至harbor仓库…

JVM—对象的创建流程与内存分配

JVM—对象的创建流程与内存分配 创建流程 对象创建的流程图如下&#xff1a; 对象的内存分配方式 内存分配的方式有两种&#xff1a; 指针碰撞&#xff08;Bump the Pointer&#xff09;空闲列表&#xff08;Free List&#xff09; 分配方式说明收集器指针碰撞&#xff08…

RIPv1和RIPv2的区别

RIP&#xff08;Routing Information Protocol&#xff09;是一种内部网关协议&#xff0c;用于在局域网或广域网中进行路由信息的传递。RIP有两个版本&#xff1a;RIPv1和RIPv2。以下是两者之间的主要区别&#xff1a; 子网掩码支持&#xff1a;RIPv2支持子网掩码的传送&…

嵌入式设备低功耗无线通信协议

嵌入式设备低功耗无线通信协议 随着物联网&#xff08;IoT&#xff09;技术的迅速发展&#xff0c;嵌入式设备之间的无线通信变得越来越重要。为了满足长时间运行、减少能源消耗以及实现更广泛的网络覆盖等需求&#xff0c;低功耗无线通信协议在嵌入式系统中扮演着举足轻重的角…

三防笔记本丨加固笔记本丨三防笔记本电脑赋能车辆检修

随着汽车数量的不断增加和交通运输行业的发展&#xff0c;车辆检修行业成为了保障交通安全和延长车辆寿命的重要领域。在车辆检修过程中&#xff0c;需要使用各种工具和设备来进行检测、维修和保养&#xff0c;而信息化技术的应用正逐渐渗透到这一行业中&#xff0c;为检修工作…

51单片机实验03-定时器T0来实现流水灯从左到右再从右到左

目录 一、实验目的 二、实验说明 1、51单片机有两个16位内部计数器/定时器&#xff08;C/T&#xff0c; Counter/Timer&#xff09;。 2、模式寄存器TMOD 1) M1M0工作模式控制位&#xff1b; 2) C/T定时器或计数器选择位&#xff1a; 3&#xff09;GATE定时器/计数器运行…