关闭

java微服务Nacos配置管理(下)

发表于:2021-2-03 09:36

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:欧阳丰    来源:CSDN

  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 自定义指定名称。
  基于上面的配置规则描述,我们可以先在 Nacos 控制台上新建两个不同环境的配置集,如下:
  都存放两个配置项,以 property 文件格式存储。
      #nacos-config-prod.properties
      server.port=8091
      message=nacos-config-prod
      #nacos-config-test.properties
      server.port=8081
      message=nacos-config-test
  然后在程序的主配置文件 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
  编写测试控制器类 ConfigController,将配置项与属性值进行绑定。
  启动程序,可以看到如下数据结果,说明测试环境下端口配置已经生效。
  再通过浏览器访问 http://localhost:8081/config/hello,返回 hello,nacos-config-test。
  修改配置文件 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),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号