当前位置: 首页 > news >正文

【微服务】3、配置管理

微服务配置管理

在这里插入图片描述

  1. 已掌握的微服务组件及配置管理问题引出
    • 已掌握注册中心、Openfan、远程调用、负载均衡、网关等组件,具备微服务开发能力,但仍存在其他问题待解决。
    • 微服务和网关存在大量配置文件,其中包含很多重复配置,如数据库、日志、接口文档等配置。随着微服务数量增多,重复配置和维护成本高成为问题。
  2. 配置管理服务解决重复配置问题
    • 引入配置管理组件(服务),将微服务中重复或通用的配置交给它管理。
    • 微服务启动时读取配置管理服务中的配置,实现配置共享,减少重复编写,方便线上配置修改。
  3. 业务相关配置的问题
    • 业务相关配置众多,如登录超时时间、最大重试次数、订单超时时长、购物车商品数量上限等,不能写死在代码中,需放在配置文件。
    • 配置文件修改配置虽无需重新编译打包,但需重启项目,影响用户体验和运维工作。
  4. 配置变更需重启服务的问题及解决方案
    • 微服务和网关每次配置变更都需重启服务,这是核心问题。
    • 配置管理服务可管理业务相关配置和网关路由配置,监听配置变更并推送消息,使微服务无需重启即可生效,实现配置热更新。
  5. 配置管理的核心功能及Nacos的作用
    • 配置管理的两大核心功能为配置共享和避免配置更新后重启实现热更新。
    • 之前使用的Nacos不仅具备注册中心功能,还能实现配置管理,无需学习新的技术。

在这里插入图片描述

  1. 背景介绍

    • 微服务配置问题:微服务中存在如JDBC、日志、swagger等重复度高的配置,不适合在微服务中重复编写。
    • 解决方案:将这些配置交给Nacos配置中心统一管理,实现微服务间配置共享,本节课学习利用Nacos实现配置共享,主要有添加共享配置到Nacos和微服务拉取配置两步。
  2. 添加共享配置到Nacos

    • 确定共享配置内容:以购物车服务配置文件为例,其中服务端口和名称不重复,但JBDC连接参数(除数据库名)、mp配置、日志配置、swagger配置等多服务重复,将这些配置分批抽取,先处理JBDC和mp相关配置。
    • 在Nacos中添加共享配置
      • 在Nacos控制台配置管理菜单的配置列表点击加号添加新配置。
      • 配置信息包括:
        • Data ID:配置文件名称,如shareGDBCDEO用于共享GBDC配置,微服务获取共享配置需指定此名称。
        • Group:数据分组,默认default group。
        • 描述:对文件简单介绍,如GBDC共享配置文件。
        • 文件格式:本次为yaml格式。
        • 配置内容:粘贴相关配置并保留GBDC和mp相关内容,同时将可能变化的配置设为变量,如数据库名、服务端口、IP地址、用户名、密码等,可定义默认值。
    • 添加其他共享配置:类似地,对日志配置(如share log em)和swagger配置(如share swagger em)进行操作,其中swagger配置中标题、描述可设变量和默认值,扫描包不写死。
  3. 微服务拉取配置

    • Spring Boot项目启动流程与问题:普通Spring Boot项目启动先读取application.yml完成spring application context初始化。但Spring Cloud项目引入配置管理后,启动时先尝试拉取Nacos配置完成spring cloud上下文环境初始化,再进行Spring Boot配置文件加载和上下文初始化,这导致项目启动时不知Nacos地址无法拉取配置的问题。

    • 在这里插入图片描述

    • 解决方案:创建bootstrap.yml文件

      • 作用:引导配置文件,项目启动先读取它获取Nacos地址,解决拉取配置问题。
      • 内容:主要由三部分组成。
        • 服务名、application启动运行环境(可分dev、local等环境,需指定profile active)、Nacos地址。
        • config file extension:指定共享配置文件后缀名,本次为yml。
        • 共享配置文件名称:指定要拉取的共享配置文件名,如shareGDBCDEO等。
      • 操作步骤:
        • 引入依赖:

        • 在这里插入图片描述

        • 在这里插入图片描述

        • 创建文件:复制粘贴并重命名为bootstrap.yml,修改内容,保留服务名、环境、Nacos地址,添加共享配置文件信息,同时在application.yml中去除已在bootstrap.yml或从Nacos拉取的配置(如服务名、环境、数据库NX地址、日志、NPD等),保留需自定义的变量(如HMDB.database、swagger相关的title、扫描包等)。

  4. 课程总结

    • 核心步骤
      • 将共享配置添加到Nacos管理。
      • 在微服务内部拉取配置,包括引依赖(spring cloud starter alibaba nacos config和spring cloud starter bootstrap)和定义bootstrap.yml文件(指定服务名称、激活环境变量、Nacos地址、要拉取的共享配置名字)。
    • 最终效果:实现微服务配置共享,简化微服务配置文件。

