精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

解鎖 Spring Boot:四種重試機制方案全攻略

開發 架構
在分布式系統和微服務架構盛行的當下,服務調用失敗的情況時有發生,網絡波動、服務過載或臨時故障等因素都可能導致調用失敗。為提升系統可用性,重試機制成為處理臨時性故障的有效手段。

前言

在分布式系統和微服務架構盛行的當下,服務調用失敗的情況時有發生,網絡波動、服務過載或臨時故障等因素都可能導致調用失敗。為提升系統可用性,重試機制成為處理臨時性故障的有效手段。

本文將探討Spring Boot中4種重試機制的實現方案,助力開發者根據項目需求精準選型。

Guava Retrying

基本原理

Guava Retrying 是 Google Guava 庫提供的重試機制,通過構建器模式實現靈活配置,可自定義重試條件、停止策略、等待策略等,為開發者提供了強大的控制能力。

使用方法

主要采用編程方式,通過RetryerBuilder構建Retryer實例,設置重試條件、等待策略、停止策略等。還可添加重試監聽器,在重試過程中記錄日志或執行其他操作。也可將Retryer定義為可復用的bean,提高代碼復用性。

詳細案例見《如何優雅實現接口服務的重試機制》,推薦這款

Spring Retry

基本原理

Spring Retry作為Spring官方出品的重試框架,借助AOP實現方法調用重試。核心組件涵蓋定義重試操作接口的RetryOperations,其默認實現RetryTemplate,以及定義重試條件的RetryPolicy、控制重試間隔的BackOffPolicy和最終失敗恢復策略的RecoveryCallback。當方法調用失敗,它會依據配置策略自動重試,直至成功或達到最大重試次數。

使用方法

  • 注解方式:使用@Retryable注解標記需重試的方法,指定觸發重試的異常類型、最大重試次數和退避策略。@Recover注解用于定義重試失敗后的恢復方法,代碼簡潔直觀,適用于簡單場景。
  • 編程方式:通過注入RetryTemplate實例,在方法內調用execute方法,傳入重試業務邏輯和失敗恢復邏輯。還可自定義RetryTemplate的重試策略和退避策略,滿足復雜業務需求。
@Slf4j
@Service
public class OrderServiceImpl implements OrderService {

    @Override
    @Retryable(maxAttempts = 3, backoff = @Backoff(delay = 2000, multiplier = 2))
    public void addOrder() {
        System.out.println("重試...");
        int i = 3 / 0;
        // addOrder
    }

    @Recover
    public void recover(RuntimeException e) {
        log.error("達到最大重試次數", e);
    } 
}
public void normalSpringRetry() {
    // 表示哪些異常需要重試,key表示異常的字節碼,value為true表示需要重試
    Map<Class<? extends Throwable>, Boolean> exceptionMap = new HashMap<>();
    exceptionMap.put(RetryException.class, true);

    // 構建重試模板實例
    RetryTemplate retryTemplate = new RetryTemplate();

    // 設置重試回退操作策略,主要設置重試間隔時間
    FixedBackOffPolicy backOffPolicy = new FixedBackOffPolicy();
    long fixedPeriodTime = 1000L;
    backOffPolicy.setBackOffPeriod(fixedPeriodTime);

    // 設置重試策略,主要設置重試次數
    int maxRetryTimes = 3;
    SimpleRetryPolicy retryPolicy = new SimpleRetryPolicy(maxRetryTimes, exceptionMap);

    retryTemplate.setRetryPolicy(retryPolicy);
    retryTemplate.setBackOffPolicy(backOffPolicy);

    Boolean execute = retryTemplate.execute(
        //RetryCallback
        retryContext -> {
            String hello = helloService.hello();
            log.info("調用的結果:{}", hello);
            returntrue;
        },
        // RecoverCallBack
        retryContext -> {
            //RecoveryCallback
            log.info("已達到最大重試次數");
            returnfalse;
        }
    );
}

Resilience4j Retry

基本原理

Resilience4j Retry受Netflix Hystrix啟發,是輕量級容錯庫。它采用函數式編程風格和裝飾器模式實現重試功能,具備基于函數式接口、無外部依賴、可與其他容錯機制無縫集成以及提供豐富監控指標等特性。

使用方法

  • 注解方式:使用@Retry注解標記方法,指定重試實例名稱和降級方法,簡潔方便,適用于簡單業務場景。
  • 編程方式:從RetryRegistry獲取已配置的重試實例,使用Retry.decorateCheckedSupplier方法裝飾業務方法,在try-catch塊中執行重試邏輯并處理失敗情況,靈活性更高。
