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

SpringBoot整合resilience4j實現(xiàn)接口限流

 更新時間:2024年01月11日 10:14:12   作者:楓葉梨花  
最近在開發(fā)項目的時候,需要用到限流的功能,本文主要介紹了SpringBoot整合resilience4j實現(xiàn)接口限流,具有一定的參考價值,感興趣的可以了解一下

最近在開發(fā)項目的時候,需要用到限流的功能,搜索資料發(fā)現(xiàn),最近resilience4j這個框架還是挺火的,使用了一下還是挺簡單實用的。這篇博客主要是SpringBoot簡單整合resilience4j框架實現(xiàn)接口限流功能。

Resilience4j是一個用于增強容錯能力的Java庫,旨在幫助開發(fā)人員構(gòu)建可靠的分布式系統(tǒng)。它基于斷路器模式和其他容錯模式,提供了一組輕量級的、可組合的容錯模塊,如斷路器、限流器、重試等。其原理如下:

  • 斷路器模式:Resilience4j主要基于斷路器模式,當被保護的服務或資源發(fā)生故障或長時間不可用時,斷路器會打開,從而避免對該服務的連續(xù)請求,減輕了服務的負載,快速失敗,同時能夠提供降級或備用方案。
  • 限流器模式:Resilience4j提供了限流器模式來控制請求的流量。限流器可以被配置為每秒鐘、每分鐘或每小時允許的最大請求數(shù)。當請求數(shù)超出限制時,可以選擇拒絕請求、返回錯誤信息或放入隊列等處理方式。
  • 重試機制:Resilience4j提供了靈活的重試機制,可以在服務調(diào)用失敗時自動重試,減少因臨時故障造成的服務不可用時間。可以配置重試的次數(shù)、重試的間隔等參數(shù),還可以根據(jù)不同的異常類型進行針對性的重試。
  • 異步支持:Resilience4j支持異步操作,可以在異步任務中使用各種容錯模塊??梢允褂肅ompletableFuture、RxJava或Java 8的CompletionStage進行異步編程。
  • 配置靈活:Resilience4j提供了靈活的配置選項,可以根據(jù)具體的需求對每個容錯模塊進行個性化配置??梢酝ㄟ^代碼或者配置文件進行配置,也可以使用注解來標記需要增加容錯功能的方法。

總之,Resilience4j利用斷路器模式、限流器模式、重試機制等容錯模式,結(jié)合靈活的配置選項和異步支持,幫助開發(fā)人員構(gòu)建可靠、彈性的分布式系統(tǒng)。

這里Resilience4j只簡單實現(xiàn)接口限流功能。

版本說明

  • SpringBoot 2.5.15版本
  • JDK8

代碼開發(fā)整合

引入Jar

 <dependency>
      <groupId>io.github.resilience4j</groupId>
      <artifactId>resilience4j-spring-boot2</artifactId>
      <version>1.7.1</version>
  </dependency>

  <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-aop</artifactId>
  </dependency>

引入Jar包特別要注意版本,我的SpringBoot版本是2.5.15,所以我的resilience4j使用的是spring-boot2版本,且resilience4j-spring-boot2必須不能高于1.7.1,不然不兼容。

第二還要注意引入spring-boot-starter-aop,不然resilience4j不能起作用,畢竟它是通過AOP來實現(xiàn)功能的。

application配置

resilience4j: # resilience4j的配置開始,用于增加服務彈性的庫
  ratelimiter: #限流機制的配置,用于防止過多的請求涌入系統(tǒng)
    instances:
      ratelimitApi: # 第一個限流策略實例的名稱
        limit-for-period: 5 # 在一個特定的時間周期內(nèi),允許的最大請求數(shù)量為5
        limit-refresh-period: 1s # 時間周期長度為1s,即每秒會重置請求計數(shù)
        timeout-duration: 100ms # 當請求超過限制時,客戶端應立即收到超時的響應,而不等待處理

控制器實現(xiàn)

@RestController
@Slf4j
public class Resilience4jController {

    @GetMapping("ratelimit")
    @RateLimiter(name="ratelimitApi",fallbackMethod = "fallback")
    public ResponseEntity<String> ratelimitApi(){
        log.info("request ratelimitApi");
        return new ResponseEntity<>("success",HttpStatus.OK);
    }

    public ResponseEntity fallback(Throwable e){
        log.error("fallback exception , {}",e.getMessage());
        return new ResponseEntity<>("您請求過于頻繁,稍后再試",HttpStatus.OK);
    }
}

ratelimitApi是在application.yml中配置的名稱,從這里也可以知道,不同的接口可以使用不同的限流策略,fallbackMethod是指當出現(xiàn)異常的時候調(diào)用的方法,即為降級服務方法。

多線程測試

import org.springframework.web.client.RestTemplate;

