SpringCloud源码探析(二)-Nacos注册中心

news2024/11/15 23:31:27

1.概述

Nacos是Spring Cloud Alibaba中的核心组件之一,它提供了服务发现、服务配置和服务管理等功能,可以作为注册中心和配置中心使用。注册中心是微服务架构体系中的核心组件之一,Nacos比Eureka有着更强大的功能,它们都能提供服务注册和服务拉取、支持服务提供者以心跳的方式来健康监测。Nacos支持服务列表变更的消息推送模式,服务更新更及时;Nacos服务端会主动监测客户端状态(临时实例采用心跳模式、非临时实例采取主动监测方式)。本文将详细说明nacos的使用以及部分注意事项。

2.使用与分析

2.1 Nacos使用

注册中心一般包含三个角色:服务提供者(Server)、服务消费者(Client)、注册中心(Registry),一个服务可以同时是提供者和消费者。Nacos包括服务端安装包和服务依赖包,具体使用如下:

2.1.1 服务端包安装

本文以centos7系统作为服务端安装环境,下载地址。我这里选择1.4.2版本,下载并上传到服务器,如下:
在这里插入图片描述
解压后的目录如下:
在这里插入图片描述
conf文件夹下存放了nacos的配置文件,可根据需要自行修改。接下来就可启动nacos,nacos单机版启动指令如下:

startup.sh -m standalone

进入bin文件夹下,执行上述指令,得到结果如下(前提是jdk安装完成并能正常运行,默认jdk地址是/usr/local/java,可在配置文件中指定):
在这里插入图片描述
启动成功之后,可以通过ip+端口号访问web页面(ip+端口号+/nacos/index.html),如下所示:
在这里插入图片描述

2.1.2 spingboot整合nacos

1.引入依赖

			<dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>2.3.7.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Hoxton.SR3</version>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.3.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            </dependency>

上述依赖中,前三个分别是spring-boot、spring-cloud、spring-cloud-alibaba的依赖,若要引入nacos的服务发现包,同时还需要引入spring-boot-starter-web包,要不然会报错。
2.启动文件添加@EnableDiscoveryClient注解

@Slf4j
@EnableDiscoveryClient
@SpringBootApplication
public class OrderApplication {
    public static void main(String[] args) {
        log.info("这是新的OrderApplication");
        SpringApplication.run(OrderApplication.class, args);
    }
}

3.添加配置文件

#服务端口号
server.port=8082
#服务名称
spring.application.name=order-service
#注册中心地址
spring.cloud.nacos.discovery.server-addr=http://localhost:8848

4.启动服务

在这里插入图片描述
在这里插入图片描述
通过nacos的图形化界面查看,若在服务列表中能够查看到服务,则表明注册成功。

2.2 核心配置分析

2.2.1 Nacos分级存储模型

Nacos服务发现的设计模型如下所示:
在这里插入图片描述
传统服务发现(Consul、Eureka等)的模型一般是Service下面直接关联的是Instance,而nacos在这里增加了集群(Cluster)的概念。增加Cluster的目的也是为了提高访问效率、隔绝异常服务,例如以地域划分集群,上海机房内的服务都注册到SH集群,杭州机房内的服务都注册到HZ集群,上海机房内的服务优先调用上海集群内的其它服务,杭州机房内的服务优先调用杭州集群内的其它服务,只有当上海集群内所有被调用服务发生异常时,才有可能去杭州集群调用服务。
按照Nacos的设计模型,服务隔离主要有Cluster、Group、Namespace。解释如下:

Cluster (集群隔离):服务下挂载的机器分属不同的环境,希望能够在某些情况下将某个环境的流量全部切走,这样可以通过集群隔离,来做到一次性切流。

Group (分组隔离):参考Dubbo 的服务隔离策略,需要注意的一点是:Dubbo 注册三元组(接口名+分组+版本)时,其中 Dubbo 的分组是包含在 Nacos 的服务名中的,并不是映射成了 Nacos 的分组,一般 Nacos 注册的服务是默认注册到 DEFAULT_GROUP 分组的。

Namespace (命名空间隔离):在实际场景中使用也比较普遍,一般用于多个环境的隔离,例如 daily,dev,test,uat,prod 等环境的隔离。特别是当环境非常多时,使用命名空间做逻辑隔离是一个比较节约成本的策略。

1.配置cluster
通过下述配置可以指定服务集群,

spring.cloud.nacos.discovery.cluster-name=beijing

在这里插入图片描述

2.配置group

spring.cloud.nacos.discovery.group=AAA

