Nacos 注册中心下载到搭建详细步骤【微服务】

文章目录

    • 一、下载与安装
    • 二、Nacos 服务注册
      • 1. 引入依赖
      • 2. 修改配置文件
      • 3. 开启 Nacos 注解
      • 4. 启动项目
    • 三、Nacos 服务集群
      • 1. 模拟多实例部署
      • 2. 配置集群属性
      • 3. 服务权重配置
    • 四、Nacos 环境隔离
    • 五、Nacos 注册中心原理
      • 1. Nacos 与 Eureka 比较
      • 2. 配置非临时实例

一、下载与安装

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

百度网盘下载链接:https://pan.baidu.com/s/1XLn7hGp2bHBx7ICvKELtzQ?pwd=dju6

Nacos 官网下载:https://nacos.io/

在这里插入图片描述

① 点击前往 Github

在这里插入图片描述

Github 页面打不开的可以下一个加速器,我用的 Watt Toolkit, 很好用!

② 点击界面右侧的 releases

在这里插入图片描述

③ 点击 Tags 选择一个版本下载

在这里插入图片描述

④ 点击 download 之后往下滑,这里我们选择第二个 Windows 版本的开始下载

在这里插入图片描述

⑤ 下载完之后把它解压到一个非中文的目录中

在这里插入图片描述

⑥ 打开 bin 目录,双击 startup.cmd 文件即可启动 nacos,但是默认情况下 nacos 是以集群启动的,导致启动不成功。所以这里可以通过 startup.cmd -m standalone 命令来启动 nacos,standalone 就是单机启动的意思

在这里插入图片描述

在这里插入图片描述

⑦ 复制以下链接到浏览器打开,即可访问 Nacos

在这里插入图片描述

⑧ 默认账号和密码都是 nacos

在这里插入图片描述
在这里插入图片描述

二、Nacos 服务注册

对于项目的结构,参照本专栏的第一篇文章即可,我们依然在这个项目中进行修改。
传送门,点击这里
源码也打包好了:https://pan.baidu.com/s/1Zk0F699xABs3AmPbtr7DQA?pwd=po2e

1. 引入依赖

① 父工程中引入如下依赖

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.2.9.RELEASE</version><type>pom</type><scope>import</scope>
</dependency>

在这里插入图片描述

<dependency><!-- Spring Cloud loadbalancer 负载均衡--><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-loadbalancer</artifactId><version>3.1.7</version>
</dependency>

在这里插入图片描述

② 子工程中引入如下依赖

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

在这里插入图片描述

userserver 和 orderserver 同理!

2. 修改配置文件

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

在这里插入图片描述

3. 开启 Nacos 注解

启动类上添加 @EnableDiscoveryClient 注解。

在这里插入图片描述

4. 启动项目

将所有与 Eureka 相关的代码都删掉,启动项目前先启动 nacos 控制台!

启动项目的时候我发现报错了,应该是版本问题,我们之前使用的 SpringBoot 和 SpringCloud 的版本都很低,而 SpringCloud Alibaba 的低版本已经停止维护了,迫不得已,只能对 SpringBoot 和 SpringCloud 升级。对应版本如下图所示:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

① 实际项目中肯定不止两个微服务,一个一个启动太麻烦,所以我们试着一键启动所有微服务

Alt + 8,然后 Ctrl 加鼠标左键选中所有想要启动的微服务,点击左侧的绿色三角形启动,前提是这些启动类之前都运行过一次。

在这里插入图片描述

② 项目启动成功后,再回到 nacos 的控制台,可以看到这两个微服务都已经注册进来了,还可以点击详情查看服务的具体信息

在这里插入图片描述

③ 服务注册成功之后,就可以访问了

在这里插入图片描述

三、Nacos 服务集群

当 orderserver 去请求 userserver 时,我们拉取到的是一个 userserver 的服务列表,然后对列表里的服务做负载均衡。
也就是说一个请求可被多个服务实例所等待,最终我们是要从这多个实例中选择一个出来,去处理请求。为了尽可能地减少延迟,Nacos 服务采取分级存储模型,一级是服务,二级是集群,三级是实例。
在这里插入图片描述

