- Spring Boot 中使用 MongoDB 增删改查
- Spring Boot 中使用 RocketMQ
- Spring Boot 中使用 Java API 调用 lucene
- Spring Boot 中使用 Java API 调用 Elasticsearch
- Spring Boot 中使用 公共配置
- Spring Boot 中使用 LogBack 配置
- Spring Boot 中使用 Dubbo 详解
- Spring Boot 中使用 RabbitMQ
- Spring Boot 中使用 MyBatis 整合 Druid 多数据源
- Spring Boot 中使用 SolrCloud
- Spring Boot 中使用 Kafka
- Spring Boot 中使用 Redis
- Spring Cloud(一)服务的注册与发现(Eureka)
- Spring Cloud(二)Consul 服务治理实现
- Spring Cloud(三)服务提供者 Eureka + 服务消费者(rest + Ribbon)
- Spring Cloud(四)服务提供者 Eureka + 服务消费者 Feign
- Spring Cloud(五)断路器监控 (Hystrix Dashboard)
- Spring Cloud(六)服务网关 zuul 快速入门
- Spring Cloud(七)服务网关 Zuul Filter 使用
- Spring Cloud(八)高可用的分布式配置中心 Spring Cloud Config
- Spring Cloud(九)高可用的分布式配置中心 Spring Cloud Config 集成 Eureka 服务
- Spring Cloud(十)高可用的分布式配置中心 Spring Cloud Config 中使用 Refresh
- Spring Cloud(十一)高可用的分布式配置中心 Spring Cloud Bus 消息总线集成(RabbitMQ)
Spring Cloud(十)高可用的分布式配置中心 Spring Cloud Config 中使用 Refresh
上一篇文章讲了 SpringCloudConfig
集成 Git
仓库,配和 Eureka
注册中心一起使用,但是我们会发现,修改了 Git
仓库的配置后,需要重启服务,才可以得到最新的配置,这一篇我们尝试使用 Refresh
实现主动获取 Config Server
配置服务中心的最新配置
准备工作
把上一篇,示例代码下载,才可以进行一下的操作,下载地址在文章末尾
spring-cloud-eureka-service
spring-cloud-config-server
spring-cloud-eureka-provider-1
spring-cloud-eureka-provider-2
spring-cloud-eureka-provider-3
spring-cloud-feign-consumer
Config Client
修改第九篇文章项目
spring-cloud-eureka-provider-1
spring-cloud-eureka-provider-2
spring-cloud-eureka-provider-3
添加依赖
<!-- actuator 监控 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
安全认证
在 application.properties
添加以下配置.关闭安全认证
#关闭刷新安全认证
management.security.enabled=false
值是 false
的话,除开 health
接口还依赖 endpoints.health.sensitive
的配置外,其他接口都不需要输入用户名和密码了
开启 refresh
在程序的启动类 EurekaProviderApplication
通过 @RefreshScope
开启 SpringCloudConfig 客户端的 refresh
刷新范围,来获取服务端的最新配置, @RefreshScope
要加在声明 @Controller
声明的类上,否则 refres
h 之后 Conroller
拿不到最新的值,会默认调用缓存。
package io.ymq.example.eureka.provider;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RefreshScope
@RestController
@EnableEurekaClient
@SpringBootApplication
public class EurekaProviderApplication {
@Value("${content}")
String content;
@Value("${server.port}")
String port;
@RequestMapping("/")
public String home() {
return "Hello world ,port:" + port+",content="+content;
}
public static void main(String[] args) {
SpringApplication.run(EurekaProviderApplication.class, args);
}
}
测试服务
按照顺序依次启动项目
spring-cloud-eureka-service
spring-cloud-config-server
spring-cloud-eureka-provider-1
spring-cloud-eureka-provider-2
spring-cloud-eureka-provider-3
spring-cloud-feign-consumer
启动该工程后,访问服务注册中心,查看服务是否都已注册成功: http://localhost:8761/
修改 Git 仓库
修改 Git
仓库配置,在 content=hello dev
后面加个 123456
访问服务
命令窗口,通过 curl http://127.0.0.1:9000/hello
访问服务,或者在浏览器访问 http://127.0.0.1:9000/hello
F5 刷新
发现没有得到最新的值
刷新配置
通过 Postman
发送 POST
请求到: http://localhost:8081/refresh , http://localhost:8083/refresh ,我们可以看到以下内容:
访问服务
命令窗口,通过 curl http://127.0.0.1:9000/hello
访问服务,或者在浏览器访问 http://127.0.0.1:9000/hello
F5 刷新
发现:服务 8082 没有刷新到最新配置 因为没有手动触发更新
源码下载
GitHub:https://github.com/souyunku/spring-cloud-examples/tree/master/spring-cloud-config-eureka-refresh
码云:https://gitee.com/souyunku/spring-cloud-examples/tree/master/spring-cloud-config-eureka-refresh
下篇预告
留了一个悬念, Config Client
实现配置的实时更新,我们可以使用 /refresh
接口触发,如果所有配置的更改,都需要手动触发,那岂不是维护成本很高,而使用 Spring Cloud Bus
消息总线实现方案,可以优雅的解决以上问题,下篇文章我们讲 Spring Cloud Bus
的使用,关注下文章末尾公众号,支持下作者,感谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论