- 先看一张动态自动更新原理图:
SpringCloud Bus 负责管理消息队列,实现配置传输给各个服务
WebHook 实现更新配置时自动发送 /bus-refresh 请求
- 上面两种配置的结合,将实现动态自动更新配置。
一、SpringCloud Bus使用详解
- 在config server中添加依赖和配置:
<!-- spring cloud bus -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-monitor</artifactId>
</dependency>
配置:
# 本地安装是默认的localhost:5672
spring.rabbitmq.addresses=ip地址:5672
management.endpoints.web.exposure.include=*
2. config client 端配置(也就是order服务)
- 添加加依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
添加配置:
spring.rabbitmq.addresses=ip地址:5672我的 MQ 在服务器的Docker上部署,因此需要配置公网IP,否则可以不配置,默认就可以
在需要进行动态刷新配置的地方使用 @RefreshScope 注解
3、 启动config server 和 order 服务
访问order服务的获取远程git的配置。然后修改配置,发送post请求”localhost:8080/actuator/bus-refresh”。 这时候修改后的配置就已经更新到order服务。访问order服务会发现配置已经改变。
二、使用 WebHooks实动态更新配置
github上集成了该功能,因此只需在config-repo中配置WebHooks即可。
配置WebHooks的ip 需要是公网ip,该公网ip 对应这本机的 order服务的ip:port。
这个公网ip 可以通过在 netapp.cn 网站上生成。还用配置WebHooks时Content Type是 application/json 。
此时再修改远程git 内容,order服务会自动获取到。