服务调用尽可能选择本地集群的服务,因为跨集群调用的延迟较高,只有当本地集群不可访问时,才去访问其它集群。

1. 模拟多实例部署

① 右键 UserServerApplication → Copy Configuration

在这里插入图片描述

② 自定义实例名称 → 点击 modify options → Program arguments

在这里插入图片描述

在这里插入图片描述

③ 配置端口号,不能重复,–server.port=8083

在这里插入图片描述

④ 可以按照同样的方法多启动几个

在这里插入图片描述

⑤ 点进 Nacos 控制台看一下,这里的实例数已经变成 4,集群名称是默认的 DEFAULT

在这里插入图片描述
在这里插入图片描述

2. 配置集群属性

① orderserver 和 userserver 都配置

spring:cloud:nacos:discovery:cluster-name: SX #集群名称

在这里插入图片描述

② 其中对于不同的 userserver 服务,先以这个集群开启一部分服务,然后修改集群名称,再开启另一部分服务,模拟多机房多集群场景,如下三个服务已经启动成功

在这里插入图片描述

③ 修改集群名称,并启动剩余的两个服务,观察 Nacos 控制台

在这里插入图片描述
在这里插入图片描述

④ 去浏览器发送请求,经过多次试验,我们发现它并没有优先选择本地集群的服务去调用,而是以轮询的方式调用服务。其实这里还需要最后一步配置,就是修改负载均衡的规则

SpringCloud Nacos 2021 版本以下,通过如下方式配置:

#优先选择同一集群
userserver:ribbon:NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule

SpringCloud Nacos 2021 版本以后就移除了 Ribbon,可以通过下面的方式配置负载均衡:

spring:cloud:loadbalancer:nacos:enabled: true

⑤ 再次启动服务发送请求的时候,就可以看到我们调用到的服务全部都来自同一集群,只有当本地集群上的服务都挂掉的时候,才去调用其他集群中的服务

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

默认采用轮询的方式选择服务实例,配置了 Nacos 负载均衡策略后会优先选择同一集群的服务列表进行调用,只有当本地集群挂掉之后才去寻找其它集群,最后,在集群内部再采用随机负载均衡策略来挑选实例!

3. 服务权重配置

实际部署中会出现这样的问题:
服务器设备性能有差异,部分实例所在机器性能较好,另一些较差,而我们希望性能好的机器可以承担更多的用户请求。

Nacos 给我们提供了权重配置来控制访问频率,权重越大则访问到的频率就越高。

实例的权重控制:
① Nacos 控制台可以设置实例的权重值,一般在 0 ~ 1 之间;
② 同集群内的多个实例,权重越高被访问的频率就越高;
③ 权重设置为 0 则完全不会访问。

在这里插入图片描述

在这里插入图片描述

权重为 0 时压根就不会被访问,我们可以利用这个特性来进行版本的升级。版本升级就势必要停掉服务,但是服务在运行的时候突然被重启,这肯定会影响到线上业务呀,所以说我们是不能去随便重启服务的。
其实在版本升级的时候,我们可以先把其中一个服务的权重调成 0,此时该服务就不再参与处理用户请求,因为同一个业务的服务器不止这一个,所以用户是不会有任何感知的,这个时候我们可以对服务做版本的升级,升级完成之后可以把该服务的权重调小一点,让少数用户进来做一个线上测试,如果没什么问题我们就可以扩大比例,依次升级,在这个过程中用户是无感知的,可以做到平滑升级。

四、Nacos 环境隔离

Nacos 是一个注册中心,同时它也是一个数据中心。在服务存储和数据存储的最外层都有一个叫 namespace 的东西,用来做最外层隔离,即环境隔离。

在实际生产中不可能只有一个环境,比如会有开发环境、测试环境等,这些环境之间当然是需要隔离的,环境的隔离就通过配置 Namespace 实现。Namespace 内部有不同的 Group,Group 内部又有具体的服务或数据,服务内有集群,集群再往下就是实例。(一般情况下也不会去配 Group)

