我们可以将配置文件放置在GitHub上,通过客户端模块来动态获取GitHub上指定文件其配置信息,当我们更改了GitHub文件中的配置信息,重启模块,将会获取到更新的信息, 那config客户端是否可以及时的更新配置内容呢?
这时 我们需要使用SpringCloud bus来实现配置的自动更新。
SpringCloud Bus 使用机制
Spring Cloud Bus 被国内很多都翻译为消息总线。大家可以将它理解为管理和传播所有分布式项目中的消息即可,其实本质是利用了MQ的广播机制在分布式的系统中传播消息,目前常用的有Kafka和RabbitMQ。利用Bus的机制可以做很多的事情,其中配置中心客户端刷新就是典型的应用场景之一,我们用一张图来描述Bus在配置中心使用的机制。
从图中可看出:
- 提交配置后发送post方式的/bus-refresh请求给Confifig客户端
- Confifig客户端接收到请求从Server端更新配置并且发送消息给消息总线
- 消息总线接到消息并通知给其它客户端
- 其它客户端接收到通知,请求Server端获取最新配置
- 全部客户端均获取到最新的配置
编码测试:
将cloud-14 de pom.xml
添加代码
<!--Bus 与 rabbitMQ依赖-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
<!--监听器-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
在bootstrap.yml中新增 RabbitMQ配置以及消息总线的配置
rabbitmq:
host: localhost
port: 5672
username: guest
password: guest
# 暴露触发消息总线的地址
management:
endpoints:
web:
exposure:
include: bus-refresh