精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

色综合久久久网| 91在线观看污| 欧美黑人狂野猛交老妇| 精品伦一区二区三区| 中文字幕21页在线看| 国产精品美女一区二区三区| 97免费资源站| 国产99免费视频| 欧美 日韩 国产一区二区在线视频| 精品国产凹凸成av人导航| 黄色一级大片在线观看| 亚洲电影视频在线| 国产日韩欧美a| 99久久精品无码一区二区毛片| 亚洲 欧美 成人| 欧美激情日韩| 中文字幕一区电影| 女同毛片一区二区三区| 激情久久免费视频| 在线视频综合导航| 丁香六月激情婷婷| 免费黄色在线看| 久久影院视频免费| 国产一区二区精品免费| 国产又色又爽又黄又免费| 亚洲自拍另类| 欧美精品成人91久久久久久久| 日本黄色小视频在线观看| 91亚洲无吗| 欧美精品日韩精品| 三年中国国语在线播放免费| missav|免费高清av在线看| 亚洲丝袜美腿综合| 亚洲乱码一区二区三区| 肉丝一区二区| va亚洲va日韩不卡在线观看| 亚洲va欧美va国产综合久久| 中文字幕欧美在线观看| 久久国产高清| 欧美在线xxx| 91看片在线播放| 国产精品久久| 久久91精品国产91久久跳| 午夜激情福利电影| 四季av一区二区凹凸精品| 国产午夜一区二区| 蜜桃av免费看| 久久av导航| 精品视频久久久久久久| 久久久久久久无码| 国产精品久久久久久久久久白浆| 日韩三级视频在线观看| 操人视频免费看| 国产日韩一区二区三免费高清 | 日韩精品成人一区| 亚洲国产99| 久久久久久久久久久免费 | av无码av天天av天天爽| 天堂在线精品| 亚洲欧美在线一区| 国产aⅴ激情无码久久久无码| 亚洲成人一品| 亚洲视频一区二区| 日本人亚洲人jjzzjjz| 成人网18免费网站| 精品国产依人香蕉在线精品| 亚洲熟女www一区二区三区| 欧美激情日韩| 97精品在线观看| 黄色在线视频网址| 日韩**一区毛片| 亚洲www视频| 亚洲黄色精品视频| 91年精品国产| 日韩中文字幕一区二区| 日本电影全部在线观看网站视频| 亚洲欧洲精品一区二区三区| 成人在线视频一区二区三区| a级片免费在线观看| 色偷偷久久人人79超碰人人澡| 免费黄色一级网站| 国产高清日韩| 亚洲国产精品久久久| 久久av无码精品人妻系列试探| 成人免费电影网址| 欧美极品第一页| 欧美一级淫片免费视频黄| 久久99精品国产91久久来源| 99精品在线直播| 九色在线播放| 亚洲你懂的在线视频| 欧美视频在线观看网站| 精品福利在线| 亚洲福利视频久久| 国产传媒在线看| 国产精品成人一区二区网站软件| 欧美在线xxx| 国产日本精品视频| 91麻豆高清视频| 一本—道久久a久久精品蜜桃| 波多野结依一区| 在线观看视频一区二区欧美日韩| 国产老头和老头xxxx×| 欧美日韩播放| 欧美国产精品va在线观看| 亚洲大片免费观看| 国产成人精品亚洲午夜麻豆| 日韩一本精品| 国产激情在线播放| 欧美精品777| 香蕉网在线播放| 欧美激情91| 国产精品视频yy9099| 欧美美女喷水视频| 少妇精品一区二区三区| 欧美日本一区| 国产精品美女视频网站| 婷婷五月综合激情| 一区二区三区在线播放| 久久婷五月综合| 亚洲视频分类| 国内偷自视频区视频综合| 国产又粗又黄又爽的视频| 国产亚洲一区字幕| 亚洲熟妇av日韩熟妇在线 | 欧美久久在线| av丝袜在线| 日韩女优毛片在线| 91传媒免费观看| 美国十次了思思久久精品导航| 久久久久久一区| av中文在线资源库| 日韩精品一区二区在线观看| 国产美女久久久久久| 美女尤物国产一区| 日本精品一区二区三区高清 久久 日本精品一区二区三区不卡无字幕 | 狠狠色综合色区| 色黄网站在线观看| 日韩一区二区精品| 国产97免费视频| 激情综合色综合久久| 亚洲精品乱码久久久久久蜜桃91 | 亚洲麻豆视频| 国产精品久久久久久久久久久久冷| 麻豆免费在线视频| 欧美日本免费一区二区三区| 日本污视频网站| 日韩精品一级中文字幕精品视频免费观看 | 久久悠悠精品综合网| 久久久噜噜噜久久久| www.蜜臀av| 亚洲最快最全在线视频| 国偷自产av一区二区三区麻豆| 欧美在线日韩| 国产精品.com| 亚洲精品中文字幕| 亚洲欧美日韩中文在线制服| 无码人妻一区二区三区线| 久久夜色精品国产噜噜av| 777米奇影视第四色| 婷婷亚洲精品| 国产精品电影一区| 成人免费看片| 欧美成人vps| 天天操天天摸天天干| 久久久久久久久久久久久女国产乱| 黄色片视频在线免费观看| 欧美日韩播放| 91九色视频导航| 四虎影院观看视频在线观看| 精品久久久久一区二区国产| 国产成人精品一区二三区| 久久女同精品一区二区| 一级片视频免费观看| 888久久久| 国产一区免费| 成人软件在线观看| 久久久精品免费| 黄频在线免费观看| 色综合久久精品| 黄色一级大片在线免费观看| av一区二区不卡| 亚欧在线免费观看| 欧美日一区二区在线观看| 久久久婷婷一区二区三区不卡| 久久久成人av毛片免费观看| 久久中国妇女中文字幕| 天天干天天插天天操| 欧美三级韩国三级日本一级| 欧美人妻精品一区二区三区| 2022国产精品视频| 男女污污视频网站| 国产欧美亚洲一区| 黄色一级片网址| 亚洲a级精品| 91亚洲精品在线| 都市激情国产精品| 久久精品99久久久香蕉| 桃花色综合影院| 在线观看91精品国产麻豆| 日韩av在线播| 亚洲免费成人av| 最新中文字幕视频| 丁香婷婷综合色啪| 国产又黄又猛的视频| 久久av一区| 亚洲乱码日产精品bd在线观看| 精品福利久久久| 高清视频在线观看一区| 国产精品传媒麻豆hd| 91精品91久久久久久| 麻豆视频免费在线观看| 国产一区二区日韩精品欧美精品| 亚洲精品国产精品国| 欧美军同video69gay| 九九热最新视频| 五月天激情综合| 久久久久成人精品无码| 国产精品免费免费| 亚洲天堂网一区二区| 国产高清成人在线| 国产aⅴ爽av久久久久| 视频一区视频二区中文| 91国视频在线| 亚洲国产精品一区| 水蜜桃在线免费观看| 久久在线电影| 视频一区视频二区视频三区视频四区国产 | 男人操女人的视频在线观看欧美 | 久久99精品久久只有精品| 免费日韩中文字幕| 亚洲综合日韩| 内射国产内射夫妻免费频道| 欧美日韩中文| 国产美女作爱全过程免费视频| 一二三区不卡| 亚洲AV无码成人精品一区| 日韩一区欧美| 中文字幕精品一区日韩| 成人激情免费视频| 亚洲精品国产一区| 欧美3p视频| 欧美爱爱视频网站| 欧美成人中文| 日本男女交配视频| 极品中文字幕一区| 欧美视频在线免费播放| 亚洲人成免费| 北条麻妃在线视频观看| 久久经典综合| 天堂av在线网站| 美女mm1313爽爽久久久蜜臀| 亚洲欧美久久久久| 国产精品香蕉一区二区三区| 久久久久久久久久久影视| 豆国产96在线|亚洲| 五月天丁香社区| 91免费国产视频网站| 受虐m奴xxx在线观看| 欧美国产激情二区三区| 中文字幕求饶的少妇| 日韩理论片在线| 免费三片在线播放| 欧美日韩亚洲一区二| 日韩熟女一区二区| 欧美日韩精品免费| 亚洲AV无码精品自拍| 亚洲精品理论电影| 超碰在线国产| 欧美成人一区二区三区电影| 超碰中文在线| 日韩av色在线| 国产日韩欧美中文在线| 国内成+人亚洲| 欧美色婷婷久久99精品红桃| 椎名由奈jux491在线播放| 亚洲午夜91| 午夜免费福利在线| 国产成人精品免费| 亚洲成人黄色av| 亚洲激情图片qvod| 亚洲精品成人在线视频| 在线成人av网站| 三区在线观看| 久久国产精品久久久| 一区二区三区电影大全| 91亚洲va在线va天堂va国| 日本午夜精品| 午夜在线视频免费观看| 一区二区国产在线观看| 日本黄色福利视频| www.在线成人| 成人午夜免费影院| 天天综合网天天综合色| 国产一区二区视频免费观看| 精品五月天久久| 午夜伦理大片视频在线观看| 日韩av高清不卡| 成人知道污网站| 亚洲综合五月天| 亚洲一区中文| 欧美一级片在线免费观看| 亚洲国产成人午夜在线一区| 国产乡下妇女做爰毛片| 欧美美女激情18p| 久蕉在线视频| 欧美激情女人20p| 欧美a视频在线| 欧美日韩一区二| 亚洲黄色视屏| 污视频在线观看免费网站| 久久免费国产精品| 九九视频免费在线观看| 欧美久久婷婷综合色| 四虎在线视频| 久久免费成人精品视频| а天堂中文最新一区二区三区| 欧美日韩一区在线观看视频| 狠狠综合久久| 一级黄色片在线免费观看| 国产亚洲人成网站| 青青国产在线观看| 亚洲第一av网站| 人人澡人人添人人爽一区二区| 国产在线播放91| 国产一区二区三区网| 毛片在线视频播放| 本田岬高潮一区二区三区| 欧美精品乱码视频一二专区| 67194成人在线观看| 亚洲欧美视频一区二区| 国产精品日日摸夜夜添夜夜av| 免费久久久久久久久| 欧美一级在线看| 99热99精品| 久久久久久久久久影院| 亚洲激情视频在线播放| 欧美sm一区| 欧美精品一区二区三区在线看午夜| 中文日韩在线| 国内精品久久99人妻无码| 精品久久久久久久久久久久| 日本毛片在线观看| 91精品国产高清久久久久久91 | 亚洲国内在线| 青青草成人在线观看| 五月婷婷婷婷婷| 欧美区视频在线观看| 老司机精品视频在线观看6| 国产日韩欧美在线| 欧美一区高清| 黑人无套内谢中国美女| 亚洲午夜av在线| 日韩porn| 国产精品吹潮在线观看| 色135综合网| 中文字幕久久久久久久| 天天综合日日夜夜精品| 男人的天堂av高清在线| 国产精品免费小视频| 国产精品久久久久久久| 日韩av片免费观看| 亚洲综合色成人| 日本中文字幕电影在线观看 | 国产精品一线二线三线| 99久久久无码国产精品| 无码一区二区三区在线观看| 中国人与牲禽动交精品| 狂野欧美xxxx韩国少妇| 国产日本在线播放| 久久久精品tv| 国产又粗又猛又色又| 欧美精品久久一区二区| 亚洲宅男一区| 亚洲黄色av片| 午夜精品视频在线观看| 国产乱理伦片a级在线观看| 91久久久久久久久久久| 影音先锋亚洲电影| 欧美老女人性生活视频| 欧美一区二区三区四区在线观看| 97天天综合网| 亚洲午夜精品久久| 国产不卡在线视频| 欧美精品韩国精品| 久久人人爽人人爽爽久久| 日韩深夜影院| 国产探花在线观看视频| 欧美色播在线播放| 国产在线观看av| 老牛影视免费一区二区| 国产在线精品一区二区不卡了| 日韩久久久久久久久| 俺去啦;欧美日韩| 欧美日韩一区二区三区在线电影| 国产色视频在线播放| 午夜激情久久久| 九义人在线观看完整免费版电视剧| 精品网站在线看| 国产精品一区二区三区99|