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

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

  • 1. Nacos
    • 1.1 注册中心
      • 1.1.1 注入依赖
      • 1.1.2 添加配置
    • 1.2 配置中心
      • 1.2.1 注入依赖
      • 1.2.2 添加配置
      • 1.2.3 各配置项解读
        • 1.2.3.1 那配置列表那么多已创建的配置文件,怎么和服务对应上呢?
        • 1.2.3.2 怎么读取多个配置文件呢?(extension-configs)
        • 1.2.3.3 有的配置可以通用于各个服务中,怎么共享使用呢?(shared-configs)
      • 1.2.4 配置文件的读取优先级
      • 1.2.5 配置文件热更新

1. Nacos

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

1.1 注册中心

1.1.1 注入依赖

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


<dependency>
    <groupId>com.alibaba.cloudgroupId>
    <artifactId>spring-cloud-alibaba-dependenciesartifactId>
    <version>2021.0.4.0version>
    <type>pomtype>
    <scope>importscope>
dependency>

<dependency>
    <groupId>com.alibaba.cloudgroupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
dependency>


<dependency>
    <groupId>org.springframework.cloudgroupId>
    <artifactId>spring-cloud-starter-bootstrapartifactId>
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.cloudgroupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-configartifactId>
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配置文件热更新

你可能感兴趣的:(java,微服务,spring,cloud)