Вход Регистрация
Файл: vendor/laravel/framework/src/Illuminate/Queue/Middleware/ThrottlesExceptionsWithRedis.php
Строк: 48
<?php

namespace IlluminateQueueMiddleware;

use 
IlluminateContainerContainer;
use 
IlluminateContractsRedisFactory as Redis;
use 
IlluminateRedisLimitersDurationLimiter;
use 
IlluminateSupportInteractsWithTime;
use 
Throwable;

class 
ThrottlesExceptionsWithRedis extends ThrottlesExceptions
{
    use 
InteractsWithTime;

    
/**
     * The Redis factory implementation.
     *
     * @var IlluminateContractsRedisFactory
     */
    
protected $redis;

    
/**
     * The rate limiter instance.
     *
     * @var IlluminateRedisLimitersDurationLimiter
     */
    
protected $limiter;

    
/**
     * Process the job.
     *
     * @param  mixed  $job
     * @param  callable  $next
     * @return mixed
     */
    
public function handle($job$next)
    {
        
$this->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);
        }
    }
}
Онлайн: 1
Реклама