Bus解读

springCloud Bus (消息总线)概述

Config Client(微服务)从 Config Server 端获取自己对应的配置文件,但是目前的问题是:当远程 git 仓库配置文件发生改变时,每次都是需要重启 Config Cient(微服务),如果有上百上千个微服务呢? 我想我们不会一个个去重启每个微服务,也就是说如何让 Config Server 端通知到 Config Client 端? 即 Config Client 端如何感知到配置发生更新?

springCloud Bus 会向外提供一个 http 接口,即下图中的 /bus/refresh。我们将这个接口配置到 gitwebhook 上,当 git上的内容发生改变时,就会自动调用 /bus/refresh 接口。Bus 就会通知 ConfigServerconfigserver 会发布更新消息到消息总线的消息队列,其他服务订阅到该消息就会信息刷新,从而实现整个微服务进行自动刷新

springCloud Bus官网地址:https://www.springcloud.cc/spring-cloud-bus.html

springCloud Bus 的实现方式

某个微服务承担配置刷新的职责

在这里插入图片描述

  1. 提交配置触发 post 请求调用客户端A的 /bus/refresh 接口
  2. 客户端 A 收到请求从 Server 端更新配置并且发送给 springCloud Bus 消息总线
  3. springCloud Bus 接收消息并通知给其他连线在总线上的客户端,所有总线上的客户端均能接收到消息
  4. 其他客户端接收到消息,请求 Server 端获取最新配置
  5. 全部客户端均获取到最新的配置

以上存在问题:

  • 打破微服务的单一原则。微服务本身是业务模块,本不应该承担配置刷新的职责
  • WebHook 的配置也随着承担刷新配置的微服务节点发生变化

配置中心 Server 端承担起配置刷新的职责

在这里插入图片描述

  1. 提交配置触发 post 请求给 server 端的 /bus/refresh 接口
  2. server 端接收到请求并发送给 springCloud Bus 消息总线
  3. springCloud Bus 接收到消息并通知给其他连接的总线的客户端
  4. 其他客户端接收到通知,请求 Server 端获取最新配置
  5. 全部客户端获取到最新的配置

猜你喜欢

转载自blog.csdn.net/weixin_38192427/article/details/113903495