本文来源于谷周阳教程整理
Springcloud Bus是什么?能干嘛?
Springcloud Bus是
用来将分布式系统节点与轻量级消息系统连链接起来
的框架,它整合了Java的事件整理机制和消息中间件的功能
。目前支持Rabbit和Kafka
。
Springcloud Bus
配合Spring cloud Config
使用可以实现配置的动态刷新
Springcloud Bus能
管理和传播分布式系统间的消息
,就像一个分布式执行器,可用于广播状态更改,事件推送等
,也可以当作微服务间的通信通道。
什么是总线?
在微服务架构的系统中,通常会使用轻量级的消息代理
来构建一个共用的消息主题
,并让系统中的所有微服务实例都连接上来。由于该主题中产生的消息会被所有实例监听和消费,所以成它为消息总线
。在总线上的各个实例都可以方便的广播一些需要让其他连接在该主题上的实例都知道的消息。
基本原理
ConfigClient实例都监听MQ中同一个topic(默认是springCloudBus),当一个服务器刷新数据的时候,它会把这个信息放入到Topic中,这样其他监听同一Topic的服务就能得到通知,然后去更新自身的配置。
RabbitMQ安装(参见脑图)
SpringCloud Bus动态刷新全局广播
测试
更改gitee的配置文件,版本从5改为6
刷新3344(Config Server)
curl -X POST "http://localhost:3344/actuator/bus-refresh"
达到了一次修改,广播通知,处处生效
SpringCloud Bus动态刷新定点通知
测试:
更改gitee的配置文件,版本从6改为7
刷新3344(Config Server)
curl -X POST "http://localhost:3344/actuator/bus-refresh/config-client:3355"
结果:
通知总结
问题1
启动3344时,连接不上RabbitMQ 15672
这里我一开始使用了http的端口 15672,发生了上述异常。后面改成了 5672 可以成功连接。
映射2个端口:15672是Web管理界面的端口
;5672是MQ访问的端口
。
5672, 5671: used by AMQP 0-9-1 and 1.0 clients without and with TLS
15672: HTTP API clients and rabbitmqadmin (only if the management plugin is enabled)