整合 Nacos 配置中心:实现动态配置刷新
整合 Nacos 配置中心:实现动态配置刷新
本文将详细介绍如何使用Nacos配置中心实现动态配置刷新。通过本文,你将了解配置中心的作用和必要性,并学习如何在Spring Boot项目中集成Nacos配置中心,包括添加依赖、配置Nacos服务器地址、使用@NacosValue注解获取配置项等步骤。
什么是配置中心?
在微服务架构下,配置中心是一个专门用来集中管理和分发配置的服务。它通过提供统一的接口,帮助开发人员将所有微服务的配置项集中存储、管理和分发,确保微服务在不同环境下(如开发、测试、生产环境)能够方便地获取到对应的配置。
为什么需要配置中心?
集中管理,简化运维: 在传统的单体应用中,配置项通常存储在本地文件中,管理和维护相对简单。但在微服务架构下,配置项分散在多个服务中,如果每个服务都单独管理自己的配置项,会导致管理复杂性增加。配置中心通过集中管理配置项,极大简化了运维工作。
环境隔离,配置灵活: 不同的环境(开发、测试、生产等)通常需要不同的配置项。配置中心支持按环境隔离配置项,使得相同的微服务在不同环境中可以方便地获取对应的配置,而无需手动修改配置文件。
动态更新,实时生效: 在业务需求变化较快的场景中,配置项的频繁修改是常态。配置中心支持配置项的动态更新和实时生效,减少了服务重启的次数,提高了系统的可用性和灵活性。
安全管理: 某些敏感配置项(如数据库密码、API 密钥等)不适合写在代码中或本地文件中。配置中心提供了安全的存储和访问机制,确保敏感信息的安全性。
统一监控,提升稳定性: 配置中心可以对所有配置项进行统一监控和管理,方便运维人员及时发现和处理配置问题,提升系统的稳定性和可靠性。
本地配置演示
在单体项目中,配置文件信息通常写入application.yml
文件中,比如我们要实现消息中心,发送邮件的功能,一些邮件的配置项需要手动配置,我们可能需要在application.yml
文件中,自定义如下配置:
为了方便查看配置项,我们写一个测试接口:
package org.example.message;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@Slf4j
public class TestController {
@Value("${mail.password}")
private String password ;
@GetMapping("/test")
public String test() {
return "邮箱密码为: " + password;
}
}
启动程序,在浏览器端输入:localhost:8080/test
,如图所示:
我们看到接口是正常能够调通的!
使用Nacos配置中心
浏览器访问昨天我们映射到宿主主机的端口:8848,浏览器访问:http://localhost:8848/nacos,进入到Nacos控制台,如图所示,点击创建配置按钮。
填写message模块的配置项,我们只需要将application.yml
中的配置项复制粘贴进去即可,配置中的一些参数解释如下:
- Data Id: 配置的唯一标识,这里我们填写需要和模块文件名一样即可,我们这里填写
message
- Group: 所属组,这里默认组即可
- 描述:描述该配置文件
- 配置格式:项目中使用的什么格式就选择什么格式,我们的demo中使用的是 YAML 格式配置, 这里也选择 YAML
- 配置内容:将
application.yml
中的配置项复制粘贴 - 发布:点击发布按钮
添加依赖
在根pom.xml
和message
中的pom.xml
中分别添加Nacos配置所需要的依赖
<!-- 根 pom.xml中-->
<properties>
// 省略...
<nacos-config.version>0.3.0-RC</nacos-config.version>
</properties>
<!-- 统一依赖管理 -->
<dependencyManagement>
// 省略...
<!-- Nacos 配置中心 -->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-config-spring-boot-starter</artifactId>
<version>${nacos-config.version}</version>
</dependency>
</dependencies>
</dependencyManagement>
// 省略...
注意:版本0.2.x.RELEASE对应的是 Spring Boot 2.x 版本,版本0.1.x.RELEASE对应的是 Spring Boot 1.x 版本。我们是 Spring Boot 3.x, 故使用最新的0.3.x版本。
<!-- message pom.xml中-->
<!-- Nacos 配置中心 -->
<dependency>
<groupId>com.alibaba.boot</groupId>
<artifactId>nacos-config-spring-boot-starter</artifactId>
</dependency>
刷新一下Maven仓库即可!
项目配置Nacos
Nacos依赖添加完成后,编辑application.yml
文件,与Nacos通信
nacos:
config: # Nacos 配置中心
access-key: # 身份验证
secret-key: # 身份验证
data-id: message # 指定要加载的配置数据的 Data Id
group: DEFAULT_GROUP # 指定配置数据所属的组
type: yaml # 指定配置数据的格式
server-addr: http://127.0.0.1:8848/ # 指定 Nacos 配置中心的服务器地址
auto-refresh: true # 是否自动刷新配置
remote-first: true # 是否优先使用远程配置
bootstrap:
enable: true # 启动时,预热配置
使用@NacosValue注解
编辑TestController
控制器,将之前的 Spring 框架提供的@Value
注解,替换为 Nacos 的@NacosValue
注解, 代码如下:
package org.example.message;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@Slf4j
public class TestController {
@NacosValue(value = "${mail.password}", autoRefreshed = true)
private String password ;
@GetMapping("/test")
public String test() {
return "邮箱密码为: " + password;
}
}
- @NacosValue: 这是 Nacos 提供的一个注解,用于从 Nacos 配置中心中获取配置项,并将其注入到字段中。
- value: 这是注解的一个参数,用于指定要获取的配置项的键。这里使用了占位符
${rate-limit.api.limit}
,表示要从 Nacos 配置中心中获取键为rate-limit.api.limit
的配置项。 - autoRefreshed: 这是注解的另一个参数,用于指定是否自动刷新配置项。当配置中心中的配置项发生变化时,如果
autoRefreshed
设置为true
,则该字段的值会自动更新,保持与配置中心中的最新值一致。
测试
修改nacos中的配置信息并发布,启动程序测试!
邮箱密码成功变为123456
,说明Nacos
作为配置中心的能力是非常强大的!