pyjac / opinmona
dev-master
2020-04-25 21:36 UTC
Requires
- symfony/cache: ^4.3
Requires (Dev)
- phpunit/phpunit: ^8
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) { };