gpt4 book ai didi

laravel - 当 TTR 耗尽时,QueueWorker 会发生什么?

转载 作者:行者123 更新时间:2023-12-02 11:03:08 25 4
gpt4 key购买 nike

这与 Laravel 5.3、beanstalk、ttr 和超时与 Queue 和 QueueWorkers 相关。传输率:https://github.com/kr/beanstalkd/wiki/faq

如果我理解正确的话,当 QueueWorker 选取它时,队列中的作业将获得保留的状态。当 ttr 用完时,此作业状态将更改回就绪状态。但是 QueueWorker 会发生什么呢?

假设 QueueWorker 通过以下命令将超时设置为 600:

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

ttr 默认设置为 60 秒。

在作业期间,向另一个站点发出请求,需要 120 秒才能响应。 60 秒后,由于 TTR,作业将设置回就绪状态。 QueueWorker 是否会继续处理作业直到收到响应(最多 600 秒)?或者当达到 TTR 时 QueueWorker 会停止工作吗?

最佳答案

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

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

引用: https://github.com/laravel/framework/blob/5.2/src/Illuminate/Queue/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

关于laravel - 当 TTR 耗尽时,QueueWorker 会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41261770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com