【专题回顾】
【Nacos专题】Nacos 快速入门
【Nacos专题】Nacos 集群搭建
一、Nacos 配置中心简介
Nacos 既可以作为注册中线,提供服务注册与发现;又是配置中心,提供配置的动态管理。Nacos 既能支持properties
类型的配置,也能支持ymal
类型的配置。
为了满足多租户、多环境、多服务
配置隔离的需求,Nacos 提供了Data Id
、Group
以及 Namespace
不同管理级别的概念,利用 Nacos 定义的层级关系,用户可以非常方便的管理多环境的配置。
Tips:Nacos 客户端在启动的时候,首先需要从配置中心拉取配置。在SpringBoot中,配置文件的加载顺序
bootstrap
优先级要高于application
,因此,Nacos Config 相关的配置需要在bootstrap.properties
或者bootstrap.yaml
进行配置。
二、Data Id
Data Id
的完成格式如下:
${prefix}-${spring.profile.active}.${file-extension:properties}
完整的 Data Id
由 3 部分构成,具体格式说明如下:
- prefix:构成
Data Id
的前缀,prefix
需要与项目中spring.cloud.nacos.config.prefix
配置项的值匹配。如果没有配置spring.cloud.nacos.config.prefix
,则需要与项目中spring.application.name
配置项的值匹配。值得注意的是,spring.cloud.nacos.config.prefix
必须在bootstrap.properties
文件中。 - spring.profile.active:构成
Data Id
的中间部分,需要与项目中激活的profile
相对应 (即与spring.profile.active
的值匹配)。如果项目中没有配置spring.profile.active
,则 SpringBoot 会加载主配置文件,此时,在Data Id
中${spring.profile.active}
缺省,且与${prefix}
之间的连接符-
也不需要。 - file-extension:构成
Data Id
的后缀,用来指定配置文件的格式,Nacos 默认采用properties
类型的配置,此时,Data Id
中的后缀是可以缺省的。如果想要采用yaml
类型的配置,Data Id
必须以.yaml
为后缀,同时需要将项目中spring.cloud.nacos.config.file-extension
配置项的值指定为yaml
。
示例:
如果Data Id
的值为nacos-config-dev.properties
,则在 bootstrap.properties 配置如下:
spring.cloud.nacos.config.prefix=nacos-config
spring.cloud.nacos.config.file-extension=yaml
spring.profile.active=dev
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
如下图所示,用Data Id
来区分开发、测试、生产环境配置:
三、Group
在分布式系统中,我们经常会根据业务来对系统进行水平拆分,业务独立的模块单独构成一个系统,从而实现业务解耦。Nacos 的 Group
能够很好的应对分布式系统的配置管理。Group
是 Data Id
的集合,按照业务系统来定义Group
,然后再在每个Group
下按照 dev
、test
、prod
来区分环境,这样整个系统配置就非常的清晰明了。
在 Nacos 服务端定义完分组后,还需要在项目中通过spring.cloud.nacos.config.group
配置来指定分组, 这样在项目启动的时候,就能拉取指定分组下的配置。
# 指定 group
spring.cloud.nacos.config.group=ORDER_SYSTEM
如下图所示,为订单系统创建分组:
四、Namespace
Namespace
是用于在多租户之间进行配置隔离,不同的命名空间下,可以存在相同的Group
和 Data Id
,再配合 Nacos 的权限管理功能,针对用户角色(多组合),进行Namespace
级别的读写权限控制。
Nacos 默认命名空间为public
,当在新建一个Namespace
时,Nacos会生成一个唯一标识UUID,在项目中通过spring.cloud.nacos.config.namespace
来指定命名空间。
# 指定 namespace
spring.cloud.nacos.config.namespace=83eed625-d166-4619-b923-93df2088883a