Bus
概述
- 分布式自动刷新配置功能(与Config结合使用)
- 支持两种消息代理:RabbitMQ和Kafka
基本原理:
ConfigClient实例都监听MQ中同一个topic(默认是SpringCloudBus),当一个服务刷新数据的时候,它会把信息放到Topic中,这样其他监听同一个Topic的服务就能得到通知,然后更新自身的配置。
动态刷新全局广播
- 利用消息总线触发一个客户端/bus/refresh,由客户端刷新所有客户端(破坏了微服务的单一职责性,各节点的对等性)
- 利用消息总线出发一个服务端ConfigServer的/bus/refresh,而刷新所有的客户端
- 配置文件放入远程Github
- Config配置中心读取Github中的配置文件
- Config配置中心暴露当前端口地址
- 消息推送到RabbitMQ
- Config服务接受服务消息推送配置,直接连接配置中心
实操
- 服务端端口号3344为配置中心
<!-- 消息总线RabbitMq -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
spring:
# rabbitmq配置
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
# 暴露rabbitmq刷新配置的端点
management:
endpoints:
web:
exposure:
include: 'bus-refresh'
- 客户端订阅主题
<!-- 消息总线RabbitMq -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
# rabbitmq配置
spring:
cloud:
# 客户端读取服务端的配置中心文件
config:
lable: master # 分支名称
name: config # 配置文件名称
profile: dev # 读取后缀名名称
uri: http://localhost:3344 # 配置中心地址
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
- POST请求一次服务端接口:http://localhost:3344/actuator/bus-refresh,只需请求一次,其他客户端都可接收
- 动态刷新定点通知(具体到通知哪个服务),POST请求一次服务端接口:
http://localhost:3344/actuator/bus-refresh/具体服务名:端口号