返回介绍

Spring Cloud(十)高可用的分布式配置中心 Spring Cloud Config 中使用 Refresh

发布于 2025-02-18 23:57:58 字数 4996 浏览 0 评论 0 收藏 0

上一篇文章讲了 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

修改 Git 仓库

访问服务

命令窗口,通过 curl http://127.0.0.1:9000/hello 访问服务,或者在浏览器访问 http://127.0.0.1:9000/hello F5 刷新

发现没有得到最新的值

访问服务

刷新配置

通过 Postman 发送 POST 请求到: http://localhost:8081/refreshhttp://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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文