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(消息总线),然后由消息总线通知相关的应用。

猜你喜欢

转载自blog.csdn.net/ROAOR1/article/details/88309502