Nacos的配置中心

1.前言

除了注册中心和负载均衡之外, Nacos还是⼀个配置中心, 具备配置管理的功能.
Namespace 的常用场景之一是不同环境的配置区分隔离, 例如开发测试环境和⽣产环境的配置隔离。

1.1 为什么需要配置中心?

当前项目的配置都在代码中,会存在以下问题:

  1. 配置文件修改时,服务需要重新并部署。微服务架构中可能有成百个实例,挨个部署比较麻烦并且容易出错。
  2. 多个开发时,配置文件可能需要经常修改,使用同一个配置文件容易冲突。

配置中心就是对这些配置项进行统一管理,通过配置中心,可以其中查看,修改和删除配置,无需再逐个修改配置文件,提高效率的同时也降低了出错的风险。

  1. 服务启动时,从配置中心读取配置项的内容,进行初始化。
  2. 配置项修改时,通知微服务,实现配置的更新加载。

2. 入门程序

具体可以参考Nacos官网:Nacos Spring Cloud 快速开始

2.1 添加配置

在Nacos控制台添加配置项

新建配置项

配置内容:nacos.test.num = 5
说明:

  1. Data ID 设置为项目名称。
  2. 配置内容的数据格式, 目前只支持 properties 和 yaml 类型。
  3. 设置配置内容。

2.2 获取配置内容

  1. 引入Nacos Config 配置中心的依赖
XML 复制代码
<!--        添加nacos配置中心的依赖-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
<!--        spring_cloud 2020以后版本需要引入bootstrap的依赖 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
        </dependency>
  1. 配置bootstrap.properties
    微服务启动前,需要先获取Nacos中配置,并与application.yml配置合并, 在微服务运行之前, Nacos要求必须使用bootstrap.properties文件来配置Nacos Server 地址。
    我以yml格式进行配置
复制代码
spring:
  application:
    name: product-service # 设置应用程序的名称
  profiles:
    active: @profiles.name@ # 设置应用启动的环境,注意这里的配置文件会拼接在application.yml文件上面
  cloud:
    nacos:
      config:
        server-addr: 8.130.10.216:8848 # 设置了Nacos配置中心的地址为127.0.0.1:8848
  1. spring.application.name: 这里设置了应用程序的名称为 "product-service"。这个名称通常用于注册服务到服务注册中心或者在日志中标识应用。

  2. profiles.active: 这是设置应用启动的环境。@profiles.name@ 是一个占位符,它会被实际的配置文件名所替换。比如如果激活了名为 "dev" 的配置文件,那么实际的配置文件名就会变成 "application-dev.yml"。

  3. cloud.nacos.config.server-addr: 这里配置了 Nacos 配置中心的地址为 "8.130.10.216:8848"。Nacos 是一个开源的分布式配置中心,这里指定了应用从该配置中心获取配置信息。

注意 配置中心和服务中心的环境是隔离的:

Nacos 配置中心:

  • spring: cloud: nacos: config: server-addr

Nacos 服务中心:

  • spring: cloud: nacos: discovery: server-addr
复制代码
/**
 * @Description: 用于读取nacos中的配置项
 * @Author: windStop
 * @Date: 2024/6/3 16:40
 */
@RestController
@RefreshScope
public class NacosController {

    @Value("${nacos.test.num}")
    private String nacosConfig;

    @RequestMapping("/getConfig")
    public String getConfig(){
        return "从Nacos中获取到了配置项" + nacosConfig;
    }
}

需要在启动类添加@RefreshScope 配置进行热更新

当配置中心中的配置信息发生变化时,通过@RefreshScope标记的Bean可以在不重启应用的情况下实现热更新。

3. 配置中心详解

3.2 设置命名空间

Nacos的服务中心和配置中心的命名空间是分别设置的,不属于同一配置。默认是public。

Nacos配置中心的命名空间在bootstrap.properties中进行配置的。

