释放排队的Laravel作业而不增加尝试次数

时间:2017-05-04 15:29:54

标签: php laravel laravel-queue

有时我需要释放一个Laravel作业并让它重新加入队列。但是,在执行此操作时,尝试计数会增加。它变为2,如果你的队列工作者被限制为1次尝试,它将永远不会被运行。

如何在不增加尝试的情况下发布?

要发布我正在使用:

$this->release(30);

在此行之前,我尝试了以下代码:

$payload = json_decode($this->payload, true);
if (isset($payload['attempts'])) {
    $payload['attempts'] = 0;
}
$this->payload = json_encode($payload);

这不起作用。 payload属性不可用。它似乎出现在the Job class

Laravel框架代码必须重置计数在RetryCommand类中。它如下:

protected function resetAttempts($payload)
{
    $payload = json_decode($payload, true);
    if (isset($payload['attempts'])) {
        $payload['attempts'] = 0;
    }
    return json_encode($payload);
}

但是我无法弄清楚如何从我的工作类中访问$payload

有没有更好的方法在不增加尝试次数的情况下释放作业?

我使用的是Laravel 5.4和Redis队列驱动程序。

1 个答案:

答案 0 :(得分:1)

所以我最后删除并重新排列了一份新工作。也许不干净,但确实有效。

$this->delete();

$job = (new ProcessPage($this->pdf))->onQueue('converting');
dispatch($job);