Освободить задание Laravel в очереди без увеличения количества попыток
Иногда мне нужно освободить задание 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 Framework должен сбросить счетчик в 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 ответ
Так что я просто удалил и поставил новую работу в очередь. Может быть, не чисто, но это работает.
$this->delete();
$job = (new ProcessPage($this->pdf))->onQueue('converting');
dispatch($job);