亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Spring?Cloud中Sentinel的兩種限流模式介紹

 更新時間:2023年05月16日 10:10:39   作者:小威要向諸佬學習呀  
如何使用Sentinel做流量控制呢?這篇文章就來為大家詳細介紹了Spring?Cloud中Sentinel的兩種限流模式,感興趣的小伙伴可以跟隨小編一起學習一下

Sentinel流控模式

Sentinel流量控制主要有以下幾種模式:

直接失敗模式:在達到流量控制閾值后,直接拒絕請求,返回錯誤信息。

關聯(lián)模式:當關聯(lián)的資源達到流量控制閾值時,將觸發(fā)當前資源的流量控制。

Warm Up模式:在系統(tǒng)啟動時,允許一定量的請求通過,防止出現(xiàn)系統(tǒng)冷啟動時大量請求被拒絕的情況。

排隊等待模式:在達到流量控制閾值后,請求將進入隊列等待,直到有資源可用時再處理請求。

熱點規(guī)則:對于一些熱點資源,可以設置特定的流量控制規(guī)則,以防止熱點資源被過多請求占用導致系統(tǒng)崩潰。

說明:由于篇幅原因,本篇文章先介紹前兩種模式,即直接失敗模式和關聯(lián)模式。

直接失敗模式

Sentinel的直接失敗模式是一種流量控制策略,它可以在系統(tǒng)達到預設的流量閾值時直接拒絕請求,而不是將請求放入隊列等待處理。該模式可以避免系統(tǒng)資源過度消耗,并且可以快速響應請求,提高系統(tǒng)的可用性。

具體來說,Sentinel的直接失敗模式可以通過以下步驟實現(xiàn):

1.配置流量閾值:在Sentinel中,可以通過配置規(guī)則來設置系統(tǒng)的流量閾值,例如:每秒最多處理100個請求。

2.監(jiān)控流量:Sentinel會監(jiān)控系統(tǒng)的流量,當流量達到預設的閾值時,Sentinel會觸發(fā)流量控制策略。

3.直接拒絕請求:在直接失敗模式下,當流量達到閾值時,Sentinel會直接拒絕請求,并返回錯誤信息給客戶端,而不是將請求放入隊列等待處理。

4.統(tǒng)計流量:Sentinel會統(tǒng)計系統(tǒng)的流量情況,并根據配置的規(guī)則進行限流,以保證系統(tǒng)的穩(wěn)定性和可用性。

首先,我們需要添加Sentinel依賴:

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

然后,在啟動類上添加@EnableSentinel注解啟用Sentinel:

@SpringBootApplication
@EnableSentinel
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}

接下來,我們定義一個Controller,其中包含一個需要進行流量控制的方法:

@RestController
public class DemoController {
    @GetMapping("/hello")
    @SentinelResource(value = "hello", fallback = "fallback")
    public String hello() {
        return "Hello, World!";
    }
    public String fallback() {
        return "Sorry, the service is busy, please try again later.";
    }
}

在上面的代碼中,我們使用@SentinelResource注解標記了hello()方法,并指定了一個fallback方法。當Sentinel進行流量控制并觸發(fā)熔斷時,會自動調用fallback方法返回一個固定的響應。

接下來,我們需要在Sentinel Dashboard中配置流量控制規(guī)則。打開Dashboard,進入流控規(guī)則頁面,添加一個新的規(guī)則,將控制臺模式設置為直接失敗,并設置閾值和時間窗口等參數。保存規(guī)則后,我們就可以開始測試了。

當流量超過閾值時,Sentinel會拒絕請求并返回一個固定的響應,即fallback方法中定義的響應。這就是Sentinel的直接失敗模式。

關聯(lián)模式

Sentinel的關聯(lián)模式是一種流量控制策略,它可以根據不同的資源之間的關聯(lián)關系來進行流量控制。比如,如果一個接口的訪問頻率過高,可能會導致其所依賴的其他接口也受到影響,此時就可以使用關聯(lián)模式來控制流量。

關聯(lián)模式的實現(xiàn)需要定義資源之間的關聯(lián)關系,并為每個資源設置獨立的流控規(guī)則。在實際使用中,可以通過配置文件或代碼來定義關聯(lián)關系和流控規(guī)則。

以下是一個使用代碼實現(xiàn)Sentinel關聯(lián)模式的示例:

// 定義資源關聯(lián)關系
private static final String RESOURCE_A = "resourceA";
private static final String RESOURCE_B = "resourceB";
private static final String RESOURCE_C = "resourceC";

// 定義流控規(guī)則
private static final FlowRule RULE_A = new FlowRule(RESOURCE_A)
    .setCount(10) // 每秒最多處理10個請求
    .setGrade(RuleConstant.FLOW_GRADE_QPS);
private static final FlowRule RULE_B = new FlowRule(RESOURCE_B)
    .setCount(20) // 每秒最多處理20個請求
    .setGrade(RuleConstant.FLOW_GRADE_QPS);
private static final FlowRule RULE_C = new FlowRule(RESOURCE_C)
    .setCount(30) // 每秒最多處理30個請求
    .setGrade(RuleConstant.FLOW_GRADE_QPS);

// 定義資源關聯(lián)關系
private static final Set<FlowRule> RULES_A = new HashSet<>();
private static final Set<FlowRule> RULES_B = new HashSet<>();
private static final Set<FlowRule> RULES_C = new HashSet<>();
static {
    RULES_A.add(RULE_A);
    RULES_A.add(RULE_B);
    RULES_B.add(RULE_B);
    RULES_C.add(RULE_C);
}

// 注冊流控規(guī)則
FlowRuleManager.loadRules(RULES_A);
FlowRuleManager.loadRules(RULES_B);
FlowRuleManager.loadRules(RULES_C);

