基于分布式系统结构下Nacos配置中心的应用

news2024/11/26 2:59:42

前言

在上一篇nacos初始中,已经描述过Nacos的基本知识,在这篇博客里记录的是Nacos配置中心的使用。

Nacos配置中心的作用

  1. 集中化配置管理:Nacos配置中心支持将应用程序的配置信息集中管理,包括常规的属性配置、文本配置、JSON配置等。你可以通过Nacos的控制台或API进行配置的创建、更新、删除和查询。

  2. 动态配置更新:配置中心可以实现配置的动态更新,即在应用程序运行期间,无需重启应用程序就能修改已经配置的属性。当配置更新时,Nacos能够即时通知到应用程序,应用程序可以立即获取新的配置值。

  3. 配置版本管理:Nacos配置中心支持配置的版本管理,可以为每个配置项设定不同的版本,并且可以查看和恢复历史版本的配置。

  4. 统一的命名空间管理:Nacos配置中心支持命名空间的划分,不同的命名空间可以实现配置的隔离和管理。每个命名空间都具有独立的配置存储和权限设置。

  5. 高可用和可扩展:Nacos配置中心支持集群部署,可以确保高可用性和可伸缩性。你可以根据应用程序的需求进行配置中心的水平扩展,以应对高并发的配置读取请求。

🆗上图描述了如何通过nacos集中管理多个服务的配置

  • 用户通过Nacos Server的控制太集中对多个服务的配置进行管理
  • 各个服务统一从Nacos Server 中获取各自的配置,并监听配置的变化

发布配置

在上一篇博客中,我简单发布了一个配置,并通过Java代码进行了获取。在这篇博客中,我还是先发布一个自定义配置,然后基于微服务进行获取。

配置发布后获取配置,首先需要有搭建好的微服务项目,分别新建service1和service2两个微服务,下面以service1为例,进行获取

step1:修改配置文件名为bootstrap.yaml

step2:设置配置文件,如下图所示

step3:定义访问端点,我偷懒,在启动类上加了

这里的@Value是Spring提供的用于属性赋值的注解,支持直接注入常量值、SpEL表达式、属性文件中的值以及其他Spring容器中的bean,这里的用法是注入属性文件中的值

配置热更新

所谓配置热更新是说可以在不重启服务器的情况下,在运行时对应用程序的配置进行动态的修改,配置热更新可以通过两种方式实现,分别是硬编码和添加注解

1.硬编码方式

@RestController

public class NacosConfigController {

@Autowired

private ConfigurableApplicationContext applicationContext;

    @GetMapping("/nacos-config-test2")

    public String nacosConfingTest2() {

        return applicationContext.getEnvironment().getProperty("config.appName");

    }

}

2.在@Value注入的变量所在类上添加注解@RefreshScope

@RestController

@RefreshScope//只需要在需要动态读取配置的类上添加此注解就可以

public class NacosConfigController {

    @Value("${config.appName}")

    private String appName;

    @GetMapping("/nacos-config-test1")

    public String nacosConfingTest1() {

        return appName;

    }

}

配置共享

配置共享是说,提取各个微服务中的相同配置生成一个公共的配置文件,供所有微服务使用。通过配置共享,可以避免在每个应用程序中都配置相同的信息,提高配置的复用性和一致性。

同一服务下的配置共享

实现步骤:

  • 新建一个以 spring.application.name 命名的配置文件,然后将其所有环境的公共配置放在里面
  • 新建一个名为service-product-test.yaml配置存放测试环境的配置
  • 新建一个名为service-product-dev.yaml配置存放开发环境的配置
  • 在两个环境文件中配置独有信息,例如:

#多配置一段

config:

env: test

#多配置一段

config:

env: dev

  • 添加测试方法
@RestController

@RefreshScope

public class NacosConfigController {

    @Value("${config.env}")

    private String env;

    //3 同一微服务的不同环境下共享配置

    @GetMapping("/nacos-config-test3")

