【Spring Cloud】刷新config配置文件信息的实现
【学习背景】
在前面一篇博客中,搭建了配置中心的demo,实现各服务配置文件的统一管理。但其实,存在这样一个问题:默认情况下并不能及时的获取实时变更的配置文件信息,而需要重启服务。所以,本篇博客主要解决上述问题,实现配置文件的修改,可以不重启服务,获取到最新的配置文件信息。
【学习内容】
1. 实现方法
对于Spring Cloud分布式配置中心,可以采用手动刷新或自动刷新。
2. 实现步骤
首先,说一下,如何做到手动刷新?
**手动刷新的实现,也就是需要人工调用接口,调用客户端/actuator/refresh接口,获取最新的配置文件信息。**
客户端bootstrap.properties配置文件添加访问权限
表示包含所有端点的信息,默认情况下,只是打开了info、health的端点
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always客户端Controller增加注解@RefreshScope
@RestController
@RefreshScope
public class ConfigClientController {@Value("${env}") // git配置文件里的key
String configEnv;
@RequestMapping("/getConfigInfo")
public String getConfigInfo(){
return "获取环境配置:" + configEnv;
}
}
配置文件变更后,手动调用客户端刷新接口,http://localhost:9091/actuator/refresh
在此访问接口,便可以获取到最新的配置文件信息。
这种方法局限在于需要各个服务人工调用接口。而自动刷新的方法,便打破了这样的局限。
**自动刷新的实现,采用的是Spring Cloud Config与Spring 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
demo已更新到github上:[https://github.com/huzhiting/spring-cloud-config.git][https_github.com_huzhiting_spring-cloud-config.git]
【学习总结】
两种方式的实现,各有利弊。手动刷新虽然需要人工调用,比较麻烦,但性能上是没有什么影响的;而自动刷新,虽然不需要进行手动调用接口,但会将所有服务的配置都刷新,所以性能较差。
还没有评论,来说两句吧...