SpringCloud Alibaba Nacos Config

九 配置中心 Nacos Config

9.1 服务配置中心介绍

微服务架构关于配置文件的一些问题:

  1. 配置文件比较分散。在同一个微服务架构下,配置文件会随着微服务的数量越来越多,并且分散在每一个独立的服务中,需要改配置的话需要到每个具体的服务中去改配置文件,不仅配置麻烦且不好管理。

  2. 工作中涉及到不同环境的配置,例如application-dev.yml(开发环境)、application-test.yml(测试环境)、application-prod.yml(预生产环境)等等,每个环境所使用配置不同,修改的话,也需要各个具体的服务中去修改。(那么假设有4个服务,每个服务有5个环境,那么就有20个配置文件)

  3. 在不使用NacosConfig的情况下,配置文件时没有办法实时更细的,修改配置后,需要重启服务才能够获取最新的配置文件,这对于正在运行中的服务是非常不友好的。

在这里插入图片描述

在开发中可以在配置文件中配置 spring.profile.active=xx 指定扫描哪个环境的配置文件

xx就是环境的标志,例如:dev,test。

对于以上问题NacosConfig配置中心可以进行处理,处理方式如下:

  • 项目配置集中管理:将微服务架构中所有服务的配置文件集中到一起,统一进行管理,并提供一套标准的接口,当各个服务需要获取配置的时候,就来配置中心的接口拉取自己的配置。

  • 动态更新配置文件参数信息:在配置中心修改了正在运行的某个服务配置文件的时候,可以实时通知这个服务来配置中心同步最新的信息,使之动态更新。

  • 解决各个服务中配置文件共通部分:在配置中心已经统一管理了各个服务的配置文件,例如配置文件中的Redis配置,只需要在配置中心单独创建一个Redis配置文件,在各个微服务配置文件中引入这个配置文件就可以,这样在修改例如Redis配置这些共通的配置,不需要在各个服务的配置文件上重复修改。

引入NacosConfig后大概架构图如下:
在这里插入图片描述

9.2 SpringCloud Config 与 Nacos Config

  • SpringColud Config:SpringCloud中的一个组件,使用方便,与Spirng无缝集成,并且配置储存支持Git,但是它没有可视化的界面,配置信息实时更新也不支持,配置信息修改的话需要重启服务。
  • Nacos Config:这是SpringCloud Alibaba技术栈中的一个组件 Nacos,可以做注册中心,也继承了服务配置的功能,相比较SpringCloud Config还可动态更新配置。

9.3 使用Nacos Config统一管理配置

使用Nacos作为配置中心,实际上就是将所有使用配置文件的服务当作客户端,将Nacos当作存储配置文件的服务端,各个微服务需要配置文件的时候从Nacos上去拉去对应的配置件。

  1. 在需要将配置文件交予配置中心统一管理的服务中添加NacosConfig依赖

    		 <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            </dependency>
    
  2. 在当前服务中添加NacosConfig的配置

    • 创建bootstrap.yml

    • spring:
        application:
          name: product-service
        profiles:
          active: dev    # 当前的启动环境
        cloud:
          nacos:
            config:
              server-addr: 127.0.0.1:8848 #Nacos中心地址
              file-extension: yaml   #配置文件格式
      

    SpringBoot启动读取配置文件优先级:

    优先级高于
    优先级高于
    优先级高于
    bootstrap.properties
    bootstrap.yml
    application.properties
    application.yml

    这里创建bootstrap.xml 目的是在加载application.yml之前去加载,通过bootstrap.xml中配置的Nacos地址、需要的配置文件格式、以及当前application的名字去配置中心获取对应的application.properties加载启动。

  3. 在Nacos配置管理中添加配置,然后将原服务中application.yml配置复制到配置内容中(spring.application.name需要在bootstrap.yml中配置)

    在这里插入图片描述

  4. 注释本地application.yml并启动程序进行测试。

在Nacos填写配置文件时 尽量不要有注释,不会像Idea一样智能,有时候有注释会读取配置文件失败

9.4 动态刷新

在NacosConfig中,修改了配置文件中的变量,服务是可以实时读取到的,但是需要开启配置的动态刷新功能

  1. 在NacosConfig中配置文件添加

    appConfig:
     name: product
    
  2. 在需要动态刷新变量的类上添加@RefreshScope注解

    @RestController
    @RefreshScope
    public class NacosConfigController {
        @Value("${appConfig.name}")
        private String appConfigName;
    }
    

    只有标注了@RefreshScope注解的类中所引用的常量才会动态刷新。

9.5 配置共享

当服务越来越多的时候,比如Redis、RabbitMQ这些中间件的配置都是重复的,或者是一个服务下不同环境的配置文件也是会有重复的配置,这时候就需要将配置共享,就可以改一个配置文件多处生效。

  • 不同环境下配置共享

    上面图示了加载配置文件顺序,而加载到application时,首先会加载application.yml然后再去加载指定环境(例如profiles.active=dev,则加载application-dev.yml),所以同一个服务下的共通配置可以在新建一个application.yml进行配置

  • 不同服务间配置共享

    不同服务间配置共享类似Maven中引入POM文件

    例如将redis配置单独在NacosConfig中创建一个redis-config.yaml

    在需要引入的服务的配置文件中配置shared-configs

    • - data-id:创建的配置文件名字
    • refresh:此配置文件修改后是否动态刷新,默认不刷新
    • group:默认是DEFAULT_GROUP分组
    spring:
     cloud:
      nacos:
       config:
        shared-configs:
         - data-id: redis-config.yaml # 配置要引⼊的配置
         refresh: true
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值