    public String nacosConfingTest3() {
    
        return env;

    }

}

在不同服务下共享配置

不同服务之间实现配置共享的原理类似于文件引入,就是定义一个公共配置,然后在当前配置中引入。

  • 在nacos中定义一个DataID为all-service.yaml的配置,用于所有微服务共享

spring: 
    datasource: 
        driver-class-name: com.mysql.jdbc.Driver 
        url: jdbc:mysql:///shopserverTimezone=UTC
        username: root 
        password: root 
    cloud:
        nacos: 
            discovery: 
                server-addr: 127.0.0.1:8848

  • 修改bootstrap.yaml

spring: 
    application: 
        name: service-product 
    cloud: 
        nacos: 
            config: 
                server-addr: 127.0.0.1:8848 #nacos中心地址 
                file-extension: yaml # 配置文件格式 
                shared-dataids: all-service.yaml # 配置要引入的配置
                refreshable-dataids: all-service.yaml # 配置要实现动态配置刷新的配置         
    profiles: 
        active: dev # 环境标识

然后启动微服务测试就可以啦 

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

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

相关文章

界面控件DevExtreme DateRangeBox组件发布,支持日期范围选择!

在最新的v23.1版本中,DevExpress官方已经正式发布了DevExtreme DateRangeBox小部件,支持所有JavaScript框架,包括Angular、React、Vue和jQuery。这个新的控件允许最终用户选择一个日期范围,该组件继承了DateBox组件的特性&#xf…

【笔记】简单算法查找、排序的思路和优化

系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 例如:第一章 Python 机器学习入门之pandas的使用 提示:写完文章后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目…

李佳琦翻车,眉笔比黄金还贵?美妆品牌如何巧用AIGC降本增效?

又一个顶流翻车了。 9月10日,像往常一样,李佳琦站在镜头前,手中握着一支某国货品牌的眉笔,向消费者激情满满地进行介绍。却不曾想,下一秒却引发了风暴,仿佛随着键盘的敲击声一同汇聚,直指这位“…

如何使用ArcGIS中的Arcmap进行矢量和栅格数据裁剪?

在地理信息系统(GIS)中,我们经常需要处理各种空间数据,而矢量和栅格数据是最常见的两种数据类型。有时候,我们需要对数据进行裁剪,以提取出我们需要的特定区域的数据。本文将介绍如何使用ArcGIS中的Arcmap软件对矢量和栅格数据进行…

回溯系列--11个题

组合问题 第77题. 组合 题⽬链接:https://leetcode-cn.com/problems/combinations/ 给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。 ⽰例: 输⼊: n 4, k 2 输出: [ [2,4], [3,4], [2,3], [1,2], [1,3], [1,4], ] class Solution …

分享一下蛋糕店在微信小程序上可以实现什么功能

蛋糕店在微信小程序上可以实现的功能 微信小程序作为一种新型的商业模式,正逐渐成为各行各业拓展线上业务的重要手段。对于蛋糕店来说,开发微信小程序可以实现以下功能: 一、展示产品和服务 微信小程序可以作为蛋糕店的产品展示平台&#x…

树状数组总结

【使用总结】 经典用法:单点更新o(logn),区间查询/区间最大值(1~n,求sum),o(logn) 扩展用法:区间修改,如对[x,y]区间加上一个数k 模板题:力扣(LeetCode)官网 - 全球极…

操作指南 | 如何参与Moonbeam投票委托

投票委托允许没有时间或者专业度一般的用户能够在治理中拥有话语权。该功能加强了决策流程,并且确保更大范围地代表社区利益。 通过Moonbeam委托平台,你需要 $GLMR 和一个相兼容的钱包。此教程使用MetaMask示范。 如何参与投票委托 前往http://delega…

Python数据容器的总结

