Spring / Resilience4j Interview questions
What is the difference between CallNotPermittedException and other Resilience4j exceptions?
| Exception | Thrown by / meaning |
| CallNotPermittedException | CircuitBreaker is OPEN; the call was never attempted. |
| BulkheadFullException | Bulkhead concurrency/queue limit reached; call rejected before running. |
| RequestNotPermitted | RateLimiter's permit timeout expired; call was never attempted. |
| TimeoutException | TimeLimiter's duration elapsed while the call was actually running. |
The common thread across the first three is that they all represent the call being refused before it ever reached the real dependency - the failure is entirely local, inside Resilience4j's own gatekeeping logic.
TimeoutException is different in kind: the call did start running against the actual dependency, it just didn't finish in time, which matters when deciding whether it's safe to assume the downstream side-effect happened or not.
More Related questions...