【Spring Cloud Alibaba】Nacos统一配置管理

目录

  • 回顾
    • 问题
  • 统一配置管理
    • 配置中心的解决方案:
    • Nacos的关键特性
      • 动态配置服务
        • 小结
      • Nacos的架构
  • Spring Cloud Alibaba Nacos Config
    • 1.创建项目
    • 2.添加依赖
    • 3.添加启动注解
    • 4.添加配置信息
    • 5.使用控制器类动态读取配置信息
    • 6.Nacos Server添加配置信息
    • 7.测试
  • Nacos Namespace/Group/DataID三者关系
    • 任务背景
    • Nacos如何处理
      • 命名空间(Namespace)
      • 配置集 ID(Data ID)
        • dataId 的完整格式
    • 代码案例
      • 1.新建命名空间:dev和test
      • 2.新建DataID(nacos-config-client-dev.yaml)和Group(DEV_GROUP)
      • 3.修改配置文件
      • 4.测试
  • 附:从微服务中拉取配置分析
    • 如何获取Nacos地址
    • 如何知道我们要获取哪一个配置
    • 流程图

回顾

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

问题

  • 随着单体架构向微服务架构的演进,各个应用自己独立维护本地配置的方式开始显露出它的不足之处:
    • 配置的动态更新
    • 配置集中式管理
    • 配置内容的安全性和权限
    • 不同部署环境下配置的管理

统一配置管理

  • 统一配置管理就是弥补不足的方法,可以集中管理所有实例的配置。
  • 简单来说,最基本的方法是把各个应用系统中的某些配置放在一个第三方中间件上进行统一维护。
  • 然后对于统一配置中心上的数据的变更需要推送到响应的服务节点实现动态更新。

配置中心的解决方案:

  • Zookeeper
  • Disconf
  • Spring Cloud Config
  • Apollo(阿婆罗)
  • Nacos
    在这里插入图片描述

Nacos的关键特性

动态配置服务

  • 业务服务一般都会维护一个本地配置文件,然后把一些常量配置到这个文件中。这种方式在某些场景中会存在问题,比如配置需要变更时需要重新部署应用。
  • 动态配置服务可以让您以中心化、外部化和动态化的方式管理所有环境的应用配置和服务配置。
  • 动态配置消除了配置变更时重新部署应用和服务的需要,让配置管理变得更加高效和敏捷。配置中心化管理让实现无状态服务变得更简单,让服务按需弹性扩展变得更容易。
  • Nacos 提供了一个简洁易用的UI (控制台样例 Demo) 帮助您管理所有的服务和应用的配置。Nacos 还提供包括配置版本跟踪、金丝雀发布、一键回滚配置以及客户端配置更新状态跟踪在内的一系列开箱即用的配置管理特性,帮助您更安全地在生产环境中管理配置变更和降低配置变更带来的风险。
小结

Nacos一方面可以将配置集中管理,另一方可以在配置变更时,及时通知微服务,实现配置的热更新。
在这里插入图片描述在这里插入图片描述

Nacos的架构

在这里插入图片描述

Spring Cloud Alibaba Nacos Config

1.创建项目

  • 指定artifactId为cloudalibaba-config-nacos-client
    在这里插入图片描述

2.添加依赖

在这里插入图片描述

3.添加启动注解

  • @EnableDiscoveryClient
@SpringBootApplication
@EnableDiscoveryClient
public class CloudalibabaConfigNacosClientApplication {
    public static void main(String[] args) {
        SpringApplication.run(CloudalibabaConfigNacosClientApplication.class, args);
    }
}

4.添加配置信息

  • 使用控制器类动态读取配置信息

bootstrap.yaml

spring:
  application:
    name: nacos-config-client
  profiles:
    active: dev
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
      config:
        server-addr: localhost:8848
        file-extension: yaml
server:
  port: 7600

5.使用控制器类动态读取配置信息

@RestController
@RefreshScope // 支持Nacos的动态刷新功能
public class ConfigClientController {
    @Value("${config.info}")
    private String configInfo;
    @GetMapping("/config/info")
    public String findConfigInfo() throws Exception{
        return "nacos配置中心读取的信息===>"+configInfo;
    }
}

6.Nacos Server添加配置信息

在这里插入图片描述在这里插入图片描述

7.测试

在这里插入图片描述
更新配置后再次访问
在这里插入图片描述在这里插入图片描述

Nacos Namespace/Group/DataID三者关系

  • 官网:https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html
  • 说明:之所以需要配置 spring.application.name ,是因为它是构成 Nacos 配置管理 dataId字段的一部分。

任务背景

  • 问题1:如果实际开发中,通常一个系统会准备,dev开发环境,test测试环境,prod生产环境,那如何保证指定环境启动时服务能正确读取到Nacos上相应环境的配置文件呢?
  • 问题2:一个大型分布式微服务系统会有很多微服务项目,每个微服务项目又都会有相应的开发环境、测试环境、生产环境…那么怎么对这些微服务配置进行管理呢?

Nacos如何处理

  • Nacos有分类管理的操作。抛出三个概念,Namespace(命令空间)、Group(分组)、DataID。

