有时我需要释放一个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队列驱动程序。
答案 0 :(得分:1)
所以我最后删除并重新排列了一份新工作。也许不干净,但确实有效。
$this->delete();
$job = (new ProcessPage($this->pdf))->onQueue('converting');
dispatch($job);