resilience4j.retry:
  instances:
    backendService:
      maxAttempts: 3
      waitDuration: 1s
      enableExponentialBackoff: true
      exponentialBackoffMultiplier: 2
      retryExceptions:
        - java.io.IOException
        - java.util.concurrent.TimeoutException
@Service
public class OrderServiceImpl implements OrderService {

    @Override
    @Retry(name = "addOrder", fallbackMethod = "recover")
    public void addOrder() {
        System.out.println("重試...");
        int i = 3 / 0;
        // addOrder
    }

   
    public void recover((String param, Exception ex) {
        log.error("達到最大重試次數", e);
    } 
}
@Service
public class HelloService {
   
    private final RetryRegistry retryRegistry;  
    
    public String executeWithRetry(String param) {
        // 獲取已配置的重試實例
        Retry retry = retryRegistry.retry("helloService");
        
        // 創建一個可重試的函數
        CheckedFunction0<String> retryableFunction = Retry.decorateCheckedSupplier(
            retry, () -> callHelloService(param));
        
        try {
            // 執行重試函數
            return retryableFunction.apply();
        } catch (Throwable throwable) {
            return"降級響應: " + param;
        }
    }
    
    private String callHelloService(String param) throws IOException {     
        if (Math.random() > 0.7) {
            throw new IOException("服務連接失敗");
        }
        return"后端服務響應: " + param;
    }
}

Failsafe

基本原理

Failsafe專注于高性能和低延遲場景,支持同步和異步重試,具有靈活的重試策略和極少的依賴。其設計目標是提供簡潔高效的重試機制,讓開發者能輕松應對各種重試需求。

使用方法

主要通過編程方式,利用流式API進行配置。可配置重試策略,包括處理的異常類型、最大重試次數、延遲時間、最大持續時間、退避策略等,還可添加重試和失敗監聽器。同時支持異步重試和帶降級的重試,滿足不同業務場景需求。也可將重試策略和降級策略定義為可復用的bean,提升代碼復用性。

@Slf4j
@Service
public class FailsafeService {
    
    public String executeWithRetry(String param) {
        return Failsafe.with(
            // 配置重試策略
            RetryPolicy.<String>builder()
                .handle(IOException.class, TimeoutException.class)
                .withMaxRetries(3)
                .withDelay(Duration.ofSeconds(1))
                .withMaxDuration(Duration.ofSeconds(10))
                .withBackoff(Duration.ofMillis(100), Duration.ofSeconds(2))
                .onRetry(event -> log.info("第{}次重試,上次異常: {}", 
                                         event.getAttemptCount(), 
                                         event.getLastException().getMessage()))
                .onFailure(event -> log.error("重試失敗,嘗試次數: {}, 總耗時: {}ms", 
                                            event.getAttemptCount(),
                                            event.getElapsedTime().toMillis()))
                .build()
        )
        .get(() -> {
            log.info("執行操作,參數: {}", param);       
            // 模擬操作
            if (Math.random() > 0.7) {
                throw new IOException("操作暫時失敗");
            }           
            return"操作成功: " + param;
        });
    }
    
    // 異步重試示例
    public CompletableFuture<String> executeWithRetryAsync(String param) {
        return Failsafe.with(
            RetryPolicy.<String>builder()
                .handle(IOException.class)
                .withMaxRetries(3)
                .withBackoff(Duration.ofMillis(100), Duration.ofSeconds(1))
                .build()
        )
        .getAsync(() -> {
            log.info("異步執行操作,參數: {}", param);        
            // 模擬異步操作
            if (Math.random() > 0.7) {
                throw new IOException("異步操作暫時失敗");
            }      
            return"異步操作成功: " + param;
        });
    }
    
