使用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函式
- C#使用委託實現函式回撥,方法呼叫攔截C#函式
- Linux QoS實現框架:函式呼叫流程圖Linux框架函式流程圖
- js實現的iframe呼叫父頁面函式JS函式
- 使用rownum減少函式呼叫函式
- (函式)實現strstr函式函式
- 如何使用函式指標呼叫類中的函式和普通函式函式指標
- 使用函式式實現觀察者模式模式函式模式
- 使用dtrace跟蹤oracle函式呼叫Oracle函式
- 不使用日期函式實現ADD_MONTHS函式功能函式
- 使用函式式方式實現責任鏈模式函式模式
- 子函式呼叫函式
- 函式呼叫棧函式
- ClickHouse原始碼筆記3:函式呼叫的向量化實現原始碼筆記函式
- 使用Excel呼叫ABAP系統的函式Excel函式
- js 使用 DotNetObjectReference 呼叫 c# 函式JSObjectC#函式
- 不使用日期函式實現ADD_MONTHS函式功能(二)函式
- Guava Retryer實現介面重試Guava
- 使用 Resilience4j 框架實現重試機制框架
- 使用 Guava Retry 優雅的實現重試機制Guava
- 使用Java和Spring Retry實現重試機制JavaSpring
- Java中使用指數退避和抖動實現重試Java
- 外部函式的呼叫函式
- gdb 如何呼叫函式?函式
- 函式指標呼叫函式指標
- 如何使用python super函式呼叫父類?Python函式
- 限定建構函式必須使用new呼叫函式
- C程式函式呼叫&系統呼叫C程式函式
- 使用 Java實現mTLS呼叫JavaTLS
- PostgreSQL函式裡呼叫函式(SETOF + RETURN QUERY)SQL函式
- JS中函式內套函式的呼叫JS函式
- js函式 函式自呼叫 返回函式的函式 (閉包)JS函式
- C++建構函式和解構函式呼叫虛擬函式時使用靜態聯編C++函式
- 使用Microsoft.SemanticKernel基於本地執行的Ollama大語言模型實現Agent呼叫函式ROS模型函式
- 使用分析函式實現累加和移動平均函式
- 嘗試使用 pack 與 unpack 函式函式