当TTR用完时,排队工作者会发生什么



这与Laravel 5.3,Beanstalk,TTR以及与队列和排队工作者一起工作的超时。ttr:https://github.com/kr/beanstalkd/wiki/faq

如果我正确理解了队列的作业,那么当排队工作者选择它时,请保留状态。当TTR用完时,此职位状态将更改为准备就绪。但是,排队工作会发生什么?

假设队列者的超时将以下命令设置为600:

php artisan queue:work --tries=1 --timeout=600 --sleep=0

ttr默认设置为60秒。

在工作期间,请求对另一个站点提出请求,并且需要120秒才能响应。60秒后,由于TTR,该作业被设置回现状状态。排队工作者会一直从事工作直到收到响应,最多600秒吗?或者,当达到TTR时,排队工作者会停止工作?

实际上,排队工作者将运行直到作业完成为止。当您在没有守护程序标志的情况下运行队列工人时,它将运行以下代码:

return $this->worker->pop(
    $connection, $queue, $delay,
    $this->option('sleep'), $this->option('tries')
);

参考:https://github.com/laravel/framework/blob/5.2/src/illuminate/queue/ceone/console/workcommand.php#l123

该代码的作用是从队列中弹出其作业,并将该作业作为命令射击:

public function process($connection, Job $job, $maxTries = 0, $delay = 0)
{
    if ($maxTries > 0 && $job->attempts() > $maxTries) {
        return $this->logFailedJob($connection, $job);
    }
    try {
        $job->fire();
        $this->raiseAfterJobEvent($connection, $job);
        return ['job' => $job, 'failed' => false];
    } catch (Exception $e) {
        if (! $job->isDeleted()) {
            $job->release($delay);
        }
        throw $e;
    } catch (Throwable $e) {
        if (! $job->isDeleted()) {
            $job->release($delay);
        }
        throw $e;
    }
}

参考:https://github.com/laravel/framework/blob/5.2/src/illuminate/queue/worker.php#l213

挖掘源以获取更多信息:https://github.com/laravel/framework/tree/5.2/src/illuminate/queue

相关内容

  • 没有找到相关文章

最新更新