Companion code for "Spring Framework 7's Built-in Resilience: @Retryable, @ConcurrencyLimit, and What's Left for Resilience4j". Every retry counted by recording real invocations: defaults, backoff and jitter, timeout, reactive and CompletableFuture returns, the concurrency limit's BLOCK and REJECT policies, retries around transactions, composition with Resilience4j 2.4.0, and the annotation API across 7.0.0-7.0.9. Co-Authored-By: Claude Opus 5 <[email protected]> Claude-Session: https://claude.ai/code/session_01C3TETMrqVUWeFkNtz3Jbo3
32 lines
1.4 KiB
Plaintext
32 lines
1.4 KiB
Plaintext
# GET /demo/r4j/combo (Spring Framework 7.0.9, Resilience4j 2.4.0, JDK 25)
|
|
# Source: src/main/java/com/ankurm/resilience/web/DemoController.java
|
|
|
|
{
|
|
"call 1": {
|
|
"caller got": "TransientException: payment gateway 503 (call 4)",
|
|
"method body ran": 4,
|
|
"elapsed (ms)": 35,
|
|
"breaker: buffered / failed / not permitted": "4 / 4 / 0",
|
|
"breaker state": "CLOSED"
|
|
},
|
|
"call 2": {
|
|
"caller got": "CallNotPermittedException: CircuitBreaker 'combo' is OPEN and does not permit further calls",
|
|
"method body ran": 1,
|
|
"elapsed (ms)": 33,
|
|
"breaker: buffered / failed / not permitted": "5 / 5 / 3",
|
|
"breaker state": "OPEN"
|
|
},
|
|
"MethodRetryEvents": [
|
|
"chargeWithBoth failed with TransientException -> will retry",
|
|
"chargeWithBoth failed with TransientException -> will retry",
|
|
"chargeWithBoth failed with TransientException -> will retry",
|
|
"chargeWithBoth failed with TransientException -> will retry",
|
|
"chargeWithBoth failed with RetryException -> retry aborted",
|
|
"chargeWithBoth failed with TransientException -> will retry",
|
|
"chargeWithBoth failed with CallNotPermittedException -> will retry",
|
|
"chargeWithBoth failed with CallNotPermittedException -> will retry",
|
|
"chargeWithBoth failed with CallNotPermittedException -> will retry",
|
|
"chargeWithBoth failed with RetryException -> retry aborted"
|
|
]
|
|
}
|