Download the PHP package webrek/laravel-circuit-breaker without Composer
On this page you can find all versions of the php package webrek/laravel-circuit-breaker. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download webrek/laravel-circuit-breaker
More information about webrek/laravel-circuit-breaker
Files in webrek/laravel-circuit-breaker
Package laravel-circuit-breaker
Short Description A circuit breaker for Laravel: stop hammering a failing dependency, fail fast, and recover automatically.
License MIT
Homepage https://github.com/webrek/laravel-circuit-breaker
Informations about the package laravel-circuit-breaker
Laravel Circuit Breaker
Stop a failing dependency from dragging your app down with it. Wrap calls to an external service in a circuit breaker: after enough failures it trips open and fails fast — so requests stop piling up on a downed endpoint — then probes for recovery and closes itself once the service is healthy again.
Why
When a downstream service (a payment gateway, a partner API, a webhook endpoint) gets slow or goes down, every request to it hangs until it times out. Those requests pile up, exhaust your workers and connection pool, and their outage becomes yours: a cascading failure. A circuit breaker watches for failures and, once they cross a threshold, cuts off subsequent calls during a cooldown so your app keeps responding while the dependency recovers.
Installation
Optionally publish the config:
State is stored in the cache. In production, point it at a centralized store (Redis) so the breaker is shared across every process and server: the array and file drivers only protect a single process.
How it works
A circuit moves between three states:
- Closed — calls pass through. Each consecutive failure is counted; once it
reaches
failure_threshold, the circuit trips open. - Open — calls are cut off immediately (fallback or
CircuitOpenException) without touching the dependency. Aftercooldown_seconds, the next call is allowed as a trial: half-open. - Half-open — trial calls are let through.
success_thresholdconsecutive successes close the circuit; a single failure trips it open again.
Usage
With a fallback
When a fallback is provided, an open circuit (or a failing call) returns it
instead of throwing. The fallback receives the Throwable:
Without a fallback
Omit it and the breaker rethrows the underlying exception — or throws
CircuitOpenException while open — for you to handle yourself:
Not every exception is a failure
A 422 from a validation error means your request was wrong, not that the
service is down: it shouldn't open the breaker. List those exceptions under
ignore and they pass through without affecting the circuit:
Pairs with the outbox
The relay in webrek/laravel-outbox can deliver through a breaker so it stops retrying against an already-downed endpoint, and resumes automatically once it recovers.
Observability & operations
Lifecycle events let you alert on state changes:
| Event | When |
|---|---|
CircuitOpened |
A circuit tripped open. |
CircuitHalfOpened |
An open circuit started a recovery trial. |
CircuitClosed |
A circuit recovered. |
Force a circuit closed by hand:
Inspect state in code with CircuitBreaker::for('payments')->state() and
->available().
Configuration
Requirements
| Component | Version |
|---|---|
| PHP | 8.2+ |
| Laravel | 12.x / 13.x |
| Cache | A shared store (Redis) in production |
Testing
Contributing
See CONTRIBUTING.md.
Security
Please review the security policy before reporting a vulnerability.
License
Released under the MIT License.
All versions of laravel-circuit-breaker with dependencies
illuminate/cache Version ^12.0 || ^13.0
illuminate/console Version ^12.0 || ^13.0
illuminate/contracts Version ^12.0 || ^13.0
illuminate/support Version ^12.0 || ^13.0