欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringCloud Config統(tǒng)一配置中心問題分析解決與客戶端動(dòng)態(tài)刷新實(shí)現(xiàn)

 更新時(shí)間:2022年10月24日 15:34:07   作者:愛吃面的貓  
springcloud config是一個(gè)解決分布式系統(tǒng)的配置管理方案。它包含了 client和server兩個(gè)部分,server端提供配置文件的存儲(chǔ)、以接口的形式將配置文件的內(nèi)容提供出去,client端通過接口獲取數(shù)據(jù)、并依據(jù)此數(shù)據(jù)初始化自己的應(yīng)用

一、問題分析及解決方案

1、問題分析

上一章我們講過遠(yuǎn)程倉(cāng)儲(chǔ)統(tǒng)一管理配置信息,客戶端可以通過統(tǒng)一配置服務(wù)中心 config server 服務(wù)端獲取配置信息?,F(xiàn)在我們來做一個(gè)改變,并進(jìn)行分析。

首先啟動(dòng)注冊(cè)中心、統(tǒng)一配置中心configserver服務(wù)端、訂單服務(wù)。瀏覽器訪問地址:http://localhost:9000/order/getConfig 查看效果。

然后將遠(yuǎn)程倉(cāng)儲(chǔ)的訂單服務(wù)dev環(huán)境的信息進(jìn)行改變,在info上增加版本 version=01。

瀏覽器訪問地址:http://localhost:9000/order/getConfig 查看效果

重新啟動(dòng)訂單服務(wù),瀏覽器訪問地址http://localhost:9000/order/getConfig 查看效果

我們看到,遠(yuǎn)端倉(cāng)儲(chǔ)的配置信息改變,如果不重新啟動(dòng)訂單服務(wù),則無法刷新遠(yuǎn)端倉(cāng)儲(chǔ)的配置信息。

2、解決方案

使用動(dòng)態(tài)刷新,動(dòng)態(tài)刷新分為兩種形式,一種是手動(dòng)刷新,一種是自動(dòng)刷新。

二、手動(dòng)刷新

1、添加服務(wù)監(jiān)控

在pom文件中添加服務(wù)監(jiān)控依賴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>
        <!-- 統(tǒng)一配置服務(wù)中心客戶端依賴 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-config</artifactId>
        </dependency>
        <!--動(dòng)態(tài)健康監(jiān)控 可以用于動(dòng)態(tài)感知配置變化-->
        <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>
        <!-- 方便創(chuàng)建類的gettter setter -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>
</project>

2、暴露服務(wù)端點(diǎn)

讓客戶端能感受到配置的更新。

暴露服務(wù)端點(diǎn),讓客戶端能感受到配置的更新,在bootstrap配置文件中修改如下:

spring:
  cloud:
    config:
      label: master # 指定分支
      name: order # 指定應(yīng)用名稱
      profile: dev # 指定激活環(huán)境
      uri: http://localhost:7009 #硬編碼 指定訪問 config server 遠(yuǎn)程倉(cāng)儲(chǔ)的地址的ip和端口
      
#暴露服務(wù)端點(diǎn),讓客戶端能感受到配置的更新
management:
  endpoints:
    web:
      exposure:
        include: "*"

3、刷新業(yè)務(wù)類controller

刷新業(yè)務(wù)類controller,在訂單服務(wù)的controller上使用注解 @RefreshScope ,使用后具備刷新能力,@Refreshscope用來在不需要重啟徽服務(wù)情況下,將當(dāng)前scope域中信息刷新為最新配置信息,訂單服務(wù)的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 +"環(huán)境 端口:"+ port +" "+ info);
        return product;
    }
}

4、手動(dòng)刷新

在cmd窗口進(jìn)行手動(dòng)刷新,必須是post請(qǐng)求,且地址固定:curl -X POST "http://localhost:9000/actuator/refresh"。

再次訪問:http://localhost:9000/order/getConfig

三、自動(dòng)刷新

問題:每個(gè)微服務(wù)如果需要加載最新配置信息,必須向每個(gè)微服務(wù)手動(dòng)發(fā)送post請(qǐng)求,才能加載最新配置信息。因?yàn)槲⒎?wù)一般是集群方式,所以此種方式不方便,我們可以使用一個(gè)組件Bus總線,實(shí)現(xiàn)自動(dòng)刷新。Bus總線支持RubbitMQ和kafak消息代理。

什么是總線

在微服務(wù)架構(gòu)的系統(tǒng)中,通常會(huì)使用輕量級(jí)的消息代理來構(gòu)建一個(gè)共用的消息主題,并讓系統(tǒng)中所有微服務(wù)實(shí)例都連接上來。由于該主題中產(chǎn)生的消息會(huì)被所有實(shí)例監(jiān)聽和消費(fèi),所以稱它為消息總線。在總線上的各個(gè)實(shí)例,都可以方便地廣播一些需要讓其他連接在該主題上的實(shí)例都知道的消息。

