Nacos 配置管理模型
配置的获取
SpringCloud 项目中,假如在 resource 目录下有如下 application.yml 文件:
spring:
application:
name: userService # 服务名称
profiles:
active: dev # 开发环境,这里是 dev
cloud:
nacos:
username: nacos # 用户名
password: nacos # 密码
discovery:
server-addr: localhost:8848 # Nacos 注册中心地址
group: DEFAULT_GROUP # 分组
namespace: 3bab8e9d-972c-4b11-a44f-74714ac7f471 # 命名空间
config: # Nacos 配置管理,和 discovery 配置一致,直接引用
server-addr: ${spring.cloud.nacos.discovery.server-addr}
group: ${spring.cloud.nacos.discovery.group}
namespace: ${spring.cloud.nacos.discovery.namespace}
file-extension: yaml # 文件后缀名
项目启动时,会根据spring.cloud.nacos.server-addr
得到 Nacos 配置中心的地址,再在指定 Namespace(3bab8e9d-972c-4b11-a44f-74714ac7f471
)的指定分组(DEFAULT_GROUP
)下,以[spring.application.name]-[spring.profiles.active].[spring.cloud.nacos.config.file-extension]
作为配置的 DataID 来从配置中心读取配置,也就是读取 userService-dev.yaml 配置。
另:当
spring.profiles.active
为空时,DataID 为[spring.application.name].[spring.cloud.nacos.config.file-extension]
。
配置管理模型
Nacos 通过 Namespace、Group、DataID 能够定位到一个配置集。
![]() |
配置集 (DataID):一个配置文件就是一个配置集,一个配置集可以包含系统日志级别等各种配置信息。每个配置集都可以定义一个有意义的名称作为配置集的 ID,即 DataID。
配置项:配置集中包含的一个个配置内容就是配置项。通常以 key=value 的形式存在。例如我们常配置系统的日志输出级别(logLevel=INFO|WARN|ERROR)就是一个配置项。
配置分组 (Group):配置分组是对配置集进行分组,通过一个有意义的字符串(如 Buy 或 Trade)来表示,不同的配置分组下可以有相同的配置集(DataID)。配置分组的名称默认为 DEFAULT_GROUP。配置分组的常见场景:可用于区分不同的项目或应用,例如:学生管理系统的配置集可以定义一个 Group 为:STUDENT_GROUP。
命名空间 (Namespace):命名空间可用于进行不同环境的配置隔离。例如可以隔离开发环境、测试环境和生产环境,因为它们的配置可能各不相同。或者是隔离不同的用户,不同的开发人员/开发组使用同一个 Nacos 管理各自的配置,通过 Namespace 隔离。不同的命名空间下,可以存在相同名称的配置分组或配置集。
最佳实践
Nacos 抽象定义了 Namespace、Group、DataID 的概念,具体这几个概念代表什么,取决于我们把它们看成什么,这里推荐一种用法:
- 多环境隔离:通过 Namespace 区分开发、测试、生产环境,避免配置串用。
- 多租户/多团队协作:也可为不同团队或租户分配独立的 Namespace,团队间互不干扰(参考)。
- 多项目隔离:通过 Group 区分不同业务线或项目,便于权限和配置管理。如 XX 医疗项目、XX 电商项目。
- 多工程隔离:每个项目下往往有若干个工程/微服务,一个配置集(DataId)作为一个工程的主配置文件。
![]() |