使用 Spring Cloud Bus 自动刷新配置(SpringBoot2.x版本)

avatar 2019年7月2日00:53:04 评论 1,096 views

上文(点此回顾)介绍了 Spring Cloud 中配置中心的搭建以及客户端(即微服务项目,如博客系统)读取配置中心配置的方法。

但是,我们发现,每次在 GitHub 上修改配置,比如修改了数据库账号密码,需要重启客户端项目才生效,这个成本还是比较大的。

我们之前说了 Spring Cloud Config 可以实现自动刷新配置的,怎么实现呢?

本文将介绍通过 Spring Cloud Bus 实现,标题声明了是基于 SpringBoot2.x,是因为相对1.x版本的可能配置有些不同。

 

一、准备

本地安装了 RabbitMQ,并启动(可以参考这里

Eureka 启动

Config Server 启动

一个微服务项目(这里以前文的博客系统的服务提供者为例,读取注册中心的配置)启动

 

二、整合 Spring Cloud Bus

注意:Config Server 和 客户端都需要整合 bus-amqp

1、Config Server 配置

pom.xml 中添加依赖

  1. <dependency>
  2.     <groupId>org.springframework.cloud</groupId>
  3.     <artifactId>spring-cloud-starter-bus-amqp</artifactId>
  4. </dependency>
  5. <dependency>
  6.     <groupId>org.springframework.cloud</groupId>
  7.     <artifactId>spring-cloud-config-monitor</artifactId>
  8. </dependency>

 

application.yml 添加配置

  1. management:
  2.   endpoints:
  3.     web:
  4.       exposure:
  5.         include: bus-refresh

上面这个配置目的是为了让我们之后能访问到 /actuator/bus-refresh 接口

因为 rabbitmq 默认 主机 localhost, 端口 5672,账号 guest,密码 guest 都没有修改, 所以无需配置

 

2、客户端配置

pom.xml 中添加依赖

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

 

3.分别重启 Config Server 和客户端服务

然后查看 rabbitmq 可视化页面,可以看到有两个队列

 

4.现在我们去GitHub修改 application-dev.yml 里的配置

然后在终端执行命令让配置中心刷新配置,同时通知客户端重新读取配置

  1. curl -v -X POST "http://localhost:8080/actuator/bus-refresh"

该命令的意思就是向 Config Server 端的  /actuator/bus-refresh 发起 POST 请求

有 PostMan 的朋友,其实也可以直接用 PostMan 测试,返回是 204 状态码

 

5.验证

通过一个简单的方法就能验证客户端是否刷新了配置,我先把数据库密码改成错误的,然后调用 客户端的查询用户列表的接口,显然是会报错的,没有数据。

然后我在 GitHub 修改配置,然后执行 第4步 的命令,然后再去调用查询用户列表的接口,发现有了数据。

可见,我们在没有重启客户端项目的情况下,实现了刷新配置功能。

 

三、通过配置 Git 仓库 WebHooks 来自动调用接口

上面我们还是手动执行去调用配置中心的 /actuator/refresh 接口

通常我们比较懒,我们想当GitHub上的配置修改了,自动去调用这个接口

事实上,是有的,GitHub 提供 WebHooks 这种东西

  • 微信
  • 交流学习,有偿服务
  • weinxin
  • 博客/Java交流群
  • 资源分享,问题解决,技术交流。群号:590480292
  • weinxin
avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: