ekomobile/retry

带退避的重试

0.4.0 2018-12-13 12:14 UTC

This package is auto-updated.

Last update: 2024-09-14 02:50:26 UTC


README

Build Status GitHub release Downloads Coverage Maintainability Tech debt

这是一个从 https://github.com/cenkalti/backoff (感谢 @cenkalti) 端口到 PHP 的项目,它是从 Google 的 Java HTTP 客户端库 转移过来的指数退避算法。

指数退避 是一种算法,它使用反馈来乘法减少某些过程的速率,以逐步找到可接受的速率。重试次数以指数方式增加,并在达到某个阈值时停止增加。

示例

简单

使用默认指数退避进行重试。

(new Retry(function () {
    // workload ...
}))();

高级

$operation = function () {
  // workload ...
  if ($somePermanentFailCondition) {
    throw new \Ekomobile\Retry\Exception\Permanent(new \Exception('Unretryable error'))
  }
  // ...
  throw new Exception('Retryable error')
};

$backoff = new \Ekomobile\Retry\Backoff\WithMaxRetries(new \Ekomobile\Retry\Backoff\Exponential(), 5);

$notify = function (\Throwable $e) {
  // $logger->log($e);
};

$retry = new \Ekomobile\Retry\Retry($operation, $backoff, $notify);
$retry();