Laravel队列作业失败后不会重试

时间:2020-07-15 00:58:57

标签: php laravel queue jobs

问题

我正在分派作业以执行需要准备好正确执行资源的操作,因此,如果操作失败,则需要一段时间后重试。 但是真正发生的是,如果失败,它将不再执行。 我正在使用Supervisor来管理队列和数据库驱动程序,并且在默认的 queue.php 配置文件中未做任何更改。

使用Laravel 5.8。

我尝试过的事情

我已经尝试过手动设置作业类中的尝试次数

    public $tries = 5; 

以及重试延迟相同的东西

    public $retryAfter = 60;

我的代码

我正在基于使用make:job制成的默认作业模板来实现此作业,我的构造函数和handle方法如下所示:

    public function __construct($event, $data)
    {
        $this->event = $event;
        $this->data = $data;
    }

    public function handle()
    {
        Log::info('Job started | ' . $this->event . ' | Attempt: ' . $this->attempts());
        
        // Executes some logic and throws an Exception if it fails

        Log::info('Job succeeded | ' . $this->event);
    }

最后,它不会到达“作业成功”日志,并且不会记录除1以外的任何其他尝试。

我是否缺少某些概念,或者该代码是否因某种原因而错误?

1 个答案:

答案 0 :(得分:2)

实际上这是一个非常愚蠢的问题。但是,如果有人像我一样愚蠢,我将在这里提供解决方案。

在我的 queue.php 中,默认驱动程序设置为 sync ,这导致该程序仅运行作业处理方法,但没有将其排队,因为我说过我什么都没改变。因此,我只是将其设置为数据库,并且它已修复。