走进Spring Cloud之十 高可用配置中心动态刷新(Greenwich版本)
走进Spring Cloud之十 高可用配置中心动态刷新(Greenwich版本)
动态刷新
前一篇章,我们演示了SpringCloud Config配置中心的远程配置加载和高可用,但是在实际开发中唯一不变的是配置在一直变化,同时我们需要我们的客户端能够时时与配置中心变化的配置保持一致。
这里我们一次启动我们的eureka-server注册中心/配置服务端config-server/配置客户端config-client
访问 http://localhost:8888/master/springcloud-config-pro.yml 测试config-server加载配置。
访问 http://localhost:8889/writer 测试config-client的配置读取。
这里需求出现改变,我们需要修改我们的配置信息
#springcloud-config-pro.yml writer: jason(silent silent silent)
提交到我们的git仓库
再次访问 http://localhost:8888/master/springcloud-config-pro.yml 测试config-server加载配置。
很明显我们的server能够自动拿到最新的配置。
再次访问 http://localhost:8889/writer 测试config-client的配置读取。
很明显我们的配置信息不会更新。(这里是因为client在启动的时候就从配置中心拿到了配置信息并且保存在了本地)
很明显,这不是我们想要的。虽然我们可以重新启动client来加载我们的最新配置,当然这也是最不可取的。
refresh
上面的问题,我们可以通过
spring-boot-starter-actuator来解决,
spring-boot-starter-actuator是一套监控的功能,可以监控程序在运行时状态,其中就包括
/refresh的功能。
接下来,我们将对config-client对应作出修改来达到我们的目标。
pom.xml
在pom.xml添加
spring-boot-starter-actuator依赖
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
application.yml
#关闭安全认证 management: security: enabled: false #refresh接入点显式暴露出来 endpoints: web: exposure: include: refresh,health,info
开启更新机制
我们可以给需要加载变量的
bean上面加载
@RefreshScope注解,在客户端执行
/refresh的时候就会更新此
bean下面的变量值。
例如 :
ConfigClientController.java
@RestController @RefreshScope // 使用该注解的类,会在接到SpringCloud配置中心配置刷新的时候,自动将新的配置更新到该类对应的字段中。 public class ConfigClientController { @Value("${writer}") String writer; @RequestMapping(value = "/writer") public String writer(){ return writer; } }
启动测试
再次更新git仓库的配置
再次访问 http://localhost:8889/writer 测试config-client的配置读取。
很明显还是上一次的配置,那么我们应该怎么通知config-client进行配置更新呢?
#curl -X POST http://localhost:8889/actuator/refresh #["config.client.version","writer"]
再次访问 http://localhost:8889/writer 测试config-client的配置读取。
Webhooks
Webhooks 允许在Github上的某些事件(例如Push)发生时通知外部服务。当指定的事件发生时,GitHub将向您提供的每个URL发送一个POST请求。了解更多请访问 Webhooks Guide.如果我们设置了一个监测push事件的Webhook,那么每当你的这个项目有了任何提交,这个Webhook都会被触发,这时Github就会发送一个HTTP POST请求到你配置好的地址。
例如:如下案例,我们就可以用于自动通知配置更新。
阅读更多
- 走进Spring Cloud之十一 SpringCloud bus 消息总线刷新配置(Greenwich版本)
- 白话SpringCloud | 第八章:分布式配置中心的服务化及动态刷新
- SpringCloud教程 | 第七篇: 高可用的分布式配置中心(Spring Cloud Config)(Finchley版本)
- springcloud实战之14动态刷新分布式配置中心属性配置(config)
- 第七篇: 高可用的分布式配置中心(Spring Cloud Config)
- Spring Cloud(九)高可用的分布式配置中心 Spring Cloud Config 集成 Eureka 服务
- springcloud学习笔记(十一) 高可用的分布式配置中心(Spring Cloud Config)
- 史上最简单的SpringCloud教程 | 第七篇: 高可用的分布式配置中心(Spring Cloud Config)
- springcloud(八):配置中心服务化和高可用
- spring cloud bus与spring cloud config整合实现应用配置动态刷新
- 第七篇: 高可用的分布式配置中心(Spring Cloud Config)
- springcloud(八):配置中心服务化和高可用
- 史上最简单的SpringCloud教程 | 第七篇: 高可用的分布式配置中心(Spring Cloud Config)
- SpringCloud教程 | 第七篇: 高可用的分布式配置中心(Spring Cloud Config)
- springboot 2.0.0.RELEASE +spring cloud Finchley.M7 +springcloud bus+kafka实现配置动态刷新
- SpringCloud Config-----4、动态刷新配置
- SpringCloud之高可用的分布式配置中心(Spring Cloud Config)(七)
- Spring Cloud(十)高可用的分布式配置中心 Spring Cloud Config 中使用 Refresh
- 第七篇: 高可用的分布式配置中心(Spring Cloud Config)