1

有时我需要释放一个 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物业不可用。它似乎存在于Job 类中。

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 队列驱动程序。

4

1 回答 1

4

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

$this->delete();

$job = (new ProcessPage($this->pdf))->onQueue('converting');
dispatch($job);
于 2017-05-05T09:18:07.970 回答