在这里插入图片描述
3.配置namespace
在nacos的web端添加命名空间,如下所示:
在这里插入图片描述
添加完成后在命名空间菜单栏下可以进行查看:
在这里插入图片描述
在配置文件中配置namespace,如下:

spring.cloud.nacos.discovery.namespace=a6a062e0-085d-4eb0-936d-ad9f9bbc0d74

namespace是生成的唯一id或指定值,启动服务,注册成功后可以得到如下结果:
在这里插入图片描述
namespace环境隔离,注意事项如下:

1.每个namespace都有唯一id;
2.不同namespace下的服务不可见。

2.2.2 Nacos与Eureka的区别

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

3.小结

1.nacos可以用作注册中心和配置中心;
2.nacos作为注册中心,可以提高比consul和eureka更加全面的注册发现功能、隔离功能;
3.cluster·、group、namespace的服务隔离模型,以及对推拉模型的支持,nacos可以快速被微服务框架集成。

4.参考文献

1.https://zhuanlan.zhihu.com/p/364527885
2.https://www.bilibili.com/video/BV1LQ4y127n4

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

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

相关文章

Java多线程系列-- ForkJoin框架,分治的艺术

前言 本篇是多线程系列中的一篇&#xff0c;我们在先前的一篇文章中回顾了线程池的主要知识 Java多线程基础–线程的创建与线程池管理 过去了很长时间&#xff0c;我们简单提要一下&#xff1a; 设计目的&#xff1a;简化线程的使用&#xff0c;管理与复用&#xff0c;避免…

Windows 远程桌面安全吗?电脑远程桌面的安全如何保障?

远程桌面会话在加密通道上运行&#xff0c;防止任何人通过监听网络来查看您的会话。 但是&#xff0c;在早期版本的 RDP 中用于加密会话的方法存在漏洞。 此漏洞可能允许使用中间人攻击 (link is external) 未经授权访问您的会话。 我们可以在 Windows 10、Windows 11 和 Wind…

学好数据结构与算法其实一点也不难

一. 初识算法 1.1 什么是算法&#xff1f; 定义 在数学和计算机科学领域&#xff0c;算法是一系列有限的严谨指令&#xff0c;通常用于解决一类特定问题或执行计算 In mathematics and computer science, an algorithm (/ˈlɡərɪəm/) is a finite sequence of rigorous …

MSVCP140.dll下载及安装教程,dll修复方法

MSVCP140.dll是Windows操作系统中的一个DLL文件&#xff0c;许多程序依赖于它来正常运行。如果您尝试运行某个程序时&#xff0c;发现缺少MSVCP140.dll文件&#xff0c;那么您需要下载并安装它才能解决问题。本文将介绍如何MSVCP140.dll下载和安装MSVCP140.dll。 第一步&#x…

解决树莓派 bullseye (11) 系统无法通过 xrdp 远程连接的问题

我手上有一台树莓派 4B&#xff0c;使用官方镜像烧录器烧录老版本操作系统 buster (10) 时可以正常通过 Windows 远程桌面连接上&#xff0c;但换成最新的 bullseye (11) 系统后却无法正常连接远程桌面。 问题复现&#xff1a; 使用官方镜像烧录器烧录&#xff0c;配置用户名为…

CSDN 竞赛 32 期

CSDN 竞赛 32 期1、题目名称&#xff1a;传奇霸业2、题目名称&#xff1a;严查枪火3、题目名称&#xff1a;蚂蚁家族4、题目名称&#xff1a;运输石油小结1、题目名称&#xff1a;传奇霸业 传奇霸业&#xff0c;是兄弟就来干。 小春(HP a)遇到了一只黄金哥布林(HP x)。 小春每…

20个让你效率更高的CSS代码技巧

在本文中&#xff0c;我们想与您分享一个由各大css网站总结推荐的20个有用的规则和实践经验集合。有一些是面向CSS初学者的&#xff0c;有一些知识点是进阶型的。希望每个人通过这篇文章都能学到对自己有用的知识。好了&#xff0c;我们开始。1.注意外边距折叠与其他大多数属性…

从工地转行软件测试,拿下13k+年终奖是种什么体验?

最近&#xff0c;一则名为《我&#xff1a;毕业五年&#xff0c;存款5000。她:中传硕士&#xff0c;火锅店保洁》的视频走红网络&#xff0c;两位名校毕业生看似高开低走的就业经历&#xff0c;引起了很多人的共鸣。她们所传达的并不是所谓的躺平、摆烂&#xff0c;而是希望更多…

spark性能调优(一):Shuffle

