配置信息手动刷新
很多场景下,需要在运行期间动态调整配置。如果配置发生了修改,微服务要如何实现配置
的刷新呢?
见示例:10-ms-config-client-refresh
添加依赖如下,其中spring-boot-starter-actuator提供了/refresh端点,用于配置的刷新
在Controller上添加注解@RefreshScope,添加这个注解的类会在配置更改时得到特殊的
处理
1、启动项目(启动两个,一个端口8081,一个端口8082),访问地址:
http://localhost:8081/profile,得到结果:dev-1.0,访问地址:
http://localhost:8082/profile,得到结果:dev-1.0
2、修改git仓库里的配置文件ms-config-dev.properties的内容为:
profile=dev1.0change
3、再次访问地址:http://localhost:8081/profile,得到结果还是dev-1.0,说明配置尚
未刷新
4、发送post请求:http://localhost:8081/refresh,返回结果:"profile",表
示profile这个配置属性已被刷新
5、再次访问http://localhost:8081/profile,得到结果:dev-1.0-change,说明属
性已刷新
6、再次访问http://localhost:8082/profile,得到结果:dev-1.0,说明8082的服务
并没有刷新,还需再次手动刷新才能更新配置
配置信息自动刷新
前文讨论了使用/refresh端点手动刷新配置,但如果所有微服务节点的配置都需要手动去刷
新,工作量可想而知。不仅如此,随着系统的不断扩张,会越来越难以维护。因此,实现配
置的自动刷新是很有必要的,Spring Cloud Bus就可以实现配置的自动刷新。
Spring Cloud Bus使用轻量级的消息代理(例如 RabbitMQ、 Kafka等)连接分布式系统
的节点,这样就可以广播传播状态的更改(例如配置的更新)或者其他的管理指令。可将
Spring Cloud Bus想象成一个分布式的Spring Boot Actuator。
见示例:10-ms-config-server-refresh-cloud-bus和10-ms-config-client-refresh-cloud-bus
服务端示例:10-ms-config-server-refresh-cloud-bus
添加依赖
配置文件增加rabbitmq的配置:
客户端示例:10-ms-config-client-refresh-cloud-bus
添加依赖
配置文件增加rabbitmq的配置
运行项目(运行一个config server和两个config client),修改git仓库里的配置文件,然后用
post方式请求地址:http://localhost:8080/bus/refresh,如果返回成功,则config的所有
客户端的配置都会动态刷新。