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://www.mzph.cn/news/707160.shtml

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

相关文章

2024食品工程与智慧农业国际学术会议(ICFESA2024)

2024食品工程与智慧农业国际学术会议(ICFESA2024) 一、【会议简介】 2024食品工程与智慧农业国际学术会议&#xff08;ICFESA2024&#xff09;是一个专注于食品工程和智慧农业领域的国际学术会议。会议将在杭州举行&#xff0c;该会议旨在汇聚全球相关领域的专家学者&#xff…

LiveGBS流媒体平台GB/T28181功能-查看国标设备下通道会话列表直播|回放|对讲|播放|录像|级联UDP|TCP|H264|H265会话

LiveGBS流媒体平台GB/T28181功能-查看直播|回放|对讲|播放|录像|级联UDP|TCP|H264|H265会话 1、会话列表2、会话类型3、搭建GB28181视频直播平台 1、会话列表 LiveGBS-> 国标设备-》点击在线状态 点击会话列表 2、会话类型 下拉会话类型可以看到 直播会话、回放会话、下载…

Windows网络问题:局域网内电脑连接wifi连不上

Windows网络问题&#xff1a;局域网内电脑连接wifi连不上 前提连接的网络没有问题 1、身边是否有人能连接上此网络 2、判断是否是无线网络的问题&#xff0c;寻找有线网络尝试 3、通过手机热点测试是否是电脑本身问题 经过上述的几步判断&#xff0c;如果是电脑本身的问题进行…

Qt中tableView控件的使用

tableView使用注意事项 tableView在使用时&#xff0c;从工具栏拖动到底层页面后&#xff0c;右键进行选择如下图所示&#xff1a; 此处需要注意的是&#xff0c;需要去修改属性&#xff0c;从UI上修改属性如下所示&#xff1a; 也可以通过代码修改属性&#xff1a; //将其设…

栈和队列——c语言实现栈

本节复习栈和队列中栈的增删查改。 首先回顾一下栈的性质&#xff1a; 栈的存储数据的原则是“后入先出”&#xff0c; 先入的在栈底&#xff0c; 后入的在栈顶。 弹出数据时在栈顶弹出。 开始实现栈的接口 栈的所有函数接口 //栈的初始化 void StackInit(Stack* pst); //入栈…

某查查首页瀑布流headers加密

目标网站&#xff1a; 某查查 对目标网站分析发现 红框内的参数和值都是加密的&#xff0c;是根据算法算出来的&#xff0c;故进行逆向分析。 由于没有固定参数名&#xff0c;只能通过搜索headers&#xff0c;在搜索的位置上打上断点&#xff0c;重新请求。 断点在此处断住&a…

半小时到秒级,京东零售定时任务优化怎么做的?

导言&#xff1a; 京东零售技术团队通过真实线上案例总结了针对海量数据批处理任务的一些通用优化方法&#xff0c;除了供大家借鉴参考之外&#xff0c;也更希望通过这篇文章呼吁大家在平时开发程序时能够更加注意程序的性能和所消耗的资源&#xff0c;避免在流量突增时给系统…

Data Leakage and Evaluation Issues inMicro-Expression Analysis 阅读笔记

IEEE Transactions on Affective Computing上的一篇文章&#xff0c;做微表情识别&#xff0c;阅读完做个笔记。本文讨论了Data Leakage对模型准确度评估的影响&#xff0c;及如何融合多个微表情数据集&#xff0c;从而提升模型的准确度。工作量非常饱满&#xff0c;很认真&…

HTTP与HTTPS-HTTPS 的应用数据是如何保证完整性的?

资料来源 : 小林coding 小林官方网站 : 小林coding (xiaolincoding.com) HTTPS 的应用数据是如何保证完整性的? TLS 在实现上分为握手协议和记录协议两层 TLS 握手协议就是我们前面说的 TLS 四次握手的过程&#xff0c;负责协商加密算法和生成对称密钥&#xff0c;后续用此密…

第7集《灵峰宗论导读》

