svn如何取消某个文件的版本管理_微服务架构如何统一管理工程配置文件

80b42e67ad803692e9427c140f1cc214.png

面临的问题

在分布式微服务架构系统中,业务和系统功能被拆分成了几十甚至上百个服务实例。每个服务实例就是以往单体应用时代的一个独立部署的工程。每个工程都需要自己独立的启动加载和运行时配置文件。

在项目开发的过程中,我们不可避免的会涉及到配置文件的修改,例如调整一下数据库的IP地址,修改某个功能的启用开关状态等等。如果系统结构中的微服务节点较少,那么常规的代码+配置的开发方式足以解决问题。

当系统逐步迭代,其微服务会越来越复杂,慢慢演化成网状依赖结构,这个时候常规的代码+配置的开发方式就并不合适了,因为还要考虑整体系统的扩展性、伸缩性和耦合性等。这些问题中,配置的管理也是非常麻烦的。

解决方案

工程化带来的问题需要用工程化的方案来解决。为了方便的解决配置复杂繁琐的问题,我们在微服务架构系统中引入配置中心(Spring Cloud Config)。通过它来统一管理微服务架构系统中的配置文件内容修改与分发,配置自动同步的问题,为项目的部署与运维提供便利。

Spring Cloud Config采用集中式管理每个微服务的配置信息,并使用GIT等版本仓库统一存储配置内容,实现版本化管理控制。微服务与配置中心使用REST方式交互来实现可扩展的配置服务。

Spring Cloud Config配置中心解决了微服务系统的配置中心化、配置版本控制、平台独立、语言独立等问题,其特性如下:

  • 提供服务端和客户端支持(Spring Cloud Config Server和Spring Cloud Config Client);
  • 集中式管理分布式环境中的配置信息;
  • 基于spring环境提供配置管理,与Spring系列框架无缝结合;
  • 可用于任何语言开发环境;
  • 默认基于GIT仓库实现版本控制;

如何做到

配置中心(Config Server)本身作为一个微服务注册到服务注册中心中(通常可以是Eureka,Consul,Dubbo等提供的注册中心服务),配置中心会根据spring.cloud.config.server.git.uri来找到配置数据(它可以是git存储库的位置,也可以是本地文件),配置了正确的uri之后,Config Server就可以从远程Git服务拉取资源配置。

在项目中,基本上所有的基础微服务都是Config Client,它们都通过Config Server做外部配置集中管理和动态环境切换。每个Client会在启动时通过Server来拉取相应的配置资源信息,同时还会通过消息总线(Spring Cloud Bus),以发布-订阅的方法监听在运行时由Server端动态发布的配置变更信息。

当我们有配置资源的变更需要时,通过GIT或SVN,将配置资源信息提交到资源仓库中。提交后触发对应的Hook调用Server来拉取最新的资源。如此便实现了:资源 -> GIT/SVN -> 配置中心Config Server -> 消息总线Bus -> Config Client 的整个链条动态变更。

48ac89a33bf52a5e54f9b71599f7df8d.png

如何使用

基于spring cloud 2.x版本Spring Cloud Config主要为系统中的服务实例提供外部配置,这些配置通常是可变的,默认是使用git存放配置信息。Spring Cloud Config分为服务端和客户端两种角色,服务端用于统一管理配置中心并为客户端提供配置信息,客户端用于指定配置中心并在服务启动时向配置中心拉取资源初始化本地服务,客户端的配置通常是不变的。这样就能做到配置与交付分离,当项目部署到不同环境时,不需要去修改客户端的配置文件,只需要指定其运行配置中心中的哪种环境。

Spring Cloud Config的服务端也是一个服务实例,需要导入服务端依赖。

<!--Spring Cloud Config 服务端依赖-->

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-config-server</artifactId>

</dependency>

特别强调的是,如果使用svn进行代码管理,还需要导入指定svn的依赖,如果使用git则不用。

<!-- svn依赖 -->

<dependency>

<groupId>org.tmatesoft.svnkit</groupId>

<artifactId>svnkit</artifactId>

</dependency>

在服务端的配置文件中,需要指定配置文件的存放地址,如果使用svn,需要指定spring.profiles.active: subversion,如果不指定项目启动则会报错。

