SpringCloud Bus消息总线

是什么?

Springcloud Bus 是用来分布式系统的节点与轻量级消息系统链接起来的框架,它整合了java的事务处理机制和消息中间建的功能,springcloud Bus 目前只支持 rabbitMq,Kafka

能做什么?

Spring Cloud Bus能管理和传播扮布式系统间的消息,就像- 个份布式执行器,可于广播状态更改、事件推送等, 也可以当作微服务间的通信通道

根据上面的图总结出来

  1. 提交代码触发post给客户端A发送bus/refresh

  2. 客户端A接收到请求从Server端更新配置并且发送给Spring Cloud Bus

  3. Spring Cloud bus接到消息并通知给其它客户端

  4. 其它客户端接收到通知,请求Server端获取最新配置

  5. 全部客户端均获取到最新的配置

这样子虽然可以实现想要的效果,但是

  • 打破了微服务的职责单一性。微服务本身是业务模块,它本不应该承担配置刷新的职责。
  • 破坏了微服务各节点的对等性。
  • 如果客户端ip有变化,这时我们就需要修改WebHook的配置。

所以改动一下

这时Spring Cloud Bus做配置更新步骤如下:

  1. 提交代码触发post给Server端发送bus/refresh
  2. Server端接收到请求并发送给Spring Cloud Bus
  3. Spring Cloud bus接到消息并通知给其它客户端
  4. 其它客户端接收到通知,请求Server端获取最新配置
  5. 全部客户端均获取到最新的配置

这样就能做到一处刷新处处生效

有时候我们不需要全部通知生效可以通过

curl -X POST "http://localhost:3344/actuator/bus-refresh/config-client:3355"指定生效的客户端名 config-client(服务名)

Q.E.D.

知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

只有不断的努力才会有更大的惊喜等着你去发现!!