【SpringCloud笔记】(9)分布式配置中心之Config

Config

概述

分布式系统当前面临的配置问题

微服务意味着要将单体应用中的业务拆分成一个个子服务,每个服务的粒度相对较小,因此系统中会出现大量的服务。

比如:有n个微服务连接同一套数据库,当连接数据库需要发生变动时,需要改n多次
比如:每一个微服务都有dev,prd环境

每一个微服务自己带着一个application.yml,上百个配置文件的管理…/(T o T)/~~

由于每个服务都需要必要的配置信息才能运行,所以一套集中式的、动态的配置管理设施是必不可少的,SpringCloud提供了ConfigServer来解决这个问题

当前主流使用的配置中心有三种

  • config+bus
  • alibaba nacos
  • 携程 阿波罗

Config是什么?

在这里插入图片描述

一句话:统一共用的配置放在配置中心,各自独立的配置各自保存

SpringCloud Config为微服务架构中的微服务提供集中化的外部配置支持,配置服务器为各个不同微服务应用的所有环境提供了一个中心化的外部配置。

SpringCloud Config分为服务端和客户端两部分。

服务端也称为分布式配置中心,它是一个独立的微服务应用,用来连接配置服务器并为客户端提供获取配置信息,加密/解密信息等访问接口

客户端(也就是我们的微服务模块)则是通过指定的配置中心来管理应用资源,以及与业务相关的配置内容,并在启动的时候从配置中心获取和加载配置信息配置服务器默认采用git来存储配置信息,这样就有助于对环境配置进行版本管理,并且可以通过git客户端工具来方便的管理和访问配置内容

Config能干嘛?

  • 集中管理配置文件
  • 不同环境不同配置,动态化的配置更新,分环境部署比如dev/test/prod/beta/release
  • 运行期间动态调整配置,不再需要在每个服务部署的机器上编写配置文件,服务会向配置中心统一拉取配置自己的信息
  • 当配置发生变动时,服务不需要重启即可感知到配置的变化并应用新的配置
  • 将配置信息以REST接口的形式暴露

config服务端配置与测试

git参考文档: https://blog.csdn.net/qq_44722674/article/details/117200397
https://lolitasian.blog.csdn.net/article/details/79085301
在GitHub上新建一个仓库:springcloud-config
获得刚才新建的git地址:git@github.com:mazhuorui/springcloud-config.git
在本地硬盘目录新建git仓库 比如我新建目录:D:\app\appFile\gitRepository,在该目录下执行以下命令
在这里插入图片描述
注意上面的操作不是必须的,只要github上有就可以,克隆到本地只是为了方便修改

新建Module模块cloud-config-center-3344

它即为Cloud的配置中心模块cloudConfig Center

pom文件

	<artifactId>cloud-config-center-3344</artifactId><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-config-server</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><!-- 引入自己定义的api通用包,可以使用Payment支付Entity --><groupId>com.mzr.springcloud</groupId><artifactId>cloud-api-commons</artifactId><version>1.0-SNAPSHOT</version></dependency></dependencies>

yml文件

server:port: 3344spring:application:name:  cloud-config-center #注册进Eureka服务器的微服务名cloud:config:server:git:uri: git@github.com:mazhuorui/springcloud_config.git #GitHub上面的git仓库名字####搜索目录search-paths:- springcloud_config####读取分支label: master#服务注册到eureka地址
eureka:client:service-url:defaultZone: http://localhost:7001/eureka

主启动类

@SpringBootApplication
@EnableConfigServer //加上该注解
@EnableEurekaClient
public class ConfigCenterMain3344
{public static void main(String[] args) {SpringApplication.run(ConfigCenterMain3344.class, args);}
}

windows下修改hosts文件,增加映射127.0.0.1 config-3344.com

启动微服务3344(先启动7001)
测试通过Config微服务是否可以从GitHub上获取配置内容
http://config-3344com:3344/master/config-dev.yml

在这里插入图片描述

配置读取规则