要想实现服务端的高可用,可以将服务端注册到服务中心,当客户端指定配置中心时从服务中心获取即可。

服务端的搭建已经介绍完,下面是客户端是如何与服务端建立关系的。

在客户端中也需要导入指定依赖

<!-- Spring Cloud Config 客户端依赖 -->

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-config</artifactId>

</dependency>

注意,客户端的配置文件使用bootstrap.yml,其加载优先级高于application,yml,所以项目启动时会预先加载bootstrap.yml中的内容,并且这些内容通常是不可变的,比如指定配置中心,监控配置,快速失败响应等配置可以放在bootstrap.yml文件中。

到此,客户端已经能够通过服务端去加载配置文件,但是大家更关心的是,如果配置文件修改了,怎么及时的获取最新的配置信息,毕竟每次如果都需要重启的话成本太大,接下来我们介绍Spring Cloud Config如何实现配置文件的自动刷新机制。

修改客户端pom.xml文件,添加如下依赖

<!--Spring Boot Actuator 监控-->

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-actuator</artifactId>

</dependency>

<!--spring-cloud-bus 消息总线-->

<dependency>

<groupId>org.springframework.cloud</groupId>

<artifactId>spring-cloud-starter-bus-amqp</artifactId>

</dependency>

在bootstrap.yml中添加actuator 监控配置:

启用监控management.endpoints.enabled-by-default=true

暴露刷新接口

management.endpoints.web.exposure.include='*'(用*可以包含全部端点)

在bootstrap.yml配置rabbitmq的地址以及用户密码:

spring.rabbitmq.host=xxx

spring.rabbitmq.port=xxx

spring.rabbitmq.username=xxx

spring.rabbitmq.password=xxx

除了以上的修改,注意还要在需要实现自动刷新的类上添加@RefreshScope注解。

接着解释一下为什么要做这样的修改,这些新加的配置是如何相互合作实现动态刷新的,首先actuator是用于感知及监测服务器端的变化,在不启用消息总线之前其与@RefreshScope结合能够实现单个端口的刷新,即调用/refresh接口实现,这种属于手动刷新。显然这种刷新方式并不是最优的,分布式系统中实例那么多,我们不能每一个服务实例都调用一遍接口,我们希望达到的效果是调用一次即可所有实例都生效,所以引入消息总线spring cloud bus,其实本质是利用了MQ的广播机制在分布式的系统中传播消息,当有一个客户端触发了配置更新事件(注意这时调用/bus-refresh接口),即会向总线传达这个消息,总线接到消息并通知给其它客户端,其它客户端接收到通知,请求Server端获取最新配置,至此所有客户端都得到最新配置。

到此为止,配置中心的动态刷新机制还差一步,就是上述我们需要手动去触发一个客户端调用/bus-refresh接口,这个动作可以使用我们的代码版本管理系统来实现,当配置文件有更新时自动触发接口,可以与github的webhook进行配合,svn也有类似的hook机制。

总结

关于Spring Cloud Config的使用就为大家介绍到这里,其实Spring Cloud Config还能实现的功能有很多,主要看系统自身需求进行配置,这里我们为大家介绍的是服务搭建及配置资源的动态刷新,这也是运用Spring Cloud Config最核心要解决的问题,想了解关于Spring Cloud Config的更多内容大家可以去网上查找资源,但是要注意的是目前网上的许多教程都是spring cloud 1.5.x版本的,使用spring cloud 2.x需要注意版本升级带来的改动。

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

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

相关文章

linux 线程_Linux 多线程编程(不限Linux)

前言线程&#xff1f;为什么有了进程还需要线程呢&#xff0c;他们有什么区别&#xff1f;使用线程有什么优势呢&#xff1f;还有多线程编程的一些细节问题&#xff0c;如线程之间怎样同步、互斥&#xff0c;这些东西将在本文中介绍。我在某QQ群里见到这样一道面试题&#xff1…

springboot导包显示不存在_基础篇:Spring Boot入门体验(图文教程)

优质文章&#xff0c;及时送达什么是 Spring Boot&#xff1f;Spring Boot 是由 Pivotal 团队提供的全新框架。Spring Boot 是所有基于 Spring Framework 5.0 开发的项目的起点。Spring Boot 的设计是为了让你尽可能快的跑起来 Spring 应用程序并且尽可能减少你的配置文件。设计…

