详解SpringCloud微服务技术栈:Nacos配置管理

👨‍🎓作者简介:一位大四、研0学生,正在努力准备大四暑假的实习
🌌上期文章:详解SpringCloud微服务技术栈:Nacos服务搭建及服务分级存储模型
📚订阅专栏:微服务技术全家桶
希望文章对你们有所帮助

上一节讲了Nacos做服务搭建的方法,并与Eureka做了比较,Nacos除了可以做服务的搭建,比起Eureka还有更多的功能,即配置管理。
Nacos的集群搭建,感觉太复杂了,就一台电脑要弄很久去模拟,所以不做展示了。

Nacos配置管理

  • 统一配置管理
  • 微服务配置拉取
  • 配置热更新
  • 多环境配置共享

统一配置管理

在实际生产环境中会有很多的服务,服务之间又有互相调用的关系,每次重新配置,都可能使得其他服务也要修改一些配置,同时服务都得重启,在实际生产环境中的影响有时候还是很大的。因此需要将配置的文件进行统一的管理,同时这些配置的更改无须重启,直接热更新。
设置配置管理服务,当配置要做修改的时候,无须自己做改动,而是去配置服务管理中把需要配置的地方做修改。
而Nacos就拥有配置管理服务。
在这里插入图片描述
这里可以新建配置管理,这里的配置放着的是有热更新需求的配置:
在这里插入图片描述

微服务配置拉取

接下来,微服务需要得到这些统一配置。
假设没有Nacos的统一配置,其获取配置的步骤为:

1、启动项目
2、读取本地配置文件application.yml
3、创建Spring容器
4、加载bean

当加入了Nacos中的配置文件以后,服务启动之后,就需要先读Nacos中的配置文件,再将Nacos中的配置文件与本地的配置文件做一个合并。
需要考虑一些问题:从哪里读取Nacos地址,读取什么内容。
在此之前,要先获得Nacos的地址,就需要使用bootstrap.yml,优先级比application高。

步骤:
1、引入Nacos的配置管理客户端依赖:

		<dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

2、在userservice中的resource中添加bootstrap.yml文件,这是引导文件,优先级高于application.yml:

spring:
  application:
    name: userservice
  profiles:
    active: dev # 环境
  cloud:
    nacos:
      server-addr: localhost:8848 # Nacos地址
      config:
        file-extension: yaml # 文件后缀名

3、删除application.yml中的重复配置。

这样就可以拉取到配置了,可以在UserController中验证:

    @NacosValue("${pattern.dateformat}")
    private String dateformat;

    @GetMapping("now")
    public String now(){
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(dateformat));
    }

访问localhost:8081/user/now:
在这里插入图片描述
这说明微服务已经成功获取了Nacos中的配置信息。

将配置交给Nacos管理的步骤总结:
1、在Nacos中添加配置文件
2、在微服务中引入Naocs的config依赖
3、在微服务中添加bootstrap.yml,配置Nacos地址、当前环境、服务名称、文件后缀名。这些决定了程序启动时去Nacos读取哪个文件。

配置热更新

当我们直接修改Nacos配置后,重新访问网页是不会实现更新的,必须重启服务,这会导致损失,因此需要配置热更新。需要通过下面2种配置实现:
方式一:在@Value注入的变量所在类上添加@RefreshScope
在这里插入图片描述
方式二:使用@ConfigurationProperties注解
SpringBoot中注入属性不只有@Value方式,可以新建一个类,专门用来完成属性的加载:

@Data
@Component //注册成bean,让所有类都可以直接使用
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
    private String dateformat;
}

当需要用到的时候,直接注解获取即可:

	@Resource
    private PatternProperties patternProperties;
    
    @GetMapping("now")
    public String now(){
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(patternProperties.getDateformat()));
    }

方式二是更方便的,推荐使用。

多环境配置共享

有些环境的配置可能都是一样的,这时候要是配置可以共享,就可以避免多次修改了,更为方便。
实际上,微服务启动时会从Nacos读取多个配置文件:

[spring.application.name]-[spring.profiles.active].yaml,例如:userservice-dev.yaml
[spring.application.name].yaml,例如:userservice.yaml

无论profile如何变化,[spring.application.name].yaml这个文件一定会加载,因此多环境共享的配置可以写入这个文件。
打开Nacos控制台进行配置:
在这里插入图片描述
修改PatternProperties:
在这里插入图片描述
在controller中增加GetMapping方法:

	@GetMapping("prop")
    public PatternProperties properties(){
        return patternProperties;
    }

