Spring-Cloud系列第6篇:spring-cloud-bus

自学spring-cloud系列,越来越感觉spring-cloud很强大! 主要分为以下几篇:

介绍

在之前的Spring Cloud Config的介绍中,我们还留了一个悬念:如何实现对配置信息的实时更新。

通过/refresh接口和Git仓库的Web Hook来实现Git仓库中的内容修改触发应用程序的属性更新这是一个好的方法,但是我没讲,因为:若所有触发操作均需要我们手工去维护Web Hook中的应用位置的话,这随着系统的不断扩张,会变的越来越难以维护,而消息代理中间件是解决该问题最为合适的方案。是否还记得我们在介绍消息代理中的特点时有提到过这样一个功能:消息代理中间件可以将消息路由到一个或多个目的地。利用这个功能,我们就能完美的解决该问题,下面我们来说说Spring Cloud Bus中的具体实现方案。

本次使用 Rabbit MQ 来进行实验,没有使用其他消息队列。

安装 Rabbit MQ

可以参考我的文章

其用户名和密码是: guest/guest

架构

这时Spring Cloud Bus做配置更新步骤如下:

    1、提交代码,利用 git 的 webhook 触发post请求给 bus/refresh 2、server端接收到请求并发送给Spring Cloud Bus 3、Spring Cloud bus接到消息并通知给其它客户端 4、其它客户端接收到通知,请求Server端获取最新配置 5、全部客户端均获取到最新的配置

这样的话我们在server端的代码做一些改动,来支持bus/refresh

开始之前:

我想说,项目源码使用模块编程,因为之前的版本原因,client端注册到了eureka服务端,所以启动项目应该也要启动eureka的服务端。然后在启动config服务端,最后启动我们的config-client端,启动config-client要使用profile方法启动,这个之前我们已经使用了好多次。

修改 server 端

pom 增加如下:

<!--消息总线-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bus-amqp</artifactId>
        </dependency>
        <!--config-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-config-monitor</artifactId>
        </dependency>

其中bus-amqp就是消息总线,用来利用 rabbitmq 来进行消息通讯。monnitor就是在server 端设置一个监听,来接收我们发送的post信息,告诉它我们更新了配置,你可以开始刷新已经注入的值了。

配置文件:

management.security.enabled=false

spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

management.security.enabled 可以将刷新设置密码取消,因为我们是在测验,所以不需要密码。如果是你们公司内网的话,有物理隔离,应该也不需要密码。

client 端

讲道理,client 端不需要做什么修改

management.security.enabled=false 如果真的需要的话,加上这个,防止不能够刷新。

测试

访问 http://localhost:8087/hi 得到 123

修改 git 里文件的值为2222222222

github是有webhook的,你们公司私人的git应该也有webhook,但是github的webhook不能访问我localhost呀,所以这里利用postman 进行刷新操作来模拟webhook

重新访问http://localhost:8087/hi 得到 2222222222

同时,查看日志,发现值已经刷新,并且进行重新注册到了服务中心。

感觉,很酷哦!100 酷!

示例源码

所有源码在我的github仓库里,传送门:

支持

如果你喜欢~ 给个星

经验分享 程序员 微信小程序 职场和发展