【SpringCloud】Nacos 注册中心

news2025/1/18 10:06:15

目 录

  • 一.认识和安装 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:8848
      discovery:
        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:8848
      discovery:
        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:8848
      discovery:
        cluster-name: HZ
        namespace: 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.coloradmin.cn/o/1572250.html

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

相关文章

低代码革新:软件开发的未来潜力与创新路径探索

过去的一年&#xff0c;挑战与机遇并存。人们一边忧虑市场经济下行所带来的新的增长难题、裁员危机&#xff0c;一边惊叹于AIGC、量子技术等领域不断涌现新的创新成果。 时代发生了改变&#xff0c;传统“互联网”的模式已走入尾声&#xff0c;新一轮的科技革命与产业变革正在到…

【刷题】代码随想录算法训练营第三天|203、移除链表元素,707、设计链表,206、反转链表

目录 203. 移除链表元素707. 设计链表206. 反转链表双指针法递归法 203. 移除链表元素 文档讲解&#xff1a;https://programmercarl.com/0203.%E7%A7%BB%E9%99%A4%E9%93%BE%E8%A1%A8%E5%85%83%E7%B4%A0.html 视频讲解&#xff1a;https://www.bilibili.com/video/BV18B4y1s7R9…

活动回顾丨掘金海外,探寻泛娱乐社交APP出海新风口

3月中旬,Flat Ads携手声网、XMP在广州成功举办“泛娱乐社交APP出海新风口——广州站”的主题线下沙龙活动。 多位大咖与泛娱乐社交APP赛道的行业伙伴汇聚一堂。本次活动邀请到Flat Ads 市场VP 王若策、声网娱乐视频产品负责人 陈际陶、XMP资深产品运营专家 屈俊星等多位行业大…

20.安全性测试与评估

每年都会涉及&#xff1b;可能会考大题&#xff1b;多记&#xff01;&#xff01;&#xff01; 典型考点&#xff1a;sql注入、xss&#xff1b; 从2个方面记&#xff1a; 1、测试对象的功能、性能&#xff1b; 2、相关设备的工作原理&#xff1b; 如防火墙&#xff0c;要了解防…

Linux网络管理类命令

ping -c&#xff1a;指定次数 -i n&#xff1a;指定发送频率 n 秒 -t&#xff1a;指定 TTL 值 -s&#xff1a;指定发送包的大小 ifconfig iproute netstat -anltp ss ssh 主机名 SCP wget nmap -A: 全面扫描 -p &#xff1a;端口 80 22-80 80,25,443 -sP &#xf…

机器学习模型——K—Means算法

目录 无监督学习概念&#xff1a; 有监督学习与无监督学习&#xff1a; 无监督学习 - 聚类分析 &#xff1a; 聚类算法应用场景&#xff1a; 常用聚类算法介绍&#xff1a; 对不同的聚类算法应用选择原则&#xff1a; 基于原型聚类&#xff1a; K-Means聚类算法概念及步…

故障分析,大有可为!考虑光热电站及N-k故障的新能源电力系统优化调度程序代码!

前言 近年来&#xff0c;为了践行国家“节约、清洁、安全”的能源发展方针&#xff0c;推动高比例可再生能源接入电网&#xff0c;以风电为代表的可再生能源迅猛发展。但随着风电渗透率的增加&#xff0c;弃风现象严重&#xff0c;风电消纳问题亟需解决。同时&#xff0c;风电…

基于SpringBoot+Vue的OA管理系统

一、项目背景介绍&#xff1a; 办公自动化&#xff08;Office Automation&#xff0c;简称OA&#xff09;&#xff0c;是将计算机、通信等现代化技术运用到传统办公方式&#xff0c;进而形成的一种新型办公方式。办公自动化利用现代化设备和信息化技术&#xff0c;代替办公人员…

面试题——JVM老年代空间担保机制(我的想法)

