samiles
samiles

Reputation: 3900

Release Queued Laravel Job without increasing Attempts count

Sometimes I need to release a Laravel job and have it rejoin the queue. However when doing this, the attempts count is increased. It becomes 2 and, if your queue worker is limited to 1 try, it will never be run.

How can I release without increasing attempts?

To release I am using:

$this->release(30);

Prior to this line I have tried the following code:

$payload = json_decode($this->payload, true);
if (isset($payload['attempts'])) {
    $payload['attempts'] = 0;
}
$this->payload = json_encode($payload);

This does not work. The payload property is not available. It seems to be present in the Job class.

The code Laravel framework has to reset count is in the RetryCommand class. It is as follows:

protected function resetAttempts($payload)
{
    $payload = json_decode($payload, true);
    if (isset($payload['attempts'])) {
        $payload['attempts'] = 0;
    }
    return json_encode($payload);
}

But I cannot work out how to access the $payload from my job class?

Is there a better way to release a job without increasing the attempt count?

I am using Laravel 5.4 and Redis queue driver.

Upvotes: 1

Views: 3166

Answers (1)

samiles
samiles

Reputation: 3900

So I just ended up deleting and requeuing a new job. Maybe not clean but it does work.

$this->delete();

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

Upvotes: 5

Related Questions