SpringCloud Alibaba 2022之Nacos学习
SpringCloud Alibaba 2022使用
SpringCloud Alibaba 2022需要Spring Boot 3.0以上的版本,同时JDK需要是17及以上的版本。具体的可以看官网的说明。
Spring Cloud Alibaba版本说明
环境搭建
这里搭建的是一个聚合项目。项目结构如下:

父项目的pom.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>spring-cloud-alibaba-demo</artifactId><version>0.0.1-SNAPSHOT</version><name>spring-cloud-alibaba-demo</name><description>spring-cloud-alibaba-demo</description><packaging>pom</packaging><!--指定依赖的版本 --><properties><java.version>17</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding><spring-boot.version>3.0.2</spring-boot.version><spring-cloud-alibaba.version>2022.0.0.0-RC2</spring-cloud-alibaba.version></properties><modules><module>conuserservice01</module><module>providerservice01</module></modules><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency></dependencies><dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${spring-boot.version}</version><type>pom</type><scope>import</scope></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>${spring-cloud-alibaba.version}</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.8.1</version><configuration><source>17</source><target>17</target><encoding>UTF-8</encoding></configuration></plugin><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>${spring-boot.version}</version><configuration><mainClass>com.example.springcloudalibabademo.SpringCloudAlibabaDemoApplication</mainClass><skip>true</skip></configuration><executions><execution><id>repackage</id><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build></project>
Nacos
Nacos简介和安装
Nacos是 Dynamic Naming and Configuration Service 的首字母简称,Naocs是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
Nacos概述
Nacos下载其实下载的是Nacos Server,我们下载启动Nacos Server后,访问8848端口就可以看到Nacos Server的登录页面了。默认登录用户名和密码都是Nacos。
Nacos下载

使用Nacos进行服务注册和发现
要想使用Nacos进行服务注册和发现,需要在创建的conuserservice01模块的pom文件和providerservice01模块的pom文件中加入nacos服务发现的依赖。
conuserservice01模块的pom文件如下,providerservice01模块的pom文件也是类似的。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>conuserservice01</artifactId><version>0.0.1-SNAPSHOT</version><name>conuserservice01</name><description>conuserservice01</description><parent><artifactId>spring-cloud-alibaba-demo</artifactId><groupId>com.example</groupId><version>0.0.1-SNAPSHOT</version></parent><packaging>jar</packaging><properties><java.version>17</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding></properties><dependencies><!--nacos服务发现--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency></dependencies></project>
创建application.yml文件,配置Nacos Server的地址
spring:cloud:nacos:discovery:server-addr: 127.0.0.1:8848 #Nacos Server地址application:name: consumerservice01 #应用名称server:port: 8890 #端口号
启动consumerservice01应用,然后在Nacos的服务管理菜单下的服务列表可以看到consumerservice01应用。

如果对Eureka熟悉的话,那么应该知道我们在进行服务发现时,需要在启动类上加上@EnableDiscoveyClient注解,但是这里不加也是可以的,具体原因如下:
添加链接描述
Nacos服务分级存储模型

一级是服务,例如consumerservice01;二级是集群;三级是实例。
spring:cloud:nacos:discovery:cluster-name: SH #集群名称
重新启动应用后,可以看到显示了集群的名称

Nacos环境隔离
Namespace
用于租户粒度的配置隔离。不同的命名空间下可以存在相同的 Group 或 Data ID 的配置c
使用场景:一般用Namespace来实现环境隔离,例如:测试环境和生产环境的隔离。
Group
分组(Group)是次于命名空间的一种隔离概念
使用场景:区分项目。(用于多个项目共用Nacos的情况)

