Nacos 是一个易于使用的动态服务发现、配置管理和服务管理平台,它支持多种配置管理功能,包括配置的发布、监听和版本管理等。

核心概念

  • 配置管理:Nacos 提供了统一的配置管理服务,允许开发者在一个地方集中管理和更新应用的配置项。
  • 配置发布:将配置信息上传到 Nacos 配置中心的过程。
  • 配置监听:客户端可以订阅感兴趣的配置,当配置发生变化时,能够及时收到通知并做出相应调整。

操作步骤

1. 安装 Nacos Server

首先确保你已经安装并启动了 Nacos Server。如果还没有安装,请参考Nacos官方文档进行安装。

2. 添加依赖

在 Spring Boot 项目中添加 Nacos Config Starter 依赖:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

3. 创建配置文件 bootstrap.yml

需要在项目的 bootstrap.yml 文件中指定 Nacos 配置中心的相关信息:

spring:
  application:
    name: example
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848 # Nacos服务器地址
        file-extension: yaml       # 支持的格式有 properties/yaml

4. 发布配置

可以通过 Nacos 控制台或者使用 REST API 来发布配置。

  • 通过控制台发布配置

    • 登录 Nacos 控制台(默认地址为 http://localhost:8848/nacos)。
    • 选择“配置管理” -> “配置列表”,点击右上角的“发布配置”按钮。
    • 填写 Data ID、Group 等必要信息,并输入具体的配置内容后保存。
  • 通过 REST API 发布配置 使用 curl 或者 Postman 等工具发送 POST 请求:

    curl -X POST 'http://127.0.0.1:8848/nacos/v1/cs/configs' \
    --data-urlencode 'tenant=public' \
    --data-urlencode 'dataId=example.yaml' \
    --data-urlencode 'group=DEFAULT_GROUP' \
    --data-urlencode 'content=some_key: some_value'
    

5. 在应用程序中加载配置

Spring Cloud Alibaba 自动会根据 bootstrap.yml 中的设置去 Nacos 获取相应的配置,并将其注入到 Spring 环境中。你可以像平常一样使用 @Value("${some.key}") 注解来引用这些配置。

6. 监听配置变化

为了实现对配置变更的实时响应,可以使用 @RefreshScope 注解标记需要刷新的 Bean,或实现 ApplicationListener<ConfigChangeEvent> 接口来手动处理配置变化事件。

例如,给某个 Controller 加上 @RefreshScope

@RestController
@RefreshScope
public class TestController {
    @Value("${some.key}")
    private String someKey;

    @GetMapping("/test")
    public String test() {
        return someKey;
    }
}

常见错误及解决方案

  • 无法连接到 Nacos:检查 Nacos Server 是否正常运行,以及网络是否可达。
  • 配置未生效:确认 Data ID 和 Group 是否正确无误;检查是否有多个相同 Data ID 的配置存在冲突。
  • 监听器不工作:确保你的监听器实现了正确的接口,并且已经被 Spring 容器所管理。

注意事项

  • 命名规范:Data ID 和 Group 的命名应该遵循一定的规则以避免混淆。
  • 安全性:考虑启用 Nacos 的鉴权功能,保护敏感配置不被非法访问。
  • 版本控制:利用 Nacos 提供的历史版本功能,便于回滚到之前的配置版本。

使用技巧

  • 动态刷新配置:除了使用 @RefreshScope 外,还可以通过 Actuator 的 /actuator/refresh 端点手动触发配置刷新。
  • 多环境支持:利用 Nacos 的扩展配置和共享配置特性,可以轻松地针对不同的环境(如开发、测试、生产)维护不同的配置集合。