// 定義資源關聯(lián)關系
DegradeRule degradeRuleA = new DegradeRule(RESOURCE_A)
    .setGrade(RuleConstant.DEGRADE_GRADE_EXCEPTION_COUNT)
    .setCount(5) // 每秒最多處理5個異常
    .setTimeWindow(10); // 統(tǒng)計時間窗口為10秒
DegradeRule degradeRuleB = new DegradeRule(RESOURCE_B)
    .setGrade(RuleConstant.DEGRADE_GRADE_EXCEPTION_COUNT)
    .setCount(10) // 每秒最多處理10個異常
    .setTimeWindow(10); // 統(tǒng)計時間窗口為10秒
DegradeRule degradeRuleC = new DegradeRule(RESOURCE_C)
    .setGrade(RuleConstant.DEGRADE_GRADE_EXCEPTION_COUNT)
    .setCount(15) // 每秒最多處理15個異常
    .setTimeWindow(10); // 統(tǒng)計時間窗口為10秒

// 定義資源關聯(lián)關系
private static final Set<DegradeRule> DEGRADE_RULES_A = new HashSet<>();
private static final Set<DegradeRule> DEGRADE_RULES_B = new HashSet<>();
private static final Set<DegradeRule> DEGRADE_RULES_C = new HashSet<>();
static {
    DEGRADE_RULES_A.add(degradeRuleA);
    DEGRADE_RULES_A.add(degradeRuleB);
    DEGRADE_RULES_B.add(degradeRuleB);
    DEGRADE_RULES_C.add(degradeRuleC);
}

// 注冊降級規(guī)則
DegradeRuleManager.loadRules(DEGRADE_RULES_A);
DegradeRuleManager.loadRules(DEGRADE_RULES_B);
DegradeRuleManager.loadRules(DEGRADE_RULES_C);

在上面的代碼中,我們定義了三個資源:RESOURCE_A、RESOURCE_B、RESOURCE_C,并為每個資源設置了獨立的流控規(guī)則和降級規(guī)則。同時,我們還定義了資源之間的關聯(lián)關系,即RESOURCE_A和RESOURCE_B關聯(lián),RESOURCE_B和RESOURCE_C關聯(lián)。

通過這種方式,當RESOURCE_A的流量達到限制時,Sentinel會自動觸發(fā)降級操作,從而避免RESOURCE_B和RESOURCE_C受到影響。同樣地,當RESOURCE_B的流量達到限制時,Sentinel會自動觸發(fā)降級操作,從而避免RESOURCE_C受到影響。

到此這篇關于Spring Cloud中Sentinel的兩種限流模式介紹的文章就介紹到這了,更多相關Spring Cloud Sentinel限流模式內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Mybatis-plus foreach拼接字符串查詢無數據返回問題

    Mybatis-plus foreach拼接字符串查詢無數據返回問題

    這篇文章主要介紹了Mybatis-plus foreach拼接字符串查詢無數據返回問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Java雜談之類和對象 封裝 構造方法以及代碼塊詳解

    Java雜談之類和對象 封裝 構造方法以及代碼塊詳解

    在現(xiàn)實世界中,真實存在的東西,比如吉普車,卡丁車,貨車。我們在認識它的時候就會在腦海中將它抽象為一種類別叫做車。 好了,那再計算機世界中,它同樣的也會這樣做
    2021-09-09
  • Java實現(xiàn)CSV格式轉對象

    Java實現(xiàn)CSV格式轉對象

    csv全稱“Comma-Separated Values”,是一種逗號分隔值格式的文件,常用來存儲數據的純文本格式文件。本文將用Java語言實現(xiàn)CSV轉對象,需要的可以參考一下
    2022-06-06
  • spring 整合 mybatis 中數據源的幾種配置方式(總結篇)

    spring 整合 mybatis 中數據源的幾種配置方式(總結篇)

    因為spring 整合mybatis的過程中, 有好幾種整合方式,尤其是數據源那塊,經??吹讲灰粯拥呐渲梅绞?,總感覺有點亂,所以今天有空總結下,感興趣的朋友跟隨腳本之家小編一起學習吧
    2018-05-05
  • SpringBoot設置默認主頁的方法步驟

    SpringBoot設置默認主頁的方法步驟

    這篇文章主要介紹了SpringBoot設置默認主頁的方法步驟,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • SpringBoot配置MyBatis-Plus實現(xiàn)增刪查改

    SpringBoot配置MyBatis-Plus實現(xiàn)增刪查改

    本文主要介紹了SpringBoot配置MyBatis-Plus實現(xiàn)增刪查改,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 深入理解java1.8之supplier

    深入理解java1.8之supplier

    這篇文章主要介紹了深入理解java1.8之supplier,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-12-12
  • Java設計模式之裝飾模式詳解

    Java設計模式之裝飾模式詳解

    這篇文章主要介紹了Java設計模式中的裝飾者模式,裝飾者模式即Decorator?Pattern,裝飾模式是在不必改變原類文件和使用繼承的情況下,動態(tài)地擴展一個對象的功能,裝飾模式又名包裝模式。裝飾器模式以對客戶端透明的方式拓展對象的功能,是繼承關系的一種替代方案
    2022-07-07
  • Java使用設計模式中的代理模式構建項目的實例展示

    Java使用設計模式中的代理模式構建項目的實例展示

    這篇文章主要介紹了Java使用設計模式中的代理模式構建項目的實例展示,代理模式中的代理對象可以在客戶端和目標對象之間起到中介的作用,需要的朋友可以參考下
    2016-05-05
  • Spring項目運行依賴spring-contex解析

    Spring項目運行依賴spring-contex解析

    這篇文章主要介紹了Spring項目運行依賴spring-contex解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-05-05

最新評論