Bus 消息总线
在微服务架构的系统中,通常会使用轻量级的消息代理来构建一个共同的消息主题,并让系统中所有的微服务实例都连接上来。由于该主题中产生的消息会被所有实例监听和消费,所以称它为消息总线。在总线上的各个实例,都可以方便地广播一些需要让其它连接在该主题上的实例都知道的消息。
基本原理
Config Client 实例都监听 MQ 中同一个 topic(默认是springCloudBus
)。当一个服务刷新数据的时候,它会把这个信息放入到 topic 中,这样其它监听同一个 topic 的服务就能得到通知,然后去更新自身的配置。目前Spring Cloud Bus 只支持 Rabbit 和 Kafuka。
安装RabbitMQ
使用Docker
docker pull rabbitmq:management
docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:management
实现
依赖坐标
<!-- bus -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
并配置 MQ
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
配置中心配置
# 暴露bus刷新配置端点
management:
endpoint:
web:
exposure:
include: 'bus-refresh'
服务端配置
只需要配置好 MQ 并暴露端点
# 暴露监控端点
management:
endpoint:
web:
exposure:
# * 为全部, refresh
include: "*"
刷新配置中心
全部通知
POST http://localhost:3344/actuator/bus-refresh
定点通知
POST http://localhost:3344/actuator/bus-refresh/config-client:3355