springCloud Bus
(消息总线)概述
Config Client
(微服务)从 Config Server
端获取自己对应的配置文件,但是目前的问题是:当远程 git
仓库配置文件发生改变时,每次都是需要重启 Config Cient
(微服务),如果有上百上千个微服务呢? 我想我们不会一个个去重启每个微服务,也就是说如何让 Config Server
端通知到 Config Client
端? 即 Config Client
端如何感知到配置发生更新?
springCloud Bus
会向外提供一个 http
接口,即下图中的 /bus/refresh
。我们将这个接口配置到 git
的 webhook
上,当 git
上的内容发生改变时,就会自动调用 /bus/refresh
接口。Bus
就会通知 ConfigServer
,configserver
会发布更新消息到消息总线的消息队列,其他服务订阅到该消息就会信息刷新,从而实现整个微服务进行自动刷新
springCloud Bus
官网地址:https://www.springcloud.cc/spring-cloud-bus.html
springCloud Bus
的实现方式
某个微服务承担配置刷新的职责
- 提交配置触发
post
请求调用客户端A的/bus/refresh
接口 - 客户端
A
收到请求从Server
端更新配置并且发送给springCloud Bus
消息总线 springCloud Bus
接收消息并通知给其他连线在总线上的客户端,所有总线上的客户端均能接收到消息- 其他客户端接收到消息,请求 Server 端获取最新配置
- 全部客户端均获取到最新的配置
以上存在问题:
- 打破微服务的单一原则。微服务本身是业务模块,本不应该承担配置刷新的职责
WebHook
的配置也随着承担刷新配置的微服务节点发生变化
配置中心 Server
端承担起配置刷新的职责
- 提交配置触发
post
请求给server
端的/bus/refresh
接口 server
端接收到请求并发送给springCloud Bus
消息总线springCloud Bus
接收到消息并通知给其他连接的总线的客户端- 其他客户端接收到通知,请求
Server
端获取最新配置 - 全部客户端获取到最新的配置