Nacos:动态配置管理

        在微服务的多环境开发中,使用Nacos配置,从开发、测试、到部署,都可以带来很大的便利性。一般来说,一个公司有多个项目,一个项目由多个微服务组成,并且会有开发、测试、生产环境的区分。而Nacos在配置管理这方面做得还是比较好的,它可以通过namespace(命名空间)、group(分组)和data-id进行配置文件的唯一性定位。

动态配置

1.引入依赖:

        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>

2.添加配置:

       注意,使用了nacos的配置管理,那么代码里面的配置文件名称不能是application,而是bootstrap,因为bootstrap加载的优先级更高。这里主要指明了配置中心的地址和在nacos上配置文件的格式:

spring:
  application:
    name: nacos-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
      config:
        server-addr: localhost:8848 #Nacos作为配置中心地址
        file-extension: yaml #指定yaml格式的配置

3.到nacos上添加配置:dataId为nacos-client-dev.yaml

 其中dataId的命令是有规则的,官网解释如下:

但是这种配置的优先级是没有bootstrap配置高,一般用它来做当前服务独有的配置,而将公共的配置抽取出来:

spring:
  application:
    name: nacos-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
      config:
        server-addr: localhost:8848 #Nacos作为配置中心地址
        file-extension: yaml #指定yaml格式的配置
        # 共享配置的DataId,多个使用,分隔
        # 越靠后,优先级越高
        # .yaml后缀不能少,只支持yaml/properties
        shared-dataids: common.yaml,common2.yaml
        # 哪些共享配置支持动态刷新,多个使用,分隔
        refreshable-dataids: common2.yaml

主要是添加了共享配置:shared-dataids和refreshable-dataids两个配置项,它们的优先级,我测试的时候,发现比bootstrap配置高。除了shared-dataids和refreshable-dataids两个配置项实现公用的配置之外,还可以使用拓展配置,它的效果是一样的,并且它的优先级比共享配置更高:

spring:
  application:
    name: nacos-client
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
      config:
        server-addr: localhost:8848 #Nacos作为配置中心地址
        file-extension: yaml #指定yaml格式的配置
        # 共享配置的DataId,多个使用,分隔
        # 越靠后,优先级越高
        # .yaml后缀不能少,只支持yaml/properties
        shared-dataids: common.yaml
        # 哪些共享配置支持动态刷新,多个使用,分隔
        refreshable-dataids: common.yaml
        # 拓展配置,越后面的配置,优先级越高,nacos-client-dev.yaml的优先级最低
        ext-config:
          - data-id: common2.yaml
            #默认数据不会主动刷新,添加改属性会动态刷新
            refresh: true

配置了refreshable-dataids或者refresh: true等属性之后,还需要@RefreshScope注解,才能实现动态刷新,如下示例,当在nacos配置改变发布之后,过了几秒便可以看到新的属性值:

 

环境和项目的隔离

所谓的环境,指的是开发、测试、生产等环境,在多项目,多个微服务下,区分不同配置,结合在工作中的使用情况,一般有以下几种隔离方式:

  1. namespace(命名空间)作为环境的隔离,比如使用dev、test和prod三个命名空间,group(分组)作为项目的隔离,每个项目一个分组,dataId作为微服务的区分
  2. namespace(命名空间)作为项目的隔离,group(分组)作为环境的隔离,每个项目一个都有自己的dev、test和prod环境,dataId作为微服务的区分

我个人是比较倾向于使用第一种方式的,首先是划分清晰,其次是项目多的时候也更容易管理。

示例代码地址:GitHub - qiuxinfa/cloud-alibaba

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值