nestrs-resilience wraps fallible async work in composable policies. It is the NestJS @nestjs/resilience analogue: a ResilienceService that runs a closure under retry / timeout / circuit / bulkhead, plus typed ResilienceError and ResilienceEvent for HTTP/RPC mapping and observability.
Install
Register the module
ResilienceModule::register exports ResilienceService so injectables can take Arc<ResilienceService>.
Execute under a policy bundle
PolicyBundle fields
When a field is
None, ResilienceOptions.defaults apply.
Map errors at the HTTP boundary
Events
ResilienceService::subscribe() returns a broadcast::Receiver<ResilienceEvent> for retries, timeouts, and circuit transitions — useful for metrics counters.
Defaults that matter
- Jitter is on for
RetryPolicy::default()— do not disable in multi-instance deployments. - Circuit opens after 5 failures for 30s (
ResilienceOptionsdefaults). - AI (
nestrs-ai) uses this crate for model-call timeout/retry when theaifeature is enabled.
See also
- Reliability hub
- Security notes
- API reference
- Lab:
cargo run -p lab --bin lab9_nestjs12