这里借用一下人家的图&#xff0c;来说一下我的想法&#xff0c;嘻嘻。。。。 原文链接&#xff1a;一道面试题&#xff1a;JVM老年代空间担保机制-CSDN博客? 嗯&#xff0c;我觉得老年代担保机制的主要作用就是避免频繁触发FULL GC&#xff0c;这其实也是因为年轻代Minor GC…

DV证书与OV证书的区别

在网络安全日益受到重视的今天&#xff0c;数字证书扮演着至关重要的角色。其中&#xff0c;DV证书&#xff08;域名验证证书&#xff09;和OV证书&#xff08;组织验证证书&#xff09;是两种常见的SSL/TLS证书类型&#xff0c;它们在验证流程和适用场景上存在显著区别。 首先…

666666666666666666

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…

LeetCode题练习与总结:插入区间--57

一、题目描述 示例 1&#xff1a; 输入&#xff1a;intervals [[1,3],[6,9]], newInterval [2,5] 输出&#xff1a;[[1,5],[6,9]]示例 2&#xff1a; 输入&#xff1a;intervals [[1,2],[3,5],[6,7],[8,10],[12,16]], newInterval [4,8] 输出&#xff1a;[[1,2],[3,10],[…

数据结构二叉树链式存储

二叉树 1. 二叉树的遍历1.1 前序遍历1.2 中序遍历1.3 后序遍历1.4 层序遍历2. 二叉树的高度3. 某一层结点的个数4. 计算二叉树的结点5. 叶子结点的个数6. 销毁二叉树 二叉树的顺序存储通过堆已经介绍过了&#xff0c;现在介绍二叉树的链式存储。关于二叉树&#xff0c;有 如下…

C#复习——变长参数和可选参数

变长参数——params 参数默认值 总结 配合泛型类实现迭代器的语法糖使用&#xff1a;

7.java openCV4.x 入门-Mat之转换、重塑与计算

专栏简介 &#x1f492;个人主页 &#x1f4f0;专栏目录 点击上方查看更多内容 &#x1f4d6;心灵鸡汤&#x1f4d6;我们唯一拥有的就是今天&#xff0c;唯一能把握的也是今天建议把本文当作笔记来看&#xff0c;据说专栏目录里面有相应视频&#x1f92b; &#x1f9ed;文…

电商API接口|Python爬虫 | 如何用Python爬虫一天内收集数百万条电商数据?

你是否遇到过需要收集大量数据的问题&#xff1f;比如需要分析市场趋势&#xff0c;或者是想要了解某个领域的发展动态。手动收集这些数据既费时又费力&#xff0c;而且很难保证数据的准确性和完整性。那么有没有一种方法可以快速高效地收集大量数据呢&#xff1f; 技术汇总 …

xss.pwnfunction-Ma Spaghet!

根据代码得知 这个是根据get传参的并且是由someboby来接收参数的 所以 <script>alert(1137)</script> js并没有执行因为 HTML5中指定不执行由innerHTML插入的<script>标签 所以 ?somebody<img%20src1%20onerror"alert(1337)"> 这样就成…

双指针-移动零

首先不能复制&#xff0c;只能在原数组是哪个操作&#xff0c;那么很多集合的方式就不行了。当然在现实开发中肯定是可以的。目前按照题目来说是不可以的。所以我们可以思考下&#xff0c;是否可以通过交换来实现。 初始化一个变量 to 为 0。这个变量的目的是跟踪非零元素应该…

【MySQL】增删改查操作(基础)

文章目录 1、新增操作&#xff08;Create&#xff09;1.1单行数据全列插入1.2多行数据指定列插入 2、查询操作&#xff08;Retrieve&#xff09;2.1全列查询2.2指定列查询2.3指定列查询2.4别名&#xff08;as&#xff09;2.5去重&#xff08;distinct&#xff09;2.6排序&#…

java数据结构与算法刷题-----LeetCode405. 数字转换为十六进制数

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 分组位运算 分组位运算 这道题正常来说可以用转换7进制的思想来&…