命名空间(Namespace)

  • 用于进行租户粒度的配置隔离。
  • 不同的命名空间下,可以存在相同的 Group 或 Data ID 的配置。
  • Namespace 的常用场景之一是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。
  • Nacos默认的命名空间是public,我们就可以利用Namespace来实现隔离
  • 比如我们现在有三个环境:开发、测试、生产环境,我们就可以创建三个Namespace,不同的Namespace之间是隔离的。
    在这里插入图片描述

配置集 ID(Data ID)

  • Nacos 中的某个配置集的 ID。配置集 ID 是组织划分配置的维度之一。
  • Data ID 通常用于组织划分系统的配置集。
  • 一个系统或者应用可以包含多个配置集,每个配置集都可以被一个有意义的名称标识。
  • 通常采用类 Java 包(如 com.taobao.tc.refund.log.level)的命名规则保证全局唯一性。
    在这里插入图片描述
dataId 的完整格式
${prefix}-${spring.profiles.active}.${file-extension}
  • prefix 默认为 spring.application.name 的值,也可以通过配置项 spring.cloud.nacos.config.prefix来配置。
  • spring.profiles.active 即为当前环境对应的 profile。
  • 注意:当 spring.profiles.active 为空时,对应的连接符 - 也将不存在,dataId 的拼接格式变成 ${prefix}.${file-extension}
  • file-exetension 为配置内容的数据格式,可以通过配置项 spring.cloud.nacos.config.file-extension 来配置。目前只支持 properties 和 yaml 类型。
    在这里插入图片描述在这里插入图片描述

代码案例

1.新建命名空间:dev和test

在这里插入图片描述在这里插入图片描述

2.新建DataID(nacos-config-client-dev.yaml)和Group(DEV_GROUP)

在这里插入图片描述在这里插入图片描述在这里插入图片描述

3.修改配置文件

spring:
  application:
    name: nacos-config-client
  profiles:
    active: dev
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
      config:
        server-addr: localhost:8848
        file-extension: yaml
        namespace: 244f3580-dc01-46fa-b555-43d5e183c47c  # 命名空间ID
        group: DEV_GROUP
server:
  port: 7600

4.测试

在这里插入图片描述

附:从微服务中拉取配置分析

如何获取Nacos地址

  • 服务需要先读取nacos中的配置文件,但是我们将nacos的地址配置到了application.yml文件中,而读取application.yml文件是在读取nacos之后的,所以按照原来的那样是行不通的。
  • 而bootstrap.yml文件的优先级要高很多(这个文件是引导文件,优先级高于application.yml),所以我们需要新建一个bootstrap.yml文件,将nacos的地址配置到这个文件中,这样的话就行得通了

如何知道我们要获取哪一个配置

  • 通过在bootstrap.yml文件配置服务名称、开发环境和文件后缀名我们就能知道了,因为我们在Nacos上新建配置的时候就是以这三个信息命名的。

流程图

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

大疆、西圣、枫笛领夹麦哪个好?大疆、西圣领夹麦克风测评对比

不知道大家有没有想过一个问题,为什么有些视频或直播的声音听起来那么清晰,仿佛身临其境?其实最主要的就是麦克风的原因,我们以前用的麦克风或多或少都会存在一些小毛病例如:音质不清晰、传输不稳定容易断断续续、声音…

国内PLM系统厂商,国内PLM系统哪个公司最受欢迎

国内PLM系统厂商,国内PLM系统哪个公司最受欢迎 国内PLM系统厂商中,要确定哪个公司的产品最受欢迎,需要考虑多个因素,包括市场份额、客户评价、技术实力、产品线完整性以及服务支持等。虽然无法直接给出一个具体的“最受欢迎”的排名&#xff…

centos7安装kubernetes v1.28.2

centos7安装kubernetes v1.28.2 一.环境部署 1.1基础环境配置 主机IP 主机名规划 172.17.48.15 master 172.17.48.3 node1 1.2修改机器名称 #永久修改主机名 hostnamectl set-hostname master && bash #在master上操作 hostnamectl set-hostname …

分层存储的图片的3d显示

分层存储的图片叠层成为3d,并显示。 文件夹D:\mask内的分层存储的图像文件: 1、显示为3d点云: import open3d as o3d import numpy as np from PIL import Imagedef convert_images_to_point_cloud(image_paths):points []for i, image_pa…

windows中安装zookeeper

https://zhuanlan.zhihu.com/p/692451839 【zookeeper】在Windows上启动zookeeper_windows启动zk-CSDN博客 Index of /apache/zookeeper/zookeeper-3.9.2 Index of /apache/zookeeper/zookeeper-3.9.2 Zookeeper的应用场景 1、配置管理 2、服务注册中心 3、主从协调 4、…

【OpenHarmony】ArkTS 语法基础 ③ ( @Component 自定义组件生命周期回调函数 | @Entry 页面生命周期回调函数 )

文章目录 一、ArkTS Component 自定义组件生命周期1、自定义组件生命周期2、aboutToAppear 函数执行时机和作用3、aboutToDisappear 函数执行时机和作用4、代码示例 二、ArkTS Entry 页面生命周期1、Entry 页面生命周期2、onBackPress 和 onPageHide 回调函数无关联 三、代码示…

