Lab 10: Distributed Patterns — Resilience4j

Time: 60 minutes | Level: Architect | Docker: docker run -it --rm zchencow/innozverse-java:latest bash


Overview

Production distributed systems require fault tolerance and consistency patterns. Master Resilience4j's circuit breaker, retry, rate limiter, and bulkhead; implement the saga pattern with compensating transactions; model event sourcing and CQRS; and implement the outbox pattern with SQLite.


Step 1: Resilience4j Architecture

Resilience4j decorators (apply in this order for best results):
  Retry → CircuitBreaker → RateLimiter → TimeLimiter → Bulkhead → Function

Circuit Breaker State Machine:
  CLOSED ──(failure rate > threshold)──► OPEN
    ▲                                       │
    │                                   (wait duration)
    │                                       │
    └──(half-open test passes)────── HALF_OPEN ──(fails)──► OPEN

RateLimiter: token bucket — limits calls per time window
Bulkhead:    semaphore — limits concurrent calls
Retry:       exponential backoff with jitter

Step 2: Circuit Breaker

📸 Verified Output:


Step 3: Retry with Exponential Backoff


Step 4: Saga Pattern — Compensating Transactions


Step 5: Event Sourcing — In-Memory EventStore


Step 6: CQRS — Read/Write Models


Step 7: Outbox Pattern with SQLite


Step 8: Capstone — Resilience4j Circuit Breaker State Transitions

📸 Verified Output:


Summary

Pattern
Library/API
Use Case

Circuit breaker

Resilience4j CircuitBreaker

Prevent cascade failures

Retry

Resilience4j Retry

Transient error recovery

Rate limiter

Resilience4j RateLimiter

Traffic shaping

Bulkhead

Resilience4j Bulkhead

Concurrency isolation

Saga

Compensating transactions

Distributed transaction

Event sourcing

Append-only EventStore

Full audit trail, replay

CQRS

Separate read/write models

Query optimization

Outbox pattern

SQLite transactional table

At-least-once delivery

Last updated