Shuffle 一、配置项调优二、减少shuffle数据量三、避免shuffle何为shuffle? 集群中跨进程、跨节点的数据分发(Map的输出文件写到本地磁盘,Reducer把Map的输出文件拉到本地)为什么要shuffle? 准确的说,shuffle是刚需(业务场景决定的),分布式环境中,不同节点不能进行内存交换,只…

加快发展先进制造业势在必行!

众所周知&#xff0c;我国是制造大国&#xff0c;但并非制造强国。而我们在持续发展制造业的进程中也面临着诸多实际问题&#xff0c;如产业发展后续乏力&#xff0c;环境制约异常突出&#xff0c;技术创新能力薄弱&#xff0c;结构调整任务艰巨等等。故而要实现由制造大国向制…

数据结构与算法之二叉树大全

目录二叉树的定义二叉树的性质(特性)满二叉树与完全二叉树链式存储的二叉树顺序存储的二叉树线索二叉树(Threaded BinaryTree)二叉排序树&#xff08;Binary Sort Tree&#xff09;平衡二叉树&#xff08; Balanced Binary Tree&#xff09;为什么使用平衡二叉树&#xff1f;如…

Vue中如何利用websocket实现实时通讯

首先我们可以先做一个简单的例子来学习一下简单的websocket模拟聊天对话的功能 原理很简单&#xff0c;有点像VUE中的EventBus&#xff0c;用emit和on传来传去 首先我们可以先去自己去用node搭建一个本地服务器 步骤如下 1.新建一个app.js&#xff0c;然后创建pagejson.js文…

最简单的代码生成器,netcore平台,EF架构,smartsofthelp

1.dbhelper 原生SQL操作类2.Model 实体层3.EF dbfirst 生成entites 实体操作类4.EF实体接口增删改查操作方法成员5.UI 展示层SQL数据脚本Model/// <summary>/// Model实体层 /// </summary>namespace Smart.Model{/// <summary>/// 数据实体层 T_Eventsmart …

珠海数据智能监控器+SaaS平台 轻松实现SMT生产管控

数据智能监控器 兼容市面上99%的SMT设备 直接读取设备生产数据与状态&#xff0c;如&#xff1a;计划产出、实际产出、累计产出、停机、节拍、线利用率、直通率、停产时间、工单状态、OEE…… 产品功能价值 ◎ OEE不达标报警&#xff0c;一手掌握生产效能 ◎ 首检/巡检/成…

研发人员最希望项目经理和PMO能够做什么?看完不要惊讶

作为项目经理和PMO你考虑过自己在其他人眼中的形象么&#xff1f;知道各个环节最希望你做什么吗&#xff1f;对于最常打交道的研发人员&#xff0c;你知道他们最希望你做什么吗&#xff1f; 如果不能了解其他环节对你的期望&#xff0c;你往往很难获得认同&#xff0c;为此&am…

Golang实现RabbitMQ中死信队列各个情况

下面这段教程针对是你已经有一些基本的MQ的知识&#xff0c;比如说能够很清楚的理解queue、exchange等概念&#xff0c;如果你还不是很理解&#xff0c;我建议你先访问官网查看基本的教程。 文章目录1、造成死信队列的主要原因2、操作逻辑图3、代码实战3.1 针对原因1&#xff1…

win10下Vue环境搭建(脚手架初始化+项目启动)教程(详解多图)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、下载安装node.js二、node.js环境配置三、下载安装vue脚手架前言 初学Vue 搭环境快把我整死了QAQ 差点入门即入土 一、下载安装node.js ①下载地址&#x…

bug的创建和等级

1.如何合理的创建一个bug 创建bug的要素 &#xff1a;问题的版本&#xff0c;发现问题的环境&#xff0c;发现问题的步骤&#xff0c;预取结果&#xff0c;实际结果。 eg&#xff1a; 1.问题的版本&#xff1a;谷歌浏览器108版本 2.发现问题的环境&#xff1a;windows11家庭版…

算法训练营 day56 动态规划 最长递增子序列 最长连续递增序列 最长重复子数组

算法训练营 day56 动态规划 最长递增子序列 最长连续递增序列 最长重复子数组 最长递增子序列 300. 最长递增子序列 - 力扣&#xff08;LeetCode&#xff09; 给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#x…

如何理解API?API 是如何工作的?(5分钟诠释)

大家可能最近经常听到 API 这个概念&#xff0c;那什么是API&#xff0c;它又有什么特点和好处呢&#xff1f; wiki 百科镇楼 …[APIs are] a set of subroutine definitions, protocols, and tools for building application software. In general terms, it’s a set of cle…