public class ThreadTest {
    public static void main(String[] args) {
        for(int i=0;i<5;i++){
            new Thread(()->{
                System.out.println(new RestTemplate().getForObject("http://localhost:8080/ratelimit",String.class));
            }).start();
        }
    }
}

限流設(shè)定是每秒只能處理5個請求,所以我這邊用5個線程的時候,都是正常的

success
success
success
success
success

之后我調(diào)整為6個線程

success
success
success
success
success
您請求過于頻繁,稍后再試

最后一個線程無法正常請求,實現(xiàn)效果。

Resilience4j還有其他強大的功能,等我慢慢研究一下。

到此這篇關(guān)于SpringBoot整合resilience4j實現(xiàn)接口限流的文章就介紹到這了,更多相關(guān)SpringBoot resilience4j接口限流內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java如何多線程批量更新10萬級的數(shù)據(jù)

    java如何多線程批量更新10萬級的數(shù)據(jù)

    在處理大數(shù)據(jù)量的批量更新時,直接使用mybatis的updateBatch可能導致效率低下甚至OOM,通過每次處理5000條數(shù)據(jù)的方式雖然安全但效率低,更優(yōu)的解決方案是使用多線程處理,將數(shù)據(jù)分批并多線程執(zhí)行,有效提高了處理速度并保證了系統(tǒng)穩(wěn)定性
    2024-10-10
  • Java全面分析面向?qū)ο笾^承

    Java全面分析面向?qū)ο笾^承

    繼承就是可以直接使用前輩的屬性和方法。自然界如果沒有繼承,那一切都是處于混沌狀態(tài)。多態(tài)是同一個行為具有多個不同表現(xiàn)形式或形態(tài)的能力。多態(tài)就是同一個接口,使用不同的實例而執(zhí)行不同操作
    2022-04-04
  • Java青蛙跳臺階問題的解決思路與代碼

    Java青蛙跳臺階問題的解決思路與代碼

    這篇文章主要給大家介紹了關(guān)于Java青蛙跳臺階問題的解決思路與代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • springboot?靜態(tài)方法中使用@Autowired注入方式

    springboot?靜態(tài)方法中使用@Autowired注入方式

    這篇文章主要介紹了springboot?靜態(tài)方法中使用@Autowired注入方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • 一文徹底弄懂Java中MultipartFile接口和File類

    一文徹底弄懂Java中MultipartFile接口和File類

    MultipartFile是一個接口,我們可以理解為是Spring?給我們綁定的一個在使用文件上傳等時簡便實現(xiàn)的口子,這篇文章主要給大家介紹了關(guān)于如何通過一文徹底弄懂Java中MultipartFile接口和File類的相關(guān)資料,需要的朋友可以參考下
    2023-11-11
  • SpringBoot中的自動配置原理詳解

    SpringBoot中的自動配置原理詳解

    這篇文章主要介紹了SpringBoot中的自動配置原理詳解,springboot的自動配置類直觀的表現(xiàn)就是通過一系列的注解,使得springboot項目在啟動的時候從配置文件中加載需要自動配置的類,注入容器中,需要的朋友可以參考下
    2024-01-01
  • FastJson對于JSON格式字符串、JSON對象及JavaBean之間的相互轉(zhuǎn)換操作

    FastJson對于JSON格式字符串、JSON對象及JavaBean之間的相互轉(zhuǎn)換操作

    這篇文章主要介紹了FastJson對于JSON格式字符串、JSON對象及JavaBean之間的相互轉(zhuǎn)換,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2017-11-11
  • Mybatis實現(xiàn)SQL存儲流程詳解

    Mybatis實現(xiàn)SQL存儲流程詳解

    MyBatis作為一款優(yōu)秀的持久層框架,它支持自定義SQL、存儲過程以及高級映射。它免除了幾乎所有的JDBC代碼以及設(shè)置參數(shù)和獲取結(jié)果集的工作
    2023-03-03
  • SpringBoot基于MyBatis-Plus實現(xiàn)Lambda Query查詢的示例代碼

    SpringBoot基于MyBatis-Plus實現(xiàn)Lambda Query查詢的示例代碼

    MyBatis-Plus 是 MyBatis 的增強工具,簡化了數(shù)據(jù)庫操作,并提高了開發(fā)效率,它提供了多種查詢方式,包括常規(guī)的 SQL 查詢、Lambda Query 查詢、分頁查詢、條件查詢等,在本篇博客中,我們將詳細講解如何使用 MyBatis-Plus 的各種查詢方式,需要的朋友可以參考下
    2025-01-01
  • Struts2學習教程之Action類如何訪問WEB資源

    Struts2學習教程之Action類如何訪問WEB資源

    這篇文章主要給大家介紹了關(guān)于Struts2學習教程之Action類如何訪問WEB資源的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2018-04-04

最新評論