1 介绍
Spring Cloud Bus 可配置Spring Cloud Config 使用可实现配置的动态刷新
Spring Cloud Bus 能管理和传播分布式系统间的消息, 就像一个分布式执行器,可用于广播状态更改,事件推送等,也可以当做微服务间的通信通道
注意,这里年张图片,就代表两种广播方式
图1: 它是Bus直接通知给其中一个客户端,由这个客户端开始蔓延,传播给其他所有客户端
图2: 它是通知给配置中心的服务端,有服务端广播给所有客户端
2 为什么被称为总线
1)什么是总线
在微服务架构的系统中,通常会使用轻量级的消息代理来构建一个公用的消息主题,并让系统中所有微服务实例连接起来,由于该主题中产生的消息会被所有实例监听和消费,所以称为消息总线,在总线上的各个实例,都可以方便的广播一些需要让其他连接在该主题的实例都知道的消息,
2)基本原理
ConfigClient 实例监听MQ中同一个topic(默认是SpringCloudBus)。当一个服务刷新数据时,它会把这个消息放到Topic中,这样其他监听同一个Topic的服务就能得到通知,然后去更新自身额配置
3 使用Spring Cloud Bus
结合config使用 https://editor.csdn.net/md/?articleId=123066812
3.1)搭建rabbitmq环境
3.2)创建configClient服务3355 3366
3.3)Bus广播的两种方式如上图
1)利用消息总线触发一个客户端/bus/refresh,而刷新所有客户端的配置
2)利用消息总线触发一个服务端ConfigServer的/bus/refresh,而刷新所有客户端的配置
第二种方式比较合适,因为第一种打破了微服务的单一性(因为微服务本身就是业务模块,不应该具有刷新功能) ,破坏了微服务各节点的对等性(有一个客户端额外承担刷新职责,其他模块只有业务职责),有一定的局限性(微服务在迁移时,它的网络地址会发生变更,如果做到自动刷新,需要做更多的修改)
3.4)修改服务端配置3344
3.4.1)引入pom
<!--添加消息总线RabbitMQ支持-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring