SpringCloud学习笔记(三)——统一配置中心

统一配置中心简介

本文会带大家来了解Spring cloud config这个组件,首先,先带来一个问题。我们用这个组件的目的是什么呢?这么多人用,肯定是有原因的嘛。存在即合理。

一.为什么需要统一配置中心?

如果不使用统一配置中心,会带来很多问题,比如:

1.不方便维护
假如一个服务,由多人开发,其中a在开发的时候,修改了配置,b来开发的时候,需要测试别的一些功能,这个时候配置文件已经被a修改得面目全非了,这就造成了冲突。

2.配置内容的安全与权限
公司项目线上的配置基本是不对开发公开的,特别是数据库的账号密码这种,基本是只有运维才知道,把配置放在项目里面的话,每个开发人员都能看到,这种情况就需要对配置文件进行隔离。

3.更新配置项目需要重启
线上更新配置是经常发生的事情,比如更新一点小小的配置,难道都需要重启吗?使用spring cloud config就可以解决这一点。

二、如何搭建统一配置中心

配置中心到时候也会作为一个服务,这些配置,为了方便管理,我们都把它放到git上,使用git控制起来会比较方便。如下图所示:(说明:箭头代表数据流动的方向)
在这里插入图片描述 最开始呢,我们是把配置放在远端的git,如gitlab,github或者自己搭建的私服。config-server把配置从远端git拉下来之后,放到本地git。config-server与本地git之间是双向流动的。既会把远端的git放到本地中,假如远端git不能访问了,也会从本地git把配置拉出来,拿到配置之后,就可以给微服务来使用。product和order这两个服务,需要集成config-client这个组件。这就是统一配置中心整体的架构。

Config Server

步骤:

第一步:新建一个服务, 勾选Config Server

在这里插入图片描述

第二步: 做Eureka的配置(不包括下图, 具体看前面的文章)

在这里插入图片描述

第三步: 让它成为一个configServer端, 主方法加上@EnableConfigServer

在这里插入图片描述
此时启动会报错:
在这里插入图片描述

第四步: 因为配置文件会从git上读取,所以我们先去git上建一个项目

在这里插入图片描述

第五步: 创建之后, 把order的yml文件放进来

在这里插入图片描述配置文件里面指定env为环境
在这里插入图片描述

第六步: 复制好仓库的地址后,在config服务里面配置好uri(此处是git上的地址和账号密码)

在这里插入图片描述
然后发现放在git上的配置文件已经可以访问了~

Config Client

步骤

第一步:导入依赖(启动类不用加注解)

在这里插入图片描述

第二步: 写config相关的配置

由于其他配置都放到git上了,因此可以删掉
在这里插入图片描述
我们发现运行后报错了:数据库连接失败
原因是本地服务从配置文件中指示去git找配置文件,但是配置文件却还没加载到本地git,因此出现这种情况
处理办法:将order服务的配置文件更名为bootstrap.yml
在这里插入图片描述

配置中心的高可用

因为本来就是一个微服务,因此直接把多个config的服务端往Eureka上注册就好

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

注意

  1. 在config的Client端, 如order服务, 关于Eureka的配置也应该放在本地而不是git上, 否则会读不到
    在这里插入图片描述
    把Eureka的配置放到order服务配置文件里面来, 这样他就会先去找这个地址, 然后再找config上的配置
  2. 配置中心在加载配置的时候, 除了加载order-test.yml这个配置文件, 还会加载order.yml, 将它们合起来
    那我们就可以将通用的配置放到order.yml中, 这样可以避免所有环境都写相同的配置
  3. 我们发现, 要想配置生效还是得重启服务才行, 这就与最开始使用配置中心的初心相悖, 想要做到动态的配置刷新, 就需要用到后面的内容: SpringCloud Bus~

自动刷新配置—SpringCloud Bus

Bus这个词, 除了公交车的意思外, 还有信息通路, 总线, 在这里的意思就是"总线";

原理:

configServer会从远端git上拉取配置文件, 并在本地git存一份, 同时提供对外的配置服务

这里要注意: order这个服务在启动的时候, 访问configServer读取配置, 启动后修改git的配置, order服务这边的配置是不会变化的, 以为压根没人通知order服务, 因此, 自动刷新配置的关键点就是: 如何在修改了配置以后, configServer能通知到order这个服务

要实现这种通知, 我们需要一个载体—消息队列
常见的消息队列有很多, RabbitMQ, RocketMQ, kafka, ActiveMQ等, 我们此处用RabbitMQ

SpringCloud Bus就是来操作消息队列的组件

config-server和order服务通过消息队列来传递信息,

config-Server使用了bus之后, 会对外提供一个HTTP接口, 叫做"/bus-refresh"
使用这个接口, configServer就会把跟新配置的消息放入RabbitMQ, 这个接口由远端git访问

步骤

第一步: 在config的服务里引入依赖

在这里插入图片描述启动成功后, RabbitMQ这边会有一个Bus创建的队列
在这里插入图片描述

第二步: 在oeder服务这边引入bus依赖

在这里插入图片描述启动成功后, RabbitMQ这边又会有一个Bus创建的队列
在这里插入图片描述

第三步: 修改git上的配置

在这里插入图片描述当然, 现在我们去项目刷新, 当然配置是没改的
现在消息队列已经准备好了, 这两个应用也分别跟消息队列打通了, 还差访问HTTP的接口

第三步: 访问bus-refresh接口

  1. 首先要将configServer服务的所有接口暴露出来, 当中包括bus-refresh
    在这里插入图片描述

大坑: 远程git访问接口后, 两边都刷新了, 但是用的配置仍是以前的

解决办法:
需要在使用远程配置的地方加上一个注解: @RefreshScope
在这里插入图片描述现在, 就可以实现, 修改git上的配置, 不用重启项目了~~

@RefreshScope使用实例

  1. 在order-test.yml里面配置关于girl的信息在这里插入图片描述
  2. 新建一个配置类, 用于指向配置文件中的girl, 打上@RefreshScope注解 在这里插入图片描述3. 在控制层输出配置文件里面girl的信息
    在这里插入图片描述然后, 当git上的配置文件修改后, 访问config的bus-refresh接口, 就可以不启动也能刷新girl的信息了

集成WebHook实现自动刷新

在git上使用WebHook
在这里插入图片描述WebHook集成好之后,提交之后,就可以实现自动刷新配置!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值