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
网友评论