Nacos配置管理

1,统一配置管理 

在单体应用中,配置管理可能不是什么大的事情,通常会以配置文件的方式。常见的方法比如将配置通过打包脚本打入应用包中,或者直接放到运行应用的服务器的特定目录下,或者存储到数据库中。这种方式在传统的单体应用中简单有效,但是也会有些比较棘手的问题,比如:

  1. 配置变化频繁时,需要频繁的打包部署应用(服务重启带来的影响还是很大的)
  2. 不同环境的配置需要分开管理(比如测试环境与生产环境)。
  3. 而在分布式微服务架构中,服务数量剧增,如果还是手动去实现配置信息的修改或数据的迁移等,效率是很低的,而且手动操作配置也极有可能出现错误的情况

复杂的业务对应大量的配置项,对集群部署的应用配置进行修改时需要修改每个节点上的应用配置,在这种背景下,中心化的配置服务即配置中心应运而生。配置中心就是一种统一管理各种应用配置的基础服务组件,配置中心可以把业务开发者从复杂以及繁琐的配置中解脱出来,只需专注于业务代码本身,从而能够显著提升开发以及运维效率。同时将配置和发布包解藕也进一步提升发布的成功率,并为运维的细力度管控、应急处理等提供强有力的支持。

在微服务架构中,微服务的统一配置管理一般有以下需求:

  1. 集中管理配置:一个使用微服务架构的应用系统可能会包括成千上万个微服务,因此集中管理配置是非常有必要的。
  2. 不同环境不同配置:例如,数据源配置在不同的环境(开发、测试、预发布、生产等)中是不同的。
  3. 运行期间可动态调整:例如,可根据各个微服务的负载情况,动态调整数据源连接池大小或熔断阈值,并且在调整配置时不重启微服务。
  4. 配置修改后自动更新:如配置内容发生变化,微服务能够自动更新配置。

综上所述,对于微服务架构而言,一个通用的配置管理机制必不可少,常见做法是使用配置服务器管理配置。

Nacos不仅可以用注册发现,还可以做配置管理

2,Nacos配置管理

        1,把配置交给nacos去管理

        点击配置管理,点击加号

        DataId一般是  服务名称-开发环境.文件后缀,我们这里是springboot项目,习惯使用yaml文件,分组默认即可,在配置内容中填写你需要的配置发布即可

 发布成功如下:

        2,服务拉取配置

        配置获取流程:项目启动-->读取本地配置文件-->创建spring容器-->加载bean

        那项目启动如何读取nacos'中的配置文件囊,在项目启动后,会先读取nacos中的配置文件之后和本地的aoolication.yml文件做合并,之后在合并配置步骤如下:

        但是项目如何知道nacos的地址等信息呢,不知道地址就无法读取nacos的配置信息,那就需要读取配置文件,但是我先要读nacos你却让我读万配置文件在都nacos这就尴尬了,于是我们需要一个优先级高于application.yml文件的配置文件,也就是bootstrap.yml

关于优先级文件不清楚,可以参考:

SpringBoot配置文件优先级(全)-CSDN博客文章浏览阅读1.4w次,点赞9次,收藏27次。一、配置文件优先级在执行命令的目录下建config文件夹,然后把配置文件放到这个文件夹下。(在jar包的同一个目录下建config文件夹,执行命令需要在jar包所在目录下才行)直接把配置文件放到jar包的同级目录在classpath下建一个config文件夹,然后把配置文件放进去。在classpath下直接放配置文件。以上1-4优先级逐渐递减。springboot默认是优先读取它本身同级目录下的一个config/application.properties文件。二、互补读取在不指定外部配_springboot配置文件优先级https://blog.csdn.net/renshengrushui/article/details/118762841         代码实现

        1,引入Nacos的配置管理客户端依赖

 <!--nacos配置管理依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

        2,在该服务的resource目录中创建bootstrap.yml文件,配置nacos信息

spring:
  application:
    name: userservice #配置服务名称
  profiles:
    active: dev #配置环境,这里是dev 开发环境
  cloud:
    nacos:
      server-addr: localhost:8848 #Nacos的地址
      config:
        file-extension: yaml #配置文件后缀名

        3,在当前服务中编写一个controller看看能不能读取到配置文件,这里书写一个简单的get接口,代码如下:

    //读取配置文件中的配置
    @Value("${pattern.dataformat}")
    private String pattren;

    //读取testname配置
    @Value("${testname}")
    private String testname;

    @GetMapping("now")
    public String now(){
        return "dataformat:"+LocalDateTime.now().format(
                DateTimeFormatter.ofPattern(pattren, Locale.CHINA)
        )+"testname:"+testname;
    }

这是在nacos书写的配置:

可以看到时间格式匹配正确,并且输出测试姓名,说明配置读取成功

3,配置热更新 

配置热更新,简单来说就是在nacos中修改配置,服务不需要重启,即可完成感知,读取到修改的配置

方法一:对于使用@Value注解读取配置内容的controller中,在服务有关读取配置的controller中加上注解@RefreshScope注解

方法二:对于使用@ConfigurationProperties注解读取的配置,无需进行任何配置,他会自动更新

所以建议使用和@ConfigurationProperties(prefix=”“)来读取配置,如果不清楚如何读取配置文件,可参考:

Spring Boot读取配置文件常用方式_@autoward name 读取配置文件-CSDN博客文章浏览阅读2.3w次,点赞31次,收藏59次。目录一、简介二、依赖和配置2.1、maven依赖2.2、application.properties配置三、实践(后面的实例全部采用@PostConstruct测试)3.1、@Value方式获取3.2、Environment对象获取3.3、@ConfigurationProperties方式获取(强烈推荐)3.4、@PropertySource方式获取3.5、原生方式获取结语一、简介  实际开发过程中,我们经常要获取配置文件的值,来实现我们程序的可配置化,今天我们就来看看Spring Boot里获取配置_@autoward name 读取配置文件https://blog.csdn.net/Alian_1223/article/details/118891954

4,多环境配置共享

微服务在启动的时候会从nacos中读取配置文件

一种是 服务名-环境..yaml         当前环境配置

一种是 服务名.yaml       默认配置文件,用于多环境共享

就是说如果配置了        服务名.yaml配置文件,那莫他就会在这个微服务的多个实例之间作为共享配置

那莫配置的优先级如何确定呢,经过测试如下:

5,搭建Nacos集群

  • 29
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值