SpringCloud--Nacos解析

一、Nacos简介

Spring Cloud Alibaba Nacos是一个用于动态服务发现、配置管理和服务管理的平台,是阿里巴巴开源的一个项目,旨在简化微服务架构中的服务治理。Nacos 提供了一组简单易用的特性集,可以快速的实现动态服务发现、服务配置、服务元数据及流量管理。

二、Nacos基本概念

  1. 命名空间(Namespace):命名空间是用来隔离不同租户或不同环境的配置和服务的逻辑区域。在一个Nacos集群中可以定义多个命名空间,不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。
  2. 集群(Cluster):集群是指一组协同工作的Nacos服务器实例,可以提供高可用性。
  3. 配置(Configuration):配置是指应用程序运行所需的外部参数,如数据库连接字符串、外部服务地址等。Nacos提供了中心化的配置管理,允许动态地更改和分发配置。
  4. 配置数据ID(Configuration Data ID):配置数据ID是配置的唯一标识符,用于区分不同的配置集合。
  5. 配置分组(Configuration Group):配置分组用于将配置信息分组,便于管理。
  6. 配置管理(Configuration Management):Nacos提供配置的动态管理,包括配置的创建、获取、修改和删除等操作。
  7. 配置监听(Configuration Listen):应用可以订阅配置变更事件,当配置更新时,应用可以得到通知并重新加载配置。
  8. 服务(Service):服务是指一组提供相同功能的服务实例的集合,是微服务架构中的基本单位。
  9. 服务实例(Service Instance):服务实例指服务的一个具体运行实例,每个实例都有唯一的标识,并向Nacos注册自己的信息。
  10. 分组(Group):分组是服务实例的逻辑分类,可以根据不同的需求将服务实例划分为不同的组。
  11. 动态服务发现(Dynamic Service Discovery):服务实例可以动态地向Nacos注册和注销,其他服务可以动态地发现这些服务实例。
  12. 服务元数据(Service Metadata):服务元数据是关于服务实例的附加信息,如版本号、权重等。
  13. 动态DNS服务(Dynamic DNS):Nacos提供动态DNS服务,当服务实例的IP地址或端口号发生变化时,DNS记录会自动更新。
  14. 服务健康检查(Service Health Check):Nacos定期检查服务

三、数据模型

Nacos 数据模型 Key 由三元组(Namespace、Group、Data ID)唯一确定,Namespace默认是空串,公共命名空间(public),分组默认是 DEFAULT_GROUP。
在这里插入图片描述

四、Nacos的核心功能

  1. 服务注册与发现:服务提供者在启动时将自己的信息注册到Nacos服务器上,服务消费者可以通过Nacos查询到可用的服务实例列表,并据此进行调用。
  2. 配置管理:Nacos支持配置的集中管理和动态刷新。服务提供者和消费者可以订阅配置的变化,当配置发生变更时,无需重启应用即可实时更新配置。
  3. 动态DNS服务:Nacos提供了动态DNS服务,使得服务提供者和消费者可以通过服务名来解析服务的IP地址,从而实现服务之间的通信。
  4. 流量管理:Nacos支持流量管理功能,如权重路由、流量分割等,帮助实现复杂的流量控制策略。
  5. 服务元数据管理:除了服务名称和IP地址外,Nacos还允许存储和管理额外的服务元数据。

五、Nacos 使用前提条件

5.1 环境准备

Nacos 依赖 Java 环境来运行。如果您是从代码开始构建并运行Nacos,还需要为此配置 Maven环境,请确保是在以下版本环境中安装使用:

  1. 64 bit OS,支持 Linux/Unix/Mac/Windows,推荐选用 Linux/Unix/Mac。
  2. 64 bit JDK 1.8+;
  3. Maven 3.2.x+;
5.2 启动Nacos服务器

可以通过 Github下载nacos-server-$version.zip 包,再将其解压出来启动。在2.2.0.1和2.2.1版本时,必须修改conf目录下的application.properties文件,设置其中的nacos.core.auth.plugin.nacos.token.secret.key值,否则无法启动。
在这里插入图片描述

5.3 登录Nacos管理页面

在Nacos server 成功启动后,可以通过在浏览器中输入http://ip:8848/nacos,使用默认账号密码:nacos/nacos 登录管理平台。
在这里插入图片描述