plsql查看用户权限_权限功能

几乎所有的后台都会有权限这个功能&#xff0c;权限也是后台管理系统很重要的一项功能&#xff0c;可以提高系统的安全性&#xff0c;也可以很好的使每个操作人员清晰地找到自己所对应的功能。一般来说&#xff0c;系统中只有最高权限、或者这只权限的管理员可以分发设置其余权…

计算机教学论研究生,课程与教学论(计算机)专业硕士学位研究生培养方案

课程与教学论(计算机)专业硕士学位研究生培养方案一、学科专业简介计算机教学论以教育科学的基本理论为指导&#xff0c;探索计算机教育的的基本理论和实践问题&#xff0c;探讨现代教育理论视野中的计算机课程与教育改革。研究内容包括&#xff1a;计算机专业课程设置和教材建…

七度空间338多少钱一包_2020黄果树香烟一包多少钱 黄果树香烟价格表图排行榜...

阅读本文前&#xff0c;请您先点击上面的“蓝色字体”&#xff0c;再点击“关注”&#xff0c;这样您就可以继续免费收到文章了。每天都会有分享&#xff0c;都是免费订阅&#xff0c;请您放心关注。注图文来源网络&#xff0c;侵删 …

eslint vscode 自动格式化_使用 VSCode 的必备三大神器,这才是开发 Vue 的真香解决方案...

现在用 VSCode 开发 Vue.js 应用几乎已经是前端的标配了&#xff0c;但很多时候我们看到的代码混乱不堪&#xff0c;作为一个前端工程师&#xff0c;单引号双引号乱用&#xff0c;一段有分号一段没有分号&#xff0c;有的地方有逗号有的地方没有逗号&#xff0c;空格回车都对不…

eclipse复制代码连接数据库404_推荐一款免费的数据库管理工具,比Navicat还要好用,功能还很强大...

作者&#xff1a;不剪发的Tony老师blog.csdn.net/horses/article/details/89683422DBeaver 是一个基于 Java 开发&#xff0c;免费开源的通用数据库管理和开发工具&#xff0c;使用非常友好的 ASL 协议。可以通过官方网站或者 Github 进行下载。由于 DBeaver 基于 Java 开发&am…

炒菜机器人放食材的顺序_珠江新城有了首家机器人餐厅,40多台机器人提供服务...

大洋网讯 在广州最繁华的CBD珠江新城&#xff0c;历史性有了一家机器人餐厅。这是广州日报全媒体记者昨日获悉的信息。记者赶往其中看见&#xff0c;这家新开的中餐厅看起来与众不同&#xff0c;厨房里没有铛铛的切菜声&#xff0c;没有此起彼伏的传菜声&#xff0c;更没有缭绕…

c++ string类_C++|细说STL string类概貌及底层细节

C语言中的字符串称为C风格字符串&#xff0c;是一个以0结尾的字符数组&#xff0c;string.h库只提供了有限、不甚安全的字符串操作函数。char str[]只能定义编译期确定大小的字符串&#xff0c;而保存在堆内存的动态字符数组却需要考虑释放内存的问题&#xff0c;且想要实现自变…

Python可以调用Gpu吗_python可以开发app吗

python可以开发app吗&#xff1f;python是可以开发app的&#xff0c;例如我们可以使用kivy开发安卓APP&#xff0c;Kivy是一套专门用于跨平台快速应用开发的开源框架&#xff0c;使用Python和Cython编写&#xff0c;对于多点触控有着非常良好的支持&#xff0c;不仅能让开发者快…

kubectl查看node状态_适用于初学者的基本 kubectl 和 Helm 命令 | Linux 中国

去杂货店“采购”这些命令&#xff0c;你需要用这些 Kubernetes 工具来入门。-- Jessica Cherry去杂货店“采购”这些命令&#xff0c;你需要用这些 Kubernetes 工具来入门。最近&#xff0c;我丈夫告诉我他即将要去参加一个工作面试&#xff0c;面试时他需要在计算机上运行一些…

pycharm pyqt5 pyrrc_编程基础 | Pycharm安装、配置、快捷键