/{label}-{nalrne}-{profiles}.yml

  • label:分支(branch)
  • name :服务名
  • profiles:环境(dev/test/prod)

建议使用第一种

在这里插入图片描述

不加分支名{label}默认是master分支

在这里插入图片描述

前两种返回的时yml内容,第三种返回的是json串

在这里插入图片描述

config客户端配置与测试

新建cloud-config-client-3355模块

pom文件

<artifactId>cloud-config-client-3355</artifactId><dependencies><dependency><!--这里与服务端不同,没有写server--><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-config</artifactId>//</dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency></dependencies>

applicaiton. yml是用户级的资源配置项 bootstrap. yml是系统级的,优先级更加高

Spring Cloud会创建一个“Bootstrap Context”,作为Spring应用的Application Context的父上下文。
初始化的时候,BootstrapContext负责从外部源加载配置属性并解析配置。这两个上下文共享一个从外部获取的Environment。

Bootstrap属性有高优先级,默认情况下,它们不会被本地配置覆盖。

Bootstrap context和Application Context有着不同的约定,所以新增了一个bootstrap.yml文件,保证Bootstrap Context和Application Context配置的分离。
一般会有bootstrap.yml、application.yml两个文件,bootstrap.yml从外部获取共有的配置,application.yml负责微服务独有的配置,两个配置文件才能组合成一个完整的配置环境

本次只使用一个bootstrap.yml文件

server:port: 3355spring:application:name: config-clientcloud:#Config客户端配置config:label: master #分支名称name: config #配置文件名称profile: dev #读取后缀名称   上述3个综合:master分支上config-dev.yml的配置文件被读取,读取路径http://config-3344.com:3344/master/config-dev.ymluri: http://localhost:3344 #配置中心地址k#服务注册到eureka地址
eureka:client:service-url:defaultZone: http://localhost:7001/eureka

主启动类

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

controller层

@RestController
public class ConfigClientController {//将配置文件中config.info内容注入到configInfo变量中@Value("${config.info}") private String configInfo;@GetMapping("/configInfo")public String getConfigInfo(){return configInfo;}
}

启动测试

可以发现3344和3355访问的内容是一致的

成功实现了客户端3355通过访问SpringCloud Config3344获取到GitHub上的配置信息

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

动态刷新

问题:如果我们修改了GitHub上配置文件内容,3344、3355还能获取到新的内容吗?

  • Linux运维修改GitHub上的配置文件内容做调整:比如修改config-dev.yml提交
  • 刷新3344,发现ConfigServer服务端配置中心立刻响应,得到最新值了
  • 刷新3355,发现ConfigClient客户端没有任何响应,拿到的还是旧值
  • 客户端3355没有变化除非自己重启或者重新加载,才能拿到最新值
  • 难到每次运维修改配置文件,客户端都需要重启??噩梦

解决动态刷新问题

修改3355模块

POM引入actuator

 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>

修改YML,暴露监控端口

server:port: 3355spring:application:name: config-clientcloud:#Config客户端配置config:label: master #分支名称name: config #配置文件名称profile: dev #读取后缀名称   上述3个综合:master分支上config-dev.yml的配置文件被读取,读取路径http://config-3344.com:3344/master/config-dev.ymluri: http://localhost:3344 #配置中心地址k#服务注册到eureka地址
eureka:client:service-url:defaultZone: http://localhost:7001/eureka#暴露监控端点
management:endpoints:web:exposure:include: "*"

@RefreshScope业务类Controller修改

@RestController
@RefreshScope//自动刷新注解
public class ConfigClientController
{@Value("${config.info}")private String configInfo;@GetMapping("/configInfo")public String getConfigInfo(){return configInfo;}
}

此时,我们客户端的配置已经完成了,我们再去刷新3355访问3355发现拿到的依然时旧值?!

最后一步操作:向客户端发送post请求刷新3355,相当于告诉3355GitHub内容已更新

curl -X POST “http://localhost:3355/actuator/refresh”
两个必须:1.必须是 POST 请求,2.请求地址:http://localhost:3355/actuator/refresh


