【Spring Cloud】刷新config配置文件信息的实现

水深无声 2022-02-14 07:59 375阅读 0赞

【学习背景】

  1. 在前面一篇博客中,搭建了配置中心的demo,实现各服务配置文件的统一管理。但其实,存在这样一个问题:默认情况下并不能及时的获取实时变更的配置文件信息,而需要重启服务。所以,本篇博客主要解决上述问题,实现配置文件的修改,可以不重启服务,获取到最新的配置文件信息。

【学习内容】

1. 实现方法

  1. 对于Spring Cloud分布式配置中心,可以采用手动刷新或自动刷新。

2. 实现步骤

首先,说一下,如何做到手动刷新?

  1. **手动刷新的实现,也就是需要人工调用接口,调用客户端/actuator/refresh接口,获取最新的配置文件信息。**
  • 客户端bootstrap.properties配置文件添加访问权限

    表示包含所有端点的信息,默认情况下,只是打开了info、health的端点

    management.endpoints.web.exposure.include=*
    management.endpoint.health.show-details=always

  • 客户端Controller增加注解@RefreshScope

    @RestController
    @RefreshScope
    public class ConfigClientController {

    1. @Value("${env}") // git配置文件里的key
    2. String configEnv;
    3. @RequestMapping("/getConfigInfo")
    4. public String getConfigInfo(){
    5. return "获取环境配置:" + configEnv;
    6. }

    }

  • 配置文件变更后,手动调用客户端刷新接口,http://localhost:9091/actuator/refresh

在此访问接口,便可以获取到最新的配置文件信息。

这种方法局限在于需要各个服务人工调用接口。而自动刷新的方法,便打破了这样的局限。

  1. **自动刷新的实现,采用的是Spring Cloud ConfigSpring Cloud Bus的结合实现,整个流程如下图所示:**

在这里插入图片描述

1)用户更新配置文件信息,检查到Git Hook变化,触发Hook配置地址的调用,即Config Server服务端的刷新接口:/actuator/bus-refresh。

2)Config Server接口到变化通知后,会发布消息,并通过bus发送给Config Client端。

3)当Config Client接收到消息后会重新发送请求加载配置信息。

下面通过Rabbit Mq作为消息中间件,集成到demo中。

Config Server配置服务端:

  • 添加bus依赖


    org.springframework.cloud
    spring-cloud-starter-bus-amqp
  • 添加访问权限配置和mq配置

    配置rabbitmq信息

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

    配置节点访问权限

    management.endpoints.web.exposure.include=*
    management.endpoint.health.show-details=always

Config Client配置客户端:

  • 添加bus依赖


    org.springframework.cloud
    spring-cloud-starter-bus-amqp
  • 添加访问权限配置和mq配置

    配置rabbitmq信息

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

结合Bus结果验证:

当配置文件修改后,调用服务端刷新接口:http://localhost:8888/actuator/bus-refresh

再次调用客户端获取配置文件接口,便可以得到最新的配置文件信息,说明集成bus实现热刷成功。

结合WebHook实现git push后便可自动调用服务端刷新接口:

在这里插入图片描述

3. 实现demo

  1. demo已更新到github上:[https://github.com/huzhiting/spring-cloud-config.git][https_github.com_huzhiting_spring-cloud-config.git]

【学习总结】

  1. 两种方式的实现,各有利弊。手动刷新虽然需要人工调用,比较麻烦,但性能上是没有什么影响的;而自动刷新,虽然不需要进行手动调用接口,但会将所有服务的配置都刷新,所以性能较差。

发表评论

表情:
评论列表 (有 0 条评论,375人围观)

还没有评论,来说两句吧...

相关阅读