Skip to content

Circuit Breaker pattern implementation in PHP

License

Notifications You must be signed in to change notification settings

ksaveras/circuit-breaker

Repository files navigation

Circuit Breaker

Travis (.org) branch Maintainability Test Coverage PHPStan Level GitHub

More information: https://martinfowler.com/bliki/CircuitBreaker.html

Installation

composer require ksaveras/circuit-breaker

Use

Simple circuit check

use \Ksaveras\CircuitBreaker\Storage\Apcu;
use \Ksaveras\CircuitBreaker\CircuitBreaker;
use \Ksaveras\CircuitBreaker\Factory\CircuitFactory;

$storage = new Apcu();
$period = 300;

$circuitBreaker = new CircuitBreaker('service-api', $storage, new CircuitFactory($period));
$circuitBreaker->setFailureThreshold(3);

if ($circuitBreaker->isAvailable()) {
    try {
        // call 3rd party service api
        $circuitBreaker->success();
    } catch (\Exception $exception) {
        $circuitBreaker->failure();
    }   
}

Use callback

use \Ksaveras\CircuitBreaker\Storage\Apcu;
use \Ksaveras\CircuitBreaker\CircuitBreaker;
use \Ksaveras\CircuitBreaker\Exception\OpenCircuitException;
use \Ksaveras\CircuitBreaker\Factory\CircuitFactory;

$storage = new Apcu();
$period = 300;

$circuitBreaker = new CircuitBreaker('service-api', $storage, new CircuitFactory($period));
$circuitBreaker->setFailureThreshold(3);

try {
    $circuitBreaker->call(
        function () {
            $this->callApi();
        }
    );
} catch (OpenCircuitException $exception) {
    // Open circuit
} catch (\Exception $exception) {
    // 3rd party exception
}

Tests

composer test

Code quality

composer phpstan
composer phpcsfix