微服务配置管理:Spring Cloud Alibaba Nacos 实践

微服务配置管理:Spring Cloud Alibaba Nacos 实践

一、为什么需要配置中心?

✅ 配置中心的必要性:

传统方式问题 配置中心优势
分布在各服务内部 配置集中统一管理
修改需重启服务 支持动态刷新无需重启
无法快速环境切换 多环境配置隔离自动识别
配置不一致、难以审计 配置版本可追踪可回滚

📌 常见配置项包括:

  • 数据源配置(URL、用户名、密码)
  • 缓存配置(Redis)
  • 消息队列配置(Kafka、RocketMQ)
  • 第三方服务地址(短信、支付、OSS 等)
  • 自定义业务参数(开关、限流、调试)

✅ 主流配置中心对比:

配置中心 动态刷新 多环境支持 权限控制 配套生态
Nacos Spring Cloud Alibaba
Apollo 腾讯系,配套完善
Spring Cloud Config 原生 Spring 支持
Consul 通常用于服务发现

二、Nacos 配置管理核心概念

  • Data ID:配置的唯一标识,一般为 服务名.yaml。
  • Group:逻辑分组,默认是 DEFAULT_GROUP
  • Namespace:隔离环境,例如:开发、测试、生产环境。
  • 配置格式:支持 YAML、Properties、JSON 等格式。

三、Spring Cloud 集成 Nacos 配置中心

1️⃣Nacos 控制台创建配置

配置管理配置列表 中点击 + 新建一个配置:

在弹出的表单中填写信息:

2️⃣添加依赖

xml 复制代码
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

3️⃣配置 bootstrap.yml

yaml 复制代码
spring:
  application:
    name: user-service
  cloud:
    nacos:
      config:
        server-addr: 127.0.0.1:8848 # nacos地址
        namespace: dev-id
        file-extension: yaml #文件后缀名
        group: DEFAULT_GROUP
        shared-configs: # 共享配置
          - dataId: shared-jdbc.yaml # 共享mybatis配置
          - dataId: shared-log.yaml # 共享日志配置
          - dataId: shared-swagger.yaml # 共享日志配置

4️⃣ 配置热更新

有很多的业务相关参数,将来可能会根据实际情况临时调整。例如购物车业务,购物车数量有一个上限,默认是10,将其配置在配置文件中,方便后期修改。

  • 添加配置到Nacos
  • 配置yaml
yaml 复制代码
hm:
  cart:
    maxAmount: 1 # 购物车商品数量上限
  • 配置热更新
java 复制代码
package com.hmall.cart.config;

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;

@Data
@Component
@ConfigurationProperties(prefix = "hm.cart")
public class CartProperties {
    private Integer maxAmount;
}

四、常见问题与排查

问题 原因与解决方案
无法读取 Nacos 配置 检查 Data ID 和服务名是否一致,格式是否正确
动态刷新无效 确保加了 @RefreshScope 和暴露了 /actuator/refresh
配置冲突或未生效 查看控制台中配置优先级(共享配置、服务配置等)
配置加载顺序不对 确保使用的是 bootstrap.yml 而非 application.yml
启动时报错 Namespace not found 指定的 namespace 不存在于控制台中