nacos配置中心

发布时间:2024年01月20日

nacos配置中心

快速开始

  1. 引入依赖

    <!--nacos配置中心-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            </dependency>
    <!--开启Spring Cloud 应用程序启动时加载bootstrap配置文件-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-bootstrap</artifactId>
        <version>3.1.5</version>
    </dependency>
    
  2. 添加配置文件bootstrap.yaml

    spring:
      application:
        name: gulimall-coupon   #服务名称
      profiles:
        active: dev   #开发环境
      cloud:
        nacos:
          server-addr: 127.0.0.1:8848
          config:
            file-extension: yaml	#后缀名
            namespace: d12064e0-e546-4482-b188-1233ed276a71		#命名空间id
            group: coupon
    

    这里会根据spring.cloud.nacos.server-addr获取nacos地址,根据namespace到指定的命名空间下,找到groupcoupon的数据,并通过[服务名称]-[开发环境].后缀名的格式作为Data id,即gulimall-coupon-dev.yaml,来读取配置。

  3. application.yaml中添加:

    spring:
      cloud:
        nacos:
          discovery:
            server-addr: 127.0.0.1:8848   #nacos地址
      application:
        name: gulimall-coupon   #服务名称
      config:
        import: nacos:bootstrap.yaml  #引入bootstrap.yaml依赖
    
  4. 在Nacos添加一个命名空间dev,并创建配置文件gulimall-coupon-dev.yaml

    在这里插入图片描述

细节

Nacos Config 数据结构

Nacos Config 主要通过 dataIdgroup来唯一确定一条配置。
Nacos Client 从 Nacos Server 端获取数据时,调用的是接口 ConfigService.getConfig(String dataId, String group, long timeoutMs)

Spring Cloud 应用获取数据
dataID

在 Nacos Config Starter 中,dataId 的拼接格式如下:

[prefix]-[spring.profiles.active].[file-extension]

  • prefix:默认为 spring.application.name的值,即服务名称,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
  • spring.profiles.active:为当前环境对应的profile
  • file-extension 为配置内容的数据格式,可以通过配置项
    spring.cloud.nacos.config.file-extension 来配置。

注意,当 activeprofile为空时,对应的连接符-也将不存在。

dataId 的拼接格式变成prefix.file-extension

Group

Group 默认为 DEFAULT_GROUP,可以通过 spring.cloud.nacos.config.group 配置。

核心概念

命名空间

用于进行租户粒度的配置隔离。不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。

Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。

配置集

一组相关或者不相关的配置项的集合称为配置集。在系统中,一个配置文件通常就是一个配置集,包含了系统各个方面的配置。例如,一个配置集可能包含了数据源、线程池、日志级别等配置项。

配置集 ID

Nacos 中的某个配置集的 ID。配置集 ID 是组织划分配置的维度之一。Data ID 通常用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。Data ID 通常采用类 Java 包(如 com.taobao.tc.refund.log.level)的命名规则保证全局唯一性。此命名规则非强制。

配置分组

Nacos 中的一组配置集,是组织配置的维度之一。通过一个有意义的字符串(如 Buy 或 Trade )对配置集进行分组,从而区分 Data ID 相同的配置集。当您在 Nacos 上创建一个配置时,如果未填写配置分组的名称,则配置分组的名称默认采用 DEFAULT_GROUP 。

配置分组的常见场景:不同的应用或组件使用了相同的配置类型,如 database_url 配置和 MQ_topic 配置。

原理

自动注入

NacosConfigStarter 实现了org.springframework.cloud.bootstrap.config.PropertySourceLocator接口,并将优先级设置成了最高。
在 Spring Cloud 应用启动阶段,会主动从 Nacos Server 端获取对应的数据,并将获取到的
数据转换成 PropertySource 且注入到 Environment 的 PropertySources 属性中,所以使用
@Value 注解也能直接获取 Nacos Server 端配置的内容。

动态刷新

Nacos Config Starter 默认为所有获取数据成功的 Nacos 的配置项添加了监听功能,在监听
到服务端配置发生变化时会实时触发org.springframework.cloud.context.refresh.ContextRefresher refresh 方法 。

如果需要对Bean进行动态刷新,请参照 Spring 和 Spring Cloud 规范。推荐给类添加
@RefreshScope@ConfigurationProperties 注解,

namespace 与 group 最佳实践

每个微服务创建自己的 namespace 进行隔离,group 来区分 dev,beta,prod 等环境

文章来源:https://blog.csdn.net/weixin_44320429/article/details/135712757
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。