配置热更新

  1. 配置热更新概念与作用

    • 概念:修改配置文件时,微服务无需重启使配置生效。
    • 作用:部分配置与业务有关且可能变更,配置热更新可提升用户体验,避免因重启服务导致用户无法访问。
  2. 配置热更新文件名称格式
    在这里插入图片描述
    在这里插入图片描述

    • 格式组成:包含微服务名(spring application name)、profile(spring active profile,可选)、文件后缀名(file extension)。
  3. 配置热更新的读取方式
    在这里插入图片描述

    • 方式一:使用configuration properties读取配置,配置文件中需有对应属性,配置变更时可热更新。
    • 方式二:采用注解方式读取属性,需在类上加refresh scope注解标记。推荐使用方式一,原因是value注解方式获取属性已不常用,且方式二需额外学习新注解。
  4. 购物车服务配置热更新案例实操
    在这里插入图片描述

    • 需求:将购物车商品上限设置为配置文件属性,实现配置热更新。
    • 操作步骤
      • 在购物车服务中定义属性类,如CartProperties,添加@ConfigurationProperties注解并设置前缀,定义最大商品数量属性maxItems并注册成bean。

      • 在这里插入图片描述

      • 在业务代码中注入该属性,修改添加购物车逻辑,判断购物车数量是否超过maxItems属性值,超过则抛出异常。

      • 在Nacos中添加配置文件,文件名格式为微服务名+profile(可选)+后缀名,指定属性值,如HM.cut.max-items=1,不指定profile则所有环境生效。

      • 在这里插入图片描述

      • 重启购物车服务,测试添加购物车功能,根据配置上限限制添加数量。修改Nacos中配置值为10并发布,再次测试添加购物车,验证热更新效果。

  5. 配置热更新实现步骤总结

    • 在Nacos中定义与微服务名相关的配置文件,文件名格式为微服务名+profile(可选)+后缀名。
    • 在微服务中使用configuration properties方式加载属性,配置变更时无需重启服务即可生效。

相关文章:

【微服务】3、配置管理

微服务配置管理 已掌握的微服务组件及配置管理问题引出 已掌握注册中心、Openfan、远程调用、负载均衡、网关等组件,具备微服务开发能力,但仍存在其他问题待解决。微服务和网关存在大量配置文件,其中包含很多重复配置,如数据库、日…...

数据分析思维(七):分析方法——群组分析方法

数据分析并非只是简单的数据分析工具三板斧——Excel、SQL、Python,更重要的是数据分析思维。没有数据分析思维和业务知识,就算拿到一堆数据,也不知道如何下手。 推荐书本《数据分析思维——分析方法和业务知识》,本文内容就是提取…...

概述(讲讲python基本语法和第三方库)

我是北子,这是我自己写的python教程,主要是记录自己的学习成果方便自己日后复习, 我先学了C/C,所以这套教程中可能会将很多概念和C/C去对比,所以该教程大概不适合零基础的人。 it seems that python nowadays 只在人工…...

力扣-20-有效的括号-栈

思路: 左括号每次匹配都是先匹配最后进来的,和栈的特点很相似,我们就可以利用栈来完成...

数据在内存中的存储【C语言版】

目录 1.举例: 2.深入刨析大端小端的组成: 3.判断当前编译环境是大端还是小端的方法 4.以函数的形式来判断当前的编译环境是大端还是小端【就是把判断大端小端的方法放进函数里面来实现,得到返回值,可以减少main()函数的内存】…...

【SQL】进阶知识 — 各大数据库合并几条数据到一行的方式

大家好,欢迎来到本期的 SQL 知识分享!今天我们要聊一个非常实用的技能:如何将多个行数据合并成一行!如果你曾经需要把多个查询结果合并成一个单元,或者把多行数据汇总到一个字段中,这篇文章将会教你如何用 …...

Gitee上传项目代码教程(详细)

工具必备:Git Bash 上传步骤 1.在Gitee创建项目仓库 2.进入本地项目目录 右键打开Git Bash here 3.配置用户名和邮箱 如果之前给git配置过用户名和邮箱可跳过 查看Git是否配置成功:git config --list git config --global user.name "xxx"…...

python ijson 用法教程

ijson PyPI Python ijson处理大型JSON文件 - 秀尊云 Python解析JSON大文件 | Leetaos Blog https://stackoverflow.com/questions/2400643/is-there-a-memory-efficient-and-fast-way-to-load-big-json-files/58148422#58148422 Python中读写(解析)J…...

什么是网络安全攻防演练,即红蓝对抗?

定义与目的 定义:网络安全攻防演练是一种模拟真实网络攻击和防御场景的活动,通过组织专业的攻击队伍(红队)和防御队伍(蓝队)进行对抗,来检验和提升组织的网络安全防御能力、应急响应能力和安全运…...

数据挖掘——决策树分类

数据挖掘——决策树分类 决策树分类Hunt算法信息增益增益比率基尼指数连续数据总结 决策树分类 树状结构,可以很好的对数据进行分类; 决策树的根节点到叶节点的每一条路径构建一条规则;具有互斥且完备的特点,即每一个样本均被且…...

Pytorch单、多GPU和CPU训练模型保存和加载

