SpringBoot如何優(yōu)雅的實現(xiàn)重試功能
使用背景
在有些特定場景,如和第三方對接。
我們調(diào)用接口時需要支持重試功能,第一次調(diào)用沒成功,我們需要等待x秒后再次調(diào)用。
通常會設置重試次數(shù),避免業(yè)務。
一般我們會這樣寫
public ApiResponse<Boolean> test() { //模擬調(diào)用 System.out.println("開始調(diào)用,第" + num + "次"); //業(yè)務邏輯 boolean result = false; if (result) { System.out.println("執(zhí)行完成!"); } else if (num >= totalNum) { System.out.println("重試結(jié)束"); num = 1; } else { System.out.println("重試"); ++num; test(); } return ApiResponse.ok(true); }
這樣寫本身,沒什么問題。
但是如果多個接口都需要重試的話,代碼就不優(yōu)雅了。
spring-retry介紹
spring系列的spring-retry是另一個實用程序模塊,
可以幫助我們以標準方式處理任何特定操作的重試。
在spring-retry中,所有配置都是基于簡單注釋的。
快速使用
加入依賴
<dependency> <groupId>org.springframework.retry</groupId> <artifactId>spring-retry</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-aop</artifactId> </dependency>
開啟Retry
啟動上增加注解@EnableRetry
@EnableRetry
使用
@GetMapping("test") @Retryable(value = Exception.class,maxAttempts = 5,backoff = @Backoff(delay = 2000,multiplier = 1.5)) public ApiResponse<Boolean> test() { System.out.println("開始調(diào)用,第" + num + "次"); boolean result = false; if (!result){ num++; throw new BizException("調(diào)用失敗,需要重試"); } System.out.println("執(zhí)行完成"); return ApiResponse.ok(true); }
參數(shù)
value:拋出指定異常才會重試
include:和value一樣,默認為空,當exclude也為空時,默認所有異常
exclude:指定不處理的異常
maxAttempts:最大重試次數(shù),默認5次
backoff:重試等待策略,默認使用@Backoff,@Backoff的value默認為1000L,我們設置為2000L;multiplier(指定延遲倍數(shù))默認為0,表示固定暫停1秒后進行重試,如果把multiplier設置為1.5,則第一次重試為2秒,第二次為3秒,第三次為4.5秒。
到此這篇關(guān)于SpringBoot如何優(yōu)雅的實現(xiàn)重試功能的文章就介紹到這了,更多相關(guān)SpringBoot實現(xiàn)重試功能內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
spring異步service中處理線程數(shù)限制詳解
這篇文章主要給大家介紹了關(guān)于spring異步service中處理線程數(shù)限制的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用spring具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-09-09SpringBoot數(shù)據(jù)脫敏的實現(xiàn)示例
數(shù)據(jù)脫敏主要應用在客戶安全數(shù)據(jù)或商業(yè)性敏感數(shù)據(jù)的情況,本文主要介紹了SpringBoot數(shù)據(jù)脫敏的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2024-05-05關(guān)于JFormDesigner的安裝及破姐超詳細教程
JFormDesigner是一種先進的圖形用戶界面Swing?的設計工具(非開源),具有一個獨立的開發(fā)工具產(chǎn)品和基于不同開發(fā)工具如Eclipse、NetBeans等的開發(fā)插件,本文給大家介紹JFormDesigner安裝破解教程,感興趣的朋友一起看看吧2023-12-12SpringSecurity授權(quán)機制的實現(xiàn)(AccessDecisionManager與投票決策)
本文主要介紹了SpringSecurity授權(quán)機制的實現(xiàn),其核心是AccessDecisionManager和投票系統(tǒng),下面就來介紹一下,感興趣的可以了解一下2025-04-04使用SpringBoot與EasyExcel實現(xiàn)復雜的導入導出
這篇文章主要介紹了使用SpringBoot與EasyExcel實現(xiàn)復雜的導入導出,EasyExcel是一個快速解決大文件內(nèi)存溢出的Excel處理工具,它能讓你在不用考慮性能、內(nèi)存等因素的情況下,快速完成Excel的讀、寫等功能,需要的朋友可以參考下2023-10-10