Nacos统一配置管理实战

本文介绍了Nacos作为配置中心的实战应用,包括配置的动态更新、集中式管理和环境隔离。通过Nacos,可以实现不同环境的配置管理,支持配置的实时更新,避免了传统方式的低效和繁琐。文中详细讲解了Nacos的基本概念,如Profile、DataID和Group,并展示了如何在SpringBoot项目中集成和配置Nacos,以及如何进行配置隔离和拆分,以提高微服务架构的灵活性和可维护性。
摘要由CSDN通过智能技术生成


配置文件想必大家都不陌生。在Spring Boot项目中,默认会提供一个application.properties或者application.yml文件,我们可以把一些全局性的配置或者需要动态维护的配置写入改文件,比如数据库的连接,功能开关,限流阈值,服务地址等。为了解决不同环境下服务连接配置等信息的差异,Spring Boot还提供了基于spring. profiles. active={profile}的机制来实现不同的环境的切换。

随着单体架构向微服务架构的演进,各个应用自己独立维护本地配置文件的方式开始显露出它的不足之处。主要有下面几点。

  • 配置的动态更新:在实际应用会有动态更新位置的需求,比如修改服务连接地址、限流配置等。在传统模式下,需要手动修改配置文件并且重启应用才能生效,这种方式效率太低,重启也会导致服务暂时不可用。
  • 配置集中式管理:在微服务架构中某些核心服务为了保证高性能会部署上百个节点,如果在每个节点中都维护一个配置文件,一旦配置文件中的某个属性需要修改,可想而知,工作量是巨大的。
  • 不同部署环境下配置的管理:前面提到通过profile机制来管理不同环境下的配置,这种方式对于日常维护来说也比较繁琐。

统一配置管理就是弥补上述不足的方法,简单说,最近本的方法是把各个应用系统中的某些配置放在一个第三方中间件上进行统一维护。然后,对于统一配置中心上的数据的变更需要推送到相应的服务节点实现动态跟新,所以微服务架构中,配置中心也是一个核心组件。

Nacos配置中心简介

简介

配置中心的开源解决方案很多,比如Spring Cloud Config,以及ZooKeeper, Disconf、Apollo、QConf、Nacos等。
Nacos是Alibaba开源的中间件,Nacos架构中有2个模块,分别是Config Service和Naming Service。其中Config Service就是Nacos用于实现配置中心的核心模块(Naming Service用于服务注册和发现,详情见:Nacos服务注册和发现实战),他实现了对配置的CRUD,版本管理,灰度管理,监听管理,推送轨迹,聚合数据等功能。

基本概念

  1. Profile

Java项目一般都会有多个Profile配置,用于区分开发环境,测试环境,准生产环境,生成环境等,每个环境对应一个properties文件(或是yml/yaml文件),然后通过设置 spring.profiles.active 的值来决定使用哪个配置文件。

spring:
  application:
    name: order-service
  profiles:
    active: dev

Nacos Config的作用就把这些文件的内容都移到一个统一的配置中心,即方便维护又支持实时修改后动态刷新应用。

  1. Data ID

当使用Nacos Config后,Profile的配置就存储到Data ID下,即一个Profile对应一个Data ID

  • Data ID的拼接格式:$ {prefix}-$ {spring.profiles.active}.${file-extension}
  • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix 来配置
  • spring.profiles.active 取 spring.profiles.active 的值,即为当前环境对应的 profile,当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 $ {prefix}.$ {file-extension}
  • file-extension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。
  1. Group

Group 默认为 DEFAULT_GROUP,可以通过 spring.cloud.nacos.config.group 来配置,当配置项太多或者有重名时,可以通过分组来方便管理

配置中心实战

基本配置

nacos可以作为配置中心使用,在payment工程中如下步骤,启动nacos配置中心
1.引入依赖

        <!--nacos config-->
        <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>

2.配置文件
(1)bootstrap.yml
         注意:Sprnig Boot 2.4.X版本后需要手动添加spring-cloud-starter-bootstrap组件后,才能加载bootstrap.yml配置文件

