使用resilience4j-retry實現函式呼叫重試
Resilience4j中有一個特殊模組(Resilience4j -Retry),它是為Java8和函數語言程式設計設計的容錯庫,它是具有最小依賴性的輕量級庫(主要是vavr)
當你重試時,有很多例子:
好的,你需要做什麼才能開始使用resileience4j重試:
如果你使用maven:
<dependency> <groupId>io.github.resilience4j</groupId> <artifactId>resilience4j-retry</artifactId> <version>0.13.2</version> </dependency> <dependency> <groupId>io.github.resilience4j</groupId> <artifactId>resilience4j-core</artifactId> <version>0.13.2</version> </dependency> |
重試模組可以有以下功能:
- 同步重試和非同步重試
- 關於異常或響應謂詞的Rety,如果您想要重試特定的響應值而不僅僅是丟擲異常,這可能很有用
- 重試配置的退避策略加上最大重試次數
- 忽略不重試的異常集
- 它支援checked(新增了異常處理)和未檢查的函式執行(ex Function,Supplier,Callable,Runnable ..)
- 如果需要,它可以與spring整合。
如何配置非同步重試,在Github上測試resilience4j重試的完整程式碼:
// Given the HelloWorldService returns Hello world given(helloWorldService.returnHelloWorld()) .willReturn(completedFuture("Hello world")); final AsyncRetry retryContext = AsyncRetry.of("retryConfig", // we set the response type to String RetryConfig.<String>custom() // max retry attempts .maxAttempts(3) // what are the ignore exception to no retry on .ignoreExceptions(IllegalStateException.class) // what are the exceptions to try on .retryExceptions(TimeoutException.class) // retry if the response contains world .retryOnResult(s -> s.contains("world")) // retry backoff strategy, IntervalFunction has many built in interface functions you can check it out .intervalFunction(IntervalFunction.ofExponentialBackoff()) .build()); // Decorate the invocation of the HelloWorldService Supplier<CompletionStage<String>> supplier = AsyncRetry.decorateCompletionStage( retryContext, scheduler, () -> helloWorldService.returnHelloWorld()); // When String result = awaitResult(supplier); // Then the helloWorldService should be invoked 1 time BDDMockito.then(helloWorldService).should(Mockito.times(3)).returnHelloWorld(); Assertions.assertEquals(result, "Hello world"); |
對於同步呼叫,您有許多選項(Supplier , Callable , Function 。。)
// Given the HelloWorldService returns Hello world BDDMockito.given(helloWorldService.returnHelloWorld()).willReturn("Hello world"); // Create a Retry with default configuration final RetryConfig tryAgain = RetryConfig.<String>custom().retryOnResult(s -> s.contains("Hello world")) .maxAttempts(2).build(); Retry retry = Retry.of("id", tryAgain); // Decorate the invocation of the HelloWorldService Supplier<String> supplier = Retry.decorateSupplier(retry, helloWorldService::returnHelloWorld); // When String result = supplier.get(); // Then the helloWorldService should be invoked 1 time BDDMockito.then(helloWorldService).should(Mockito.times(2)).returnHelloWorld(); assertThat(result).isEqualTo("Hello world"); |
相關文章
- 如何使用OO和函式式兩個方法實現重構? - DZone函式
- Linux QoS實現框架:函式呼叫流程圖Linux框架函式流程圖
- 呼叫函式實現兩個數交換函式
- C#使用委託實現函式回撥,方法呼叫攔截C#函式
- 如何使用函式指標呼叫類中的函式和普通函式函式指標
- js 使用 DotNetObjectReference 呼叫 c# 函式JSObjectC#函式
- 使用函式式方式實現責任鏈模式函式模式
- 使用函式式實現觀察者模式模式函式模式
- 面試題,實現一個求和函式面試題函式
- 函式呼叫棧函式
- 子函式呼叫函式
- 如何使用python super函式呼叫父類?Python函式
- 使用Excel呼叫ABAP系統的函式Excel函式
- 深入探討Function Calling:實現外部函式呼叫的工作原理Function函式
- ClickHouse原始碼筆記3:函式呼叫的向量化實現原始碼筆記函式
- 【資料庫】PostgreSQL中使用`SELECT DISTINCT`和`SUBSTRING`函式實現去重查詢資料庫SQL函式
- axios為什麼可以使用物件和函式兩種方式呼叫?是如何實現的?iOS物件函式
- 外部函式的呼叫函式
- gdb 如何呼叫函式?函式
- C程式函式呼叫&系統呼叫C程式函式
- 普通函式與函式模板呼叫規則函式
- PostgreSQL函式裡呼叫函式(SETOF + RETURN QUERY)SQL函式
- C++建構函式和解構函式呼叫虛擬函式時使用靜態聯編C++函式
- 使用 Java實現mTLS呼叫JavaTLS
- 使用Microsoft.SemanticKernel基於本地執行的Ollama大語言模型實現Agent呼叫函式ROS模型函式
- 面試常見問題之實現bind函式面試函式
- 使用Java和Spring Retry實現重試機制JavaSpring
- 普通函式與函式模板呼叫規則2函式
- MySQL排名函式實現MySql函式
- fcntl函式實現dup函式
- MySQL分析函式實現MySql函式
- httprunner yml 呼叫外部函式HTTP函式
- jquery原始碼;是怎麼實現直接呼叫$()函式原型上的方法的?jQuery原始碼函式原型
- 鴻蒙HarmonyOS實戰-Web元件(前端函式和應用側函式相互呼叫)鴻蒙Web元件前端函式
- 面試驅動技術之 - isa && 元類 && 函式呼叫面試函式
- 面試驅動技術之 – isa && 元類 && 函式呼叫面試函式
- JavaScript的迭代函式與迭代函式的實現JavaScript函式
- 核心函式 系統呼叫 系統命令 庫函式函式