小白学SpringCloud(四):消息总线(Spring Cloud Bus)

bus_logo

Spring Cloud Bus 将分布式的节点用轻量的消息代理连接起来。它可以用于广播配置文件的更改或者服务之间的通讯,也可以用于监控。上篇我们有说到Spring Cloud为我们提供了在不重启项目的情况下切换配置的功能,就要用到它,让我们来看看怎么实现的吧。

一、安装MQ

Spring Cloud Bus支持常见的Rabbitmq、kafka、Activemq等。我们这里使用Rabbitmq来作为演示。Rabbitmq的安装这里就不作演示了,大家可以使用docker来安装使用,很方便。给大家一个度娘的传送门

二、Config Server配置

这里我们还是以廖师兄的图为例,先来看看自动更新配置的原理(图中product、order均为客户端)。
bus_1
当我们在远端Git修改了配置之后,如果我们访问Config Server的/bus-refresh接口,Config Server就会把更改的配置发送给MQ,之后MQ就会把要改变的配置推送给各个客户端,这样就实现了自动更换配置的功能,现在我们来试一试吧。记住在这之前要先启动Rabbitmq。
1.添加pom引用
老规矩,先来添加pom引用,要注意的是Config的Server和Client端都要添加。

1
2
3
4
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

2.修改配置文件
首先我们要先添加rabbitmq的配置,我们可以直接配置在远程git上面,这样服务端和客户端就都有这份配置了。

1
2
3
4
5
6
spring:
rabbitmq:
username: guest
password: guest
host: 192.168.xxx.xxx
port: 5672

然后我们也要显示的使我们的服务暴漏/bus-refresh接口。在Spring2.0中把这个接口都移动到了actuator下面。这个只需要在Config端进行配置就好了。

1
2
3
4
5
management:
endpoints:
web:
exposure:
include: bus-refresh #也可以改为"*"来暴露所有接口

现在我们逐一启动我们的Eureka、Config和Client项目,同时在启动Config Server的时候可以看到我们对外暴露的接口
bus_2
这样我们就完成配置了,现在我们修改一下远端配置中的env的值,然后访问一下这个接口

1
curl -X POST http://localhost:8764/actuator/bus-refresh

这时候我们发现在不重启项目的情况下,我们的配置已经修改了。
3.配置Webhook
刚才我们已经实现了自动替换项目配置,但是我们每次更改配置都要手动访问/bus-refresh接口,有没有简单的方式呢?答案当然是有的。现在大部分远端Git都提供了webhook功能,即我们每更改一次配置,就自动向某一接口发送一次请求。这不就是我们想要的吗?


本文作者: catalinaLi
本文链接: http://catalinali.top/2018/startbus/
版权声明: 原创文章,有问题请评论中留言。非商业转载请注明作者及出处。

坚持原创技术分享,您的支持将鼓励我继续创作!