版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习!

在微服务架构中,服务之间有着错综复杂的依赖关系,每个服务都有自己的依赖配置,在运行期间很多配置会根据访问流量等因素进行调整,传统的配置信息处理方式是将配置信息写入xml、.properties等配置文件中,和应用一起打包,每次修改配置信息,都需要重新进行打包,效率极低,动态配置中心就是为了解决这一问题。动态配置中心也是一个微服务,我们把微服务中需要动态配置的配置文件存放在远程git私有仓库上,微服务会去服务器读取配置信息,当我们在本地修改完代码push到git服务器,git服务器端hooks自动检测是否有配置文件更新,如果有,git服务端通过消息队列给配置中心发消息,通知配置中心刷新配置文件。因此微服务读取到的就是最新的配置信息,实现了运行期动态配置。理解了配置中心的原理,下面来介绍应用Spring Cloud框架的configserver搭建动态配置中心的整个过程。

1、Git私有仓库搭建

       由于所有配置文件放在Git远程私有仓库上,我们需要搭建Git私有仓库。

1)安装git

# cd /etc/yum.repos.d/

# wget http://geekery.altervista.org/geekery-el5-x86_64.repo

# cd /data/soft/

# wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm

# rpm -ivh rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm

# yum -y install git

# git --version

2)搭建git仓库

a、创建一个git用户,用来运行git服务

命令:$ sudo adduser git

b、创建证书登录

收集所有需要登录的用户的公钥,就是他们自己的id_rsa.pub文件,把所有公钥加入到/home/git/.ssh/authorized_keys文件里,一行一个。

c、初始化git仓库

选定或创建一个目录作为Git仓库,如:/home/git/microservice.git,将此目录初始化为git仓库

命令:$ sudo git init --bare microservice.git

$ sudo chown -R git:git microservice.git

d、克隆远程仓库

命令:$ git clone git@192.168.0.136:microservice.git

3)在本地安装git客户端

以上操作完成Git服务端私有仓库搭建后,需要在本地安装Git客户端,并且把公钥加入到服务端的/.ssh/authorized_keys配置文件中,这样就可以在本地克隆服务端代码并向服务端进行推送了。本地Git客户端的安装可参照Git教程。

2、安装消息队列

       在远程机器上安装消息队列(rabbitmq)并启动。

3、配置中心相关配置文件

       配置中心(配置服务,例如:sample-config)的配置文件application.yml,添加如下配置:

1)configserver的git配置

configserver根据配置的Git服务器地址,去服务器上读取相应的配置文件信息。

uri: 用户名、远程Git服务器地址、私有仓库地址

username: Git服务器用户名(搭建仓库时创建的用户)

password: 用户密码

2)消息队列配置

当Git服务端检测到配置文件有更新时,会通过消息队列通知configserver刷新配置文件。

rabbitmq配置:

host: 消息队列的地址

port: 消息队列端口

username: 用户名

password: 密码 

       3)Dockerfile配置

由于采用ssh协议访问Git服务器时,需要手动输入确认连接信息,因此在这里我们需要屏蔽此检查。我们需要新建一个配置文件config(无后缀名)跟Dockerfile一起放在容器中,并在Dockerfile中进行配置(新建/.ssh目录,将config文件添加到此目录下)。

部署在容器中的文件:

config文件配置:

Dockerfile配置:

4、在服务中添加消息总线依赖配置

       在需要将配置文件放到配置中心进行动态配置的服务中,添加消息总线的配置。

在服务的pom.xml文件中添加依赖:

<dependency>

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

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

</dependency>

5、在Git服务端编写服务端hook

       当本地Git客户端向服务端仓库推送更新时,Git服务端需要检测配置文件是否有更新,如果有,则需要向configserver发请求通知它刷新配置文件。这就需要用到服务端hook。在Git服务端的/.git/hooks/目录下,创建post-receive文件(无后缀名),并添加相应的脚本,当Git客户端推送更新,服务端更新完文件后会自动执行此post-receive文件脚本。

6、在本地Git客户端提交修改并推送到Git服务端

在本地更新配置文件后,提交到本地Git仓库,然后将本地更新push到Git服务端。

相关Git命令:

$ git add xxx.xml xx.yml -------将修改的配置文件xxx.xml、xx.yml添加到暂存区

$ git commit -m “xxxxxx”-----将暂存区文件提交到本地Git仓库

$ git push origin master ------将本地更新推送到服务端

以上就是利用configserver实现动态配置中心的整个过程,整个配置完成后就可以在本地修改配置文件push到Git服务器,我们的微服务就可以动态读取到最新的配置了。

转载于:https://www.cnblogs.com/fangfuhai/p/7071502.html