Pycharm可以去官网下载Pycharm的安装激活jar包的目的就是让截获截止时间并骗过pycharm;将jar包放入pycharm在你本地的安装目录bin下。并且修改两个以 vmoptions为结尾的启动文件如图所示:并且在两个文件后追加 -javaagent:D:devAppPyCharm 2017.3.2inJetbrainsCrack-2.6.10-rel…

php的web表单系统源码毕设_从业十多年看了千百套Java毕设项目,整理出100个精品!免费分享...

加班无数个昼夜看了千百套Java毕设项目&#xff0c;发现这100个精品&#xff01;今天免费分享给大家&#xff01;再给大家推荐一条由浅入深的JAVA学习路径&#xff0c;首先完成 Java基础、JDK、JDBC、正则表达式等基础实验&#xff0c;然后进阶到 J2SE 和 SSH 框架学习。最后再…

xbox360无线手柄接收器驱动_八位堂USB 无线接收器让手柄不闲置,无线畅玩各平台游戏...

遥想儿时每逢周末放假&#xff0c;得闲便会打上一下午的游戏。富有活跃想象力的游戏画面和不断操作游戏手柄发出的愉悦打击声&#xff0c;总会令人感到如此如醉。长大了&#xff0c;随着科技创新进步与物质生活的丰富&#xff0c;我们都会向往童年时游戏带来的满足愉快之情&…

在scrapy中parse函数里面xpath的内容打印不出来_如何正确的使用Scrapy ?

本节是 《Python爬虫从入门到进阶》课程中的一节&#xff0c;课程购买链接(PC访问需要微信扫码) &#xff0c;目前已更新80% 课程购买课程请扫码&#xff1a;Scrapy是一个为了爬取网站数据&#xff0c;提取结构性数据而编写的应用框架。只需要编写很少的代码就能实现抓取功能&a…

绳索受力分析的软件_【硕士论文】供热管网管道支架载荷分析与优化设计

摘 要改革开放后我国经济快速发展&#xff0c;随着集中供热事业的扩大&#xff0c;集中供暖越来越受到广大民众的欢迎&#xff0c;居民冬季用热为主的集中供暖面积在连年递增&#xff0c;已经成为主要一种供暖方式。集中供热作为城市公共服务功能中重要的一项工作&#xff0c;对…

python-docx 如何获取当前字号_餐饮老字号迈上“云端”

原标题&#xff1a;餐饮老字号迈上“云端”老字号陈麻婆豆腐旗舰店。 杨予頔 摄中新网成都10月31日电 (单鹏)临近中午&#xff0c;成都餐饮老字号“钟水饺”文殊院店的前台站满身穿黄色和蓝色服装的“外卖小哥”&#xff0c;拿到打包好的钟水饺后&#xff0c;他们急匆匆地转身…

进入hbase命令_Zookeeper、Hbase安装部署

zookeeper安装与配置使用xftp将压缩包传入/soft中创建zookeeper数据存放目录mkdir /soft/zookeeperchmod 766 /soft/zookeeper分别在三台服务上面依次执行 echo id > /var/zookeeper/myid 命令创建zookeeper编号的myid文件echo 1 > /soft/zookeeper/myidecho 2 > /sof…

c++new时赋初值_C高级编程精髓之内存管理,万千码农踩过的雷,大神带你走出雷区...

今天给大家分享C高级编程精华片之内存管理——欢迎跟大家一起踏进内存这片雷区&#xff0c;然后带大家从雷区中走出来&#xff01;程序员们经常编写内存管理程序&#xff0c;往往提心吊胆。如果不想触雷&#xff0c;唯一的解决办法就是发现所有潜伏的地雷并且排除它们&#xff…

为什么用pyqt的不多_现在农村提倡用天然气和清洁煤球取暖,为何农民不爱用?看完懂了...

近几年华北很多农村响应保护环境的政策&#xff0c;大多数农村家庭都安装了天然气。冬季的取暖方式也从以前的烧煤取暖改成了烧天然气或清洁煤球取暖。对于安装天然气并烧天然气或清洁煤球取暖&#xff0c;大多数农民都很抗拒&#xff0c;为什么农村人不愿意烧天然气和清洁煤球…