spring:
  application:
    name: payment-service
  profiles:
    active: dev
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        file-extension: yaml

         注意:spring.cloud.nacos.config配置必须放到bootstrap.yml配置文件中,保证在优先读取配置文件再启动,否则配置无效

(2)application.yml

server:
  port: ${port:9001}
spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #配置Nacos地址

3.nacos中配置DataID
访问nacos在配置列表中增加如下配置,如图所示
在这里插入图片描述
对应关系,如图所示。
在这里插入图片描述
4.业务中读取配置属性

@RestController
@RequestMapping("/payment")
@RefreshScope
public class PaymentController {

    @Value("${config.info}")
    private String configInfo;

    @GetMapping("/config/info")
    public String getConfigInfo() {
        return configInfo;
    }
}

5.测试
访问地址 http://localhost:9001/payment/config/info,显示config info dev…

当修改配置值,会结果已经改变,Nacos自带自动刷新功能。
在这里插入图片描述

配置隔离

通常,企业研发的流程是这样的:先在开发测试环境开发和测试功能,然后灰度,最后发布到生产环境。并且,为了生产环境的稳定,需要将测试环境和生产环境进行隔离,Nacos可以通过三种方式进行配置隔离:Nacos的服务器、namespace命名空间、group分组,在bootstrap.yml文件中可以通过配置Nacos的server-addr、namespace和group来区分不同的配置信息。

  • Nacos的服务器 spring.cloud.nacos.config.server-addr
  • Nacos的命名空间 spring.cloud.nacos.config.namespace,注意,这里使用命名空间的ID不是名称
  • Nacos的分组 spring.cloud.nacos.config.group

Nacos配置隔离具体步骤如下
1.命名空间
创建dev,test,prod,如图所示。
在这里插入图片描述
2.DataID
在不同命名空间下创建如下DataID(克隆即可),如图所示
在这里插入图片描述
3.bootstrap.yml
配置读取相应的配置,bootstrap.yml代码如下

spring:
  application:
    name: payment-service
  profiles:
    active: dev
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        file-extension: yaml
        namespace: f521b45b-e0bb-4c4d-b97c-3d0158970001
        group: MY_GROUP

注意:如果不配置namespace默认为public,不配置group默认为DEFAULT_GROUP
此时读取的配置为namespace=prod,group=MY_GROUP的配置页面

4.service隔离
同样注册service时可以指定指定namespace隔离注册到哪一个命名空间。application.yml如下

server:
  port: ${port:9001}
spring:
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #配置Nacos地址
        namespace: f521b45b-e0bb-4c4d-b97c-3d0158970001

配置拆分

1.配置拆分策略
项目中会有很多的微服务,必然会存在很多具体配置,和重复配置,可以采用如下方案管理配置,如图所示
在这里插入图片描述
根据上面分析在nacos中配置,如图所示
在这里插入图片描述
2.DataID配置
payment-service-dev.yaml,配置如图所示
在这里插入图片描述
common.yaml,配置如图所示
在这里插入图片描述
3.配置文件
bootstrap.yml,配置代码如下所示

spring:
  application:
    name: payment-service
  profiles:
    active: dev
  cloud:
    nacos:
      config:
        server-addr: localhost:8848
        file-extension: yaml
        namespace: f521b45b-e0bb-4c4d-b97c-3d0158970001
        group: MY_GROUP
        extension-configs[0]:
          data-id: common.yaml
          refresh: true
  • extension-configs配置属性和shared-configs配置属性功能一致,都是读取配置文件,这里我们把重复配置放到common.yaml中,这样在不同的工程中就可以重复使用[n]的值越大,优先级越高。
  • spring.application.name和spring.profiles.active配置必须放到bootstrap.yml中,否则影响配置自动刷新功能。

按照上面方案,整合拆分订单微服务的配置文件,如图所示
在这里插入图片描述
order微服务bootstrap.yml

spring:
  application:
    name: order-service
  profiles:
    active: dev
  cloud:
    nacos:
      config:
        server-addr: localhost:8848 #nacos 配置中心的地址
        file-extension: yaml
        extension-configs[0]:
          data-id: common.yaml
          refresh: true

注意:这里两个工程使用重用的配置文件common.yaml

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值