基本原理

ConfigClient實(shí)例都監(jiān)聽MQ中同一個(gè)topic(默認(rèn)是springCloudBus)。當(dāng)一個(gè)服務(wù)刷新數(shù)據(jù)的時(shí)候,它會(huì)把這個(gè)信息放入到Topic中,這樣其它監(jiān)聽同一Topic的服務(wù)就能得到通知,然后去更新自身的配置。

到此這篇關(guān)于SpringCloud Config統(tǒng)一配置中心問題分析解決與客戶端動(dòng)態(tài)刷新實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)SpringCloud Config配置中心內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談Spring中的循環(huán)依賴問題與解決方案

    淺談Spring中的循環(huán)依賴問題與解決方案

    這篇文章主要介紹了淺談Spring中的循環(huán)依賴問題與解決方案,循環(huán)依賴就是兩個(gè)或則兩個(gè)以上的bean互相持有對(duì)方,最終形成閉環(huán),比如A依賴于B,B依賴于C,C又依賴于A,需要的朋友可以參考下
    2023-12-12
  • 基于Springboot+Mybatis對(duì)數(shù)據(jù)訪問層進(jìn)行單元測(cè)試的方式分享

    基于Springboot+Mybatis對(duì)數(shù)據(jù)訪問層進(jìn)行單元測(cè)試的方式分享

    本文將介紹一種快高效、可復(fù)用的解決測(cè)試方案——對(duì)數(shù)據(jù)訪問層做單元測(cè)試,文章通過代碼示例介紹的非常詳細(xì),具有一定的參考價(jià)值,需要的朋友可以參考下
    2023-07-07
  • java判斷空的實(shí)現(xiàn)方法

    java判斷空的實(shí)現(xiàn)方法

    字符串判斷空有兩種情況:一個(gè)是分配了內(nèi)存但值為空(""),另一個(gè)是未分配內(nèi)存(null),判斷方法包括isEmpty()和isBlank(),其中isBlank()還可以過濾空格、制表符,對(duì)于列表,判斷不為空可以使用list!=null && !list.isEmpty()或list!=null && list.size()>0
    2024-09-09
  • Java Flink窗口觸發(fā)器Trigger的用法詳解

    Java Flink窗口觸發(fā)器Trigger的用法詳解

    Trigger(窗口觸發(fā)器)決定了窗口(由 WindowAssigner 產(chǎn)生)什么時(shí)候調(diào)用窗口處理函數(shù)??梢愿鶕?jù)指定的時(shí)間或數(shù)據(jù)元素條件來決定什么時(shí)候觸發(fā)。本文將詳細(xì)講講其用法,需要的可以參考一下
    2022-07-07
  • eclipse導(dǎo)入IntelliJ IDEA的maven項(xiàng)目的示例

    eclipse導(dǎo)入IntelliJ IDEA的maven項(xiàng)目的示例

    本篇文章主要介紹了eclipse導(dǎo)入IntelliJ IDEA的maven項(xiàng)目的示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-12-12
  • springboot實(shí)現(xiàn)異步調(diào)用@Async的示例

    springboot實(shí)現(xiàn)異步調(diào)用@Async的示例

    這篇文章主要介紹了springboot實(shí)現(xiàn)異步調(diào)用@Async的示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-12-12
  • java URL亂碼的解決辦法

    java URL亂碼的解決辦法

    這篇文章介紹了java URL亂碼的解決辦法,有需要的朋友可以參考一下
    2013-09-09
  • Java Lambda List轉(zhuǎn)Map代碼實(shí)例

    Java Lambda List轉(zhuǎn)Map代碼實(shí)例

    這篇文章主要介紹了Java Lambda List轉(zhuǎn)Map代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • 什么是springMVC?視圖和視圖解析器實(shí)例代碼

    什么是springMVC?視圖和視圖解析器實(shí)例代碼

    在 springMVC 中的目標(biāo)方法最終返回都是一個(gè)視圖,返回的視圖都會(huì)由一個(gè)視圖解析器來處理,這篇文章主要介紹了什么是springMVC?視圖和視圖解析器,需要的朋友可以參考下
    2023-09-09
  • 關(guān)于SpringCloud整合RabbitMQ的實(shí)例

    關(guān)于SpringCloud整合RabbitMQ的實(shí)例

    這篇文章主要介紹了關(guān)于SpringCloud整合RabbitMQ的實(shí)例,消息隊(duì)列是指利用高效可靠的消息傳遞機(jī)制進(jìn)行與平臺(tái)無關(guān)的數(shù)據(jù)交流,并基于數(shù)據(jù)通信來進(jìn)行分布式系統(tǒng)的集成,是在消息的傳輸過程中保存消息的容器,需要的朋友可以參考下
    2023-07-07

最新評(píng)論