    // 帶降級的重試示例
    public String executeWithFallback(String param) {
        return Failsafe.with(
            RetryPolicy.<String>builder()
                .handle(IOException.class)
                .withMaxRetries(3)
                .build(),
            // 降級策略
            Fallback.of(e -> "降級響應: " + param)
        )
        .get(() -> {
            // 業務邏輯
            if (Math.random() > 0.7) {
                throw new IOException("操作失敗");
            }
            return"操作成功: " + param;
        });
    }
}

總結

圖片

在實際開發中,開發者可根據業務場景的特點,靈活運用這些重試機制,提升系統的容錯能力和用戶體驗。

責任編輯:武曉燕 來源: 一安未來
相關推薦

2025-09-30 01:55:00

SpringWebClientHTTP

2025-05-08 09:11:41

2021-02-20 10:02:22

Spring重試機制Java

2024-08-29 09:01:39

2010-03-12 15:00:52

Python中

2024-09-25 08:32:05

2022-11-14 08:19:59

重試機制Kafka

2024-01-04 18:01:55

高并發SpringBoot

2010-04-23 14:04:23

Oracle日期操作

2024-05-07 09:01:21

Queue 模塊Python線程安全隊列

2013-04-15 10:48:16

Xcode ARC詳解iOS ARC使用

2013-06-08 11:13:00

Android開發XML解析

2023-11-06 08:00:38

接口高可用機制

2022-05-06 07:44:10

微服務系統設計重試機制

2024-09-26 09:28:06

內存Spring

2025-01-15 12:43:23

2009-02-20 11:43:22

UNIXfish全攻略

2009-12-14 14:32:38

動態路由配置

2009-10-19 15:20:01

家庭綜合布線

2014-03-19 17:22:33

點贊
收藏

51CTO技術棧公眾號

久久亚洲私人国产精品va媚药| 欧美久久一区| 欧美性大战xxxxx久久久| 一级特黄录像免费播放全99| 国产日韩欧美中文字幕| 99精品视频网| 中文字幕亚洲激情| 动漫av在线免费观看| 成人美女大片| 亚洲伦理在线精品| 欧美午夜欧美| 午夜精品久久久久久久99热黄桃| 亚欧成人精品| 久久综合久久88| 在线 丝袜 欧美 日韩 制服| 国产精品xnxxcom| 亚洲黑丝一区二区| 日韩电影免费观看在线观看| 日本在线一二三区| 国产资源在线观看入口av| 欧美激情综合五月色丁香小说| 99在线视频免费观看| 在线观看日批视频| 销魂美女一区二区三区视频在线| 久久的精品视频| 91精彩刺激对白露脸偷拍| 亚洲精品aⅴ| 欧美日韩日日骚| 少妇性饥渴无码a区免费| free性欧美hd另类精品| 中文字幕在线不卡| 日本视频一区在线观看| 色av男人的天堂免费在线| 国产高清不卡一区| 国产日韩欧美电影在线观看| www.久久久久久久| 国产精品一页| 久久久久久国产免费| 国产色无码精品视频国产| 国内精品视频在线观看| 国产视频精品xxxx| 青青草视频成人| 国产精品香蕉| 精品福利一区二区三区免费视频| 国产女同无遮挡互慰高潮91| 成人网ww555视频免费看| 欧美午夜丰满在线18影院| 精品一二三四五区| 亚洲区欧洲区| 亚洲精品免费在线| 色哺乳xxxxhd奶水米仓惠香| 免费a级人成a大片在线观看| 中文字幕av不卡| 性欧美.com| 91高清在线视频| 国产精品人成在线观看免费| 偷拍视频一区二区| 午夜激情视频在线| 国产精品二三区| 波多野结衣三级在线| 在线观看国产成人| 日本一不卡视频| 国产精品日韩欧美大师| 中文字幕在线播放不卡| 麻豆成人91精品二区三区| 国产男人精品视频| 国产又粗又猛又爽又黄的视频一| 久久国产精品99精品国产| 成人欧美一区二区三区在线 | 高清av在线| 欧美高清在线视频| 一区二区三区电影| 污污影院在线观看| 天天色天天操综合| 欧美亚洲日本在线观看| 成人国产激情| 日韩写真欧美这视频| 国产精品入口麻豆| 一区二区三区日本久久久| 一区二区三区四区视频| 国产91在线播放九色| 欧美freesex交免费视频| 欧美精品第一页在线播放| 久久精品一二区| 日本欧美久久久久免费播放网| 成人有码在线视频| 色婷婷在线视频| 欧美激情中文字幕一区二区| 欧美aaa在线观看| а√天堂8资源在线| 午夜私人影院久久久久| 91小视频网站| 北条麻妃一区二区三区在线观看 | 老司机av在线免费看| 一区二区日韩av| 久久久久国产精品熟女影院| 国产精久久一区二区| 亚洲精品国产成人| 女性裸体视频网站| 日韩一级不卡| 91久久精品国产91久久性色| 亚州av在线播放| 国产精品久久毛片a| 日本在线xxx| 欧美成人三级| 亚洲精品自拍偷拍| 国产va在线播放| 老司机精品久久| 福利视频久久| 日本在线免费| 色婷婷av一区二区三区软件| 超级砰砰砰97免费观看最新一期| 国产精品三级| 久久久久久亚洲精品不卡| 国产精华7777777| 99精品视频在线免费观看| 一本色道婷婷久久欧美| 在线视频超级| 欧美mv日韩mv| 国产少妇在线观看| 美女在线观看视频一区二区| 狠狠色综合色区| 91麻豆免费在线视频| 色嗨嗨av一区二区三区| 给我免费观看片在线电影的| 欧美国产91| 成人激情视频小说免费下载| 国产网站在线播放| 狠狠色噜噜狠狠狠狠97| 色悠悠在线视频| 中文在线日韩| 26uuu亚洲| 日本中文字幕不卡免费| 欧美视频久久久| 亚洲精品免费在线| 欧美日韩理论片| 99久久久久国产精品| 国产精品女视频| 国产天堂素人系列在线视频| 一本高清dvd不卡在线观看| 日本一级片在线播放| 亚洲黄色影院| 国产精品伊人日日| 黄网av在线| 欧美草草影院在线视频| 久久免费在线观看视频| 国产精品1区2区3区| 亚洲精品少妇一区二区| 欧美成年网站| 欧美高清视频在线播放| 亚洲黄色在线播放| 亚洲一区二区综合| 91超薄肉色丝袜交足高跟凉鞋| 欧美精品aa| 国产精品制服诱惑| 亚洲精品一区| 亚洲一级一级97网| 中文字幕一区二区三区波野结| 中文字幕不卡在线| 涩涩网站在线看| 欧美在线亚洲| 九色91在线视频| 综合另类专区| 视频在线观看一区二区| 国产又粗又猛视频| 亚洲综合在线视频| 免费的av网站| 蜜臀精品久久久久久蜜臀| 一区二区三区免费看| 国产一区二区久久久久| 久久久这里只有精品视频| 视频午夜在线| 精品视频色一区| 欧美成人免费看| av一二三不卡影片| 视频在线观看成人| 欧美亚洲黄色| 欧美激情视频免费观看| 午夜视频1000| 欧美日韩一二三区| 久久老司机精品视频| xnxx国产精品| 中文字幕12页| 一区二区日韩免费看| 午夜精品短视频| 日本免费精品| 全亚洲最色的网站在线观看| 日韩大片在线永久免费观看网站| 精品日韩99亚洲| 中文字幕免费高清网站| 曰韩精品一区二区| caopeng视频| 国产一区二区三区黄视频| 三上悠亚久久精品| 日韩三级在线| 国产精品视频福利| 韩国精品视频在线观看| 久久久影视精品| 午夜在线视频| 亚洲第一精品福利| 97人妻人人澡人人爽人人精品 | 亚洲欧洲一区二区福利| 白白在线精品| 国产在线观看一区二区三区| 大菠萝精品导航| 久久国产一区二区三区| 日韩有码电影| 日韩视频123| 在线观看国产区| 亚洲国产va精品久久久不卡综合| 99久久久久久久久久| 国产电影一区在线| 亚洲免费看av| 久久精品中文| 在线看视频不卡| 欧美一区二区三区婷婷| 欧美综合在线观看| 国内高清免费在线视频| www.日韩不卡电影av| 日本福利片高清在线观看| 精品日韩欧美在线| av网站在线观看免费| 欧美日韩亚洲另类| 亚洲国产av一区二区三区| 亚洲第一成人在线| 玖玖爱免费视频| 国产精品国产三级国产普通话三级| 欧美黑人欧美精品刺激| 成人的网站免费观看| 性生交大片免费看l| 精品一区二区在线免费观看| www.超碰com| 美女日韩在线中文字幕| 能在线观看的av| 国产精品免费看| 日本福利视频在线| 亚洲毛片网站| 日韩中文字幕在线视频观看| 狠狠综合久久av一区二区老牛| 强开小嫩苞一区二区三区网站| 日韩黄色大片网站| 亚洲一卡二卡三卡| 97精品国产一区二区三区| 亚洲国产另类久久久精品极度| 九九亚洲精品| 日韩国产一区久久| 欧美日韩在线播放视频| 日本免费一区二区三区| 精品免费视频| 亚洲乱码一区二区三区| 欧美成人激情| 日韩精品福利片午夜免费观看| 91日韩欧美| 视色,视色影院,视色影库,视色网| 91精品国产自产在线观看永久∴ | 欧美一区二区三区久久精品茉莉花| 亚洲午夜精品国产| 五月综合激情| 日韩在线视频在线| 精品成人在线| 欧美成人xxxxx| 久久国产日本精品| www亚洲成人| 国产精品一区二区在线观看网站| 香蕉视频在线观看黄| 国产成人精品免费网站| 大乳护士喂奶hd| 国产偷国产偷精品高清尤物| 国产又粗又猛又爽又黄的视频小说| 国产精品不卡在线| 免费人成在线观看| 欧美日韩午夜激情| 亚洲免费视频二区| 日韩午夜在线观看| av女名字大全列表| 最近2019年日本中文免费字幕| 九色porny在线| 午夜精品在线视频| 电影久久久久久| 亚洲综合中文字幕在线| 另类在线视频| 在线观看成人一级片| 国产在线欧美| 美女网站免费观看视频 | 真人bbbbbbbbb毛片| 国产日韩av一区二区| 亚洲一级生活片| 亚洲mv在线观看| 中文字幕人妻一区二区三区视频| 欧美一区二区三区免费在线看| 好吊色在线观看| 在线播放精品一区二区三区| 尤物视频在线看| 国产精品精品一区二区三区午夜版 | caoporm在线视频| 99久久99久久综合| 亚洲女人久久久| 狠狠久久五月精品中文字幕| 一本色道久久综合无码人妻| 亚洲国产成人精品久久久国产成人一区 | 丁香激情综合国产| 国产一区二区三区四区在线| 亚洲图片自拍偷拍| 97人妻精品一区二区三区视频| 精品视频—区二区三区免费| 国产成人高清精品| 国产精品久久久久久久午夜| 大陆精大陆国产国语精品| 亚洲精品乱码视频| 久久国产精品99国产| 无码人妻一区二区三区免费n鬼沢| 久久久久久夜精品精品免费| 精品无码m3u8在线观看| 9191精品国产综合久久久久久 | 国产精品毛片视频| 在线国产伦理一区| 青青草国产精品亚洲专区无| aaaaaav| 亚洲国产日韩综合久久精品| 91超薄丝袜肉丝一区二区| 亚洲精品视频中文字幕| h片在线观看视频免费| 97自拍视频| 亚洲乱码电影| 永久免费的av网站| 久久久久久久电影| www日韩精品| 亚洲第一区第二区| 欧美xxx黑人xxx水蜜桃| 91香蕉国产在线观看| 日韩在线高清| 五月天激情视频在线观看| 国产亚洲人成网站| 激情视频网站在线观看| 亚洲精品在线观看www| 美女av在线免费看| 久精品国产欧美| 国产日韩1区| aa片在线观看视频在线播放| 香蕉加勒比综合久久| 人妻无码中文字幕| 97香蕉超级碰碰久久免费软件 | 国产成人在线播放视频| 亚洲第一中文字幕在线观看| 第四色日韩影片| 国产精品区免费视频| 1024精品一区二区三区| 91精品又粗又猛又爽| 亚洲福利视频一区二区| 色偷偷在线观看| 欧美亚洲另类在线| 久久av免费| 黄色三级视频在线| 日本三级亚洲精品| 三区四区在线观看| 欧美日韩不卡在线| a篇片在线观看网站| 亚洲一区国产精品| 欧美日韩三级| 呦呦视频在线观看| 日韩欧美综合在线视频| 第一福利在线| 亚洲tv在线观看| 亚洲国产精品第一区二区三区 | 国产精品久久久久久久久动漫| 这里只有久久精品视频| 精品国产区一区二区三区在线观看| 成人在线日韩| 日韩欧美不卡在线| 久久综合九色综合久久久精品综合 | 欧美深夜福利| 中文字幕一区二区三区人妻| 在线免费观看日本欧美| 黄视频在线观看网站| 国产精品视频一区二区三区经| 免费在线亚洲欧美| 激情高潮到大叫狂喷水| 日韩精品中午字幕| 大胆人体一区| 男女激烈动态图| 91老司机福利 在线| 在线免费av网| 国模极品一区二区三区| 国产一区二区三区电影在线观看| www.国产福利| 欧美日韩在线影院| 国产在线1区| 欧美日韩三区四区| 国产精品一区二区在线播放| 91精品国产综合久久久蜜臀九色| 日韩一区二区三区xxxx| 成人另类视频| 天天干天天玩天天操| 婷婷久久综合九色综合伊人色| 超碰在线影院| 国产精品日韩二区| 精品伊人久久久久7777人| 日本三级一区二区| 欧美成年人视频网站| 狠狠色狠狠色综合婷婷tag|