1、数据容器分类 数据容器(一共五个)可以从以下视角进行简单的分类: 是否支持下标索引 支持:列表、元组、字符串(序列类型) 不支持:集合、字典(非序列类型&#xff…

基于SSM的校园代购服务订单管理系统

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用Vue技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

日本SolarView Compact光伏发电测量系统 目录遍历漏洞复现(CVE-2023-40924)

日本SolarView Compact光伏发电测量系统 目录遍历漏洞复现CVE-2023-40924 一. 系统简介二.漏洞描述三.影响版本四.fofa查询语句五.漏洞复现六.POC&EXP七、修复建议 免责声明:请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或…

使用java连接Libvirtd

基于springboot web 一、依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId>&l…

网站优化如何更新文章才有效果,有技巧的更新SEO优化文章

很多新手SEO人员都不太清楚网站为什么要每天更新文章&#xff1f;每天更新文章的主要目的是让新站更快地通过审核期&#xff0c;让老网站避免被降权。同时拥有更多的关键词排名&#xff0c;整体提升网站的流量。 提供新鲜和有用的内容&#xff1a;搜索引擎非常重视新鲜和有用的…

长胜证券:美科技股大跌,甲骨文一夜蒸发超3000亿

当地时间9月12日&#xff0c;美股三大股指跌落&#xff0c;其中&#xff0c;道指跌0.05%&#xff0c;标普指数跌0.57%&#xff0c;纳斯达克指数跌1.04%。本周商场重视通胀与顾客开支等经济数据。当天发布的数据显现&#xff0c;美国8月份线上商品价格创40个月最大降幅。美国房租…

四川Certum便宜多域名SSL证书

多域名SSL证书是一种安全协议&#xff0c;通过SSL/TLS协议对多个域名进行加密传输&#xff0c;实现网站的安全访问和数据传输。它不仅可以保护网站的信息安全&#xff0c;还可以提高网站的信任度和排名 。 而Certum是正规的SSL证书颁发机构&#xff0c;旗下SSL证书产品众多&…

docker 镜像内执行命令显示:You requested GPUs: [0] But your machine only has: []

目录 问题描述&#xff1a; 问题解决&#xff1a; 问题描述&#xff1a; 在docker 镜像环境中&#xff0c;执行“docker exec -it container_name /bin/bash “进入容器之后&#xff0c;执行对应的python命令&#xff0c;显示You requested GPUs: [0] But your machine only…

基于Java+SpringBoot+Vue+uniapp校园点餐小程序(包含协同过滤算法和会员系统,强烈推荐!)

校园点餐小程序 一、前言二、我的优势2.1 自己的网站2.2 自己的小程序&#xff08;小蔡coding&#xff09;2.3 有保障的售后2.4 福利 三、开发环境与技术3.1 MySQL数据库3.2 Vue前端技术3.3 Spring Boot框架3.4 微信小程序 四、功能设计4.1 系统功能结构设计4.2 主要功能描述 五…

【【萌新编写risc-v之软件的学习使用】】

萌新编写risc-v软件的学习使用 对于vscode我其实没什么好说的 就是先配置好环境 其实vscde作为一个编译器的软件 其实并不需要指望能往里面加载多少功能 我们需要做的就是赋予编辑器更好用的功能和体验 有些人会在vscode里面甚至加入波形 仿真 我觉得不如交给 vivado来用 在vs…

车载摄像头进入「多元」增长周期,哪些图像传感器厂商领跑竞争力

随着单车搭载摄像头数量的增加&#xff0c;以及对于摄像头性能要求的提高&#xff0c;汽车级图像传感器&#xff08;CIS&#xff09;市场在2022年成为仅次于手机行业的第二大应用领域。 高工智能汽车研究院监测数据显示&#xff0c;2023年1-6月中国市场&#xff08;不含进出口…

Java基础面试整理

Java基础面试 摘要1. 数据类型和变量2. 控制流语句3. 面向对象编程4. 异常处理5. 集合框架6. 多线程7. 输入输出流8. 设计模式9. 字符串操作10. 数组11. 枚举&#xff08;Enum&#xff09;12. 包&#xff08;Package&#xff09;和导入&#xff08;Import&#xff09;13. 接口&…