【NoSQL数据库】Redis简介

Redis Redis简介 Redis关系型数据库和非关系型数据库Redis 简介redis速度快的原因 Redis 配置Linux 源码安装 关系型数据库和非关系型数据库 关系型数据库(Relational Database)和非关系型数据库(Non-Relational Database)是两种…

[个人感悟] 多线程问题应该考察哪些问题? (Java篇)

前言 “如何做一个合格的多线程开发者? 你真的懂多线程么?” 作为编程初学者被问的最多的问题, 本文就这个问题. 详细的讲讲对方究竟为什么要问这个问题, 并且回答问题的主要思路框架. PS: 本文主体背景为Java语言. 其他语言应当为同理. 问题 - 单线程问题 什么是…

中信建投证券信息技术部PMO高级经理张子洋受邀为第十三届中国PMO大会演讲嘉宾

全国PMO专业人士年度盛会 中信建投证券股份有限公司信息技术部PMO高级经理张子洋先生受邀为PMO评论主办的2024第十三届中国PMO大会演讲嘉宾,演讲议题为“浅谈项目管理标准化的建设及实践分享”。大会将于6月29-30日在北京举办,敬请关注! 议题…

[Flask]开源项目--基于Faster R-CNN的在线害虫识别系统

项目演示效果可见视频: 【现已开源】害虫在线识别系统-基于pytorchflaskhttps://www.bilibili.com/video/BV1yx4y1u74y/?vd_source80963105a0c8d89bb119f3ebca249b22!!!---本项目仅供交流学习,禁止商用---&#xff0…

【外汇天眼】选择外汇EA的关键:策略适配、风险控制与稳定性评估

外汇EA(Expert Advisor)是外汇交易市场中广泛使用的自动化交易系统。它们通过预定义的规则和算法自动执行交易,旨在为交易者提供便捷的交易体验,同时提高交易效率和准确性。本文将从策略选择、风险控制和稳定性评估三个方面&#…

1panel服务器面板迁移Docker容器存储路径

1panel服务器面板迁移Docker容器存储路径 1、停止Docker服务 找到容器菜单,在配置中点击停止。 2、迁移Docker容器目录 Docker默认存储目录/var/lib/docker 2.1、无已部署容器 删除docker目录,避免额外的磁盘空间占用。 2.2、有已部署容器 若需保留…

AIGC绘画设计基础——迄今为止你还没学会用AI提高工作效率吗?

对于我来说,在工作效率提升,绘画创意生成,视频制作等等方面,都有了质的飞跃提高。 下面我分别从不同方面说一下AI带给我的提效,并且也分享我用的好用工具给到大家。 一、工作提效 我的本职工作是从事设计管理工作&am…

YOLOv5改进 | 注意力机制 | 添加SimAM注意力机制【全网独家+附完整代码】

💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 压缩和激励模块(SE)以及空间通道注意力模块(CBAM)的注意力机制取得了巨大成功。本文介绍了一…

功能强大且专业的PDF转换软件PDF Shaper Professional 14.2

PDF Shaper Professional是一款适用于Windows的程序,可让您在计算机上处理PDF文件。 要开始使用PDF Shaper Professional,您需要在Windows计算机上下载并安装该程序。您还应该有合适的驱动程序和编解码器来处理计算机上的文本和图形。 安装程序后&#…

从零开始入门 LangChain

前言 最近一直在做 RAG 相关的内容,也学习了一段时间 LangChain 框架的用法。 本篇文章中将和大家讲述什么是 LangChain ,以及 LangChain 解决了现在大模型发展的哪些问题,然后会讲解LangChain 中基础的概念和组件。在此基础上,…

经纬恒润成功研发LRR610雷达先进算法!

好消息!经纬恒润搭载Arbe芯片组的LRR610 4D成像雷达算法开发出先进的后点云算法,并已圆满完成集成工作,这标志着智能驾驶感知系统迈向了一个新的里程碑。 经纬恒润自主开发的成像雷达算法,可以有效地跟踪数百个运动和静止目标&am…

亿级数据过滤和布隆过滤器

如何高效实现存在判断 在刷抖音时你有刷到过重复的推荐内容 吗?这么多的推荐内容要推荐给这么多的用户,它是怎么保证每个用户在看推荐内容时,保证不会出现之前已经看过的推荐视频呢?也就是说,抖音是如何实现 推送去重…

java 工作排序(Job Sequencing Problem)

给定一个作业数组,其中每个作业都有一个截止期限,如果作业在截止期限之前完成,则可获得相关利润。此外,每个作业都占用一个单位时间,因此任何作业的最小可能截止期限都是 1。如果一次只能安排一项作业,则最…

开源规则引擎LiteFlow项目应用实践

本文介绍基于开源规则引擎LiteFlow,如何开发规则设计器,在低代码平台中集成规则引擎,并在项目中实现应用的效果。由于低代码平台使用规则引擎实现了逻辑编排的需求,所以本文中的叫法为“逻辑设计”、“逻辑编排”、“逻辑流引擎”…