# ExternalService v3.2.0 - API Reference

## Modules

- [ExternalService](ExternalService.md): ExternalService handles all retry and circuit breaker logic for calls to external services.
- [ExternalService.CircuitBreaker](ExternalService.CircuitBreaker.md): The behaviour implemented by circuit breaker backends.
- [ExternalService.CircuitBreaker.Cluster](ExternalService.CircuitBreaker.Cluster.md): A circuit breaker that trips the whole cluster when any one node trips.
- [ExternalService.CircuitBreaker.Fuse](ExternalService.CircuitBreaker.Fuse.md): The default circuit breaker backend, built on the
[`:fuse`](https://github.com/jlouis/fuse) library.
- [ExternalService.Concurrency](ExternalService.Concurrency.md): A per-service concurrency limit — the bulkhead pattern.
- [ExternalService.Decorator](ExternalService.Decorator.md): Decorator-based annotations for marking functions as external-service calls.
- [ExternalService.Flow](ExternalService.Flow.md): [`Flow`](https://hexdocs.pm/flow)-based parallel processing of an enumerable
(or another `Flow`) through guarded `ExternalService` calls.
- [ExternalService.Gateway](ExternalService.Gateway.md): Deprecated. Use `use ExternalService` instead.
- [ExternalService.Insights](ExternalService.Insights.md): Watches a service's telemetry and reports when its configuration is not doing
what it was meant to do.
- [ExternalService.Insights.Report](ExternalService.Insights.Report.md): What `ExternalService.Insights` has observed for one service.
- [ExternalService.RateLimiter](ExternalService.RateLimiter.md): The behaviour implemented by rate limiter backends.
- [ExternalService.RateLimiter.Hammer](ExternalService.RateLimiter.Hammer.md): Rate limiter backend backed by a [Hammer](https://hexdocs.pm/hammer) rate
limiter module.
- [ExternalService.RateLimiter.Local](ExternalService.RateLimiter.Local.md): The default rate limiter backend: a node-local token bucket.
- [ExternalService.RetryOptions](ExternalService.RetryOptions.md): Options that control retry logic for calls to external services.
- [ExternalService.Simulation](ExternalService.Simulation.md): The result of `ExternalService.simulate/3`.
- [ExternalService.Test](ExternalService.Test.md): ExUnit helpers for the setup and assertions the [Testing](testing.md) guide
otherwise asks you to hand-write.
- [ExternalService.Test.Coverage](ExternalService.Test.Coverage.md): Which resilience paths your test suite actually exercised.

- Exceptions
  - [ExternalService.CircuitBreakerOpen](ExternalService.CircuitBreakerOpen.md): Raised or returned when a call is rejected because the service's circuit breaker
is open (the fuse is blown).
  - [ExternalService.RateLimited](ExternalService.RateLimited.md): Raised or returned when a call could not be made within the service's
configured rate limit `:wait` budget.
  - [ExternalService.RetriesExhausted](ExternalService.RetriesExhausted.md): Raised or returned when the allowable number of retries (or the retry time
budget) is exceeded while calling an external service.
  - [ExternalService.ServiceNotStarted](ExternalService.ServiceNotStarted.md): Raised or returned when a call is made to a service that has not been started
with `ExternalService.start/2`.
  - [ExternalService.ServiceSaturated](ExternalService.ServiceSaturated.md): Raised or returned when a call could not be made because the service's
concurrency limit was already fully in use.

