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


    前言

    在上一篇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.硬编码方式

    1. @RestController
    2. public class NacosConfigController {
    3. @Autowired
    4. private ConfigurableApplicationContext applicationContext;
    5. @GetMapping("/nacos-config-test2")
    6. public String nacosConfingTest2() {
    7. return applicationContext.getEnvironment().getProperty("config.appName");
    8. }
    9. }

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

    1. @RestController
    2. @RefreshScope//只需要在需要动态读取配置的类上添加此注解就可以
    3. public class NacosConfigController {
    4. @Value("${config.appName}")
    5. private String appName;
    6. @GetMapping("/nacos-config-test1")
    7. public String nacosConfingTest1() {
    8. return appName;
    9. }
    10. }

    配置共享

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

    同一服务下的配置共享

    实现步骤:

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

    #多配置一段

    config:

    env: test

    #多配置一段

    config:

    env: dev

    • 添加测试方法
    1. @RestController
    2. @RefreshScope
    3. public class NacosConfigController {
    4. @Value("${config.env}")
    5. private String env;
    6. //3 同一微服务的不同环境下共享配置
    7. @GetMapping("/nacos-config-test3")
    8. public String nacosConfingTest3() {
    9. return env;
    10. }
    11. }

    在不同服务下共享配置

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

    • 在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 # 环境标识

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

  • 相关阅读:
    dotnet SemanticKernel 入门 自定义变量和技能
    在线问题反馈模块实战(二十):实现文件批量导出到zip压缩包中功能
    XAF新手入门 - 类型子系统(Types Info Subsystem)
    一文了解 io.Copy 函数
    MapReduce、hive、hadoop的一些笔记
    JavaSE入门---认识运算符
    Unity 图片相关
    Qgis 加载在线地图:如高德、天地图、OSM等
    java计算机毕业设计基于安卓Android的校园跑腿代购app
    农业大数据概论-按章节复习
  • 原文地址:https://blog.csdn.net/weixin_51450341/article/details/132815058