【问题标题】:Release Queued Laravel Job without increasing Attempts count在不增加尝试次数的情况下释放排队的 Laravel 作业
【发布时间】:2017-05-05 17:18:07
【问题描述】:

有时我需要释放一个 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 队列驱动程序。

【问题讨论】:

    标签: php laravel laravel-queue


    【解决方案1】:

    所以我最终删除并重新排队了一份新工作。也许不干净,但它确实有效。

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

    【讨论】:

      猜你喜欢
      • 2016-09-12
      • 2020-03-11
      • 2018-04-05
      • 1970-01-01
      • 2020-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-16
      相关资源
      最近更新 更多