Освободить задание 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);
Другие вопросы по тегам