① 点击 Nacos 控制台的命名空间,可以看到 Namespace 默认的命名空间是 public

在这里插入图片描述

② 点击新建命名空间,填写命名空间名和描述

在这里插入图片描述

在这里插入图片描述

③ 配置服务的命名空间,注意配置的 namespace 值正是我们刚刚创建的命名空间的ID

spring:cloud:discovery:namespace: 6f4f54d7-6728-486d-9d42-7a6aa85cefa3 #dev环境

在这里插入图片描述

④ 我这里只配置了 orderserver 的 namespace,我们重启一下再打开 Nacos 控制台,可以看到 dev 命名空间里面多了一个 orderserver

在这里插入图片描述

⑤ 此时 orderserver 和 userserver 已经是两个世界的人了,当你再次请求服务的时候,发现它报错了

在这里插入图片描述

不同 namespace 下的服务不可见,所以服务之间要想正常访问,就必须得把它们放在相同的环境下!

五、Nacos 注册中心原理

1. Nacos 与 Eureka 比较

跟 Eureka 一样,服务提供者在启动的时候就会向 Nacos 注册自己的服务信息,而服务消费者到时候直接从 Nacos 上拉取服务。当然,请求不止一次,不可能每次都去注册中心拉取,所以 Nacos 也提供了缓存机制,这个功能其实在 Eureka 里面就已经有了,它会将拉取到的服务列表做一个缓存,提高访问速度,同时为避免服务已经挂掉,消费者每隔 30 秒就向 Eureka 发起一次请求,重新拉取服务列表做一次更新,最终在拉取到的服务列表里面做负载均衡,选择一个服务远程调用就可以了。

在这里插入图片描述

① 与 Eureka 不同的是,Nacos 将服务的提供者划分成临时实例和非临时实例,在默认情况下都是临时实例。临时实例在做存活检测时采用的是心跳检测,这一点跟 Eureka 完全一致,服务提供者每隔一段时间就会向注册中心发送一个心跳证明自己还活着,当有一天没有心跳了,Nacos 就会将它直接从服务列表中剔除,当然 Nacos 的心跳频率比 Eureka 更快一点。

在这里插入图片描述

与之相对的是非临时实例,它是没有心跳的,那么它是如何进行存活检测呢?
非临时实例是由 Nacos 主动询问的,即使有一天该服务挂掉了,Nacos 也不会将其从列表中剔除,它会一直等待,等待服务恢复健康。 从这里我们可以看出,非临时实例的身价是相当高的。

**② 第二个不同点就是 Nacos 提供了主动推送变更消息的功能,时效性更好。**在 Eureka 中消费者拉取到的服务列表每隔 30 秒都会重新拉取一遍,但是恰好我的服务就在这 30 秒内挂掉呢?这个事情是会发生的。所以 Nacos 提供了主动推送变更消息的功能,既可以拉取服务又可以主动推送,当 Nacos 检测到某个服务挂掉了,它就会立马发送消息推送给消费者,告诉消费者:服务已变更请立即更新。

(1)共同点:
① 都支持服务注册和服务拉取;
② 都支持发送心跳的方式做健康监测。
(2)区别:
① Nacos 支持服务端主动监测提供者的状态,临时实例采用心跳模式,非临时实例采用主动检测模式;
② 临时实例心跳不正常会被剔除,非临时实例则不会被剔除;
③ Nacos 支持服务列表变更的消息推送模式,服务列表更新及时;
④ Eureka 集群采用 AP 方式,Nacos 集群默认采用 AP 方式,当集群中存在非临时实例时,采用 CP 模式。

AP 模式强调服务的可用性,而 CP 模式更强调数据的可靠性和一致性!

2. 配置非临时实例

服务注册到 Nacos 时,可以选择临时实例或非临时实例,通过配置来修改,推荐使用默认的临时实例,避免给服务器造成太大压力。

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

在这里插入图片描述

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

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

相关文章

