Nacos 配置中心

[TOC]

配置管理方式

Sping Boot 配置文件:

  • bootstap.yml
  • application.yml

传统的配置管理方式:

  • 硬编码:没有将业务逻辑和配置管理的职责分离
  • 配置文件:需要重新编译打包
  • 环境变量、启动参数:需要重启应用,无法做到动态更新
  • 数据库、Redis:DB 性能、版本控制、安全性

Nacos 配置中心特性:

  • 高可用性:集群
  • 环境隔离:Namespace
  • 多格式支持
  • 访问控制:权限管理
  • 职责分离
  • 版本控制和审计功能
  • 动态变更推送

配置动态更新使用场景:

  • 业务开关:非关键业务人工降级、上下游业务同步上线(等等其他业务上线时打开开关)
  • 业务规则更新(频繁变更的配置规则)
  • 灰度发布验证:Nacos Beta 发布功能(将配置推送到指定的 IP)

Nacos 配置中心

启动 Nacos 配置中心服务

Nacos 单机模式 standalone-start.cmd

start startup.cmd -m standalone

用户名密码:nacos/nacos

依赖

依赖:

  • Nacos-config: 配置中心
  • Spring-cloud-starter-bootstrap:bootstrap 配置
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

配置文件

配置文件:/resources/bootstrap.yml

spring:
  application:
    name: coupon-customer-serv
  cloud:
    nacos:
      config:
        server-addr: localhost:8848 # Nacos 配置中心地址
        file-extension: yml
        # prefix: # 文件名前缀,默认是spring.application.name
        namespace: dev # 命名空间ID,默认是 则默认命令空间为 PUBLIC
        group: DEFAULT_GROUP # 默认值为 DEFAULT_GROUP
        timeout: 5000 # 从Nacos读取配置项的超时时间
        config-long-poll-timeout: 10000 # 长轮询超时时间
        config-retry-time: 2000 # 轮询的重试时间
        max-retry: 3 # 长轮询最大重试次数
        refresh-enabled: true # 开启监听和自动刷新
        # Nacos的扩展配置项,数字越大优先级越高
        extension-configs:
          - dataId: redis-config.yml
            group: EXT_GROUP
            refresh: true # 动态刷新
          - dataId: rabbitmq-config.yml
            group: EXT_GROUP
            refresh: true

Nacos 配置文件名(dataId)完整格式:${prefix}-${spring.profiles.active}.${file-extension}

  • prefix:默认是 spring.application.name
  • profile:没有配置时,则为空并且去掉前面的横杠

配置类

配置类:

@Data
@Component
@RefreshScope // 动态推送配置需要该注解(加上该注解后,当 Bean 被刷新时,依赖它的 Bean 会拿到新的实例) 
@ConfigurationProperties("coupon")
public class CouponProperties {
    /**
     * 暂停领取优惠卷
     * */
    private Boolean disableCouponRequest;
}

配置中心配置

创建配置 img.png

配置中的 namespace 用的是命名空间ID,而不是命名空间名称

img_1.png