RefreshScope多实例刷新

2020-01-10  本文已影响0人  梦想又照进现实

RefreshScope****多实例刷新

适用场景

Spring Cloud的注解@RefreshScope能够支持配置信息的刷新,对于应用在多实例部署环境下,需要配合Spring Cloud Bus来实现半自动刷新。

操作“三板斧“”

一、 加依赖

主要需要添加Actuator、Config、Bus-amqp三个starter的依赖:

[图片上传失败...(image-4bb68b-1578625631457)]

二、设置配置项

2.1、bootstrap.yml配置

打开Actuator的所有监控端点,并配置bus的更新跟踪为true,方便观察整个刷新过程,具体配置在bootstrap.yml 中:


spring:

 application:

 name: mc-notify-proc

 cloud:

 bus:

 trace:

 enabled: true

 config:

 uri: ${CONFIG_URL:http://config-xxx.xxx.cn}

management:

 security:

 enabled: false

2.2、MQ配置

MQ配置默认支持RabbitMq和Kafa,具体配置参考以往的配置,注意不需配置Bus刷新的队列等信息;

三、设置需要刷新的配置信息

在需要刷新的Bean上添加注解@RefreshScope,这样在刷新时候整个bean重建时候会拉取最新的配置值,以健康检查的controller为示意:

[图片上传失败...(image-734dc3-1578625631457)]

验证刷新

一、****Mq****默认刷新队列

应用启动后会自动创建bus的刷新队列:

[图片上传失败...(image-a2d20b-1578625631457)]

注意,这些队列应用停止便会自动删除。

二、手工刷新

我们对任意一个实例进行刷新,其会通过mq发送消息到其余实例,进而剩余的会自动进行刷新,从而实现半自动刷新全部实例配置信息,具体验证步骤有:

1、IDEA中命令行方式启动三个本地实例

java -jar E:\dev\xxx\target\xxx-1.0.jar --server.port=9001

java -jar E:\dev\xxx\target\xxx-1.0.jar --server.port=9002

java -jar E:\dev\xxx\target\xxx-1.0.jar --server.port=9003

2、码云上修改配置文件中的refreshMin的值

3、调用刷新的端点

curl -v -X POST http:// localhost.xx.xxx.com:9003/actuator/bus-refresh

三个实例的控制台均会打印重新拉取config配置文件的日志

[图片上传失败...(image-4efbe4-1578625631457)]

4、postman中访问三个实例的url,其日志均打印最新的值

[图片上传失败...(image-25ff8c-1578625631457)]

注意事项:

上面的配搭版本是Boot 1.5.15.RELEASE + Spring Cloud Edgware.SR3的,对于Boot2.X版本如(2.1.7.RELEASE+Greenwich.SR2配搭),配置稍有不同:

1、打开所有监控端点


#actuator启用所有的监控端点,*号代表启用所有的监控端点

management:

 endpoints:

 web:

 exposure:

 include: "*"

 endpoint:

 health:

 show-details: ALWAYS

2、访问的URL需要添加actuator

curl -v -X POST http:// localhost:9003/actuator/bus-refresh

上一篇下一篇

猜你喜欢

热点阅读