Repeat failed call.
Initialize the retry options to max 3 calls and a fixed backoff of 500 ms.
RetryOptions options = RetryOptions.builder()
.max(3)
.backoff(new FixedBackoff(Duration.ofMillis(500)))
.build();
Initialize the retry options with ±10% jitter backoff of 2 seconds.
RetryOptions options = RetryOptions.builder()
.backoff(new JitterBackoff(Duration.ofSeconds(2), 0.1))
.build();
Initialize the retry options with exponential backoff starting at 1 second and growing by 1.5 with ±25% jitter.
RetryOptions options = RetryOptions.builder()
.backoff(
ExpBackoff.builder()
.initial(Duration.ofSeconds(1))
.multiplier(1.5)
.factor(0.25)
.build())
.build();
RetryRunnable.run(() -> handler.operation(), options);
Runnable
with predicate (repeats call for MyRuntimeException
only):
RetryRunnable.run(
() -> handler.operation(100),
(ex) -> ex instanceof MyRuntimeException,
options);
Response response = RetrySupplier.get(() -> handler.operation(), options);
Supplier with predicate for response value:
Response response = RetrySupplier.get(
() -> handler.operation(100),
(r, ex) -> r != null && r.getStatusCode() != 200,
options);
Response response = RetryThrowingSupplier.get(
() -> handler.operation(), options);
Initialize ScheduledExecutorService
(used to schedule retry delay):
ScheduledExecutorService scheduledExecutor = Executors
.newSingleThreadScheduledExecutor();
CompletableFuture<Response> future = RetryAsyncSupplier.get(
scheduledExecutor,
() -> handler.operation(100),
options);
Supplier<CompletableFuture<T>>
with predicate for response value:
CompletableFuture<Response> future = RetryAsyncSupplier.get(
scheduledExecutor,
() -> handler.operation(),
(r, ex) -> r != null && r.getStatusCode() != 200,
options);
Add as a maven dependency:
<dependency>
<groupId>io.github.akornatskyy</groupId>
<artifactId>retry</artifactId>
<version>1.0.0</version>
</dependency>
mvn versions:set -DnewVersion=1.X.0
mvn -P release clean deploy