OkHttp

  1. Setup
  2. Usage
    1. Async Execution
    2. Policy Composition
    3. Cancellation
    4. Failsafe Executor

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

Creating a FailsafeCall that composes a policy around an OkHttp Call is straightforward:

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);