首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当TTR耗尽时,QueueWorker会发生什么?

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

Stack Overflow用户
提问于 2016-12-21 11:29:19
回答 1查看 880关注 0票数 5

这涉及到Laravel5.3,豆茎,ttr和超时与队列和QueueWorkers的工作。TTR:https://github.com/kr/beanstalkd/wiki/faq

如果我正确理解队列中的作业,则在QueueWorker选择它时获取保留的状态。当ttr耗尽时,此作业状态将更改为就绪。但是QueueWorker会发生什么呢?

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

代码语言:javascript
复制
php artisan queue:work --tries=1 --timeout=600 --sleep=0

默认情况下,ttr设置为60秒。

在工作期间,对另一个站点执行请求,需要120秒才能做出响应。60秒后,作业被设置回就绪状态,因为TTR。QueueWorker会继续工作直到收到响应,最多600秒吗?或者,当到达TTR时,QueueWorker会停止工作吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-05 08:55:45

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

代码语言:javascript
复制
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

此代码所做的是从队列中弹出它的作业,并以命令的形式激发该作业:

代码语言:javascript
复制
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

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41261770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档