yaknet/circuit-breaker

A robust and resilient Circuit Breaker implementation for PHP applications.

Maintainers

Package info

github.com/yakistir98/php-circuit-breaker

Homepage

pkg:composer/yaknet/circuit-breaker

Statistics

Installs: 1

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

dev-main 2026-05-13 16:15 UTC

This package is auto-updated.

Last update: 2026-05-13 16:19:15 UTC


README

PHP Version License

A robust, resilient, and lightweight Circuit Breaker implementation for modern PHP applications. Prevent cascading failures and make your system more reliable when interacting with external APIs or microservices.

๐Ÿš€ Features

  • Modern PHP 8.1+: Leverages Enums, Readonly properties, and strictly typed logic.
  • Fail-Fast Strategy: Immediately blocks requests to failing services to save resources and allow recovery.
  • Three-State Management: Full support for CLOSED, OPEN, and HALF_OPEN states.
  • Storage Agnostic: Comes with FileStorage out of the box, with an interface to easily add Redis or Memcached.
  • Developer Friendly: Simple API and zero-dependency core.

๐Ÿ“ฆ Installation

composer require yaknet/circuit-breaker

๐Ÿ›  Usage

Basic Example

use YakNet\CircuitBreaker\CircuitBreaker;
use YakNet\CircuitBreaker\Storage\FileStorage;
use YakNet\CircuitBreaker\Settings;

// 1. Initialize Storage
$storage = new FileStorage(__DIR__ . '/cache');

// 2. Configure Settings (Optional)
$settings = new Settings(
    failureThreshold: 5,
    retryTimeout: 60
);

// 3. Create the Breaker
$breaker = new CircuitBreaker('GeminiAPI', $storage, $settings);

// 4. Run your risky operation
try {
    $result = $breaker->run(function() {
        // Your logic here (e.g. API call)
        return $api->fetchData();
    });
} catch (\YakNet\CircuitBreaker\Exception\CircuitOpenException $e) {
    // Service is currently down, handle gracefully
    echo "Service unavailable. Try again in " . $e->getMessage();
}

๐Ÿ”ง Core States

State Description
CLOSED Normal operation. Requests flow through to the service.
OPEN Failure threshold reached. Requests fail immediately without hitting the service.
HALF_OPEN Trial period. A limited number of requests are allowed to check if the service recovered.

๐Ÿงช Testing

composer test

๐Ÿ“„ License

The MIT License (MIT). Please see License File for more information.

Developed with โค๏ธ by YakNet