使用RabbitMQ、Bus框架和WebHooks实现配置文件自动刷新,无需在启动项目
实现原理图:
配置文件放在远端Git中,现在远端Git配置文件已经进行了修改,通过访问Bus提供/bus-refresh接口来通知Config配置中心更新配置文件,通过消息队列给客户端通知配置文件已修改,客户端接收到消息后修改配置。
ConfigServer端(Config配置中心)
- 配置pom.xml文件添RabbitMQ依赖
- 配置application.yml文件
- WebHooks配置
注意: 记得配上web的依赖否则连不上mq
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
在application.yml中配置连接RabbitMQ服务器的地址端口还有账密码,management include中的 ✳ 配置是暴露服务器所有的接口。其中有一个重要的接口就是 /bus-refresh ,就是通知MQ消息队列,配置文件更改了,然后MQ消息队列通知客户端更改配置。
spring:
rabbitmq:
host: 192.168.99.100
port: 5672
username: guest
password: guest
management:
endpoints:
web:
exposure:
include: "*"
通过访问localhost:8080/actuator,8080是 config配置中心端口后面加上actuator, 就可查看所有暴露的接口,大框框里就是/bus-refresh,待会通知客户端修改配置就靠它了。
在github里配置WebHooks,在我的仓库里面打开Setting —>WebHooks,没有配置WebHooks过就点Add,首先配置URL,url必须是域名,主机地址是访问不到的,域名可以去 NATAPP-内网穿透 注册一个免费的,域名后面加上/actuator/bus-refresh,调用通知配置更新的接口。
配置好了WebHooks,当我们修改github上的配置文件,点击提交就是发出一个post请求URL,URL就是在WebHooks填写的URL。接下查看下RabbitMQ队列的消息,波澜起伏的线段就是已经通知客户端了,刷新页面来看修改的配置信息。
在使用WebHooks是会遇到400,OutTime,@RefreshScope(更新作用域)等一些坑,接下来就是解决这些问题