Spring Cloud:Bus基础知识

背景

Bus具有分布式刷新配置功能。
Spring Cloud Bus配合Sping Cloud Config使用可以实现配置的动态刷新。
Bus支持两种RabbitMQ和Kafka。
Spring Cloud Bus能管理和传播分布式系统间的消息,就像一个分布式执行器,可用于广播状态更改,时间推送等,也可以当作微服务间的通信通道。
什么是总线?在微服务架构的系统中,通常会使用轻量级的消息代理来构建一个共用的消息主题,并让系统中所有的微服务实例都连接上来,由于该主题中产生的消息会被所有实例监听和消费,所以称它为消息总线。在总线的各个实例,都可以方便地广播一些需要让其他连接在该主题上地实例都知道的消息。
基本原理:ConfigClient实例都监听MQ中同一个topic(默认是springCloudBus)。当一个服务刷新数据的时候,他会把这个信息放入到Topic中,这样其他监听同一Topic的服务就能得到通知,然后去更新自身配置。
Bus的两种设计思想:
第一种:Bus通知Config客户端

第二种:Bus通知Config服务端

第二种显然更加适合。

Bus动态刷新全局广播配置实现

安装RabbitMQ,这里不再赘述。
服务端、客户端pom增加新的依赖

        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        </dependency>

服务端yml配置rabbitmq,暴露bus刷新配置的端点

spring:
  rabbitmq:
    host: 192.168.10.132
    port: 5672
    username: guest
    password: guest 
#暴露bus刷新配置的端点
management:
  endpoints:
    web:
      exposure:
        include: 'bus-refresh'
``
客户端yml配置
```yml
spring:
  rabbitmq:
    host: 192.168.10.132
    port: 5672
    username: guest
    password: guest
management:
  endpoints:
    web:
      exposure:
        include: "*"

配置完成后,先后启动config服务端和客户端,然后修改git配置,然后执行如下命令:

curl -X POST "http://localhost:3344/actuator/bus-refresh"

现在只需要手动刷新config服务端,然后config客户端的配置就都刷新了。
一次修改,广播通知,处处生效。

Bus动态刷新定点通知

当我只想指定通知某一个Config客户端,其他的客户端我不想通知它们。
公式:

http://localhost:配置中心端口号/actuator/bus-refresh/{destination}

现在/bus/refresh请求不再发送到具体服务实例上,而是发给config server并通过destination参数指定需要更新配置的服务或实例。
例如,我只想通知3355

curl -X POST "http://localhost:3344/actuator/bus-refresh/config-client:3355"

总结

原文地址:https://www.cnblogs.com/wwjj4811/p/13624367.html