/** * 重试中间件。根据提供的 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); }; }
public static function applyRetries($value, array &$arguments, HandlerList $list) { if ($value) { $decider = RetryMiddleware::createDefaultDecider($value); $list->appendSign(Middleware::retry($decider), 'retry'); } }