《灵峰宗论》导读。诸位法师&#xff0c;诸位同学&#xff0c;阿弥陀佛&#xff01;&#xff08;阿弥陀佛&#xff01;&#xff09; 请大家打开讲义第16面。 在这一科当中讲到乙一、发心篇&#xff0c;发心篇总共有五篇的论文。前面两篇主要是说明成佛作祖、堕坑落堑&#xf…

Dockerfile(3) - WORKDIR 指令详解

WORKDIR 切换到镜像中的指定路径&#xff0c;设置工作目录在 WORKDIR 中需要使用绝对路径&#xff0c;如果镜像中对应的路径不存在&#xff0c;会自动创建此目录一般用 WORKDIR 来替代 切换目录进行操作的指令 RUN cd <path> && <do something> WORKDIR…

WPF 【十月的寒流】学习笔记(3):DataGrid分页

文章目录 前言相关链接代码仓库项目配置&#xff08;省略&#xff09;项目初始配置xamlviewModel Filter过滤详细代码展示结果问题 Linq过滤CollectionDataxamlviewModel sql&#xff0c;这里用到数据库&#xff0c;就不展开了 总结 前言 我们这次详细了解一下列表通知的底层是…

分享three.js和cannon.js构建Web 3D场景

使用 three.js&#xff0c;您不再需要花哨的游戏PC或控制台来显示逼真的3D图形。 您甚至不需要下载特殊的应用程序。现在每个人都可以使用智能手机和网络浏览器体验令人惊叹的3D应用程序。 这个惊人的库和充满活力的社区是您在浏览器、笔记本电脑、平板电脑或智能手机上创建游…

jmeter(四)HTTP请求

启动jmeter&#xff0c;建立一个测试计划 这里再次说说怎么安装和启动jmeter吧&#xff0c;昨天下午又被人问到怎样安装和使用&#xff0c;我也是醉了&#xff1b;在我看来&#xff0c;百度能解决百分之八十的问题&#xff0c;特别是基础的问题。。。 安装&#xff1a;去官网…

账户名密码是怎样被窃取的,简单模拟攻击者权限维持流程。

前言 在我们进行渗透测试的时候&#xff0c;常常需要进行权限维持&#xff0c;常见的 Javascript窃取用户凭证是一种常见的攻击手法。之前我们可能学习过钓鱼网页的使用&#xff0c;如果我们通过渗透测试进入到用户的服务器&#xff0c;其实也可以通过在网页中植入Javascript代…

Python + Selenium —— 常用控制方法!

Selenium 体系中用来操作浏览器的 API 就是 WebDriver&#xff0c;WebDriver 针对多种语言都实现了一套 API&#xff0c;支持多种编程语言。 Selenium 通常用来做自动化测试&#xff0c;或者编写网络爬虫。 通常我们说的 Selenium 自动化操作&#xff0c;指的就是 WebDriver …

AI:138-开发一种能够自动化生成艺术品描述的人工智能系统

🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带关键代码,详细讲解供大家学习,希望…

备战蓝桥杯————如何判断回文链表

如何判断回文链表 题目描述 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为回文链表。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,2,1] 输出&#xff1a;true示例 2&#xff1a;…

【MySQL】SQL 入门和 DDL

1. 通用语法 SQL语句可以单行或多行书写&#xff0c;以分号结尾SQL语句可以使用空格/缩进来增强语句的可读性MySQL数据库的SQL语句不区分大小写&#xff0c;关键字建议使用大写注释&#xff1a; 单行注释&#xff1a;-- 注释内容 或 # 注释内容多行注释&#xff1a;/* 注释内容…

Linux线程(二)----- 线程控制

目录 前言 一、线程资源区 1.1 线程私有资源 1.2 线程共享资源 1.3 原生线程库 二、线程控制接口 2.1 线程创建 2.1.1 创建一批线程 2.2 线程等待 2.3 终止线程 2.4 线程实战 2.5 其他接口 2.5.1 关闭线程 2.5.2 获取线程ID 2.5.3 线程分离 三、深入理解线程 …