复制代码
spring:
  application:
    name: product-service # 设置应用程序的名称
  profiles:
    active: @profiles.name@ # 设置应用启动的环境,注意这里的配置文件会拼接在application.yml文件上面
  cloud:
    nacos:
      config:
        server-addr: 8.130.10.216:8848 # 设置了Nacos配置中心的地址为127.0.0.1:8848
        namespace: 6beb0a84-3626-47a9-9d2e-56970d22c68e # 设置配置中心的命名空间

3.3 Data-ID(配置项)

复制代码
  Data Id 格式介绍
在 Nacos Spring Cloud 中, dataId 的完整格式如下:
复制代码
${prefix}-${spring.profiles.active}.${file-extension}
  • Prefix 设置:

    • 默认情况下,prefix 是根据 spring.application.name 的值确定的。
    • 你也可以通过配置项 spring.cloud.nacos.config.prefix 来自定义 prefix。
  • Profile 设置:

    • spring.profiles.active 表示当前环境对应的 profile。
    • 如果 spring.profiles.active 为空,连接符 - 也将不存在。
    • dataId 的拼接格式为 ${prefix}.${file-extension},其中 file-extension 表示配置内容的数据格式。
    • 可以通过配置项 spring.cloud.nacos.config.file-extension 来指定 file-extension,目前只支持 propertiesyaml 类型,默认为 properties
  • 配置文件加载顺序:

    1. ${prefix}-${spring.profiles.active}.${file-extension},例如:product-service-dev.properties
    2. ${prefix}.${file-extension},例如:product-service.properties
    3. ${prefix},例如:product-service
  • 注意事项:

    • ${spring.application.name}${spring.profiles.active} 等配置必须放在 bootstrap.properties 文件中指定。

三个文件的优先级为: product-service-dev.properties > product-service.properties > product-service

4. Nacos配置中心总结

Nacos作为一个功能强大的服务发现和配置管理平台,不仅提供了注册中心和负载均衡的功能,还充当了配置中心的角色。在使用Nacos配置中心时,我们可以通过以下步骤轻松管理项目的配置项:

1. 配置中心的必要性

  • 传统的配置文件管理方式存在诸多问题,如需重新部署服务、配置冲突等。
  • 配置中心能够统一管理配置项,提高效率,降低出错风险。

2. 入门程序

  • 添加配置项到Nacos控制台,并通过依赖引入和配置文件配置,实现配置的读取和初始化。

3. 配置中心详解

  • 命名空间设置: 可以通过命名空间进行不同环境的配置隔离,如开发测试环境和生产环境。
  • Data-ID格式: Data-ID的格式包括prefix、profile、file-extension等,可根据项目需求进行自定义设置。

通过以上步骤,我们可以轻松地实现配置的管理和更新,提高了系统的灵活性和可维护性。

总的来说,Nacos配置中心为微服务架构下的配置管理提供了便利,使得配置项的管理变得更加简单和高效。

相关推荐
Wx-bishekaifayuan3 小时前
django电商易购系统-计算机设计毕业源码61059
java·spring boot·spring·spring cloud·django·sqlite·guava
customer083 小时前
【开源免费】基于SpringBoot+Vue.JS周边产品销售网站(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·java-ee·开源
Stringzhua5 小时前
【SpringCloud】Kafka消息中间件
spring·spring cloud·kafka
茶馆大橘7 小时前
微服务系列六:分布式事务与seata
分布式·docker·微服务·nacos·seata·springcloud
想进大厂的小王10 小时前
项目架构介绍以及Spring cloud、redis、mq 等组件的基本认识
redis·分布式·后端·spring cloud·微服务·架构
customer0811 小时前
【开源免费】基于SpringBoot+Vue.JS医院管理系统(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·开源·intellij-idea
杨荧11 小时前
【JAVA毕业设计】基于Vue和SpringBoot的服装商城系统学科竞赛管理系统
java·开发语言·vue.js·spring boot·spring cloud·java-ee·kafka
aloha_7891 天前
从零记录搭建一个干净的mybatis环境
java·笔记·spring·spring cloud·maven·mybatis·springboot
茶馆大橘1 天前
微服务系列五:避免雪崩问题的限流、隔离、熔断措施
java·jmeter·spring cloud·微服务·云原生·架构·sentinel