访问网址:
在这里插入图片描述
这里是访问到了dev环境的,我们可以将bootstrap.yml中的dev删掉或者做修改,并重启服务:
在这里插入图片描述
可以发现,共有的属性是可以访问到的。

配置的优先级问题

如果userservice.yaml与userservice-dev.yaml中有相同的配置名,以谁的为准?
本地application.yml与远端配置有相同配置名,以谁的为准?

答案:userservice-dev.yaml>userservice.yaml>application.yml

也就是说,服务名-profile.yaml >服务名称.yaml > 本地配置

集群的搭建才是重点,但是我就一台电脑,就不做模拟了,太麻烦了。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LaTeX系列1——主结构

初学&#xff0c;可交流&#xff0c;轻喷 \documentclass{book} \begin{document} \title{Book Title} \author{Author Name} \date{\today} \maketitle\chapter{Introduction} This is the introduction chapter of the book.\section{First Section} The first section of t…

学位论文中常用的参考文献格式

撰写学位论文中&#xff0c;要确保文献列表中列出的参考文献格式正确&#xff0c;为此这篇文章给出常用的参考文献格式。 目录 目录 一、学位论文中常用的文献类型&#xff1a; 1.1学位论文中常用的文献类型&#xff1a; 1.2作者名字的书写格式&#xff1a; 1.3特殊符号// …

JRTP实时音视频传输(1)-必做的环境搭建与demo测试

1.需求 1&#xff09;支持协议自动切换。在网络优的情况下使用TCP、网络差的情况下使用UDP&#xff0c;满足实时音视频传输需求&#xff0c; 2&#xff09;支持RTCP &#xff0c;流量控制&#xff0c;阻塞控制等。需要能支持RTCP&#xff0c;这样便能在这个基础上&#xff0c;…

人工智能 | 生成式 AI 如何重塑开发流程和开发工具?

生成式 AI 如何重塑开发流程和开发工具&#xff1f; 生成式人工智能&#xff08;Generative Artificial Intelligence&#xff0c;GAI&#xff09;是一种基于大规模数据训练学习&#xff0c;从而生成新的原创内容的人工智能。生成式人工智能可以生成各种形式的数据&#xff0c…

Kafka-生产者

Kafka在实际应用中&#xff0c;经常被用作高性能、可扩展的消息中间件。 Kafka自定义了一套网络协议&#xff0c;只要遵守这套协议的格式&#xff0c;就可以向Kafka发送消息&#xff0c;也可以从Kafka中拉取消息。 在实践生产过程中&#xff0c;一套API封装良好、灵活易用的客…

CC工具箱使用指南:【添加图层名和路径到字段】

一、简介 如题&#xff0c;这个工具的目的就是将图层的名称和路径添加到字段值中。 有时候图层的名称和路径也是重要的信息&#xff0c;需要参与到字段的计算或是分析中&#xff0c;但是Arcgis Pro中没有一个方便的方法可以将其写入字段值&#xff0c;因此&#xff0c;就做了…

机器学习周刊第六期:哈佛大学机器学习课、Chatbot Ul 2.0 、LangChain v0.1.0、Mixtral 8x7B

— date: 2024/01/08 — 吴恩达和Langchain合作开发了JavaScript 生成式 AI 短期课程&#xff1a;《使用 LangChain.js 构建 LLM 应用程序》 大家好&#xff0c;欢迎收看第六期机器学习周刊 本期介绍10个内容&#xff0c;涉及Python、机器学习、大模型等,目录如下&#xff…

特征工程-特征处理(三)

特征处理 连续型变量处理&#xff08;二&#xff09; 多特征 降维 PCA PCA是一种常见的数据分析方式&#xff0c;通过数据分解&#xff0c;将高维数据降低为低维数据&#xff0c;同时最大程度保持数据中保存的信息。 from sklearn.decomposition import PCA A np.array([[84…

表单生成器基于(form-create-designer+ant design vue)

效果展示 1.源码地址&#xff1a; 前端&#xff1a;https://gitee.com/houshixin/form-design-ui 后端&#xff1a;https://gitee.com/houshixin/form-design-web 2.单独使用前端的时候就把请前后台的接口注释就可以 3.都启动的话&#xff1a; 1&#xff09;.先导入数据库 2.表…

altair,一个超级厉害的 Python 库!