LeNet对MNIST 数据集中的图像进行分类--keras实现

我们将训练一个卷积神经网络来对 MNIST 数据库中的图像进行分类&#xff0c;可以与前面所提到的CNN实现对比CNN对 MNIST 数据库中的图像进行分类-CSDN博客 加载 MNIST 数据库 MNIST 是机器学习领域最著名的数据集之一。 它有 70,000 张手写数字图像 - 下载非常简单 - 图像尺…

MMdetection3.0 问题:DETR验证集上AP值全为0.0000

MMdetection3.0 问题&#xff1a;DETR验证集上AP值全为0.0000 条件&#xff1a; 1、选择的是NWPU-VHR-10数据集&#xff0c;其中训练集455张&#xff0c;验证、测试相同均为195张。 2、在Faster-rcnn、YOLOv3模型上均能训练成功&#xff0c;但是在DETR训练时&#xff0c;出现验…

《地理信息系统原理》笔记/期末复习资料(7. 空间分析)

目录 7. 空间分析 7.1 空间分析的内容与步骤 7.2 数据检索及表格分析 7.2.1 属性统计分析 7.2.2 布尔逻辑查询 7.2.3 空间数据库查询语言 7.2.4 重分类&#xff0c;边界消除与合并 7.3 叠置分析 7.3.1 栅格系统的叠加分析 7.3.2 矢量系统的叠加分析&#xff08;拓扑叠…

视频后期特效处理软件 Motion 5 mac中文版

Motion mac是一款运动图形和视频合成软件&#xff0c;适用于Mac OS平台。 Motion mac软件特点 - 精美的效果&#xff1a;Motion提供了多种高质量的运动图形和视频效果&#xff0c;例如3D效果、烟雾效果、粒子效果等&#xff0c;方便用户制作出丰富多彩的视频和动画。 - 高效的工…

设计模式-结构型模式之桥接设计模式

文章目录 三、桥接模式 三、桥接模式 桥接模式&#xff08;Bridge&#xff09;是用于把抽象化与实现化解耦&#xff0c;使得二者可以独立变化。它通过提供抽象化和实现化之间的桥接结构&#xff0c;来实现二者的解耦。 这种模式涉及到一个作为桥接的接口&#xff0c;使得实体类…

Windows本地搭建Emby媒体库服务器并实现远程访问「内网穿透」

文章目录 1.前言2. Emby网站搭建2.1. Emby下载和安装2.2 Emby网页测试 3. 本地网页发布3.1 注册并安装cpolar内网穿透3.2 Cpolar云端设置3.3 Cpolar内网穿透本地设置 4.公网访问测试5.结语 1.前言 在现代五花八门的网络应用场景中&#xff0c;观看视频绝对是主力应用场景之一&…

jQuery选择器、操作DOM、事件处理机制、动画、ADJX操作知识点梳理

jQuery 核心理念就是写的更少&#xff0c;做的更多实现的代码更加简洁有效的提高开发效率 jQuery跟JavaScript的用法是不一样的 跟jQuery相继诞生的JavaScript库还有很多&#xff0c;不包括node.js 关于代码$("li").get(0)&#xff0c;获取DOM对象 jQuery对象声…

前缀和 LeetCode1094 拼车

1094. 拼车 车上最初有 capacity 个空座位。车 只能 向一个方向行驶&#xff08;也就是说&#xff0c;不允许掉头或改变方向&#xff09; 给定整数 capacity 和一个数组 trips , trip[i] [numPassengersi, fromi, toi] 表示第 i 次旅行有 numPassengersi 乘客&#xff0c;接…

Tomcat 漏洞修复

1、去掉请求响应中Server信息 修复方法&#xff1a; 在Tomcat的配置文件的Connector中增加 server" " &#xff0c;server 的值可以改成你任意想返回的值。

Elasticsearch:什么是自然语言处理(NLP)?

自然语言处理定义 自然语言处理 (natural language processing - NLP) 是人工智能 (AI) 的一种形式&#xff0c;专注于计算机和人们使用人类语言进行交互的方式。 NLP 技术帮助计算机使用我们的自然交流模式&#xff08;语音和书面文本&#xff09;来分析、理解和响应我们。 自…

