• 服务注册与配置一站式管理神器Nacos(四)-- 配置中心的使用


    一、配置

    配置介绍:

    通常我们在项目中会有很多参数需要配置到项目中去,应用程序在启动和运行的时候往往需要读取一些配置信息,配置基本上伴随着应用程序的整个生命周期,比如:数据库连接参数、启动参数等。

    配置的几个特点:

    1、配置是独立于程序的只读变量

    配置对于程序是只读的,程序通过读取配置来改变自己的行为,但是程序不应该去改变配置

    2、配置伴随应用的整个生命周期

    配置贯穿于应用的整个生命周期,应用在启动时通过读取配置来初始化,在运行时根据配置调整行为。
    比如:启动时需要读取服务的端口号、系统在运行过程中需要读取定时策略执行定时任务等。

    3、配置可以有多种加载方式

    常见的有程序内部hard code,配置文件,环境变量,启动参数,基于数据库等

    4、配置需要治理

    同一份程序在不同的环境(开发,测试,生产)、不同的集群(如不同的数据中心)经常需要有不同的
    配置,所以需要有完善的环境、集群配置管理

    配置中心

    在微服务架构中,当系统从一个单体应用,被拆分成分布式系统上一个个服务节点后,配置文件也必须跟着迁移,这样配置就分散了,不仅如此,分散中还包含着冗余,而配置中心的作用就是将配置从各应用中剥离出来,对配置进行统一管理,应用自身不需要自己去管理配置

    配置中心的服务流程:

    1、用户在配置中心更新配置信息。
    2、服务A和服务B及时得到配置更新通知,从配置中心获取配置。

    总得来说,配置中心就是一种统一管理各种应用配置的基础服务组件
    在系统架构中,配置中心是整个微服务基础架构体系中的一个组件,如下图。它的功能看上去并不起眼,无非就是
    配置的管理和存取,但它是整个微服务架构中不可或缺的一环。
    在这里插入图片描述

    配置中心特性:

    1、配置项容易读取和修改
    2、分布式环境下应用配置的可管理性,即提供远程管理配置的能力
    3、支持对配置的修改的检视以把控风险
    4、可以查看配置修改的历史记录
    5、不同部署环境下应用配置的隔离性

    主流配置中心对比

    目前市面上用的比较多的配置中心有:Spring Cloud Config、Apollo、Nacos,下面是比对情况。
    在这里插入图片描述
    从配置中心角度来看,性能方面Nacos的读写性能最高,Apollo次之,Spring Cloud Config依赖Git场景不适合开
    放的大规模自动化运维API。功能方面Apollo最为完善,nacos具有Apollo大部分配置管理功能,而Spring Cloud
    Config不带运维管理界面,需要自行开发。Nacos的一大优势是整合了注册中心、配置中心功能,部署和操作相比
    Apollo都要直观简单,因此它简化了架构复杂度,并减轻运维及部署工作。

    Nacos配置管理

    1、发布配置

    首先在nacos发布配置,nacos-restful-consumer服务从nacos读取配置。
    浏览器访问 http://127.0.0.1:8848/nacos ,打开nacos控制台,并点击菜单配置管理->配置列表:
    在Nacos添加如下的配置:
    nacos-restful-consumer:
    在这里插入图片描述注:如发布失败,按以下思路去排除错误。
    1、nacos的版本和mysql的版本是否对应。 如果mysql是8.0以上,则nacos需1.4版本以上。
    2、如果版本兼容,则需考虑mysql的url连接,用户名,密码是否正确。

    2、获取配置

    要想从配置中心获取配置需添加nacos-config的依赖:

    <dependency>
    	<groupId>com.alibaba.cloud</groupId>
    	<artifactId>spring‐cloud‐starter‐alibaba‐nacos‐config</artifactId>
    </dependency>
    
    • 1
    • 2
    • 3
    • 4

    在bootstrap.yml添加配置:

    spring:
    	cloud:
    		nacos:
    			config:
    				server‐addr: 127.0.0.1:8848 # 配置中心地址
    				file‐extension: yaml
    				group: DEFAULT_GROUP
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    注意:要使用配置中心就要在bootstrap.yml中来配置,bootstrap.yml配置文件的加载顺序要比application.yml要优先。

    在nacos-restful-consumer工程的controller中增加获取配置的web访问端点/configs,通过标准的spring @Value方式。

    @Value("${common.name}")
    private String common_name;
    
    @GetMapping(value = "/configs")
    public String getvalue(){
    return common_name;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    基于上面的例子,若要实现配置的动态更新,只需要进行如下改造:

    // 注入配置文件上下文
    @Autowired
    private ConfigurableApplicationContext applicationContext;
    
    @GetMapping(value = "/configs")
    public String getConfigs(){
    return applicationContext.getEnvironment().getProperty("common.name");
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    我们通过nacos控制台更新common.name的配置值,再次访问web端点/configs,发现应用程序能够获取到最新的配置值,说明spring-cloud-starter-alibaba-nacos-config 支持配置的动态更新。

    注:Note 可以通过配置spring.cloud.nacos.config.refresh.enabled=false来关闭动态刷新

    配置模型管理

    对于Nacos配置管理,通过Namespace、group、Data ID能够定位到一个配置集。
    在这里插入图片描述

    配置集(Data ID)

    在系统中,一个配置文件通常就是一个配置集,一个配置集可以包含了系统的各种配置信息,例如,一个配置集可能包含了数据源、线程池、日志级别等配置项。每个配置集都可以定义一个有意义的名称,就是配置集的ID即Data ID。

    配置项

    配置集中包含的一个个配置内容就是配置项。它代表一个具体的可配置的参数与其值域,通常以 key=value 的形式存在。例如我们常配置系统的日志输出级别(logLevel=INFO|WARN|ERROR) 就是一个配置项。

    配置分组(Group)

    配置分组是对配置集进行分组,通过一个有意义的字符串(如 Buy 或 Trade )来表示,不同的配置分组下可以有相同的配置集(Data ID)。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。配置分组的常见场景:可用于区分不同的项目或应用,例如:学生管理系统的配置集可以定义一个group为:STUDENT_GROUP。

    命名空间(Namespace)

    命名空间(namespace)可用于进行不同环境的配置隔离。例如可以隔离开发环境、测试环境和生产环境,因为它们的配置可能各不相同,或者是隔离不同的用户,不同的开发人员使用同一个nacos管理各自的配置,可通过namespace隔离。不同的命名空间下,可以存在相同名称的配置分组(Group) 或 配置集。
    如果想了解的更加深入,请看下图:
    在这里插入图片描述

    Namespace:代表不同环境,如开发、测试、生产环境。
    Group:代表某项目,如XX医疗项目、XX电商项目
    DataId:每个项目下往往有若干个工程,每个配置集(DataId)是一个工程的主配置文件

    下面演示下获取某配置集的代码:
    获取配置集需要指定:
    1、nacos服务地址,必须指定
    2、namespace,如不指定默认public
    在config中指定namespace,例子如下:

    config:
    server‐addr: 127.0.0.1:8848 # 配置中心地址
    file‐extension: yaml
    namespace: a1f8e863‐3117‐48c4‐9dd3‐e9ddc2af90a8 # 开发环境
    group: DEFAULT_GROUP # xx业务组
    
    • 1
    • 2
    • 3
    • 4
    • 5

    3、group,如不指定默认 DEFAULT_GROUP 见上边第2点的例子。
    4、dataId,必须指定,名称为应用名称+配置文件扩展名

    在这里插入图片描述

  • 相关阅读:
    第七篇章——垃圾回收概念及相关算法
    STM32F407 2个高级定时器生成2路无刷电机波形以及相电流采集程序(寄存器版)
    9.4-9.6 章读书笔记
    MobileNetv1论文详解
    万丈高楼平地起,每个API皆根基
    @ConditionalOnProperty注解作用
    CMAKE语法:target_compile_definitions、message、make -f、add_library
    举个栗子~Minitab 技巧(3):用分组条形图快速对比数据
    既要便捷、安全+智能,也要颜值,萤石发布北斗星人脸锁DL30F和极光人脸视频锁Y3000FV
    app小程序手机端Python爬虫实战06UiSelector文本、className定位方式
  • 原文地址:https://blog.csdn.net/stalin_/article/details/126201331