六、服务注册与发现

如果只是启动 Nacos server 的话,在Naocs的管理平台里面是没有管理的服务列表数据的。如果想要将某个服务注册到Nacos上管理的话,需要对客户端服务进行如下修改:

  1. 在pom文件中添加依赖,注意与 Spring Boot 版本之间的对应关系。
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>${latest.version}</version>
</dependency>
  1. 在application.properties或application.yml文件中配置 Nacos server 的地址,以便指定客户端服务需要注册到哪个Nacos server 上。
server.port=8070
spring.application.name=your-service-name
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
  1. 在启动类上添加Spring Cloud 原生注解 @EnableDiscoveryClient 开启服务注册发现功能。
@SpringBootApplication
@EnableDiscoveryClient
public class NacosClientApplication {public static void main(String[] args) {SpringApplication.run(NacosClientApplication.class, args);}
}
  1. 启动客户端服务,当客户端服务成功启动后,便可以在Nacos管理平台服务列表中看到这个服务的相关状态信息。
    在这里插入图片描述

七、配置管理

如果还想要在 Nacos 上实现客户端配置的管理的话,需要在客户端服务进行如下修改:

  1. 在pom文件中添加依赖
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><version>${latest.version}</version>
</dependency>
<!-- bootstrap 配置加载 -->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
  1. 将application.properties或application.yml文件改成bootstrap.properties或bootstrap.yml,再增加以下配置:
spring:application:name: snowy-web-appprofiles:active: devcloud:nacos:config:server-addr: localhost:8848namespace: snowy-cloud-2x-ent-${spring.profiles.active}group: ${spring.profiles.active}prefix: ${spring.application.name}file-extension: yamlusername: nacospassword: nacos

在上面的配置中,由${prefix}-${spring.profiles.active}.${file-extension}共同组成Nacos管理页面中配置列表中的Data Id,这个Data Id也是服务配置信息的唯一标识。其中:

  • prefix:默认为 spring.application.name 的值,也就是当前的服务名,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
  • spring.profiles.active:即为当前环境对应的 profile,上面配置中就是dev。当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,Data Id 的拼接格式变成 ${prefix}.${file-extension}
  • file-exetension:为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。
  1. 在Nacos控制台中创建配置文件,要保证创建的配置文件的Data Id 与上面${prefix}-${spring.profiles.active}.${file-extension}组成的一致,否则服务启动时读取不到Nacos上的配置信息。再填写相应的配置内容,配置内容的格式主要有Properties、YAML、HTML、XML、JSON、TEXT。一般使用YAML格式,更加美观一点,下面是Nacos上配置内容相关属性的设置:
iam:key: JLB6L6MJVIT5Z7ILusername: njhpassword: 123456
  1. 在客户端代码中可以使用@Value注解来获取Nacos上的配置属性。同时可以使用@RefreshScope注解来实现配置自动更新,即在Nacos管理平台修改服务的配置信息后,无需重启服务就能获取到最新修改的配置属性值。
@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {@Value("${iam.key}")private String key;
}

八、服务元数据管理

在Spring Cloud Nacos中,服务元数据管理是指对服务实例附加额外的键值对信息,以便在服务注册和发现过程中提供更多的上下文信息。服务元数据可以用于多种场景,例如区分服务版本、配置服务特定属性或者实现基于元数据的服务路由。要在Spring Cloud Nacos中管理服务元数据,你可以按照下面的步骤操作:

  1. 注册服务时设置元数据:当服务实例注册到Nacos时,可以在服务实例的配置中添加元数据。例如,在bootstrap.properties或application.properties文件中,可以定义元数据键值对,如下所示:
spring:cloud:nacos:discovery:metadata:my-key: my-value
  1. 通过Nacos控制台设置元数据:登录到Nacos控制台,手动编辑已注册服务的元数据。在服务列表中选择特定的服务实例,然后在“编辑”界面可以添加或编辑元数据。
  2. 查询服务实例的元数据:当需要获取服务实例的元数据时,可以使用Nacos客户端API查询。例如,在Spring Cloud应用程序中,可以注入NamingService接口,并使用它来检索服务实例的元数据:
@Autowired
private NamingService namingService;public void getServiceInstanceMetadata(String serviceName) throws NacosException {List<Instance> instances = namingService.getAllInstances(serviceName);for (Instance instance : instances) {Map<String, String> metadata = instance.getMetadata();// 处理元数据}
}
  1. 使用元数据进行服务发现和路由:在服务消费方,可以根据服务实例的元数据来决定调用哪个实例。例如,可以编写代码仅选择具有特定版本元数据的服务实例。
  2. 动态更新元数据:元数据可以动态更新,无需重启服务。当你通过控制台或API更新了服务实例的元数据后,服务消费者会立即看到这些变化。

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

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

相关文章

STM32标准库开发—硬件SPI外设

SPI外设简介 SPI1与SPI2所挂载的总线位置不一样&#xff0c;所以时钟频率也不一样&#xff0c;SPI2挂载在APB1时钟频率为36MHZ是SPI1的一半 I2S是一种音频传输协议&#xff0c;适用于STM32大容量产品 一般来说串口发送数据时是低位先行&#xff0c;SPI通信是高位先行 SPI框图 发…

C/C++ 测试Qt官网的模拟时钟示例

操作系统&#xff1a;UOS20专业版 qt环境安装&#xff1a;apt-get install qtcreator&#xff08;会自动安装QtCreator编辑器及相关环境&#xff0c;新版qt似乎不再提供安装包&#xff09; qt版本&#xff1a;qt5.11 官网示例&#xff1a; Analog Clock&#xff08;Qt6.6版本的…

BOOT电路

本质&#xff1a;BOOT电路本质上是单片机的引脚 作用&#xff1a;BOOT电路的作用是用于确定单片机的启动模式 使用方法&#xff1a;在单片机上电或者复位时给BOOT管脚设置为指定电平即可将单片机设置为指定启动模式。 原理&#xff1a;单片机上电或复位后会先启动内部晶振&a…

【Go语言】Go语言中的数组

Go语言中的数组 1 数组的初始化和定义 在 Go 语言中&#xff0c;数组是固定长度的、同一类型的数据集合。数组中包含的每个数据项被称为数组元素&#xff0c;一个数组包含的元素个数被称为数组的长度。 在 Go 语言中&#xff0c;你可以通过 [] 来标识数组类型&#xff0c;但…

【IO流】字符流练习(拷贝、文件加密、修改文件数据)

字符流练习 练习1&#xff1a;文件夹拷贝1.1 需求1.2 代码实现1.3 输出结果 练习2&#xff1a;文件加密与解密2.1 需求2.2 代码实现2.3 输出结果 练习3&#xff1a;修改文件数据&#xff08;常规方法&#xff09;3.1 需求3.2 代码实现3.3 输出结果 练习4&#xff1a;修改文件数…

YOLO目标检测——斑马线目标检测数据集【含对应voc、coco和yolo三种格式标签】

实际项目应用&#xff1a;自动驾驶系统、智能交通监控、行人保护系统、辅助驾驶功能数据集说明&#xff1a;真实场景的高质量图片数据&#xff0c;数据场景丰富标签说明&#xff1a;使用lableimg标注软件标注&#xff0c;标注框质量高&#xff0c;含voc(xml)、coco(json)和yolo…

Window系统安装USB Redirector结合cpolar实现远程访问本地USB设备

文章目录 前言1. 安装下载软件1.1 内网安装使用USB Redirector1.2 下载安装cpolar内网穿透 2. 完成USB Redirector服务端和客户端映射连接3. 设置固定的公网地址 前言 USB Redirector是一款方便易用的USB设备共享服务应用程序&#xff0c;它提供了共享和访问本地或互联网上的U…

aiohttp 目录遍历漏洞(CVE-2024-23334)

免责声明&#xff1a;文章来源互联网收集整理&#xff0c;请勿利用文章内的相关技术从事非法测试&#xff0c;由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;所产生的一切不良后果与文章作者无关。该…

MSSQL渗透测试

目录 mssql数据库连接提权至服务器权限 拿到目标的IP地址&#xff0c;我们先对IP地址进行信息收集&#xff0c;收集信息资产&#xff0c;同时使用nmap对IP地址进行扫描 nmap -sC -sV IP从扫描的结果中&#xff0c;我们能知道目标服务器是windows操作系统&#xff0c;使用的是m…

iOS群控软件功能分析与代码分享!

随着移动互联网的迅猛发展&#xff0c;iOS设备作为市场上一大主流平台&#xff0c;其应用开发和管理越来越受到开发者和企业的重视&#xff0c;iOS群控软件&#xff0c;作为一种能够批量控制、管理和监控iOS设备的工具&#xff0c;逐渐展现出其强大的实用价值。 本文将详细分析…

Redis的高性能之道

前言&#xff1a;做码农这么多年&#xff0c;我也读过很多开源软件或者框架的源码&#xff0c;在我看来&#xff0c;Redis是我看过写得最优美、最像一件艺术品的软件&#xff0c;正如Redis之父自己说的那样&#xff0c;他宁愿以一个糟糕的艺术家身份而不是一名好程序员被别人记…

CrossOver2024电脑虚拟机软件详细介绍概述

CrossOver是由CodeWeavers开发的一款系统兼容软件&#xff0c;它能够在Mac和Linux操作系统上直接运行Windows应用程序&#xff0c;而无需创建或启动完整的Windows虚拟机。CrossOver通过模拟Windows应用程序所需的运行环境&#xff0c;实现了跨平台的无缝集成和高效运行。 Cross…

免费的Git图形界面工具sourceTree介绍

阅读本文同时请参阅-----代码库管理工具Git介绍 sourceTree是一款免费的Git图形界面工具&#xff0c;它简化了Git的使用过程&#xff0c;使得开发者可以更加方便地下载代码、更新代码、提交代码和处理冲突。下面我将详细介绍如何使用sourceTree进行这些操作。 1.下载和…

非线性优化-高斯牛顿法

在SLAM领域&#xff0c;后端多采用基于非线性优化的方法&#xff0c;来优化位姿和地图点&#xff0c;其中高斯牛顿法的使用频率很高。 求解高斯牛顿法的核心公式&#xff1a; 其中 f 是误差函数&#xff0c;J是误差关于待优化变量的雅可比矩阵。 其中H为海森矩阵&#xff08…

雷赛控制卡的扩展IO在雷赛软件里连不上是什么问题

雷赛控制卡的扩展IO在雷赛软件里连不上是什么问题 解决: 要拨码的,拨了码&#xff0c;记得断电

Redis之一: 简介及环境安装搭建

什么是NoSQL? NoSQL&#xff0c;指的是非关系型的数据库。NoSQL有时也称作Not Only SQL的缩写&#xff0c;是对不同于传统的关系型数据库的数据库管理系统的统称。 NoSQL用于超大规模数据的存储。&#xff08;例如谷歌或Facebook每天为他们的用户收集万亿比特的数据&#xf…

Sentinel实战(待完善)

目录 服务雪崩 什么是服务雪崩 服务不可用原因 解决方案 技术选型对比 Sentinel 介绍 优点 核心概念 资源 规则 代码实战 API实现 SentinelResource注解埋点实现 服务雪崩 什么是服务雪崩 在服务调用链路中, 服务提供者不可用, 导致服务调用者不可用, 间接让上上游…

【Java EE初阶二十六】简单的表白墙(二)

2. 后端服务器部分 2.1 服务器分析 2.2 代码编写 2.2.2 前端发起一个ajax请求 2.2.3 服务器读取上述请求,并计算出响应 服务器需要使用 jackson 读取到前端这里的数据,并且进行解析&#xff1a; 代码运行图&#xff1a; 2.2.4 回到前端代码&#xff0c;处理服务器返回的响应…

【网站项目】424学报稿件管理系统

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以私聊博主获取。&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0c;帮助大学选题。赠送开题报告模板&#xff…

【漏洞复现】大华智慧园区综合管理平台信息泄露漏洞

Nx01 产品简介 大华智慧园区综合管理平台是一款综合管理平台&#xff0c;具备园区运营、资源调配和智能服务等功能。该平台旨在协助优化园区资源分配&#xff0c;满足多元化的管理需求&#xff0c;同时通过提供智能服务&#xff0c;增强使用体验。 Nx02 漏洞描述 大华智慧园区…