Pytorch多GPU训练模型保存和加载 在多GPU训练中,模型通常被包装在torch.nn.DataParallel或torch.nn.parallel.DistributedDataParallel中,这会在模型的参数名前加上module前缀。因此,在保存模型时,需要使用model.module.state_di…...

Karate 介绍与快速示例(API测试自动化、模拟、性能测试与UI自动化工具)

Karate是一个将API测试自动化、模拟、性能测试甚至UI自动化结合到一个统一框架中的开源工具。 Karate使用Gherkin 的BDD语法,是语言中性的,即使是非程序员也很容易。断言和HTML报告是内置的,支持并行运行测试以提高速度Karate 是用Java语言编写, 可以在Java 项目项目中运行…...

Pytest 高级用法:间接参数化

文章目录 1. 引言2. 基础概念2.1 Fixture2.2 参数化 3. 代码实例3.1 基础设置3.2 测试用例示例示例 1:基础的间接参数化示例 2:通过 request 获取参数值示例 3:多参数组合测试示例 4:部分间接参数化 4. 最佳实践5. 总结参考资料 1…...

第07章 存储管理(一)

一、磁盘简介 1.1 名称称呼 磁盘/硬盘/disk是同一个东西,不同于内存的是容量比较大。 1.2 类型 机械:机械硬盘即是传统普通硬盘,主要由:盘片,磁头,盘片转轴及控制电机,磁头控制器&#xff0…...

Go语言的 的设计模式(Design Patterns)核心知识

Go语言的设计模式(Design Patterns)核心知识 Go语言(Golang)是一种静态类型、编译型的编程语言,自2009年由Google正式推出以来,因其高效的性能、卓越的并发能力以及简洁的语法受到广泛欢迎。在软件开发中&…...

js函数预览图片:支持鼠标和手势拖拽缩放

对之前的方式改进:原生js实现图片预览控件,支持丝滑拖拽,滚轮放缩,放缩聚焦_js图片预览-CSDN博客 /*** 图片预览函数,调用后自动预览图片* param {图片地址} imgurl*/ function openImagePreview(imgurl) {if (!imgurl…...

用QT实现 端口扫描工具1

安装在线QT,尽量是完整地自己进行安装,不然会少包 参考【保姆级图文教程】QT下载、安装、入门、配置VS Qt环境-CSDN博客 临时存储空间不够。 Windows系统通常会使用C盘来存储临时文件。 修改临时文件存储位置 打开系统属性: 右键点击“此电…...

设计模式 结构型 适配器模式(Adapter Pattern)与 常见技术框架应用 解析

适配器模式(Adapter Pattern)是一种结构型设计模式,它允许将一个类的接口转换成客户端所期望的另一个接口,从而使原本因接口不兼容而无法一起工作的类能够协同工作。这种设计模式在软件开发中非常有用,尤其是在需要集成…...

vue 项目集成 electron 和 electron 打包及环境配置

vue electron 开发桌面端应用 安装 electron npm i electron -D记得加上-D,electron 需添加到devDependencies,如果添加到dependencies后面运行可能会报错 根目录创建electron文件夹,在electron文件夹创建main.js(或者backgrou…...

vscode如何离线安装插件

在没有网络的时候,如果要安装插件,就会麻烦一些,需要通过离线安装的方式进行。下面记录如何在vscode离线安装插件。 一、下载离线插件 在一台能联网的电脑中,下载好离线插件,拷贝到无法联网的电脑上。等待安装。 vscode插件商店地址:https://marketplace.visualstudio.co…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...

安宝特方案丨XRSOP人员作业标准化管理平台:AR智慧点检验收套件

在选煤厂、化工厂、钢铁厂等过程生产型企业,其生产设备的运行效率和非计划停机对工业制造效益有较大影响。 随着企业自动化和智能化建设的推进,需提前预防假检、错检、漏检,推动智慧生产运维系统数据的流动和现场赋能应用。同时,…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

django filter 统计数量 按属性去重

在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...

实现弹窗随键盘上移居中

实现弹窗随键盘上移的核心思路 在Android中&#xff0c;可以通过监听键盘的显示和隐藏事件&#xff0c;动态调整弹窗的位置。关键点在于获取键盘高度&#xff0c;并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...

Python基于历史模拟方法实现投资组合风险管理的VaR与ES模型项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档&#xff09;&#xff0c;如需数据代码文档可以直接到文章最后关注获取。 1.项目背景 在金融市场日益复杂和波动加剧的背景下&#xff0c;风险管理成为金融机构和个人投资者关注的核心议题之一。VaR&…...

HTML前端开发:JavaScript 获取元素方法详解

作为前端开发者&#xff0c;高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法&#xff0c;分为两大系列&#xff1a; 一、getElementBy... 系列 传统方法&#xff0c;直接通过 DOM 接口访问&#xff0c;返回动态集合&#xff08;元素变化会实时更新&#xff09;。…...

Visual Studio Code 扩展

Visual Studio Code 扩展 change-case 大小写转换EmmyLua for VSCode 调试插件Bookmarks 书签 change-case 大小写转换 https://marketplace.visualstudio.com/items?itemNamewmaurer.change-case 选中单词后&#xff0c;命令 changeCase.commands 可预览转换效果 EmmyLua…...