Nacos 多环境配置管理
上面实现了Nacos基本的配置读取和更新后,接下来我们看下 Nacos 如何进行多环境配置的管理,需要注意的是此特性仅针对于 Spring Cloud 应用。
假设我们程序有两个环境:测试,生产环境需要管理配置,在 Spring Boot 程序中,默认的配置文件为 application.properties,传统的方式是,利用 Spring Profile 特性,在项目里存放多个环境对应的配置文件,文件格式为 application-${env}-properties,并且需要用 spring.profile.active 指定启动时应用哪个环境的配置。
Nacos Config 主要通过 dataId 和 group 来唯一确定一条配置,在 Nacos Spring Cloud 中,dataId 的完整格式如下:
${prefix}-${spring.profile.active}.${file-extension}
prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
spring.profile.active 即为当前环境对应的 profile,详情可以参考 Spring Boot文档。
注意:当 spring.profile.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 {prefix}.{file-extension}
file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。
group 默认为 DEFAULT_GROUP,可以通过 spring.cloud.nacos.config.group 自定义指定名称。
1. 基于上面的配置规则描述,我们可以先在 Nacos 控制台上新建两个不同环境的配置集,如下:
都存放两个配置项,以 property 文件格式存储。
#nacos-config-prod.properties
server.port=8091
message=nacos-config-prod
#nacos-config-test.properties
server.port=8081
message=nacos-config-test
2. 然后在程序的主配置文件 application.properties 中配置如下:
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.application.name=nacos-config
spring.cloud.nacos.config.file-extension=properties
spring.profile.active=test
3. 编写测试控制器类 ConfigController,将配置项与属性值进行绑定。
4. 启动程序,可以看到如下数据结果,说明测试环境下端口配置已经生效。
再通过浏览器访问 http://localhost:8081/config/hello,返回 hello,nacos-config-test 。
5. 修改配置文件 application.properties 的 spring.profile.active ,重新启动程序并访问 http://localhost:8091/config/hello
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
spring.application.name=nacos-config
spring.cloud.nacos.config.file-extension=properties
spring.profile.active=prod
能获取到返回结果 hello,nacos-config-prod , 也说明程序另一个环境的配置切换成功。
配置监听
除了主动检验配置生效之外,我们可以通过添加监听器的方式来监听配置的变化,实现很简单,使用 @NacosConfigListener 即可,一旦指定的配置集 ID 对应配置发生了变化,监听器就会受到回调,将所有的配置信息以字符串形式返回。
当存在多个配置项时,回调接收到的配置字符串中带有换行格式,需要自己处理。
当然 @NacosConfigListener 也支持类型转换,比如转换为 Properties 对象。
Namespace 最佳实践
Nacos 里 Namespace 作为租户颗粒度细分而存在,主要为了解决多环境以及多租户数据(配置和服务)隔离的问题。
如果只是一个租户(用户),不同的 namespce 可以对应不同的环境,以此实现环境配置的隔离,效果就跟上节内容:Nacos 多环境配置管理 相似。
如果存在多个租户,为每个租户分配不同的 namespace,这样每个租户(用户)的配置数据以及注册的服务数据都会归属到自己的 namespace 下,就可以实现多租户配置数据隔离作用。
注意:Nacos 目前还没实现账号权限的分配和隔离,无法让各租户自己管理自己的配置,这一块功能仍在规划中。
简单介绍之后,再来看下 namespace 相关的最佳实践:
·如何来获取 namespace 的值。
· namespace 参数初始化方式。
创建命名空间
在 nacos 的控制台左边功能侧看到有一个 命名空间 的功能,点击就可以看到 新建命名空间 的按钮,那么这个时候就可以创建自己的命名空间了。创建成功之后,会生成一个命名空间ID,主要是用来避免命名空间名称有可能会出现重名的情况。因此当您在应用中需要配置指定的 namespace 时,填入的是命名空间ID。
关联命令空间
在没有明确指定 ${spring.cloud.nacos.config.namespace} 配置的情况下, 默认使用的是 Nacos 上 Public 这个namespae。如果需要使用自定义的命名空间,可以通过以下配置来实现:
spring.cloud.nacos.config.namespace=b3404bc0-d7dc-4855-b519-570ed34b62d7
该配置必须放在 bootstrap.properties 文件中。此外 spring.cloud.nacos.config.namespace 的值是 namespace 对应的 id。
结语
到这里,到这里关于 Nacos 管理配置的学习就告一段落,当然在配置管理上还有更多的用法,Nacos 官方文档描述的也很详细,大家也可以多在官网上查阅。
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理