Spring Cloud 微服务入门教程(六):Spring Cloud BUS 消息总线实现配置中心动态更新配置文件
上一节我们讲了《Spring Cloud 微服务入门教程(五):统一配置中心-ConfigService》实现了统一管理配置,在文末我也说了依赖重启才能自动拉取配置,所以本章节就讲一下利用Spring Cloud BUS 消息总线来自动更新配置文件,这将实现应用无需重启就可以热更新配置文件。
必要的环境
在开始之前,我们还需要一些必要的环境,那就是提供消息队列服务的RabbitMQ,RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。安装非常简单,无论是本机安装还是使用Docker运行都是十分方便的,文章讨论Spring Cloud微服务架构,RabbitMQ的安装就不在此赘述了,非常简单,下载地址:https://www.rabbitmq.com/download.html
从此章节以后,都依赖RabbitMQ消息队列
改造配置中心和需要更新配置的服务
首先我们以改造配置中心为例,其他需要动态更新配置的服务也是一样的改造方式。首先我们需要修改POM文件,增加一个依赖:spring-cloud-starter-bus-amqp,例如配置中心的POM文件:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <parent> <artifactId>cloud</artifactId> <groupId>net.renfei</groupId> <version>1.0.0</version> </parent> <modelVersion>4.0.0</modelVersion> <groupId>net.renfei</groupId> <artifactId>config</artifactId> <version>1.0.0</version> <name>config</name> <description>配置中心</description> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-bus-amqp</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
然后修改application.yml中rabbitmq的配置,如果不写就是默认的,因为要演示给大家,所以我就写出了默认的配置,以配置中心模块为例:
server: port: 8114 spring: application: name: config cloud: config: server: git: uri: https://github.com/NeilRen/SpringCloudDemo.git search-paths: springcloud-config # username: # password: # basedir: rabbitmq: addresses: 127.0.0.1 port: 5672 username: guest password: guest eureka: client: service-url: defaultZone: http://localhost:8761/eureka/ management: endpoints: web: exposure: include: "*"
其他需要动态更新配置的服务也是同样的改造方法,改造好后,怎么使用呢?我们只需要给统一配置中心模块发送一个 POST 信号即可,我这里演示的同意配置中心地址是:http://localhost:8114/actuator/bus-refresh,然后我使用的是 curl 命令模拟 POST 请求,当然你们用其他可以发POST请求的客户端都可以,例如 POSTMAN。如果返回的是404错误,那需要检查一下bus-refresh接口是否暴露出来,在配置文件里是:management.endpoints.web.exposure.include,我在演示系统里是个星号,代表暴露所有接口。
给 /actuator/bus-refresh 发送一个POST信号以后,我们看一下RabbitMQ的界面,上面已经可以看到各个服务收发消息的情况了:


使用Git的WebHooks自动更新
有的同学就会问,每次更新还是得人工发送POST请求吗?其实我们可以利用Git提供的WebHooks来发送信号,无论是Github还是Gitlab,他们都提供WebHooks这个功能。原理就是Git上的WebHooks更新调用config server的/monitor(spring-cloud-config-monitor)触发RefreshRemoteApplicationEvent事件,然后spring cloud bus的StreamListener监听RemoteApplicationEvent,通过mq发布到每个config client,然后client接收RemoteApplicationEvent事件来实现refresh。
我使用Github举例:在Git项目设置里选择WebHooks,然后点击添加,输入可以访问到/monitor的链接地址,Content type选择 json,然后选择“Just the push event.”只有push的时候才发送通知。

商业用途请联系作者获得授权。
版权声明:本文为博主「任霏」原创文章,遵循 CC BY-NC-SA 4.0 版权协议,转载请附上原文出处链接及本声明。
相关推荐
猜你还喜欢这些内容,不妨试试阅读一下评论与留言
以下内容均由网友提交发布,版权与真实性无法查证,请自行辨别。微信订阅号
扫码关注「任霏博客」微信订阅号- 你好,我想问一下如果是分析型的数据库要怎么制作docker镜像呢 是修改V008R003C002B0320版本号吗
- 可以的,我也正在开发分享的程序,可以邮件或群联系我都可以,关于页面里有联系方式:https://www.renfei.net/page/about 。
- 有破解软件的需要可以私下联系您吗?
- 您好,手机APP只是个客户端,用于数据呈现展示,数据均保存在服务器上,只留个APP没有任何用处,无能为力哦。
- 老哥 看你弄了这么多软件好厉害啊。 我有个软件 我买过几个小会员 没用几天 然后商家跑路了,软件服务器关闭了,连不上去 用不了。 你能做成一个打补丁版本可以本地用的么? 方便看下么?https://haodezhe.lanzouw.com/iD0f30h9joza 谢谢老哥!
- 您好,由于版权投诉和我国知识产权法的完善,我已经下架所有破解软件的下载链接了。
- 请问怎么下载呀
- 我保存的License在:https://gitlab.com/renfei/KingbaseES-V8-R3/-/tree/master/License ,开发版是长期有效的,只不过限制连接数,现在官网好像已经下线 V8R3 的下载页面了,其他版本我也不确定是否过期
- 这个版本的license有没有
- 序列号长度不对呀