- 在Nacos中,只有当两个服务在同一个namespace、同一个group下时,两个服务才能互相访问;
- 注册到Naocs中的服务默认是在public namespace的DEFAUlT_GROUP下的;
在yml文件中配置服务的namespace和group
spring:cloud:nacos:discovery:namespace: 8ff552f0-0212-43b2-8ea0-e4c2aa359084 #命名空间idgroup: testgroup1 #设置服务的分组
Nacos配置中心
配置中心的出现是为了解决当服务实例较多时,如果想修改配置,则需要修改很多配置文件的问题,同时修改配置文件后服务实例还需要进行重启;上面说的问题总结一句其实就是微服务和配置文件的耦合问题。
当我们引入Nacos配置管理后,服务实例会从Nacos Server中读取配置文件,而这里面存在一个问题,只有连接Nacos后才能获取到配置文件,但是要连接Nacos需要知道Nacos Server的地址,而application.yml是在项目启动后加载的;
目前项目启动读取配置文件的流程如下图所示:

解决上面的问题,需要用到另一个配置文件,也就是bootstrap.yml文件,顾名思义就是引导/启动配置文件,在项目启动的时候就会加载这个文件,把nacos Server的地址放在这个配置文件中就可以解决上面的问题了。
使用bootstarp配置文件后的流程如下:

Spring Cloud Config配置中心也是同样的原理,也需要用到bootstrap配置文件。
如果想让Nacos管理配置,则需要在微服务的依赖中引入Nacos的配置管理客户端依赖。
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><!--springboot无法识别bootstrap文件的问题--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId><version>3.0.1</version></dependency>
创建bootstrap.yml文件,设置Nacos Server的地址
spring:cloud:nacos:config:server-addr: 127.0.0.1:8848file-extension: yamlnamespace: 8ff552f0-0212-43b2-8ea0-e4c2aa359084 #配置文件命名空间要和服务实例的一致group: DEFAULT_GROUP #配置文件的组要和服务实例的一致application:name: consumerservice #服务的名称profiles:active: dev
在Nacos Server中创建配置文件


在代码中获取配置文件中值

配置文件热更新
1、在@Value注入的变量的所在类上添加注解

2、使用@ConfigurationProperties注解

多环境配置共享和多配置文件优先级