更多资料获取 &#x1f4da; 个人网站&#xff1a;ipengtao.com 数据可视化是数据科学和数据分析中不可或缺的一部分。它帮助我们以可视化的方式理解和传达数据&#xff0c;从而更好地发现数据中的模式、趋势和见解。在Python生态系统中&#xff0c;有许多优秀的数据可视化工具…

Three.js 镜面反射Reflector 为MeshStandardMaterial增加Reflector能力

效果效果官方案例 区别&#xff1a;官方的案例更像一个镜子 没有纹理等属性 也没有透明度修改 根据源码进行修改为 MeshStandardMaterial实现反射 使用案例 createReflector() {const plane this.helper.create.plane(2, 2);this.helper.add(plane.mesh);plane.mesh.rotat…

vue中设置注释模板

参考地址 ctrlshiftp 打开编辑器配置输入configure user snippets - 选择 new global snipp files - 命名为 vueComment&#xff0c;弹出注释模板&#xff0c;即可自定义注释 如下/// 回车 即可在代码块中使用注释 { "Print to console": {"prefix": &q…

机器学习周刊第五期:一个离谱的数据可视化Python库、可交互式动画学概率统计、机器学习最全文档、快速部署机器学习应用的开源项目、Redis 之父的最新文章

date: 2024/01/08 这个网站用可视化的方式讲解概率和统计基础知识,很多内容还是可交互的,非常生动形象。 大家好,欢迎收看第五期机器学习周刊 本期介绍7个内容,涉及Python、概率统计、机器学习、大模型等,目录如下: 一个离谱的Python库看见概率,看见统计2024机器学习最…

智慧港口解决方案:PPT全文53页,附下载

关键词&#xff1a;智慧港口建设方案&#xff0c;港口信息化建设&#xff0c;智慧港口发展现状与展望&#xff0c;智慧码头 一、建设智慧港口的意义 1、提高运营效率&#xff1a;智慧港口利用先进的技术手段&#xff0c;如物联网、大数据、人工智能等&#xff0c;对港口进行智…

Kafka 集群部署

目录 1、环境准备 2、搭建ZooKeeper集群 配置文件 节点标记 环境变量 启动集群 数据同步测试 故障测试 3、搭建 Kafka 集群 配置文件 环境变量 配置其他机器 启动服务 4、集群测试 创建 Topic 显示 Topic 配置 创建 Producer 创建consumer 删除Topic 查看Z…

挂载mount、卸载umount,和rpm安装包

1.创建一个挂载目录dvd 2.把dev/cdrom 挂载到dvd 3.查看 4.挂载的格式 卸载挂载点 dvd 重新挂载到nsd30 rpm安装包的安装位置 可执行命令&#xff1a;一般安装到/usr/bin下 服务器程序&#xff0c;管理工具&#xff1a;一般安装到sbin下 配置文件&#xff1a;一般安装到etc下…

可以部署到Vercel的一些有趣项目

博客地址 可以部署到Vercel的一些有趣项目-雪饼分享几款可以部署在Vercel上的项目&#xff0c;更新中~ 免费的域名要不要&#xff1f; 如果你还不会将项目部署到Vercel&#xff0c;或是绑定域名建议阅读 将项目部署到Vercel&#xff0c;并绑定域名 Excalidraw 白板 一个开源的…

Halcon提取彩色多通道图像的亚像素边缘edges_color_sub_pix算子

Halcon提取彩色多通道图像的亚像素边缘edges_color_sub_pix算子 如要要提取彩色多通道图像的亚像素边缘&#xff0c;可以使用edges_color sub pix算子。该算子与edges_sub_pix 算子的参数十分相似&#xff0c;但又有所区别。首先从名称上看&#xff0c;edges color sub pix 算…

电商API接口|Javascript抓取京东、淘宝商品数据

“ 不知怎么建站&#xff1f;就找怎么建站&#xff01; ” 背景&#xff1a; EDI许可证网站和ICP许可证网站需要有丰富的商品数据来应付EDI、ICP许可证下证审核。下面介绍的这种方法是我之前主要的抓取数据的方法&#xff0c;大概用了一年多。这几天又对这个方法进行了一些优…

k8s 存储卷和pvc,pv

存储卷---数据卷 容器内的目录和宿主机的目录进行挂载。 容器在系统上的生命周期是短暂的&#xff0c;deletek8s用控制器创建的pod&#xff0c;delete相当于重启&#xff0c;容器的状态也会回复到初始状态。 一旦回到初始状态&#xff0c;所有的后天编辑的文件的都会消失。 …