sparkcentral / backoff
带有重试(回退)功能的实用特质
v1.1.0
2016-11-10 02:17 UTC
Requires
- php: >=5.6
Requires (Dev)
- phpunit/phpunit: 4.*
This package is not auto-updated.
Last update: 2024-09-14 17:21:14 UTC
README
这是一个简单的实用特质,它提供了回退/重试功能。
功能
- 两种不同的策略:
backoffOnException
,backoffOnCondition
- 您可以提供异常类列表,以便只有在列表中的某个异常被抛出时才会进行重试。
- 您可以将自定义函数传递给
backoffOnCondition
,该函数定义是否重试操作。 - 重试带有延迟发生,延迟线性增长(y=x*2),您还可以传递自定义的起始延迟。
有关详细信息,请参阅backoffOnException()
,backoffOnCondition()
方法的文档。
依赖项
- PHP >= 5.6 (可变参数)
基本示例
<?php use Sparkcentral\Backoff\Backoff; class ExternalServiceWrapper { use Backoff; private $externalApiClient; public function __construct(ExternalApiClient $client) { $this->externalApiClient = $client; } public function getById($id) { $result = $this->backoffOnException( [$this->externalApiClient, 'get'], // call 'get' method on externalApiClient [$id], // pass this argument to 'get' 5, // try up to 5 times [ConnectException::class] // only retry on ConnectExceptions, will re-throw everything else ); return $result->getObject(); } }
类似地,如果尝试执行的代码没有抛出任何异常,但(例如)在失败时返回null
,则可以使用backoffOnCondition()
。
<?php use Sparkcentral\Backoff\Backoff; class ExternalServiceWrapper { use Backoff; private $externalApiClient; public function __construct(ExternalApiClient $client) { $this->externalApiClient = $client; } public function getById($id) { $result = $this->backoffOnCondition( [$this->externalApiClient, 'get'], [$id], 5, function ($result) { return !is_null($result); } ); return $result->getObject(); } }