回顾
在springcloud实战之Config(2) ,我们简单的实现了动态刷新。但如果有大量的微服务,就需要为每个 client 去 refresh,明显是不合理的。而 Spring Cloud Bus 可以完美解决这一问题。
通过消息总线 Spring Cloud Bus 更新客户端配置文件(使用 Kafka)
原理
核心
Spring bus 的一个核心思想是通过分布式的启动器对 spring boot 应用进行扩展,也可以用来建立一个多个应用之间的通信频道。目前唯一实现的方式是用 AMQP 消息代理作为通道,同样特性的设置(有些取决于通道的设置)在更多通道的文档中。其实本质是利用了 MQ 的广播机制在分布式的系统中传播消息,目前常用的有 Kafka 和 RabbitMQ。
架构图
流程
- 提交代码触发 post 请求给 bus/refresh
- server 端接收到请求并发送给 Spring Cloud Bus
- Spring Cloud bus 接到消息并通知给其它客户端
- 其它客户端接收到通知,请求 Server 端获取最新配置
- 全部客户端均获取到最新的配置
安装 kafka
详见
server 模块整合
依赖
1 | <dependency> |
配置
1 | server: |
client 整合
与 server 整合一致,添加同样的配置与依赖
测试
- 运行 Eureka、server、client(8771)、client(8772);直接访问
http://localhost:8771/testConfig
,返回配置信息 - 修改配置项,push 到 Git,这时候我们需要在 server 端 post
curl -X POST http://localhost:8769/actuator/bus-refresh
- 再次访问
http://localhost:8771/testConfig
,返回修改后的配置