redis = Container::getInstance()->make(Redis::class); $this->limiter = new DurationLimiter( $this->redis, $this->getKey($job), $this->maxAttempts, $this->decayMinutes * 60 ); if ($this->limiter->tooManyAttempts()) { return $job->release($this->limiter->decaysAt - $this->currentTime()); } try { $next($job); $this->limiter->clear(); } catch (Throwable $throwable) { if ($this->whenCallback && ! call_user_func($this->whenCallback, $throwable)) { throw $throwable; } $this->limiter->acquire(); return $job->release($this->retryAfterMinutes * 60); } } }