微服务架构:动态配置中心搭建相关推荐

  1. spring cloud+dotnet core搭建微服务架构:配置中心续(五)

    前言 上一章最后讲了,更新配置以后需要重启客户端才能生效,这在实际的场景中是不可取的.由于目前Steeltoe配置的重载只能由客户端发起,没有实现处理程序侦听服务器更改事件,所以还没办法实现彻底实现这 ...

  2. 微服务-Nacos动态配置中心

    前言 回想之前的项目,尤其是项目分多模块的时候,一般就会有一个公共包大多是相关工具类,因为比较独立使得其他模块调用方便,现在出来个需求为工具类参数进行动态控制,比如Redis工具类动态设定过期时间,除 ...

  3. spring cloud+dotnet core搭建微服务架构:配置中心(四)

    前言 我们项目中有很多需要配置的地方,最常见的就是各种服务URL地址,这些地址针对不同的运行环境还不一样,不管和打包还是部署都麻烦,需要非常的小心.一般配置都是存储到配置文件里面,不管多小的配置变动, ...

  4. 微服务架构中配置中心的选择

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 来源:r6d.cn/XsTR 目前公司内部微服务架构基础设 ...

  5. 最新版Spring Cloud Alibaba微服务架构-Config配置中心篇

    文章目录 前言 一.Config引入背景 1.文件相对分散 2.无法区分环境 3.无法实时更新 4.安全无法保证 二.Config引入配置 1.配置文件格式 1.1 命名空间(Namespace) 1 ...

  6. Spring Cloud Alibaba入门教程-05【Alibaba微服务组件Nacos配置中心】

    1. Nacos配置中心使用 官方文档: https://github.com/alibaba/spring­cloud­alibaba/wiki/Nacos­config Nacos 提供用于存储配 ...

  7. 微服务调用链追踪中心搭建 1

    概述 一个完整的微服务系统包含多个微服务单元,各个微服务子系统存在互相调用的情况,形成一个 调用链.一个客户端请求从发出到被响应 经历了哪些组件.哪些微服务.请求总时长.每个组件所花时长 等信息我们有 ...

  8. 微服务A读配置中心报Could not locate PropertySource错误

    微服务A读配置中心报Could not locate PropertySource错误 项目场景: SpringCloud 搭建之微服务A通过配置中心(微服务)读取本地git仓库的配置文件micros ...

  9. 合沟微服务怎么添加_微服务架构:动态配置中心搭建

    版权声明:本文为博主原创文章,转载请注明出处,欢迎交流学习! 在微服务架构中,服务之间有着错综复杂的依赖关系,每个服务都有自己的依赖配置,在运行期间很多配置会根据访问流量等因素进行调整,传统的配置信息 ...

最新文章

  1. jQuery中的事件机制深入浅出
  2. FaceBook开源PyTorch3D:基于PyTorch的新3D计算机视觉库
  3. hdoj1002解题报告
  4. 用python朗读字母-使用python编写一个语音朗读闹钟功能的示例代码
  5. 通话过程中显示呼叫失败_电销行业如何破局?深海捷云呼叫中心协助企业通过挑战...
  6. 1.22 实例:商品信息查询
  7. Asp.Net Core安全防护-客户端IP白名单限制
  8. java scavenge_请概述一下Java中都有哪些垃圾收集器
  9. java爬取button_学习使用Java的webmagic框架爬取网页内容
  10. Go官方库RPC开发指南
  11. TCP建立连接的三次握手过程
  12. 【Python】调用WPS V9 API,实现Word转PDF
  13. Mark Text快捷键
  14. 科技公司,请逃离一线城市
  15. excel 打开文件后自动卡死的解决方法
  16. 如何完成卷积神经网络有关的毕业设计
  17. Base64编码详解与URL安全的Base64编码
  18. matlab中逗号分号冒号方括号,matlab中分号、冒号、逗号等常用标点符号的作用,又快又好...
  19. securecrt 远程映射端口
  20. HTML+CSS大风车及十字架的实现

热门文章

  1. python可以做什么毕业设计-Python
  2. python哪本好-在众多小说中,Python告诉你哪本小说好看
  3. python自学步骤-Python学习步骤如何安排?
  4. 2!=5 or 0在python中是否正确-python 中 and or
  5. python 画图 内存-10种检测Python程序运行时间、CPU和内存占用的方法
  6. python面试-马哥教育官网-专业Linux培训班,Python培训机构
  7. python中的散点图代码-python – 带有图例的matplotlib散点图
  8. python 在地图上的散点图-Matplotlib中的散点图等高线
  9. python线下培训-天津python培训,0基础学python线上还是线下好?
  10. python怎么读文件夹下的文件夹-如何使用Python读取文件夹中的文件数量?