holidaypirates / pirate-circuit-breaker
我们在HolidayPirates中使用的2状态CircuitBreaker模式的实现
v1.0.0
2019-07-18 13:09 UTC
Requires
- php: >=7.3
- psr/simple-cache: ^1.0
Requires (Dev)
- cache/array-adapter: ^1.0
- cache/redis-adapter: ^1.0
- phpunit/phpunit: ^8.2
- roave/security-advisories: dev-master
This package is auto-updated.
Last update: 2024-09-29 05:02:41 UTC
README
这是HolidayPirates中使用的2状态(开启和关闭)CircuitBreaker模式的实现。
与Fowler提出的3状态CircuitBreaker不同,这个实现只有两个状态,“开启”和“关闭”。
安装
通过Composer
$ composer require holidaypirates/pirate-circuit-breaker
要求
- PHP 7.3
- 用于存储服务故障和电路状态的
\Psr\SimpleCache\CacheInterface
实现,或者你的\HolidayPirates\CircuitBreaker\Storage\StorageInterface
存储实现 - 仅用于开发:Docker和Docker-Compose
用法
<?php declare(strict_types=1); use HolidayPirates\CircuitBreaker\CircuitBreaker; use HolidayPirates\CircuitBreaker\Service\DummyService; use HolidayPirates\CircuitBreaker\Storage\Adapter\SimpleCacheAdapter; // Setup: $pool = new YourCachePool(); // Any implementation of \Psr\SimpleCache\CacheInterface $storageAdapter = new SimpleCacheAdapter($pool); $circuitBreaker = new CircuitBreaker($storageAdapter); $service = new DummyService(5, 60); //After 5 failed attempts it will wait 60 seconds before allowing more requests. $circuitBreaker->registerService($service); // Usage: $dummyApiClient = new DummyApiClient(); // This will be any service you want to protect with the CB if (false == $circuitBreaker->isServiceAvailable(DummyService::class)) { throw new \Exception('Service unavailable'); } try { $response = $dummyApiClient->sendRequest(); $circuitBreaker->reportSuccess(DummyService::class); } catch (Exception $exception) { $circuitBreaker->reportFailure(DummyService::class); throw new \Exception('Service unavailable',0, $exception); }
请注意,
HolidayPirates\CircuitBreaker\Service\DummyService
只是\HolidayPirates\CircuitBreaker\Service\ServiceInterface
的一个实现。
你必须为每个你希望CircuitBreaker运行的服务创建自己的\HolidayPirates\CircuitBreaker\Service\ServiceInterface
实现。
有关用法示例,请参阅\HolidayPirates\Tests\Integration\CircuitBreaker\CircuitBreakerTest
测试
$ docker-compose run php vendor/bin/phpunit
致谢
许可
MIT许可(MIT)。有关更多信息,请参阅许可文件。