一进三出宿舍限电模块的改造升级

一进三出宿舍限电模块改造升级石家庄光大远通电气有限公司智能模块功能特点&#xff1a; 电能控制功能&#xff1a;可实施剩余电量管理&#xff0c;电量用完时将自动断电&#xff1b; 剩余电量可视报警提示功能&#xff1a;剩余电量可视&#xff0c;并当电量剩余5度时&#xff…

C#和MySQL技巧分享:日期的模糊查询

文章目录 前言一、EF Core 模糊查询二、MySql 日期模糊查询分析和优化2.1 测试环境准备2.1.1 创建数据库2.1.2 查看测试数据 2.2 查询日期的运行效率对比2.3 运行效率优化 三、EF Core 模糊查询优化3.1 字符串转日期3.2 使用日期格式查询 四、优化建议总结 前言 在处理数据库查…

go开发之个人微信号机器人开发

简要描述&#xff1a; 下载消息中的文件 请求URL&#xff1a; http://域名地址/getMsgFile 请求方式&#xff1a; POST 请求头Headers&#xff1a; Content-Type&#xff1a;application/jsonAuthorization&#xff1a;login接口返回 参数&#xff1a; 参数名必选类型…

Linux Spug自动化运维平台本地部署与公网远程访问

文章目录 前言1. Docker安装Spug2 . 本地访问测试3. Linux 安装cpolar4. 配置Spug公网访问地址5. 公网远程访问Spug管理界面6. 固定Spug公网地址 前言 Spug 面向中小型企业设计的轻量级无 Agent 的自动化运维平台&#xff0c;整合了主机管理、主机批量执行、主机在线终端、文件…

版本控制系统Git学习笔记-Git分支操作

文章目录 概述一、Git分支简介1.1 基本概念1.2 创建分支1.3 分支切换1.4 删除分支 二、新建和合并分支2.1 工作流程示意图2.2 新建分支2.3 合并分支2.4 分支示例2.4.1 当前除了主分支&#xff0c;再次创建了两个分支2.4.2 先合并test1分支2.4.3 合并testbranch分支 2.5 解决合并…

算法基础三

电话号码的字母组合 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。给出数字到字母的映射如下&#xff08;与电话按键相同&#xff09;。注意 1 不对应任何字母。 示例 1&#xff1a; 输入&#xff1a;digits "…

【集合篇】Java集合概述

Java 集合概述 集合与容器 容器&#xff08;Container&#xff09;是一个更广泛的术语&#xff0c;用于表示可以容纳、组织和管理其他对象的对象。它是一个更高层次的概念&#xff0c;包括集合&#xff08;Collection&#xff09;在内。集合&#xff08;Collection&#xff0…

深入理解Servlet(中)

作者简介&#xff1a;大家好&#xff0c;我是smart哥&#xff0c;前中兴通讯、美团架构师&#xff0c;现某互联网公司CTO 联系qq&#xff1a;184480602&#xff0c;加我进群&#xff0c;大家一起学习&#xff0c;一起进步&#xff0c;一起对抗互联网寒冬 上篇有一张图&#xff…

Redis的安装

本文采用原生的方式安装Redis&#xff0c;Redis的版本为5.0.5 安装 下载 下载网站&#xff1a;https://download.redis.io/releases/ wget http://download.redis.io/releases/redis-5.0.5.tar.gz解压 tar -zxvf redis-5.0.5.tar.gz进入redis目录 cd redis-5.0.5执行编译…

u盘一插上就提示格式化解决办法,帮助重新使用,避免数据丢失

在我们使用U盘的过程中&#xff0c;有时会遇到一插上就提示格式化的问题。这个问题可能会给我们带来很多麻烦&#xff0c;因为格式化操作会导致数据的丢失。为了解决这一问题&#xff0c;本文将介绍一些解决办法&#xff0c;帮助读者重新使用U盘&#xff0c;并避免数据丢失的风…