【微服务】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方式加载属性,配置变更时无需重启服务即可生效。

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

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

相关文章

C# 事件

目录 1、事件模型的5个组成部分2、使用内置委托类型声明事件2.1 EventHandler2.1.1 &#xff1f;2.1.2 this2.1.3 使用匿名函数和lamda表达式2.1.3.1 匿名函数2.1.3.2 lamda表达式 2.1.4 异常处理 2.2 EventHandler<TEventArgs> 3、使用自定义委托类型声明事件3.1 事件的…

php反序列化原生态 ctfshow练习 字符串逃逸

web262 拿着题审计一下 <?php error_reporting(0); class message{public $from;public $msg;public $to;public $tokenuser;public function __construct($f,$m,$t){$this->from $f;$this->msg $m;$this->to $t;} }$f $_GET[f]; $m $_GET[m]; $t $_GET[t…

【C语言程序设计——循环程序设计】利用循环求数值 x 的平方根(头歌实践教学平台习题)【合集】

目录&#x1f60b; 任务描述 相关知识 一、求平方根的迭代公式 1. 原理 2. 代码实现示例 二、绝对值函数fabs() 1. 函数介绍 2. 代码示例 三、循环语句 1. for循环 2. while循环 3. do - while循环 编程要求 测试说明 通关代码 测试结果 任务描述 本关任务&…

使用 Three.js 创建动态粒子效果

今天&#xff0c;带大家使用粒子实现一个粒子飞毯的效果&#xff0c;我们先来看一下效果。 实现 初始化场景 首先创建一个场景&#xff0c;所有 3D 对象都会被添加到这个场景中。 const scene new THREE.Scene();相机和渲染器 配置相机和渲染器来捕捉和显示场景。 相机…

20250103在Ubuntu20.04.5的Android Studio 2024.2.1.12中跑通Hello World

20250103在Ubuntu20.04.5的Android Studio 2024.2.1.12中跑通Hello World 2025/1/3 14:06 百度&#xff1a;android studio helloworld android studio hello world kotlin helloword kotlin 串口 no run configurations added android studio no run configurations added 1、…

c#使用SevenZipSharp实现压缩文件和目录

封装了一个类&#xff0c;方便使用SevenZipSharp&#xff0c;支持加入进度显示事件。 双重加密压缩工具范例&#xff1a; using SevenZip; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.…

Ubuntu 20.04安装gcc

一、安装GCC 1.更新包列表 user596785154:~$ sudo apt update2.安装gcc user596785154:~$ sudo apt install gcc3.验证安装 user596785154:~$ gcc --version二 编译C文件 1.新建workspace文件夹 user596785154:~$ mkdir workspace2.进入workspace文件夹 user596785154:~…

网络协议安全的攻击手法

1.使用SYN Flood泛洪攻击&#xff1a; SYN Flood(半开放攻击)是最经典的ddos攻击之一&#xff0c;他利用了TCP协议的三次握手机制&#xff0c;攻击者通常利用工具或控制僵尸主机向服务器发送海量的变源端口的TCP SYN报文&#xff0c;服务器响应了这些报文后就会生成大量的半连…

晨辉面试抽签和评分管理系统之一:考生信息管理和编排

晨辉面试抽签和评分管理系统&#xff08;下载地址:www.chenhuisoft.cn&#xff09;是公务员招录面试、教师资格考试面试、企业招录面试等各类面试通用的考生编排、考生入场抽签、候考室倒计时管理、面试考官抽签、面试评分记录和成绩核算的面试全流程信息化管理软件。提供了考生…

鸿蒙的APP真机调试以及发布

目录&#xff1a; 1、创建好鸿蒙项目2、创建AGC项目3、实现自动签名3.1、手动方式创建签名文件和密码 4、运行项目5、无线真机调试 1、创建好鸿蒙项目 2、创建AGC项目 &#xff08;1&#xff09;在File->Project Structure->Project->Signing Configs中进行登录。(未…

H7-TOOL固件2.27发布,新增加40多款芯片脱机烧录,含多款车轨芯片,发布LUA API手册,CAN助手增加负载率,错误状态信息检测

H7-TOOL详细介绍&#xff08;含操作手册&#xff09;&#xff1a;H7-TOOL开发工具&#xff0c;1拖4/16脱机烧录&#xff0c;高速DAPLINK&#xff0c;RTOS Trace&#xff0c;CAN/串口助手, 示波器, RTT等&#xff0c;支持WiFi&#xff0c;以太网&#xff0c;高速USB和手持 - H7-…

SpringMVC(一)配置

目录 引入 第一章&#xff1a;Java web的发展历史 一、Model I和Model II 1.Model I开发模式 2.Model II开发模式 二. MVC模式 第二章&#xff1a;SpringMVC的入门案例 搭建SpringMVC的入门程序 1.创建新项目 2.等待加载导入坐标 3.处理xml文件和其他 导入tomcat 运…

Linux驱动开发 gpio_get_value读取输出io的电平返回值一直为0的问题

当时gpio子系统进行读取时返回必定是0 因此&#xff0c;首先必须使用platform驱动来管理gpio和pinctrl子系统&#xff0c;然后如果按照正点原子所教的设备树引脚设置为0x10B0则会导致读取到的电平值为0。 解决方法&#xff1a; 将设备树中的引脚设置为 pinctrl_gpioled: gpio…

uniapp-vue3 实现, 一款带有丝滑动画效果的单选框组件,支持微信小程序、H5等多端

采用 uniapp-vue3 实现, 是一款带有丝滑动画效果的单选框组件&#xff0c;提供点状、条状的动画过渡效果&#xff0c;支持多项自定义配置&#xff0c;适配 web、H5、微信小程序&#xff08;其他平台小程序未测试过&#xff0c;可自行尝试&#xff09; 可到插件市场下载尝试&…

Zero to JupyterHub with Kubernetes 下篇 - Jupyterhub on k8s

前言&#xff1a;纯个人记录使用。 搭建 Zero to JupyterHub with Kubernetes 上篇 - Kubernetes 离线二进制部署。搭建 Zero to JupyterHub with Kubernetes 中篇 - Kubernetes 常规使用记录。搭建 Zero to JupyterHub with Kubernetes 下篇 - Jupyterhub on k8s。 官方文档…

倾斜摄影相机在不动产确权登记和权籍调查中的应用

一、项目背景 1.1 项目背景 为贯彻落实中央、国务院关于实施乡村振兴战略、关于“扎实推进房地一体的农村集体建设用地和宅基地使用权确权登记颁证&#xff0c;完善农民闲置宅基地和闲置农房政策&#xff0c;探索宅基地所有权、资格权、使用权‘三权分置’”的要求&#xff0…

计算机网络 (22)网际协议IP

一、IP协议的基本定义 IP协议是Internet Protocol的缩写&#xff0c;即因特网协议。它是TCP/IP协议簇中最核心的协议&#xff0c;负责在网络中传送数据包&#xff0c;并提供寻址和路由功能。IP协议为每个连接在因特网上的主机&#xff08;或路由器&#xff09;分配一个唯一的IP…

网络安全测评技术与标准

18.1 概况 1&#xff09;概念 &#xff1a;指参照一定的标准规范要求&#xff0c;通过一系列的技术和管理方法&#xff0c;获取评估对象的网络安全状况信息&#xff0c;对其给出相应的网络安全情况综合判定。 网络安全测评对象通常包括信息系统的组成要素或信息系统自身。 2…

5个不同类型的mysql数据库安装

各种社区版本下载官方地址&#xff1a;MySQL :: MySQL Community Downloads 一、在线YUM仓库&#xff08;Linux&#xff09; 选择 MySQL Yum Repository 选择对应版本下载仓库安装包&#xff08;No thanks, just start my download.&#xff09; 下载方法1&#xff1a;下载到本…

Lua开发环境如何安装?保姆级教程

大家好&#xff0c;我是袁庭新。Lua开发环境如何安装搭建&#xff1f;这套篇文章帮你搞定&#xff5e; CentOS 7系统默认已经安装了Lua语言环境&#xff0c;因此可直接运行Lua代码。可以使用以下命令查看当前系统中默认自带的Lua版本。 # 查看系统默认自带的Lua版本 [rootloc…