Resiliencia

Resiliencia — resilience patterns for Java 21

five patterns · one fluent api · zero core dependencies

Retry, Timeout, CircuitBreaker, Bulkhead and RateLimiter for Java 21+. Built on virtual threads and composed with an explicit order the library validates for you — no reflection, no magic, nothing to configure twice.

  • jdk 21+
  • 0 deps · core / patterns / compose
  • 5 patterns
  • virtual threads

composition

Chain them with Policy

Policy.compose(...).and(...) builds an explicit call chain. The order is checked at construction time — not every combination makes sense.

Checkout.java
var policy = Policy.compose(circuitBreaker)
                    .and(retry)
                    .and(timeout);

policy.call(() -> api.fetchOrder(id));

Retry wrapping a CircuitBreaker throws InvalidPolicyException at construction — there's no legitimate use case for retrying past an open circuit.

javadoc

One module at a time

Each module ships its own Javadoc jar — no monolithic API surface to wade through.

modulewhat's in itexternal deps
resiliencia-coreResilient, Outcome<T>, exception hierarchy, SPInone
resiliencia-patternsRetry, Timeout, CircuitBreaker, Bulkhead, RateLimiternone
resiliencia-composePolicy — fluent, validated compositionnone
resiliencia-metricsResilienciaMetrics abstractionnone
resiliencia-micrometerResilienciaMetrics over Micrometer's MeterRegistryMicrometer
resiliencia-testFakes, ManualClock, JUnit 5 assertionsJUnit 5
resiliencia-spring (coming soon)Auto-config, @WithRetry, @WithCircuitBreakerSpring Boot

↳ published from each module's javadoc:jar to Maven Central. This site also hosts a combined, aggregated copy, rebuilt by CI on every push to main.

open the aggregated javadoc →