Bus消息总线
我们上面讲到了config配置中心,但是每次更新属性还要去一个一个访问接口,太麻烦了,这个时候我们就要象到发布-订阅模型,让所有服务去订阅这个事件(配置文件发生改变),当配置文件改变时,去通知所有服务更新配置,Bus消息总线就可以完成这样的功能。
Spring Cloud Bus除了支持RabbitMQ之外,还支持现在被广泛应用的Kafka,本文中使用kafka做消息总线,另外spring boot版本是2.1.3和1.x的版本不同。
首先安装kafka
从官网下载kafaka,这里选择的是2.1.1版本
下载完成之后直接解压即可,
配置基本不用动,在kafaka中配置连接本地的zookeeper
接着我们启动zookeeper,kafka
看到上面的信息就说明zookeeper,kafka启动成功,接下来,我们就要修改我们的项目
在config server端和client端添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-kafka</artifactId>
</dependency>
在server端修改配置,将bus-refresh暴露出去
management:
endpoints:
web:
exposure:
include: bus-refresh
看网上说client端也要将bus-refresh暴露出去,但是我自己实验发现没有暴露也是可以刷新的,不知道为何。
接着我们修改git中的配置
使用postman访问http://localhost:8088/actuator/bus-refresh
什么都没有返回,这种情况说明已经刷新好了,细心的小伙伴可以发现配置中心会刷过一些日志。注意这里是访问服务中心,不是访问客户端。
接下来我们重新访问客户端发现数据改变。
还可以带上destination参数指定刷新的服务
http://localhost:8088/actuator/bus-refresh?destination=ServiceName:port
但是我们每次更改配置都要手动访问/bus-refresh接口,有没有简单的方式呢?答案当然是有的。当配置文件修改时(本地推送到git),会触发git的webhook回调,即我们每更改一次配置,就自动向某一接口发送一次请求,将请求发送给spring cloud bus(消息总线),然后由消息总线通知相关的应用。