参考
- Nacos高版本服务发现失败以及无法使用NacosRule问题
- 无法连接(读取) nacos 配置中心及文件(能踩的坑都踩了)
- Nacos 概念
相关文章:
SpringCloud Alibaba 2022之Nacos学习
SpringCloud Alibaba 2022使用 SpringCloud Alibaba 2022需要Spring Boot 3.0以上的版本,同时JDK需要是17及以上的版本。具体的可以看官网的说明。 Spring Cloud Alibaba版本说明 环境搭建 这里搭建的是一个聚合项目。项目结构如下: 父项目的pom.xm…...
js之数组遍历
for 可以用来遍历数组、字符串、类数组、DOM节点,可以更改原数组,可以使用break、continue 跳出循环 return 只能在函数内部使用 for(声明循环变量;判断循环条件;更新循环变量){循环体 }forEach 参数(当前元素&#x…...
极狐GitLab 16.9 重磅发布,快来 pick 你心仪的功能吧~【五】
GitLab 是一个全球知名的一体化 DevOps 平台,很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版,专门为中国程序员服务。可以一键式部署极狐GitLab。 沿袭我们的月度发版机制,今天我们正式发布极狐GitL…...
如何在本地部署密码管理软件bitwarden并结合cpolar实现远程同步
文章目录 1. 拉取Bitwarden镜像2. 运行Bitwarden镜像3. 本地访问4. 群晖安装Cpolar5. 配置公网地址6. 公网访问Bitwarden7. 固定公网地址8. 浏览器密码托管设置 Bitwarden是一个密码管理器应用程序,适用于在多个设备和浏览器之间同步密码。自建密码管理软件bitwarde…...
DT DAY3 信号和槽
作业: 1> 思维导图 2> 使用手动连接,将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中,在自定义的槽函数中调用关闭函数 btn3 new QPushButton("按钮3",this);btn3->resize(ui->btn2->width(),ui->b…...
Spring、SpringBoot、SpringCloud三者的区别
Spring、Spring Boot 和 Spring Cloud 是构建企业级 Java 应用程序的不同层次的框架和工具。下面详细介绍它们之间的区别: 1. Spring框架: 概述: Spring 是一个全功能的企业级 Java 框架,提供了依赖注入、面向切面编程、事务管理…...
leetcode:46.全排列
1.什么是排列? 有顺序!! 2.树形结构: 使用used数组进行标记取过的元素,一个元素一个元素地进行取值,取完之后将used数组进行标记。 3.代码实现:(循环从i0开始,而不是…...
基于STM32的宠物箱温度湿度监控系统
基于STM32的宠物箱温度湿度监控系统 一、引言 随着人们生活水平的提高,养宠物已经成为越来越多人的选择。宠物作为家庭的一员,其生活环境和健康状况受到了广泛关注。温度和湿度是影响宠物舒适度和健康的重要因素之一。因此,开发一款能够实时监控宠物箱温度和湿度的系统具有…...
《高质量的C/C++编程规范》学习
目录 一、编程规范基础知识 1、头文件 2、程序的板式风格 3、命名规则 二、表达式和基本语句 1、运算符的优先级 2、复合表达式 3、if语句 4、循环语句的效率 5、for循环语句 6、switch语句 三、常量 1、#define和const比较 2、常量定义规则 四、函数设计 1、参…...
客户端订阅服务端事件的机制
一、场景描述 产业大脑平台是一个典型的审核系统,用户发布到平台的信息需要经过审核员审核后生效。 用户发布信息->审核员审核信息->用户信息生效,这一流程可能发生在用户的同一次登录周期内。为了使客户端能实时响应信息的状态变化,…...
pulsar入门介绍
概述 Pulsar 是一个多租户、高性能的服务器到服务器消息传递解决方案。Pulsar 最初由 Yahoo 开发,由 Apache 软件基金会管理。 特点 Pulsar 的主要功能如下: 原生支持 Pulsar 实例中的多个集群,可跨集群无缝地复制消息。非常低的发布和端…...
Leetcode 3047. Find the Largest Area of Square Inside Two Rectangles
Leetcode 3047. Find the Largest Area of Square Inside Two Rectangles 1. 解题思路2. 代码实现 题目链接:3047. Find the Largest Area of Square Inside Two Rectangles 1. 解题思路 这道题倒是没啥特别的思路,直接暴力求解就是了,因此…...
ELK 简介安装
1、概念介绍 日志介绍 日志就是程序产生的,遵循一定格式(通常包含时间戳)的文本数据。 通常日志由服务器生成,输出到不同的文件中,一般会有系统日志、 应用日志、安全日志。这些日志分散地存储在不同的机器上。 日志…...
Linux 的交换空间(swap)是什么?有什么用?
目录 swap是什么?swap有什么用?swap使用典型场景如何查看你的系统是否用到交换空间呢?查看系统中swap in/out的情况 swap是什么? swap就是磁盘上的一块区域。它和Windows系统中的交换文件作用类似,但是它是一段连续的…...
消息中间件篇之RabbitMQ-消息不丢失
一、生产者确认机制 RabbitMQ提供了publisher confirm机制来避免消息发送到MQ过程中丢失。消息发送到MQ以后,会返回一个结果给发送者,表示消息是否处理成功。 当消息没有到交换机就失败了,就会返回publish-confirm。当消息没有到达MQ时&…...
MongoDB中的TTL索引:自动过期数据的深入解析与使用方式
目录 一、TTL索引的深入原理二、TTL索引的使用方式三、TTL索引的限制与考虑因素四、优化TTL索引的策略五、总结 一、TTL索引的深入原理 TTL(Time-To-Live)索引在MongoDB中是一种特殊的索引,用于自动删除过期的文档。其核心原理在于MongoDB会…...
IPV6地址
技术背景:对IPV4做优化,比如地址长度128,简化了报文头部---快 ipv6地址 十六进制,简写前导0忽略,连续的0写成:: IPv6地址类型 1.单播 2.组播---接口有地址后,自动加入到一个组播里 3.任播---允许地址…...
解密API关键词搜索(淘宝京东1688)商品列表数据
API关键词搜索商品列表数据:赋能电商行业的新动力 随着电子商务的蓬勃发展,API(应用程序接口)关键词搜索商品列表数据在电商行业中的重要性日益凸显。这一数据资源不仅为消费者提供了便捷的购物体验,还为电商企业带来…...
wpf 简单实验 数据更新 列表更新
1.概要 1.1 需求 一个列表提供添加修改删除的功能,添加和修改的内容都来自一个输入框 1.2 要点 DisplayMemberPath"Zhi"列表.ItemsSource datalist;(列表.SelectedItem ! null)(列表.SelectedItem as A).Zhi 内容.Text;datalist.Remove((列表.Selec…...
【Flink精讲】Flink性能调优:内存调优
内存调优 内存模型 JVM 特定内存 JVM 本身使用的内存,包含 JVM 的 metaspace 和 over-head 1) JVM metaspace: JVM 元空间 taskmanager.memory.jvm-metaspace.size,默认 256mb 2) JVM over-head 执行开销࿱…...
Java 数字校验实战:从工具类到正则,性能与场景的深度抉择
1. 数字校验的常见场景与挑战 在Java开发中,数字校验是个看似简单却暗藏玄机的基础操作。我见过太多项目因为数字校验不严谨导致的数据异常,比如用户输入"12a3"被误认为金额,或者接口接收"-1.2.3"这样的非法浮点数。这些…...
luci-app-aliddns:5分钟搞定动态IP远程访问,让家庭网络永不掉线
luci-app-aliddns:5分钟搞定动态IP远程访问,让家庭网络永不掉线 【免费下载链接】luci-app-aliddns OpenWrt/LEDE LuCI for AliDDNS 项目地址: https://gitcode.com/gh_mirrors/lu/luci-app-aliddns 你是否曾经因为家庭宽带的动态IP地址而无法稳定…...
突破性APK安装器:在Windows上高效运行Android应用的革命性方案
突破性APK安装器:在Windows上高效运行Android应用的革命性方案 【免费下载链接】APK-Installer An Android Application Installer for Windows 项目地址: https://gitcode.com/GitHub_Trending/ap/APK-Installer 你是否渴望在Windows电脑上无缝运行Android应…...
观察Taotoken在多模型并发调用时的延迟表现与稳定性
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 观察Taotoken在多模型并发调用时的延迟表现与稳定性 在构建复杂的AI应用时,开发者常常需要同时或交替调用多个不同的大…...
6.1 图表选择指南
本章学习目标: 理解数据可视化的核心目的:探索 vs 解释掌握不同分析场景对应的图表类型了解每种图表的优势和局限学会根据数据特征和分析目标选择图表核心能力:不只会画图,更知道为什么画这张图一、为什么要做数据可视化ÿ…...
为vscode中的claude code插件配置taotoken后端以解决封号困扰
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为vscode中的claude code插件配置taotoken后端以解决封号困扰 许多开发者在 Visual Studio Code 中使用 Claude Code 插件时&#…...
高项通关秘籍:十大管理ITTO核心逻辑与实战速记
1. 十大管理ITTO的本质与学习误区 第一次接触高项考试的朋友,看到十大管理47个过程域的ITTO(输入、工具与技术、输出)时,往往会被密密麻麻的表格吓到。我当年备考时,整整三天都在和这些缩写词较劲,直到发现…...
别再死记硬背了!通过eNSP搭建WLAN,一次搞懂AC+AP架构中的VLAN、CAPWAP和业务转发
从零构建企业级WLAN:ACAP架构中的关键技术解析与实战 在数字化转型浪潮中,无线网络已从简单的"能上网"演变为支撑业务运营的关键基础设施。对于网络工程师而言,理解ACAP架构背后的设计哲学,远比记住配置命令更为重要。本…...
Godot 4.x ECS插件GECS:数据驱动架构提升游戏性能与可维护性
1. 项目概述:GECS,为Godot 4.x注入ECS架构之力如果你正在用Godot开发游戏,尤其是那种实体数量多、交互逻辑复杂的项目,比如RTS、模拟经营或者一个满屏敌人的弹幕游戏,你很可能已经感受到了传统面向对象(OOP…...
为Claude Code配置Taotoken解决账号被封与Token不足的烦恼
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 为Claude Code配置Taotoken解决账号被封与Token不足的烦恼 对于依赖Claude Code进行编程辅助的开发者来说,直接使用官方…...
