1. Nacos 配置管理简介
Nacos 不仅是一个服务注册与发现平台,还提供了功能强大的 配置管理 服务。Nacos 的配置管理能够帮助开发者集中管理配置,并支持动态更新,以简化微服务的配置变更过程,减少应用重启次数,确保应用实时响应配置变更。
Nacos 配置管理的主要功能:
- 集中管理配置:将分散的配置文件集中到 Nacos 进行管理。
- 动态刷新配置:支持在应用运行时更新配置,无需重启服务。
- 多环境支持:支持分环境管理配置,如开发、测试和生产环境等。
- 权限控制:提供权限管理和审计功能,保障配置的安全性。
2. 配置管理的基本概念
2.1 Data ID 和 Group
- Data ID:用于标识配置的唯一标识符,相当于每一个配置文件的名称。
- Group:配置的分组,用于区分不同的配置分类。例如可以将开发、测试、生产的配置划分到不同的 Group 中。
2.2 Namespace
Namespace(命名空间)用于隔离不同项目的配置。例如在同一个 Nacos 集群上可以配置多个项目,每个项目的配置通过 Namespace 隔离,互不影响。
2.3 配置文件格式
Nacos 支持多种配置格式,包括:
- Properties 文件(常见的
key=value
格式) - YAML 文件(结构化的层级配置)
- JSON 文件和XML 文件
3. Nacos 配置管理的基本操作
3.1 在 Nacos 控制台添加配置
- 打开 Nacos 控制台,在“配置管理”菜单下选择“配置列表”。
- 点击“新增配置”,填写以下信息:
- Data ID:配置的唯一标识符,例如
application-dev.yml
。 - Group:配置所属的分组,例如
DEV
(开发环境)。 - 配置格式:例如 YAML。
- 配置内容:填写具体的配置项,例如数据库连接配置等。
- Data ID:配置的唯一标识符,例如
3.2 修改和删除配置
- 修改配置:在配置列表中找到需要修改的配置项,点击编辑,更新配置内容并保存。Nacos 会自动通知依赖该配置的服务更新。
- 删除配置:在配置列表中选择需要删除的配置项,点击删除按钮,配置将被彻底清除。
3.3 配置历史版本管理
Nacos 提供配置的历史版本管理功能,可以查看每次变更记录,并支持回滚到之前的版本,方便错误配置的恢复。
4. 配置共享
我们可以把微服务共享的配置抽取到Nacos中统一管理,这样就不需要每个微服务都重复配置了。分为两步:
-
在Nacos中添加共享配置
-
微服务拉取配置
4.1 添加共享配置
例如jdbc相关配置、日志配置、swagger以及OpenFeign的配置等。
4.2 拉取共享配置
接下来,我们要在微服务拉取共享配置。将拉取到的共享配置与本地的application.yaml
配置合并,完成项目上下文的初始化。
不过,需要注意的是,读取Nacos配置是SpringCloud上下文(ApplicationContext
)初始化时处理的,发生在项目的引导阶段。然后才会初始化SpringBoot上下文,去读取application.yaml
。
也就是说引导阶段,application.yaml
文件尚未读取,根本不知道nacos 地址,该如何去加载nacos中的配置文件呢?
SpringCloud在初始化上下文的时候会先读取一个名为bootstrap.yaml
(或者bootstrap.properties
)的文件,如果我们将nacos地址配置到bootstrap.yaml
中,那么在项目引导阶段就可以读取nacos中的配置了。
4.2.1 引入依赖
<!--nacos配置管理-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--读取bootstrap文件-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
4.2.2 新建bootstrap.yaml
配置nacos地址和相关的共享配置。
spring:
application:
name: cart-service # 应用的服务名称,用于在 Nacos 或其他注册中心中标识此服务。
cloud:
nacos:
server-addr: 192.168.1.101 # Nacos 配置中心的地址,用于指定连接到 Nacos 的服务器地址。
config:
file-extension: yaml # 配置文件的后缀名,表示配置的文件格式。常见的文件格式有 properties、yaml、json 等。
shared-configs: # 共享配置,可以让多个服务共享相同的配置文件,以便于统一管理。
- dataId: shared-jdbc.yaml # 第一个共享配置的 dataId,通常用于配置数据库连接(例如 MyBatis 配置)。
- dataId: shared-log.yaml # 第二个共享配置的 dataId,用于日志配置文件的共享,便于多个服务统一日志输出格式、日志级别等。
- dataId: shared-swagger.yaml # 第三个共享配置的 dataId,用于 Swagger 配置的共享,以便于多个服务统一 API 文档配置。
5. 配置热更新
有很多的业务相关参数,将来可能会根据实际情况临时调整。例如购物车业务,购物车数量有一个上限,默认是8。购物车是写死的固定值,我们应该将其配置在配置文件中,方便后期修改。
5.1 添加配置到Nacos
首先,我们在nacos中添加一个配置文件,将购物车的上限数量添加到配置中。
注意文件的dataId格式:
[服务名]-[spring.active.profile].[后缀名]
(例如:cart-service.yaml)
-
spring.active.profile
:就是spring boot中的spring.active.profile
,可以省略,则所有profile共享该配置
这里我们直接使用cart-service.yaml
这个名称,则不管是dev还是local环境都可以共享该配置。
5.2 配置热更新
接着,我们在微服务中读取配置,实现配置热更新。
可以使用@ConfigurationProperties注解将配置文件中内容读取到配置属性类中。