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.hqwc.cn/news/238112.html

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

相关文章

【工具分享】| 阅读论文神器 使用技巧 AI润色 AI翻译

文章目录 1 使用技巧1.1 功能一 即时翻译1.2 功能二 文献跳转1.3 功能三 多设备阅读1.4 功能四 小组讨论笔记共享1.5 功能五 个人文献管理 2 其他功能 超级喜欢Readpaper这一款论文阅读软件&#xff0c;吹爆他哈哈 为什么&#xff1f; 当然是他可以解决我们传统阅读论文的种种…

“掌握速卖通平台接口:电商开发的技术巅峰“

一、概述 速卖通平台接口是全球速卖通提供的一套API接口&#xff0c;旨在为开发者提供与速卖通平台进行数据交互的能力。通过使用速卖通平台接口&#xff0c;开发者可以快速构建自己的电商应用程序&#xff0c;并实现与速卖通平台的数据共享和交易流程。本文将详细介绍速卖通平…

springboot+jsp+java房屋销售出租赁网站的ssm设计与实现7xcvq

三、研究方案&#xff08;主要研究内容、目标、研究方法等&#xff09; 主要研究内容 房屋租售网站采用的开发框架为springboot框架&#xff0c;也就是Spring mvc、Spring、MyBatis这三个框架&#xff0c;页面设计用的是jsp技术作为动态页面文件设计&#xff0c;jsp文件里可以对…

借助 DPM 代码扫描的力量解锁医疗设备的可追溯性

在当今的医疗保健系统中&#xff0c;医疗设备的可追溯性变得比以往任何时候都更加重要。为了增强现代医疗保健领域的可追溯性和安全性&#xff0c;UDI 条形码充当唯一设备标识的标准&#xff0c;为医疗设备提供唯一标识符。 DataMatrix 代码&#xff08;或直接零件标记代码&am…

腾讯云避坑——无法远程root登录

因为各种原因&#xff0c;最近需要使用腾讯云来代替阿里云。 但在ubuntu18/20的服务器中&#xff0c;我使用另一个电脑试图用scp命令来拷贝服务器中的一些文件&#xff0c;命令为: scp root服务器ip:文件目录 本地目录但一直显示密码错误。 原因是腾讯云ubuntu系统在创建时并不…

这个sql有点东西,记录一下

我有一个需求&#xff1a;在订单表里面查询指定时间的订单数据&#xff0c;如果要是没有订单的话&#xff0c;需要展示当天日期和数据&#xff0c;数据为0 先看一下效果&#xff1a; 话不多说&#xff0c;直接上SQL SELECTdate_range.date AS 日期,COUNT( oco.id ) AS 总订单…

二分类问题中评估模型的示例及释义:召准率、召回率等

1、评估参数定义 1.1、召准率&#xff08;Precision&#xff09; 召准率是衡量模型预测正类标签时的准确度的指标。它计算的是模型预测的正类中真正为正类的比例。换句话说&#xff0c;召准率表示在所有预测为正类的实例中&#xff0c;正确识别为正类的实例所占的比例。 其中…

H5 Canvas 打飞机青春版

没事儿写写练习一下&#xff0c;说不准哪天就用到今天所用到的知识点了呢。 在线链接 https://linyisonger.github.io/H5.Examples/?name./053.%E9%A3%9E%E6%9C%BA%E5%A4%A7%E6%88%98.html 功能清单 循环滚动背景 矩形碰撞 随机生成敌人 飞机左右移动 苹果屏蔽长按 移动端屏…

在CentOS系统下的Tomcat8.5或9安装SSL证书

您可以在CentOS系统下的Tomcat服务器安装SSL证书&#xff0c;实现通过HTTPS安全访问Web服务。本文介绍如何CentOS系统下Tomcat 8.5或9安装SSL证书。 环境准备 操作系统&#xff1a;CentOS 7.6 64位 Web服务器&#xff1a;Tomcat 8.5或9 说明 Tomcat服务器需要提前安装JDK环…

SpringSecurity 用户帐号已被锁定

SpringSecurity 用户帐号已被锁定 01 异常发生场景 当我自定义登录接口时以下是我的UserDetailsService和UserDetails接口的实现类 Service public class UserDetailsServiceImpl implements UserDetailsService {Autowiredprivate MsUserServiceImp msUserServiceImp;Overr…

SeaTunnel扩展Source插件,自定义connector-webservice

代码结构 在seatunnel-connectors-v2中新建connector-webservice模块&#xff0c;可以直接赋值connector-http-base模块&#xff0c;webservice和http的方式比较类似&#xff0c;有些类直接复制了http中的代码。 核心类有WebserviceConfig&#xff0c;WebserviceParameter&am…

WPF Mvvm模式下面如何将事件映射到ViewModel层

前言 平常用惯了Command绑定,都快忘记传统的基于事件编程模式了,但是Commond模式里面有个明显的问题,就是你无法获取到事件源的参数。很多大聪明肯定会说,这还不简单,通过自己写控件,给控件加个自定义属性不就行了,想要啥事件就写啥事件进去,完全自主可控。但是对于写…