SpringCloud-分布式配置中心【动态刷新】

简介: 本文我们来讨论下如何在配置中心的信息被改变的情况下,及时刷新客户端的数据的情况。


案例代码:https://github.com/q279583842q/springcloud-e-book

 本文我们来讨论下如何在配置中心的信息被改变的情况下,及时刷新客户端的数据的情况。

一、配置中心原理

1.原理结构图

image.png

2.原理描述

 通过上图我们能看到配置服务其实是从本地的Git仓库中获取的信息,Git本地库通过pull命令同步远程库中的内容。当配置中心客户端重新启动的时候会显示的执行pull命令来拉取最新的配置信息,这个我们可以通过如下案例来得到演示.

2.1 关闭配置中心客户端

 关闭配置中心客户端服务。

2.2 显示修改git中内容

 直接在码云仓库中修改内容

image.png

2.3 启动客户端服务

 启动客户端,观察控制台信息,访问获取配置信息

image.png

获取的是修改后的数据,说明启动客户端服务可以同步刷新配置信息。但是总归要重启服务,不是太方便,所以我们来考虑不重启服务来同步配置信息

二、动态刷新配置信息

 此处我们可以使用actuator监控服务中的refuse命令来刷新服务。所以我们需要创建一个新的包含Actuator服务的配置中心客户端。

1.创建项目

image.png

2.pom文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.13.RELEASE</version>
  </parent>
  <groupId>com.bobo</groupId>
  <artifactId>config-client-refresh</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>Dalston.SR5</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
    </dependencies>
  </dependencyManagement>
  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-eureka</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>
</project>

3.修改配置

spring.application.name=config-client-refresh
server.port=9051
#设置服务注册中心地址,指向另一个注册中心
eureka.client.serviceUrl.defaultZone=http://dpb:123456@eureka1:8761/eureka/,http://dpb:123456@eureka2:8761/eureka/
#默认 false,这里设置 true,表示开启读取配置中心的配置
spring.cloud.config
.discovery.enabled=true
#对应 eureka 中的配置中心 serviceId,默认是 configserver
spring.cloud.config.discovery.serviceId=config-server
#指定环境
spring.cloud.config.profile=dev
#git 标签
spring.cloud.config.label=master
#springboot 默认开启了权限拦截 会导致 /refresh 出现 401,拒绝访问
management.security.enabled=false

同时我们需要在码云中创建一个新的配置文件

image.png

image.png

4.刷新请求

 因为refresh命令只支持post方式提交,所以我们不能直接在浏览器中访问。

image.png

现在获取信息

image.png

5.修改bean对象的作用域

 在spring中bean对象默认是单例模式,所以即便项目被刷新了,成员变量的值也不会改变,所以我们需要改变了bean对象的作用域

@RestController
@RefreshScope //刷新作用域
public class ShowController {
  @Value("${e-book}")
  private String msg;
  @RequestMapping("/showMsg")
  public String showMsg(){
    return msg;
  }
}

6.通过RestTemplate发送post请求

  /**
   * 通过RestTemplate发送post请求来刷新
   * @param args
   */
  public static void main(String[] args) {
    RestTemplate template = new RestTemplate();
    String url = "http://localhost:9051/refresh";
    template.postForLocation(url, null);
    System.out.println("----");
  }

7.测试

 在服务都在运行的情况下,修改码云中的配置数据

image.png

访问数据为

image.png

然后执行RestTemplate的post方式访问

image.png

如此实现了在没有重新启动服务的情况下动态同步的配置信息~


相关文章
|
15天前
|
消息中间件 负载均衡 Java
如何设计一个分布式配置中心?
这篇文章介绍了分布式配置中心的概念、实现原理及其在实际应用中的重要性。首先通过一个面试场景引出配置中心的设计问题,接着详细解释了为什么需要分布式配置中心,尤其是在分布式系统中统一管理配置文件的必要性。文章重点分析了Apollo这一开源配置管理中心的工作原理,包括其基础模型、架构模块以及配置发布后实时生效的设计。此外,还介绍了客户端与服务端之间的交互机制,如长轮询(Http Long Polling)和定时拉取配置的fallback机制。最后,结合实际工作经验,分享了配置中心在解决多台服务器配置同步问题上的优势,帮助读者更好地理解其应用场景和价值。
56 18
|
6月前
|
NoSQL Java Nacos
SpringCloud集成Seata并使用Nacos做注册中心与配置中心
SpringCloud集成Seata并使用Nacos做注册中心与配置中心
226 3
|
2月前
|
数据库
如何在Seata框架中配置分布式事务的隔离级别?
总的来说,配置分布式事务的隔离级别是实现分布式事务管理的重要环节之一,需要认真对待和仔细调整,以满足业务的需求和性能要求。你还可以进一步深入研究和实践 Seata 框架的配置和使用,以更好地应对各种分布式事务场景的挑战。
61 6
|
6月前
|
Java 开发工具 git
实现基于Spring Cloud的配置中心
实现基于Spring Cloud的配置中心
|
3月前
|
分布式计算 Hadoop
Hadoop-27 ZooKeeper集群 集群配置启动 3台云服务器 myid集群 zoo.cfg多节点配置 分布式协调框架 Leader Follower Observer
Hadoop-27 ZooKeeper集群 集群配置启动 3台云服务器 myid集群 zoo.cfg多节点配置 分布式协调框架 Leader Follower Observer
71 1
|
4月前
|
负载均衡 Java Nacos
SpringCloud基础2——Nacos配置、Feign、Gateway
nacos配置管理、Feign远程调用、Gateway服务网关
SpringCloud基础2——Nacos配置、Feign、Gateway
|
3月前
|
存储 SQL 消息中间件
Hadoop-26 ZooKeeper集群 3台云服务器 基础概念简介与环境的配置使用 架构组成 分布式协调框架 Leader Follower Observer
Hadoop-26 ZooKeeper集群 3台云服务器 基础概念简介与环境的配置使用 架构组成 分布式协调框架 Leader Follower Observer
64 0
|
3月前
|
负载均衡 Java API
【Spring Cloud生态】Spring Cloud Gateway基本配置
【Spring Cloud生态】Spring Cloud Gateway基本配置
72 0
|
5月前
|
Java 微服务 Spring
Spring Cloud全解析:配置中心之解决configserver单点问题
但是如果该configserver挂掉了,那就无法获取最新的配置了,微服务就出现了configserver的单点问题,那么如何避免configserver单点呢?
|
5月前
|
运维 Java Nacos
Spring Cloud应用框架:Nacos作为服务注册中心和配置中心
Spring Cloud应用框架:Nacos作为服务注册中心和配置中心

热门文章

最新文章