Java微服务新生代Nacos-配置管理(1)

发表于:2022-12-28 09:15

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

 作者:程序员闻人    来源:稀土掘金

  前言
  本文将主要介绍它的另一强大功能:配置管理,学习利用 Nacos 如何实现通过统一的管理界面,集中化实现分布式服务的配置维护和实时更新。
  本文主要内容涉及如下:
  ·Nacos配置管理概念介绍
  · 如何 Nacos 管理配置
  · Nacos 多环境配置管理
  介绍Nacos配置管理
  Nacos 提供了动态配置服务,能让我们可以实时进行服务应用的配置变更,让配置管理变得更加高效和快捷。它基于 key/value 方式存储应用配置和其他元数据信息,为分布式系统中的外部化配置提供服务器端和客户端支持。
  首先了解下 Nacos 在配置管理模块上的几个重要概念,能帮助我们更好的理解和正确的使用 Nacos 进行配置管理。
  · 命名空间(Namespace)
  用于进行租户粒度的配置隔离,可用于对不同环境配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。
  · 配置项 (Configuration Item)
  一个具体的可配置的参数与其值,通常以 param-key=param-value 的形式存在。例如我们常配置系统的日志输出级别(logLevel=INFO|WARN|ERROR) 就是一个配置项。
  · 配置集 (Configuration Set)
  一组相关或者不相关的配置项的集合。一个配置文件通常就是一个配置集,它可能包含了数据源、线程池、日志级别等配置项。
  · 配置集 ID(Data ID)
  某个配置集的标识 ID,用于组织划分系统的配置集。一个系统或者应用可以包含多个配置集。官方推荐采用类 Java 包(如 com.taobao.tc.refund.log.level)的命名规则定义 Data ID 来保证全局唯一性。
  · 配置分组(Group)
  对配置集进行分组,用于区分 Data ID 相同的配置集。默认采用 DEFAULT_GROUP 。配置分组的常见场景:不同的应用或组件使用了相同的配置类型,如 database_url 配置和 消息队列 Topic 配置等。
  启动Nacos配置管理
  要使用 Nacos 进行配置管理,首先需要启动 Nacos 服务端,然后客户端接入 。
  启动了 Nacos 服务端,首先我们在 Nacos 控制台上的配置管理里新建一个最简单的配置,如图:
  保存成功后能列表里看下创建的配置记录如下:
  每个配置集的操作栏都提供了配置的查看修改和清除功能,还有额外的示例代码查看,来引导我们如何在客户端使用 Nacos 读取该配置集,目前只支持 Java,Spring Boot,Spring Cloud,其他语言的版本还在完善语言。
  接下里看下Nacos 基于 Spring 技术栈的集成方式。
  Nacos Spring
  1. 首先给 Spring 程序添加依赖
  <dependency>
      <groupId>com.alibaba.nacos</groupId>
      <artifactId>nacos-spring-context</artifactId>
      <version>0.2.3-RC1</version>
  </dependency>
  最新版本可以在 maven 仓库 mvnrepository.com 中获取。
  2. 添加 @EnableNacosConfig 注解启用 Nacos Spring 的配置管理服务。如下示例,我们使用了 @NacosPropertySource 注解加载了我们先前创建的配置集,并且指定为自动刷新配置。
  3. 通过 Nacos 的 @NacosValue 注解将配置项与属性进行绑定。
  4. 启动程序后,打开 http://localhost:8080/config/hello 获取返回结果hello,test,内容如下就表示读取配置成功。
  5. 读取成功后我们再尝试修改这个配置项验证下 Nacos 的配置信息的动态刷新特性。修改有两种方式,一种在 Nacos 控制台上手动修改,另一种在命令行使用提供的 API 直接进行修改:
  curl -X POST "http://127.0.0.1:8848/nacos/v1.0.1/cs/configs?dataId=com.one.learn.nacos.config&group=DEFAULT_GROUP&content=message=nacos-spring"
  6. 再次访问 http://localhost:8080/config/hello,此时返回内容为hello,nacos-spring,返回信息变化说明程序中的message值已经被动态更新了。
  Nacos Spring Boot
  1. 添加配置动态变更的依赖:
  <dependency>
      <groupId>com.alibaba.boot</groupId>
      <artifactId>nacos-config-spring-boot-starter</artifactId>
      <version>0.2.1</version>
  </dependency>
  注意: 这里的版本 0.2.x.RELEASE 对应的是 Spring Boot 2.x 版本,版本 0.1.x.RELEASE 对应的是 Spring Boot 1.x 版本。
  2. 在 application.properties 中配置 Nacos Server 的地址:
  nacos.config.server-addr=127.0.0.1:8848
  3. 使用 @NacosPropertySource 加载 dataId 为 com.one.learn.nacos.config 的配置源,并开启自动更新:
  4. 通过 Nacos 的 @NacosValue 注解设置属性值,与集成 Spring 的步骤内容一样。
  5. 启动引导类,打开 http://localhost:8080/config/hello 获取返回结果hello,nacos, 说明程序中的配置已经读取成功。
  Nacos Spring Cloud
  如果使用 Spring Cloud 程序,Nacos 提供了依赖库  spring-cloud-starter-alibaba-nacos-config 实现配置的动态变更。
  1. 添加依赖:
  <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
      <version>0.9.0.RELEASE</version>
  </dependency>
  注意:版本 0.2.x.RELEASE 对应的是 Spring Boot 2.x 版本,版本 0.1.x.RELEASE 对应的是 Spring Boot 1.x 版本。
  2. 在 bootstrap.properties 中配置 Nacos server 的地址和应用名如下,在 Nacos Spring Cloud 中,dataId 默认为 spring.application.name 加上 properties 文件后缀,所以,为了能正确读取配置,我们需要将 Nacos 上配置集 ID 为 com.one.learn.nacos.config 调整为 com.one.learn.nacos.config.properties
  spring.cloud.nacos.config.server-addr=127.0.0.1:8848
  spring.application.name=com.one.learn.nacos.config
  这里使用 bootstrap.properties 作为配置 Nacos 地方,是因为 Spring Boot 配置文件的加载顺序,依次为 bootstrap.properties -> bootstrap.yml -> application.properties -> application.yml ,在 application 层级上配置 Nacos 时无法生效。
  注意:当使用域名的方式来访问 Nacos 时,spring.cloud.nacos.config.server-addr 配置的方式必须为 域名:port。 即使使用域名,端口不能省略。例如 Nacos 的域名为 abc.com.nacos,监听的端口为 80,则 spring.cloud.nacos.config.server-addr=abc.com.nacos:80。
  3. 通过 Spring Cloud 原生注解 @RefreshScope 实现配置自动更新:
  4. 运行程序,访问  http://localhost:8080/config/hello  ,返回内容为  hello,nacos ,则表示配置读取成功。
  5. 在 Nacos 控制台修改配置项 message=Nacos Spring Cloud,再次访问   http://localhost:8080/config/hello  , 返回内容为 hello,Nacos Spring Cloud,说明程序中的message值已经被动态更新了。
  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

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

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

沪ICP备05003035号

沪公网安备 31010102002173号