SpringCloud Config统一配置中心问题分析解决与客户端动态刷新实现

目录
  • 一、问题分析及解决方案
    • 1、问题分析
    • 2、解决方案
  • 二、手动刷新
    • 1、添加服务监控
    • 2、暴露服务端点
    • 3、刷新业务类controller
    • 4、手动刷新
  • 三、自动刷新
    • 什么是总线
    • 基本原理

一、问题分析及解决方案

1、问题分析

上一章我们讲过远程仓储统一管理配置信息,客户端可以通过统一配置服务中心 config server 服务端获取配置信息。现在我们来做一个改变,并进行分析。

首先启动注册中心、统一配置中心configserver服务端、订单服务。浏览器访问地址:http://localhost:9000/order/getConfig 查看效果。

然后将远程仓储的订单服务dev环境的信息进行改变,在info上增加版本 version=01。

浏览器访问地址:http://localhost:9000/order/getConfig 查看效果

重新启动订单服务,浏览器访问地址http://localhost:9000/order/getConfig 查看效果

我们看到,远端仓储的配置信息改变,如果不重新启动订单服务,则无法刷新远端仓储的配置信息。

2、解决方案

使用动态刷新,动态刷新分为两种形式,一种是手动刷新,一种是自动刷新。

二、手动刷新

1、添加服务监控

在pom文件中添加服务监控依赖spring-boot-starter-actuator ,修改pom如下:

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <parent>
        <artifactId>springcloudbase</artifactId>
        <groupId>com.hwadee.springcloud2022</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.hwadee.springcloud</groupId>
    <artifactId>orderServer9000</artifactId>
    <dependencies>
        <!-- 统一配置服务中心客户端依赖 -->
        <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>
        <!--web依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- 管理公共api -->
        <dependency>
            <groupId>com.hwadee.springcloud</groupId>
            <artifactId>springcloud-api</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <!--Eureka Client-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <!-- 方便创建类的gettter setter -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>
</project>

2、暴露服务端点

让客户端能感受到配置的更新。

暴露服务端点,让客户端能感受到配置的更新,在bootstrap配置文件中修改如下:

spring:
  cloud:
    config:
      label: master # 指定分支
      name: order # 指定应用名称
      profile: dev # 指定激活环境
      uri: http://localhost:7009 #硬编码 指定访问 config server 远程仓储的地址的ip和端口
      
#暴露服务端点,让客户端能感受到配置的更新
management:
  endpoints:
    web:
      exposure:
        include: "*"

3、刷新业务类controller

刷新业务类controller,在订单服务的controller上使用注解 @RefreshScope ,使用后具备刷新能力,@Refreshscope用来在不需要重启徽服务情况下,将当前scope域中信息刷新为最新配置信息,订单服务的controller代码修改如下:

import com.hwadee.springcloud.entity.Product;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/order")
@RefreshScope
public class OrderController {
    @Value("${env}")
    private String env;
    @Value("${port}")
    private String port;
    @Value("${info}")
    private String info;
    @RequestMapping(value = "/getConfig")
    public Product getConfigInfo() {
        Product product = new Product();
        product.setName(env +"环境 端口:"+ port +" "+ info);
        return product;
    }
}

4、手动刷新

在cmd窗口进行手动刷新,必须是post请求,且地址固定:curl -X POST "http://localhost:9000/actuator/refresh"。

再次访问:http://localhost:9000/order/getConfig

三、自动刷新

问题:每个微服务如果需要加载最新配置信息,必须向每个微服务手动发送post请求,才能加载最新配置信息。因为微服务一般是集群方式,所以此种方式不方便,我们可以使用一个组件Bus总线,实现自动刷新。Bus总线支持RubbitMQ和kafak消息代理。

什么是总线

在微服务架构的系统中,通常会使用轻量级的消息代理来构建一个共用的消息主题,并让系统中所有微服务实例都连接上来。由于该主题中产生的消息会被所有实例监听和消费,所以称它为消息总线。在总线上的各个实例,都可以方便地广播一些需要让其他连接在该主题上的实例都知道的消息。

基本原理

