idealizetecnologia / circuit-breaker-php
PHP 的断路器
2.0.2
2019-10-07 13:04 UTC
Requires
- php: >=7.1
- ext-redis: *
Requires (Dev)
- phpunit/php-code-coverage: ^6.1
- phpunit/phpunit: ~7.0
- symfony/var-dumper: ^4.3
This package is not auto-updated.
Last update: 2024-09-17 14:58:42 UTC
README
有关此模式的更多信息,请参阅 此处。
此实现目前只支持 redis 适配器
从 composer 开始
composer require leocarmo/circuit-breaker-php
Redis 适配器
第一个参数是 redis 连接,第二个是你的产品名称,为了避免与使用相同 redis 的其他产品发生键冲突,请使用 redis 命名空间。
use LeoCarmo\CircuitBreaker\CircuitBreaker; // Connect to redis $redis = new \Redis(); $redis->connect('localhost', 6379); $adapter = new \LeoCarmo\CircuitBreaker\Adapters\RedisAdapter($redis, 'my-product'); // Set redis adapter for CB CircuitBreaker::setAdapter($adapter);
设置断路器设置
这不是必需的,将使用默认值
// Configure settings for CB CircuitBreaker::setGlobalSettings([ 'timeWindow' => 60, // Time for an open circuit (seconds) 'failureRateThreshold' => 50, // Fail rate for open the circuit 'intervalToHalfOpen' => 30, // Half open time (seconds) ]);
为特定服务配置设置
// Configure settings for specific service CircuitBreaker::setServiceSettings('my-custom-service', [ 'timeWindow' => 30, // Time for an open circuit (seconds) 'failureRateThreshold' => 15, // Fail rate for open the circuit 'intervalToHalfOpen' => 10, // Half open time (seconds) ]);
检查断路器是否可用(关闭)
每个检查针对特定服务。因此,您可以在同一应用程序中具有多个服务,当一个断路器打开时,其他服务可以正常工作。
// Check circuit status for service: `my-service` if (! CircuitBreaker::isAvailable('my-service')) { die('Circuit is not available!'); }
记录成功和失败
// Usage example for success and failure try { Service::execute('something'); CircuitBreaker::success('my-service'); } catch (\ServiceException $e) { CircuitBreaker::failure('my-service'); die($e->getMessage()); }