Nacos的配置中心

news2024/12/28 2:09:52

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 配置中心的依赖

<!--        添加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>
  2. 配置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,目前只支持 properties 和 yaml 类型,默认为 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配置中心为微服务架构下的配置管理提供了便利,使得配置项的管理变得更加简单和高效。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1807125.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

6.7.12 使用 SWIN Transformer 通过热图像实现乳腺癌检测系统

乳腺癌是重大的公共卫生挑战&#xff0c;需要有效的诊断方法。虽然超声、乳房 X 线照相和 MRI 仍然至关重要&#xff0c;但它们在定期、短间隔大规模筛查中的实用性有限。 热成像作为一种非侵入性且经济有效的选择&#xff0c;具有常规自我筛查的潜力。本研究利用基于自注意力…

java中异常-异常概述+异常体系结构

一、异常概述 1、什么是异常&#xff1f; java程序在运行时出现的不正常情况 2、java中提供的默认的异常处理机制 java中对java程序运行时可能会出现的每种不正常情况都创建了一个唯一对应的类&#xff0c;在java程序运行时如果出现不正常情况&#xff0c;java程序就会创建…

数据结构:旋转数组

方法1 &#xff08;三次逆置法&#xff09;&#xff1a; void reverse(int* nums, int start, int end) {while (start < end) {int temp nums[start];nums[start] nums[end];nums[end] temp;start;end--;} }void rotate(int* nums, int numsSize, int k) {k k % numsS…

Java:111-SpringMVC的底层原理(中篇)

这里续写上一章博客&#xff08;110章博客&#xff09;&#xff1a; 现在我们来学习一下高级的技术&#xff0c;前面的mvc知识&#xff0c;我们基本可以在67章博客及其后面相关的博客可以学习到&#xff0c;现在开始学习精髓&#xff1a; Spring MVC 高级技术&#xff1a; …

Comfyui容器化部署与简介

目前使用 Stable Diffusion 进行创作的工具主要有两个&#xff1a;Stable Diffusion WebUI 和 ComfyUI。本文重点介绍ComfyUI的部署使用。 ComfyUI 可定制性很强&#xff0c;可以让创作者搞出各种新奇的玩意&#xff0c;通过工作流的方式&#xff0c;也可以实现更高的自动化水平…

SwiftUI五视图动画和转场

代码下载 使用SwiftUI可以把视图状态的改变转成动画过程&#xff0c;SwiftUI会处理所有复杂的动画细节。在这篇中&#xff0c;会给跟踪用户徒步的图表视图添加动画&#xff0c;使用animation(_:)修改器给一个视图添加动画效果非常容易。 下载起步项目并跟着本篇教程一步步实践…

Linux 内核之 mmap 内存映射触发的缺页异常 Page Fault

文章目录 前言一、简介1. MMU 内存管理2. 缺页中断3. 页表4. 小节 二、mmap 提前分配物理内存1. mm_populate 函数2. __mm_populate 函数3. populate_vma_page_range 函数4. __get_user_pages 函数5. find_extend_vma 函数6. find_vma 函数7. follow_page_mask 函数8. follow_p…

专业场景化ChatGPT论文润色提示词指令,更精准、更有效辅助学术论文撰写

大家好&#xff0c;感谢关注。我是七哥&#xff0c;一个在高校里不务正业&#xff0c;折腾学术科研AI实操的学术人。可以添加我&#xff08;yida985&#xff09;交流学术写作或ChatGPT等AI领域相关问题&#xff0c;多多交流&#xff0c;相互成就&#xff0c;共同进步。 在学术写…

数据分析必备:一步步教你如何用Pandas做数据分析(21)

1、Pandas 可视化 Pandas 可视化是指使用 Pandas 库中的函数和方法来创建数据可视化图表。Pandas 提供了一些基本的绘图功能&#xff0c;例如折线图、柱状图、饼图等&#xff0c;可以通过调用相应的函数来创建这些图表。 2、基本绘图&#xff1a;绘图 Series和DataFrame上的…

数据库四种隔离等级

