moontechs/circuit-breaker
最新稳定版本:0.0.3
Composer 安装命令:
composer require moontechs/circuit-breaker
包简介
An in memory (default driver) circuit breaker implementation with different strategies. No dependencies.
README 文档
README
An in-memory (default driver) circuit breaker implementation with different strategies. It is very useful if you have a long job that does a lot of HTTP requests in a loop. Check the Example section.
No dependencies.
Installation
composer require moontechs/circuit-breaker
Usage
Choose a strategy
- Counter strategy - simple failures increment. When a limit is reached
isAvailablefunction returns false. Calling thesuccessfunction will reset the counter (will set 0).limit- the default value is 5. Use thesetLimit(int)method to change it.
use Moontechs\CircuitBreaker\CircuitBreaker; use Moontechs\CircuitBreaker\Drivers\InMemoryDriver; use Moontechs\CircuitBreaker\Strategies\CounterStrategy; $circuitBreaker = new CircuitBreaker( new CounterStrategy( new InMemoryDriver() ) );
- Time frame strategy - failures increment during a specified time frame. When a limit is reached during the time frame
isAvailablefunction returns false. Calling thesuccessfunction will reset the counter (will set 0).limit- the default value is 5. Use thesetLimit(int)method to change it.timeFrame- the default value is 300 seconds. Use thesetTimeFrame(int)method to change it.
use Moontechs\CircuitBreaker\CircuitBreaker; use Moontechs\CircuitBreaker\Drivers\InMemoryDriver; use Moontechs\CircuitBreaker\Strategies\TimeFrameStrategy; $circuitBreaker = new CircuitBreaker( new TimeFrameStrategy( new InMemoryDriver() ) );
The default driver is InMemoryDriver. It does not share the data between processes.
Example
An example of a real-world usage.
use Moontechs\CircuitBreaker\CircuitBreaker; use Moontechs\CircuitBreaker\Drivers\InMemoryDriver; use Moontechs\CircuitBreaker\Strategies\CounterStrategy; $circuitBreaker = new CircuitBreaker( new CounterStrategy( new InMemoryDriver() ) ); foreach ($data as $datum) { try { exampleHttpRequest($datum); // This is optional. In case if you want to reset the failures counter. $circuitBreaker->success('example'); } catch (\Exception $exception) { $circuitBreaker->failure('example'); // The following condition could be used to throw an exception or repeat a request later. if (!$circuitBreaker->isAvailable('example')) { throw $exception; } // This is optional. In case you want to prevent another service from spamming and give it some time to recover. sleep($circuitBreaker->getFailuresCount() * 10); } }
统计信息
- 总下载量: 58
- 月度下载量: 0
- 日度下载量: 0
- 收藏数: 0
- 点击次数: 0
- 依赖项目数: 0
- 推荐数: 0
其他信息
- 授权协议: MIT
- 更新时间: 2023-10-01