假如有多个微服务客户端3355/3366/3377…

每个微服务都要执行一次post请求,手动刷新?

可否广播,一次通知,处处生效?我们想大范围的自动刷新,并且还能够定点通知、精确通知,比如100台

中我要剔除2台通知其他98台,求方法~


好哥们儿消息总线Bus不请自来!

点击即学

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

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

相关文章

RTSP交互过程

RTSP&#xff08;Real-Time Streaming Protocol&#xff09;是一种用于实时流媒体传输的应用层协议。在RTSP通信中&#xff0c;以下是参与的主要角色和组件&#xff1a; 客户端&#xff08;Client&#xff09;&#xff1a;发送请求并接收服务器的响应。客户端可以是一个播放器应…

Exploring the Limits of Masked Visual Representation Learning at Scale论文笔记

论文名称&#xff1a;EVA: Exploring the Limits of Masked Visual Representation Learning at Scale 发表时间&#xff1a;CVPR2023 作者及组织&#xff1a;北京人工智能研究院&#xff1b;华中科技大学&#xff1b;浙江大学&#xff1b;北京理工大学 GitHub&#xff1a;http…

ARM串口通信编程实验

完成&#xff1a;从终端输入选项&#xff0c;完成点灯关灯&#xff0c;打开风扇关闭风扇等操作 #include "gpio.h" int main() {char a;//char buf[128];uart4_config();gpio_config();while(1){//接收一个字符数据a getchar();//发送接收的字符putchar(a);switch(…

redis复习笔记01(小滴课堂)

高并发的必备两大“核技术”队列和缓存 介绍本地缓存和分布式缓存 Nosql介绍和Reidis介绍 Linux服务器源码安装Redis6和相关依赖 在路径下上传压缩包。 上传压缩包。 版本更新了&#xff0c;但这是临时的。 版本更新了。 解压压缩包&#xff1a; 重命名&#xff1a; 我们可以看…

c++中的引用()

引用 引用是c中的&#xff0c;在C语言中是无法使用的。 引用的作用&#xff1a; 引用可以理解为给变量起一个别名(这时候大家可能会想到typedef,但是它们不同(原因看后面))。起一个别名之后&#xff0c;我们使用变量别名其实就是使用变量自己,生活中,我们会有自己的小名,那…

C# WPF上位机开发(MySql访问)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 前面我们学习了数据库sqlite&#xff0c;不过这是一种小型的数据库&#xff0c;作为内部使用还可以。但是&#xff0c;如果要与外面的其他供应商进…

Android Intent 传递实体类到下一个 Activity

要在 Android 中通过 Intent 传递实体类对象&#xff0c;首先需要确保实体类对象实现了 Serializable 或 Parcelable 接口。 一、实现 Serializable 接口&#xff1a; public class MyObject implements Serializable {private String name;private int age;// 构造方法和其他…

蓝牙物联网在智慧医疗中的应用

物联网技术开启了万物互联的时代&#xff0c;并且随着智慧城市建设的加速推进及物联网技术对各行业的逐步渗透&#xff0c;“智慧”概念应运而生&#xff0c;诸如智慧能源、智慧交通、智慧医疗等“遍地开花”&#xff0c;可以说&#xff0c;物联网技术给各行业带来了产业模式上…

力扣labuladong一刷day46天并查集

力扣labuladong一刷day46天并查集 文章目录 力扣labuladong一刷day46天并查集一、323. 无向图中连通分量的数目二、130. 被围绕的区域三、990. 等式方程的可满足性 一、323. 无向图中连通分量的数目 题目链接&#xff1a;https://leetcode.cn/problems/number-of-connected-co…

转场动画路径动画

本篇文章我们介绍下转场动画及路径动画。 1、概述 转场动画有三种类型&#xff0c;页面间转场、组件内转场、共享元素转场。 2、页面间转场 页面间转场需要在全局pageTransition方法内配置页面入场和页面退场时的自定义转场动效。 2.1、函数说明 名称 参数 必填 参数描述…