持续更新以及完善中… 数据库事务隔离 首先&#xff0c;为什么要有事务隔离呢&#xff1f; 在单线程下&#xff0c;没什么大碍&#xff0c;但是我们想要提高效率&#xff0c;采用多线程并发时&#xff0c;便会出现一些问题。 **下面的问题一定要当作一个事务来看待&#xf…

高考之后第一张大流量卡应该怎么选?

高考之后第一张大流量卡应该怎么选&#xff1f; 高考结束后&#xff0c;选择一张合适的大流量卡对于准大学生来说非常重要&#xff0c;因为假期期间流量的使用可能会暴增。需要综合考虑多个因素&#xff0c;以确保选到最适合自己需求、性价比较高且稳定的套餐。以下是一些建议…

MAVEN架构项目管理工具

1、什么是maven Maven是跨平台的项目管理工具。主要服务于基于Java平台的项目构建&#xff0c;依赖管理和项目信息管理。 2、maven的目标&#xff1a;Maven的主要目标是为了使开发人员在最短的时间内领会项目的所有状态 3、使用maven不需要考虑各个依赖的版本&#xff0c;因…

指针(初阶2)“野指针以及指针运算”

目录 一.野指针 二.如何避免野指针 三.指针运算 1、指针&#xff08;-&#xff09;整数 2、指针 - 指针 3、指针关系运算 小编在这里声明一下&#xff0c;将某一块的知识点分为上中下或者1&#xff0c;2&#xff0c;3来编写不是为了增加小编的文章总量&#xff0c;也不是故意这…

MySQL之多表查询—列子查询

一、引言 标量子查询上篇博客已学习。接下来这篇博客学习子查询的第二种形式——列子查询 列子查询 子查询返回的结果是一列&#xff08;当然也可以是多行)&#xff0c;这种子查询称为列子查询。 列子查询可以使用的操作符 IN、NOT IN 、ANY&#xff08;any&#xff09;、SOME…

windows域控共享网络驱动器

背景 假设在一家公司&#xff0c;有新入职的员工。我们给其创建了域账号&#xff0c;有一些共享的文件需要其可以直接访问到。我们可以采用共享目录的形式&#xff0c;但是每次都要输入共享端的ip或者主机名&#xff0c;比较麻烦。我们希望创建的域账号访问共享文件更便捷一些…

使用Flask框架在Python中获取HTTP请求头信息

目录 引言 一、Flask框架简介 二、获取HTTP请求头的方法 三、案例分析 案例一&#xff1a;基于请求头进行用户身份验证 案例二&#xff1a;基于请求头的内容类型处理不同格式的响应 四、总结 引言 在Web开发领域&#xff0c;HTTP协议是客户端和服务器之间进行通信的基础…

爆破信息壁垒!多少考研人还在盲目刷题?

有些同学&#xff0c;天生擅长冲锋陷阵&#xff0c;不擅长思考总结。 忌&#xff1a;看视频一日千里&#xff0c;看例题从不动笔。 —— 新知识都“会”&#xff0c;旧知识都不会。 大忌&#xff1a;做题没思路&#xff0c;一看答案都会&#xff01; 24的学长学姐&#xff0c…

抽象的java入门1.3.2

前言&#xff1a; 全新版本的函数&#xff08;方法&#xff09;定义&#xff0c;更简单 1.优化了验证过程&#xff0c;直击本质 2.新增目前一图流 正片&#xff1a; 函数的结构可以分为三部分&#xff1a;函数名&#xff0c;参数&#xff0c;函数体 一生二&#xff0c;二生…

VS2019专业版 C#和MFC安装

1. VS2019专业版下载地址 https://learn.microsoft.com/en-us/visualstudio/releases/2019/history 2.安装 C# 部分 MFC部分

ATTCK红队评估(五)

环境搭建 靶场拓扑图&#xff1a; 靶机下载地址: 漏洞详情 外网信息收集 确定目标靶机地址&#xff1a; 发现主机192.168.135.150主机是本次攻击的目标地址。探测靶机开放的端口信息&#xff1a; 目标靶机开放了两个端口&#xff1a;80、3306&#xff0c;那没什么意外的话就是…