Nacos作为配置中心

Nacos作为配置中心

前言

通过本教程的前一篇:

Nacos服务注册和发现

我们已经知道如何利用Nacos实现服务的注册与发现。接下来,我们再来掌握Nacos的另外一个重要能力:配置管理。

简介

Nacos除了实现了服务的注册发现之外,还将配置中心功能整合在了一起。通过Nacos的配置管理功能,我们可以将整个架构体系内的所有配置都集中在Nacos中存储。这样做的好处,在以往的教程中介绍Spring Cloud Config时也有提到,主要有以下几点:

  • 分离的多环境配置,可以更灵活的管理权限,安全性更高
  • 应用程序的打包更为纯粹,以实现一次打包,多处运行的特点

Nacos的配置管理模型与淘宝开源的配置中心Diamond类似,基础层面都通过DataIdGroup来定位配置内容,除此之外还增加了很多其他的管理功能。类似于consul config,Nacos 是支持热加载的

快速入门

创建配置

  1. 新建命名空间

  2. 在配置列表功能页面中,点击右上角的“+”按钮,进入“新建配置”页面

其中:

  • Data ID:填入nacos-provider.yml
  • Group:不修改,使用默认值DEFAULT_GROUP
  • 配置格式:选择YAML
  • 配置内容:应用要加载的配置内容,这里仅作为示例,做简单配置

创建应用

  1. pom文件引入nacos-config的Spring cloud依赖
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-alibaba-nacos-config</artifactId>
			<version>0.9.0.RELEASE</version>
		</dependency>
  1. 在bootstrap.yml(一定是bootstrap.yml文件,不是application.yml文件)文件配置以下内容:
spring:
  application:
    name: nacos-provider
  cloud:
    nacos:
      discovery:
        # 服务注册地址
        server-addr: 127.0.0.1:8848
        namespace: 31398485-c414-45d1-9f0c-426011114fa5
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yml
        prefix: nacos-provider
        namespace: 31398485-c414-45d1-9f0c-426011114fa5
#  profiles:
#    active: dev

在上面的配置中,配置了nacos config server的地址,配置的扩展名是ymal(目前仅支持ymal和properties)。注意是没有配置server.port的,sever.port的属性在nacos中配置。上面的配置是和Nacos中的dataId 的格式是对应的,nacos的完整格式如下:

${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 来配置。目前只支持 propertiesyaml 类型。
  • namespace为刚才创建命名空间里的命名空间ID
  1. 验证配置获取和验证动态刷新

在Controller上添加 @RefreshScope 实现配置的热加载

启动工程,可以看到修改nacos配置test的配置,客户端也会动态刷新。

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://xianyum.cn/archives/nacos-2

Buy me a cup of coffee ☕.