当前位置: 首页 > 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…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现

目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法

树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...

YSYX学习记录(八)

C语言&#xff0c;练习0&#xff1a; 先创建一个文件夹&#xff0c;我用的是物理机&#xff1a; 安装build-essential 练习1&#xff1a; 我注释掉了 #include <stdio.h> 出现下面错误 在你的文本编辑器中打开ex1文件&#xff0c;随机修改或删除一部分&#xff0c;之后…...

Java - Mysql数据类型对应

Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...

Java线上CPU飙高问题排查全指南

一、引言 在Java应用的线上运行环境中&#xff0c;CPU飙高是一个常见且棘手的性能问题。当系统出现CPU飙高时&#xff0c;通常会导致应用响应缓慢&#xff0c;甚至服务不可用&#xff0c;严重影响用户体验和业务运行。因此&#xff0c;掌握一套科学有效的CPU飙高问题排查方法&…...

Yolov8 目标检测蒸馏学习记录

yolov8系列模型蒸馏基本流程&#xff0c;代码下载&#xff1a;这里本人提交了一个demo:djdll/Yolov8_Distillation: Yolov8轻量化_蒸馏代码实现 在轻量化模型设计中&#xff0c;**知识蒸馏&#xff08;Knowledge Distillation&#xff09;**被广泛应用&#xff0c;作为提升模型…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块&#xff0c;用于对本地知识库系统中的知识库进行增删改查&#xff08;CRUD&#xff09;操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 &#x1f4d8; 一、整体功能概述 该模块…...

JS手写代码篇----使用Promise封装AJAX请求

15、使用Promise封装AJAX请求 promise就有reject和resolve了&#xff0c;就不必写成功和失败的回调函数了 const BASEURL ./手写ajax/test.jsonfunction promiseAjax() {return new Promise((resolve, reject) > {const xhr new XMLHttpRequest();xhr.open("get&quo…...

前端高频面试题2:浏览器/计算机网络

本专栏相关链接 前端高频面试题1&#xff1a;HTML/CSS 前端高频面试题2&#xff1a;浏览器/计算机网络 前端高频面试题3&#xff1a;JavaScript 1.什么是强缓存、协商缓存&#xff1f; 强缓存&#xff1a; 当浏览器请求资源时&#xff0c;首先检查本地缓存是否命中。如果命…...

java高级——高阶函数、如何定义一个函数式接口类似stream流的filter

java高级——高阶函数、stream流 前情提要文章介绍一、函数伊始1.1 合格的函数1.2 有形的函数2. 函数对象2.1 函数对象——行为参数化2.2 函数对象——延迟执行 二、 函数编程语法1. 函数对象表现形式1.1 Lambda表达式1.2 方法引用&#xff08;Math::max&#xff09; 2 函数接口…...