los / cerberus
PHP 中的断路器模式实现
1.0.0
2019-06-24 18:48 UTC
Requires
- php: ^7.2
- psr/container: ^1.0
- psr/simple-cache: ^1.0
Requires (Dev)
- captainhook/plugin-composer: ^4.0
- php-coveralls/php-coveralls: ^2.1
- phpunit/phpunit: ^8.1
- squizlabs/php_codesniffer: ^3.4
- webimpress/coding-standard: dev-master@dev
- zendframework/zend-coding-standard: 2.0.0-alpha.3@alpha || ^2.0
Replaces
This package is auto-updated.
Last update: 2024-09-25 07:32:51 UTC
README
简介
这是一个 PHP 中的断路器模式实现。
这个库可以帮助你处理外部服务的超时和故障。
需求
- PHP >= 7.2
- 任何实现了 psr/simple-cache 的缓存库
安装
composer require los/cerberus:^1.0
配置
你可以手动创建一个 Cerberus 实例或者使用一个工厂
工厂
'factories' => [ Los\Cerberus\Cerberus::class => Los\Cerberus\CerberusFactory::class ],
并将配置文件 config/cerberus.global.php.dist 复制到 config/autoload/cerberus.global.php,然后根据需要进行更改。
return [ 'cerberus' => [ 'max_failures' => 5, 'timeout' => 60, ] ];
maxFailure
参数是在断路器打开并且服务不可用之前发生的失败次数。
当 timeout
到达时,断路器变为半打开状态,可以进行一次尝试,并更新状态。
工厂使用以下方式从容器中拉取缓存
$container->get(\Psr\SimpleCache\CacheInterface::class)
因此你需要有一个实现。
手动
你可以手动创建一个 Cerberus 实例
$storage = new Cache(); // Any psr/simple-cache implementation $cerberus = new Cerberus($storage, 5, 60);
用法
用法很简单。每次访问远程资源(如 Web 服务)时,检查其可用性并报告其成功或失败
if ($cerberus->isAvailable()) { try { $http->makeRequest(); $cerberus->reportSuccess(); } catch (\Exception $ex) { $cerberus->reportFailure(); } }
你可以使用 Cerberus 来控制多个服务。在这种情况下,使用传递服务名称的方法
if ($cerberus->isAvailable('service-one')) { try { $http->makeRequest(); $cerberus->reportSuccess('service-one'); } catch (\Exception $ex) { $cerberus->reportFailure('service-one'); } } if ($cerberus->isAvailable('service-two')) { try { $http->makeRequest(); $cerberus->reportSuccess('service-two'); } catch (\Exception $ex) { $cerberus->reportFailure('service-two'); } }