ConfigClient实例都监听MQ中同一个topic(默认是springCloudBus)。当一个服务刷新数据的时候,它会把这个信息放入到Topic中,这样其它监听同一Topic的服务就能得到通知,然后去更新自身的配置。

到此这篇关于SpringCloud Config统一配置中心问题分析解决与客户端动态刷新实现的文章就介绍到这了,更多相关SpringCloud Config配置中心内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • SpringCloud Config使用配置方法

    Config 介绍 Spring Cloud Config项目是一个解决分布式系统的配置管理方案.它包含了Client和Server两个部分,server提供配置文件的存储.以接口的形式将配置文件的内容提供出去,client通过接口获取数据.并依据此数据初始化自己的应用. 构建配置中心 配置中心服务端配置 新建一个配置中心模块,且注册到eureka中,在其他服务的基础上增加如下配置 pom文件增加配置服务端设置 <!--config配置中⼼服务端--> <dependency> &

  • SpringCloud Config配置中心原理以及环境切换方式

    目录 Config配置中心原理以及环境切换 原理介绍 一.ConfigServer引入依赖 二.Configclient 注意 简易配置中心原理及流程说明 原理 简易搭建例子 Config配置中心原理以及环境切换 springCloud config项目,用来为分布式的微服务系统中提供集成式外部配置支持,分为客户端和服务端 spring官方如下介绍: Spring Cloud Config provides server and client-side support for externali

  • Springcloud Config配置中心使用与相关介绍

    目录 Springcloud Config 什么是springcloud Config config服务端的配置使用 config客户端的相关问题 config客户端的配置使用 动态刷新问题 config客户端的遗留问题 Springcloud Config 什么是springcloud Config   简单来说,Spring Cloud Config就是我们通常意义上的配置中心,也就是微服务项目中,每一个微服务都需要配置相应的配置,如果不同服务的配置文件有相同的配置,如果这些相同配置需要修改

  • SpringCloud之动态刷新、重试、服务化的实现

    假如说我们的配置从远程仓库获取失败了,那么该如何去处理呢?这里就要使用到 Spring Cloud Config 为我们提的动态刷新重试功能了,Spring Cloud Config 是服务化的.那么什么是服务化呢? 服务化 我们在前面的配置中,当 Config Client 需要从 Config Server 上获取配置数据时,我们都是直接在 Config Client 的配置文件中写上 Config Server 的地址,类似下面这种架构: 这种写法相当于将 Config Client 和

  • SpringCloud高可用配置中心Config详解

    目录 前言 源码 环境 开发工具 正文 commons 工程 commons 工程 - POM 文件 commons 工程 - 项目结构 配置文件 service 工程 registry-service(注册中心) registry-service - POM 文件 registry-service - application.yml配置文件 registry-service - 启动类 registry-server - 启动项目 server(获取远程的配置信息) server- POM 文

  • SpringCloud使用集中配置组件Config规避信息泄露

    目录 Spring Cloud Config简介 Config实战 1.创建项目config服务端 2.创建配置文件 3.新建启动类 4.创建配置中心客户端 5.验证 总结 Spring Cloud Config简介 在分布式系统中,由于应用被拆分成数量巨多的小服务,另外应用也部署在不同的环境之中,如dev.int.uat.prod等,各个环境的配置不尽相同,为了方便配置文件统一管理,所以需要分布式配置中心组件. 配置文件统一管理之后,各个环境只能获取对应环境的配置信息,开发人员也只能获取到开发

  • SpringCloud Config统一配置中心问题分析解决与客户端动态刷新实现

    目录 一.问题分析及解决方案 1.问题分析 2.解决方案 二.手动刷新 1.添加服务监控 2.暴露服务端点 3.刷新业务类controller 4.手动刷新 三.自动刷新 什么是总线 基本原理 一.问题分析及解决方案 1.问题分析 上一章我们讲过远程仓储统一管理配置信息,客户端可以通过统一配置服务中心 config server 服务端获取配置信息.现在我们来做一个改变,并进行分析. 首先启动注册中心.统一配置中心configserver服务端.订单服务.浏览器访问地址:http://local

  • SpringCloud之分布式配置中心Spring Cloud Config高可用配置实例代码

    一.简介 当要将配置中心部署到生产环境中时,与服务注册中心一样,我们也希望它是一个高可用的应用.Spring Cloud Config实现服务端的高可用非常简单,主要有以下两种方式. 传统模式:不需要为这些服务端做任何额外的配置,只需要遵守一个配置规则,将所有的Config Server都指向同一个Git仓库,这样所有的配置内容就通过统一的共享文件系统来维护.而客户端在指定Config Server位置时,只需要配置Config Server上层的负载均衡设备地址即可, 就如下图所示的结构. 服

  • spring cloud config分布式配置中心的高可用问题

    在前面的文章中,我们实现了配置文件统一管理的功能,但是我们可以发现,我们仅仅只用了一个server,如果当这个server挂掉的话,整个配置中心就会不可用,下面,我们就来解决配置中心的高可用问题. 下面我们通过整合Eureka来实现配置中心的高可用,因为作为架构内的配置管理,本身其实也是可以看作架构中的一个微服务,我们可以把config server也注册为服务,这样所有客户端就能以服务的方式进行访问.通过这种方法,只需要启动多个指向同一Gitlab仓库位置的config server端就能实现

  • SpringCloud Nacos作为配置中心超详细讲解

    目录 前言 Nacos配置模型 配置介绍 实际演练 前言 在单体架构的时候我们可以将配置写在配置文件中,但有⼀个缺点就是每次修改配置都需要重启服务才能生效. 当应用程序实例比较少的时候还可以维护.如果转向微服务架构有成百上千个实例,每修改⼀次配置要将全部实例重启,不仅增加了系统的不稳定性,也提高了维护的成本. 那么如何能够做到服务不重启就可以修改配置?所有就产生了四个基础诉求: 需要支持动态修改配置 需要动态变更有多实时 变更快了之后如何管控控制变更风险,如灰度.回滚等 敏感配置如何做安全配置

  • springCloud config本地配置操作

    一般很多项目不是在springcloud的环境中使用的,但是需要用到分布式配置中心来管理一些外部或者项目的配置,这个时候我们可以使用springcloud-config的本地配置. 配置config-server服务端 使用start.spring.io创建一个springcloud工程,pom中引入: <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-c

  • SpringCloud Gateway 路由配置定位原理分析

    环境:springcloud Hoxton.SR11 本节主要了解系统中的谓词与配置的路由信息是如何进行初始化关联生成路由对象的.每个谓词工厂中的Config对象又是如何被解析配置的. 所有的谓词工厂中的Config中属性值是如何被配置的. 在SpringCloud Gateway中的所有谓词工厂如下: 命名规则:XxxRoutePredicateFactory.所有的这些谓词工厂都是如下的继承关系 public class MethodRoutePredicateFactory extends

  • Spring Cloud Config分布式配置中心使用介绍详解

    目录 1.分布式配置中心应用场景 2.Spring Cloud Config 2.1.Config简介 2.2.Config分布式配置应用 2.3.构建Config Server统一配置中心 2.4.构建Client客户端(在已有简历微服务基础上) 1.分布式配置中心应用场景 往往,我们使用配置文件管理⼀些配置信息,比如application.yml 单体应用架构:配置信息的管理.维护并不会显得特别麻烦,手动操作就可以,因为就一个工程: 微服务架构:因为我们的分布式集群环境中可能有很多个微服务,

  • 详解SpringCloud mysql实现配置中心

    mysql实现配置中心 本公司配置数据的管理是通过mysql进行配置管理,因为已经搭建好了,所以自己动手重新搭建一遍,熟悉整个流程.有关项目源码后期会补上github地址 微服务要实现集中管理微服务配置. 不同环境不同配置 . 运行期间也可动态调整 . 配置修改后可以自动更新的需求 ,Spring Cloud Config同时满足了以上要求. 一.项目搭建 本次主要用三个微服务 (1)Eureka-server: 7001 注册中心 (2)config-server : 5001 配置中心 (3

随机推荐