Spring Cloud Bus
Spring Cloud Bus 将分布式系统的节点与轻量级消息代理(如 RabbitMQ、Kafka)链接,实现配置广播状态变更或其他管理指令。支持 RabbitMQ 和 Kafka 作为消息代理。
适用场景:微服务架构的配置动态刷新、需要广播通知所有服务实例的场景。
提示
Spring Cloud Bus消息总线,配合Config实现配置动态刷新
核心原理
Spring Cloud Bus 通过消息代理(RabbitMQ/Kafka,负责传递消息的中间件)连接所有微服务实例,当某个实例的状态发生变化时(如配置更新),通过消息广播通知所有实例。
快速开始
引入依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>配置:
spring:
rabbitmq:
host: localhost
port: 5672
cloud:
bus:
enabled: true
trace:
enabled: true动态刷新
配合 Config 实现配置变更自动广播:
- 配置中心修改配置
- 发送 POST 请求到任意实例的
/bus/refresh - 所有实例自动刷新配置
curl -X POST http://localhost:8080/bus/refresh刷新粒度
| 端点 | 说明 |
|---|---|
/bus/refresh | 刷新所有实例 |
/bus/refresh/{destination} | 刷新指定实例(如 service-goods:8080) |
Spring Cloud Bus + Spring Cloud Config 的组合解决了逐个重启服务的痛点,实现配置变更的自动广播。
常见问题处理
消息发送失败
- 检查 RabbitMQ/Kafka 是否正常运行
- 确认消息代理连接配置是否正确
- 检查网络连通性
配置刷新不生效
- 确认
/bus/refresh端点是否暴露 - 检查 Config Server 是否正常
- 确认配置已推送到 Git 仓库