Выпуск задания 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 недоступно. Кажется, он присутствует в задании. класс.

Платформа кода 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.


person samiles    schedule 04.05.2017    source источник


Ответы (1)


Так что я просто удалил и поставил в очередь новую работу. Может и не чисто, но работает.

$this->delete();

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