中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

SpringBoot怎么實現接口請求重試機制

發布時間:2021-08-16 09:45:05 來源:億速云 閱讀:200 作者:chen 欄目:開發技術

本篇內容主要講解“SpringBoot怎么實現接口請求重試機制”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“SpringBoot怎么實現接口請求重試機制”吧!

目錄
  • 一、重試機制

  • 二、重試機制要素

  • 三、重試機制注意事項

  • 四、SpringBoot整合spring-retry

    • 1)添加依賴

    • 2)添加@EnableRetry注解

    • 3)添加@Retryable注解

    • 4)Controller測試代碼

    • 5)發送請求

    • 6)補充:@Recover

一、重試機制

由于網絡不穩定或網絡抖動經常會造成接口請求失敗的情況,當我們再去嘗試就成功了,這就是重試機制。

其主要目的就是要盡可能地提高請求成功的概率,但一般情況下,我們請求第一次失敗,代碼運行就拋出異常結束了,如果想再次請求可能還需要手工操作,這非常地不方便,可行性也不佳。因此,Spring框架提供了對重試機制支持,并且在Spring Cloud中可以與Hystrix結合使用,可以避免訪問到已經不正常的實例。

二、重試機制要素

重試機制要素如下:

  • 限制重試次數

  • 每次重試的時間間隔

  • 最終失敗結果的報警或事物回滾

  • 在特定失敗異常事件情況下選擇重試

三、重試機制注意事項

對于非冪等性的方法我們要慎用重試機制,可能會造成意料之外的后果。
所謂冪等性:就是用戶對于同一操作發起的一次請求或者多次請求的結果是一致的,不會因為多次點擊而產生了副作用。

四、SpringBoot整合spring-retry

下面我們就來看下,我們應該如何使用SpringBoot來整合spring-retry組件實現重試機制。

1)添加依賴

首先我們在SpringBoot項目中的pom.xml添加相關依賴,如下:

<!-- 重試相關依賴包 -->
<dependency>
    <groupId>org.springframework.retry</groupId>
    <artifactId>spring-retry</artifactId>
    <version>1.2.4.RELEASE</version>
</dependency>
 
<dependency>
    <groupId>org.aspectj</groupId>
    <artifactId>aspectjweaver</artifactId>
    <version>1.9.4</version>
</dependency>

2)添加@EnableRetry注解

在主啟動類Application上添加@EnableRetry注解,實現對重試機制的支持

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

注意:@EnableRetry也可以使用在配置類、ServiceImpl類、方法上

3)添加@Retryable注解

我們針對需要實現重試的方法上添加@Retryable注解,使該方法可以實現重試,這里我列出ServiceImpl中的一個方法:

@Service
public class RetryServiceImpl implements RetryService {
 
    @Retryable(value = Exception.class, maxAttempts = 3, backoff = @Backoff(delay = 2000,multiplier = 1.5))
    public String testRetry() throws Exception {
 
        System.out.println("開始執行代碼:"+ LocalTime.now());
        int code = 0;
        // 模擬一直失敗
        if(code == 0){
           // 這里可以使自定義異常,@Retryable中value需與其一致
            throw new Exception("代碼執行異常");
        }
        System.out.println("代碼執行成功");
        return "success";
    }
}

說明:@Retryable配置元數據情況:
value :針對指定拋出的異常類型,進行重試,這里指定的是Exception
maxAttempts :配置最大重試次數,這里配置為3次(包含第一次和最后一次)
delay: 第一次重試延遲間隔,這里配置的是2s
multiplier :每次重試時間間隔是前一次幾倍,這里是1.5倍

4)Controller測試代碼

@RestController
@RequestMapping("/test")
public class TestController {
    @Autowired
    private RetryService retryService;
 
    @GetMapping("/retry")
    public String testRetry() throws Exception {
        return retryService.testRetry();
    }
}

5)發送請求

發送請求后,我們發現后臺打印情況,確實重試了3次,并且在最后一次重試失敗的情況下,才拋出異常,具體如下(可以注意下時間間隔):

SpringBoot怎么實現接口請求重試機制

6)補充:@Recover

一般情況下,我們重試最大設置的次數后,仍然失敗拋出異常,我們會通過全局異常處理類進行統一處理,但是我們其實也可以自行處理,可以通過@Recover注解來實現,具體如下:

@Service
public class RetryServiceImpl implements RetryService {
 
    @Retryable(value = Exception.class, maxAttempts = 3, backoff = @Backoff(delay = 2000,multiplier = 1.5))
    public String testRetry() throws Exception {
 
        System.out.println("開始執行代碼:"+ LocalTime.now());
        int code = 0;
        if(code == 0){
            // 這里可以使自定義異常,@Retryable中value需與其一致
            throw new Exception("代碼執行異常");
        }
        System.out.println("代碼執行成功");
        return "success";
    }
 
    /**
     * 最終重試失敗處理
     * @param e
     * @return
     */
    @Recover
    public String recover(Exception e){
 
        System.out.println("代碼執行重試后依舊失敗");
        return "fail";
    }
}

注意:
1)@Recover的方法中的參數異常類型需要與重試方法中一致
2)該方法的返回值類型與重試方法保持一致
再次測試如下(發現不會再拋出異常):

SpringBoot怎么實現接口請求重試機制

到此,相信大家對“SpringBoot怎么實現接口請求重試機制”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

蒙城县| 寿光市| 天等县| 南江县| 墨竹工卡县| 五莲县| 印江| 宁陵县| 阳高县| 民和| 绥滨县| 迁安市| 浙江省| 琼海市| 米林县| 贡山| 教育| 辛集市| 泰来县| 永春县| 嫩江县| 南平市| 定襄县| 和林格尔县| 桐乡市| 进贤县| 东丽区| 宁强县| 无棣县| 望都县| 万山特区| 洛南县| 井冈山市| 津市市| 苏州市| 温宿县| 灵璧县| 南溪县| 江阴市| 桃源县| 永仁县|