OkHttp
The Failsafe OkHttp integration allows Failsafe policies to be composed around OkHttp calls.
Setup
Add the latest failsafe and failsafe-okhttp dependencies to your project.
Usage
Create a FailsafeCall that composes a policy around an OkHttp Call:
Call call = client.newCall(request);
RetryPolicy<Response> retryPolicy = RetryPolicy.ofDefaults();
FailsafeCall failsafeCall = FailsafeCall.with(retryPolicy).compose(call);
// Execute with retries
Response response = failsafeCall.execute();
Failure handling works just as it does with any Failsafe execution.
Async Execution
Async execution can also be performed for a FailsafeCall, which returns a CompletableFuture:
CompletableFuture<Response> future = failsafeCall.executeAsync();
Policy Composition
Multiple policies can be composed around an OkHttp Call:
FailsafeCall failsafeCall = FailsafeCall.with(fallback)
.compose(retryPolicy)
.compose(circuitBreaker)
.compose(call);
The same statement can also be written as:
FailsafeCall failsafeCall = FailsafeCall.with(fallback, retryPolicy, circuitBreaker).compose(call);
See the policy-composition docs for more details.
Cancellation
When a FailsafeCall is cancelled, the underlying OkHttp Call is also cancelled:
failsafeCall.cancel();
This is also true when cancellation is performed via an async execution’s future:
CompletableFuture<Response> future = failsafeCall.executeAsync();
future.cancel(false);
Failsafe Executor
A FailsafeExecutor configured with event listeners or an ExecutorService can be used to create a FailsafeCall:
FailsafeExecutor<Response> failsafe = Failsafe.with(retryPolicy)
.with(executorService)
.onSuccess(e -> log.info("Found user {}", e.getResult()))
.onFailure(e -> log.error("Failed to find user", e.getException()));
FailsafeCall failsafeCall = FailsafeCall.with(failsafe).compose(call);