springcloud_config教程(5)--项目运行时刷新配置文件

x33g5p2x  于2021-12-20 转载在 其他  
字(1.6k)|赞(0)|评价(0)|浏览(268)

  目前的confit-client只有在启动的时候,才回去config-server获取配置,不太方便,现在进行改造,实现项目运行时刷新配置。

  有两种方式,单个客户端刷新和多个客户端同时刷新,继续使用之前的工程。

  一.单个客户端刷新

  1.在config-client工程中增加依赖

|

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

|

  2. 在需要刷新配置的类上,使用注解:@RefreshScope

  3. 在config-client的配置文件中,加入:

|

#关闭鉴权,这样才能post请求访问 当前项目/refresh 接口的时候更新配置文件,否则需要Authorization头
management.security.enabled=false

|

  4. 现在启动config-server和config-client,调用config-client的接口,获取到的值如下:

  现在不停止项目,在git中修改配置文件:

  然后使用post请求,调用http://localhost:8881/refresh接口,刷新配置文件:

  再次调用config-client的同一个接口,可以发现配置已经刷新:

  但此方式有个问题,就是如果有很多个客户端,比如分布在不同机器上的服务,那么需要每个客户端都调用一次refresh接口,不方便,于是可以使用 spring cloud bus 进行改造,实现只需要调用任一客户端的接口一次,便刷新所有客户端的配置。

  二. 使用spring cloud bus + rabbitmq 实现多个客户端刷新

  1.新建一个工程config-client2,和config-client仅端口号不同,用于在本机模拟多个客户端的情况。

  2.在config-client 和 config-client2中增加依赖:

|

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>

|

  3.安装rabbitmq并运行,具体步骤百度即可。我这里使用的rabbitmq的docker镜像。rabbitmq的作用是调用某一客户端的刷新接口后,发送消息通知spring cloud bus,然后spring cloud bus通知其他客户端刷新配置。

  4.在config-client 和 config-client2的配置中,增加关于rabbitmq的配置:

|

#使用rabitMQ结合spring-cloud-bus,更新所有客户端配置
spring.rabbitmq.host=192.168.110.128
spring.rabbitmq.port=5672

|

  5. 此时启动config-client 和 config-client2,会在日志中出现下图,表明可以通过post方式请求/bus/refresh接口更新配置:

  6.此时,分别调用config-client 和 config-client2的接口,获取的内容如下:

  7.然后修改git中的配置文件:

  8.使用post方式请求任一客户端的/bus/refresh接口,就会更新所有客户端的配置:

  9.分别调用config-client 和 config-client2的接口,都获取到了最新的配置:

  10.同时,也可以使用 /refresh来仅仅刷新单个客户端的配置。

  至此,完成了刷新多个客户端的功能。

    

相关文章