Nacos配置中心、注册中心详解(配置文件命名规则、extension-configs、shared-configs的作用、加载优先级)

1. Nacos

Nacos最基础的来说是个注册中心和配置中心

1.1 注册中心

1.1.1 注入依赖

为了方便管理依赖版本,可以在父依赖总用dependencies进行统一管理

<!-- SpringCloud Alibaba 微服务 -->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
    <version>2021.0.4.0</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>

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

<!-- bootstrap 启动器 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

1.1.2 添加配置

在bootstrap.yml配置文件中,会在application.yml之前被读取,读取到nacos的地址等信息

spring:
  application:
    name: zz-business # 注册到nacos上服务的名字
  profiles:
    active: dev
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
        namespace: dev # 归属于那个命名空间,和‘命名空间ID’保持一致

注:命名空间起到了隔离的作用,不同的命名空间之间一般很难调用,所以命名空间可以用来做开发、测试、生产环境的区分

1.2 配置中心

1.2.1 注入依赖

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

1.2.2 添加配置

spring:
  application:
    name: zz-business
  profiles:
    active: dev
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848
#        namespace: dev #命名空间
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yml # 文件的类型
        group: BUSINESS_GROUP #所属分组
#        name: # 如果不写就默认为 ${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
		extension-configs:  # 多个配置 写在下面的优先级高
  			- dataId: common1.yml
    		group: BUSINESS_GROUP
    		refresh: true
  			- dataId: common2.yml
    		group: BUSINESS_GROUP
    		refresh: true
        shared-configs: # 共享配置文件
          - data-id: application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
            group: DEFAULT_GROUP

1.2.3 各配置项解读

1.2.3.1 那配置列表那么多已创建的配置文件,怎么和服务对应上呢?

​ 首先要保证实在同一个命名空间里,其次要保证实在同一个group里面。配置名可以通过spring.cloud.nacos.config.name来指定。如果不写的话

名字默认为:${prefix}-${spring.profiles.active}.${file-extension}

  • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
  • spring.profiles.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
  • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 propertiesyaml 类型。

例如:zz-business-dev.yml

1.2.3.2 怎么读取多个配置文件呢?(extension-configs)

当然如果都放在一个配置文件里,可能会显得庞大,所有可以对一个配置文件根据应用模块进行拆分,用extension-configs读取多个配置

两种书写方式
extension-configs:  # 多个配置 下面的优先级高
  - dataId: common1.yml
    group: BUSINESS_GROUP
    refresh: true
  - dataId: common2.yml
    group: BUSINESS_GROUP
    refresh: true
或
extension-configs[0]:
  dataId: common2.yml
  group: BUSINESS_GROUP
  refresh: true
extension-configs[1]:
  dataId: common1.yml
  group: BUSINESS_GROUP
  refresh: true
数值越大优先级越高
之前还有ext-config[0]的写法,但已经过时了
1.2.3.3 有的配置可以通用于各个服务中,怎么共享使用呢?(shared-configs)
shared-configs: # 共享配置文件
  - data-id: application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
    group: DEFAULT_GROUP

所对应的配置名就是application-dev.yml

1.2.4 配置文件的读取优先级

那么多配置文件,如果有重复的配置项,那么应该听从谁的?谁会覆盖谁呢?

  • 通过内部相关规则(应用名、扩展名、profiles)自动生成相关的 Data Id 配置优先级最高

  • nacos中的配置优先于本地配置,本地的bootstrap.yml>bootstrap.properties>application.yml>application.yaml>application.properties

  • 扩展配置(extension-configs) > 共享配置(shared-configs)

  • 同为扩展配置,存在如下优先级关系:extension-configs[3] > extension-configs[2] > extension-configs[1] > extension-configs[0]

  • 同为共享配置,存在如下优先级关系:shared-configs[3] > shared-configs[2] > shared-configs[1] > shared-configs[0]

总的来说是:(线上) 服务名-profile.yml>服务名.yml>extension-configs[3]>extension-configs[2]>shared-configs[3]>(本地) shared-configs[2]>bootstrap.yml>bootstrap.properties>application.yml>application.yaml>application.properties

1.2.5 配置文件热更新

nacos中心的配置文件可以实现热更新,避免每次更改配置后都得重新启动,详细用法可见:

参考文章:Nacos配置文件热更新

  • 8
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猪大侠0.0

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值