Arduino/Android 蓝牙通信系统设计解决方案

随着当今安全管理的发展需求以及国家对安全监控行业的支持&#xff0c;这几年&#xff0c;安全监控行业发展迅猛&#xff0c;各类监控系统百花齐放。传统的温度监控系统通过有线或其他方式传送温度数据&#xff0c;而本文提出了利用蓝牙无线传输数据的设计方案&#xff0c;这种…

SLAM算法与工程实践——SLAM基本库的安装与使用(6):g2o优化库(3)构建g2o顶点

SLAM算法与工程实践系列文章 下面是SLAM算法与工程实践系列文章的总链接&#xff0c;本人发表这个系列的文章链接均收录于此 SLAM算法与工程实践系列文章链接 下面是专栏地址&#xff1a; SLAM算法与工程实践系列专栏 文章目录 SLAM算法与工程实践系列文章SLAM算法与工程实践…

FLStudio21中文版水果编曲软件好用吗?如何下载最新版本

FL Studio21版是一款在国内非常受欢迎的多功能音频处理软件&#xff0c;我们可以通过这款软件来对多种不同格式的音频文件来进行编辑处理。而且FL Studio 21版还为用户们准备了超多的音乐乐器伴奏&#xff0c;我们可以直接一键调取自己需要的音调。 FL Studio21版不仅拥有非常…

vue利用深拷贝解决修改不能取消的问题

vue利用深拷贝解决修改不能取消的问题 在对某数据进行修改时考虑还需要进行“确认”、“取消”操作&#xff0c;那么在取消时就需要返回保留的数据内容&#xff0c;那么如何将原有数据保留一份则是关键性问题。 显然修改值不能直接进行原值的赋值操作&#xff0c;因为这样无法取…

Hadoop——分布式计算

一、分布式计算概述 1. 什么是计算、分布式计算? 计算:对数据进行处理,使用统计分析等手段得到需要的结果分布式计算:多台服务器协同工作,共同完成一个计算任务2. 分布式计算常见的2种工作模式分散->汇总 (MapReduce就是这种模式)将数据分片,多台服务器各自负责一…

金和OA C6 gethomeinfo sql注入漏洞

产品介绍 金和网络是专业信息化服务商,为城市监管部门提供了互联网监管解决方案,为企事业单位提供组织协同OA系统开发平台,电子政务一体化平台,智慧电商平台等服务。 漏洞概述 金和 OA C6 gethomeinfo接口处存在SQL注入漏洞&#xff0c;攻击者除了可以利用 SQL 注入漏洞获取…

vue3+ts pinia存储及持久化

index.ts 需要安装pinia-plugin-persist npm i pinia-plugin-persist -Simport { createPinia} from "pinia" // 引入批量的pinia持久存储插件 import piniaPluginPersist from pinia-plugin-persist const storecreatePinia(); store.use(piniaPluginPers…

【网络安全 | 网络协议】结合Wireshark讲解TCP三次握手

TCP三次握手在Wireshark数据包中是如何体现的&#xff1f;在此之前&#xff0c;先熟悉TCP三次握手的流程。 TCP三次握手流程 TCP&#xff08;传输控制协议&#xff09;是一种面向连接的、可靠的传输层协议。在建立 TCP 连接时&#xff0c;需要进行三次握手&#xff0c;防止因为…

【自然语言处理】用Python从文本中删除个人信息-第二部分

自我介绍 做一个简单介绍&#xff0c;酒架年近48 &#xff0c;有20多年IT工作经历&#xff0c;目前在一家500强做企业架构&#xff0e;因为工作需要&#xff0c;另外也因为兴趣涉猎比较广&#xff0c;为了自己学习建立了三个博客&#xff0c;分别是【全球IT瞭望】&#xff0c;【…

uni-app pages.json之globalStyle全局页面样式配置

锋哥原创的uni-app视频教程&#xff1a; 2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版)&#xff0c;火爆更新中...共计23条视频&#xff0c;包括&#xff1a;第1讲 uni…