mt-olympus / cerberus
1.1.0
2016-07-22 14:42 UTC
Requires
- php: ^5.6 || ^7.0
- zendframework/zend-cache: ^2.7
- zendframework/zend-servicemanager: ^2.7 || ^3.0
- zendframework/zend-stdlib: ^2.7 || ^3.0
Requires (Dev)
- phpunit/phpunit: ^5.0
- satooshi/php-coveralls: ~0.6
- squizlabs/php_codesniffer: ^2.3
This package is auto-updated.
Last update: 2022-02-01 12:52:47 UTC
README
介绍
这是一个 PHP 中断路器模式的实现。
这个库可以帮助您处理外部服务的超时和故障。
它能够检测服务故障并自我适应。
您可以结合这个库与 Metis 来实现可靠的负载均衡服务。
要求
- PHP >= 5.5
- Zend 缓存
安装
composer require mt-olympus/cerberus:~1.0
配置
您可以手动创建一个 Cerberus 实例或使用工厂
工厂
如果您使用的是 Container Interopt 兼容的项目,您可以定义一个工厂
'factories' => [ Cerberus\Cerberus::class => Cerberus\Factory::class ],
并将配置文件 config/cerberus.global.php.dist 复制到您的 config/autoload/cerberus.global.php,并根据需要进行更改。
return [ 'cerberus' => [ 'max_failues' => 5, 'timeout' => 60, 'storage' => [ 'adapter' => [ 'name' => 'filesystem', 'options' => [ 'cache_dir' => 'data/cache', 'namespace' => 'my_project' ] ], 'plugins' => [ // Don't throw exceptions on cache errors 'exception_handler' => [ 'throw_exceptions' => false ] ] ] ] ];
maxFailure
参数是在电路打开并且服务不可用之后发生的失败次数。
当达到 timeout
时,电路变为半开状态,可以进行一次尝试并更新状态。
存储键是 zend-cache 配置。您可以查看 官方文档。
存储内部的 namespace
键非常重要。它定义了 Cerberus 缓存功能的默认命名空间。如果您选择使用服务名称调用 Cerberus 方法(见下文用法),则可以省略此选项,因为它将被忽略。
手动
您可以通过手动方式创建一个 Cerberus 实例
$storage = StorageFactory::factory($storageConfig); $cerberus = new Cerberus($storage, 5, 60);
$storageConfig 是上面的 zend-cache 配置。
用法
用法很简单。每次您访问远程资源(如 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'); } }