pyjac/opinmona

dev-master 2020-04-25 21:36 UTC

This package is auto-updated.

Last update: 2024-09-26 07:00:55 UTC


README

Opinmona 是 PHP 中 Circuit Breaker 的实现。

用法

Opinmona 作为您想要断路器保护的方法或任何可调用的包装器。

对象方法的用法

use Pyjac\Opinmona\CircuitBreakerFactory;
use Pyjac\Opinmona\CircuitBreakerOpenException;

class TestApi {
    public function send(string $a) {
        return $a;
    }
}

$api = new TestApi();
$cb = CircuitBreakerFactory::fromMethod($api, 'send');
try {
    $cb->invoke(2);
} catch(CircuitBreakerOpenException $e) {
    // 
}

可调用类的用法

use Pyjac\Opinmona\CircuitBreakerFactory;
use Pyjac\Opinmona\CircuitBreakerOpenException;

class TestApiCallable {
    public function __invoke(string $a)
    {
        return $a;
    }
}

$api = new TestApiCallable();

$cb = CircuitBreakerFactory::fromCallable($api);

try {
    $cb->invoke(2);
} catch(CircuitBreakerOpenException $e) {
    // 
}

函数的用法

use Pyjac\Opinmona\CircuitBreakerFactory;
use Pyjac\Opinmona\CircuitBreakerOpenException;

$testApiFunction = function (string $a) {
    return $a;
};

$cb = CircuitBreakerFactory::fromCallable($testApiFunction);

try {
    $cb->invoke('something');
} catch(CircuitBreakerOpenException $e) {
    // 
}

更新选项和存储

use Pyjac\Opinmona\CircuitBreakerFactory;
use Pyjac\Opinmona\CircuitBreakerOpenException;
use Symfony\Component\Cache\Adapter\ArrayAdapter;


class TestApiCallable {
    public function __invoke(string $a)
    {
        return $a;
    }
}


$options = [
    'ttl' => 5600,
    'cachePrefix' => 'my-key',
    'maxFailures' => 10,
    'retryTimeoutInSeconds' => 2,
];


// Error Check function
$errorCheck = function($response, $circuitObject)  {
    return false;
};

$api = new TestApiCallable();
$cb = CircuitBreakerFactory::fromCallable($api, $errorCheck, new ArrayAdapter(), $options);
try {
    $cb->invoke(5)
} catch(CircuitBreakerOpenException $e) {

};

默认选项