예제 #1
0
 /**
  * 重试中间件。根据提供的 decider 函数的布尔值结果,包装了请求的重试次数。
  *
  * 如果没提供延迟函数,默认使用一个指数延迟的简单实现。
  *
  * @param callable|null $decider 函数接受重试次数数值,请求,结果,和异常。如果判定
  *                               命令应该重试,则返回 true。
  * @param callable|null $delay   函数接受当前重试是第几次,返回应该延迟的毫秒数。
  *
  * @return callable
  */
 public static function retry(callable $decider = null, callable $delay = null)
 {
     $decider = $decider ?: RetryMiddleware::createDefaultDecider();
     $delay = $delay ?: [RetryMiddleware::class, 'exponentialDelay'];
     return function (callable $handler) use($decider, $delay) {
         return new RetryMiddleware($decider, $delay, $handler);
     };
 }
예제 #2
0
 public static function applyRetries($value, array &$arguments, HandlerList $list)
 {
     if ($value) {
         $decider = RetryMiddleware::createDefaultDecider($value);
         $list->appendSign(Middleware::retry($decider), 'retry');
     }
 }