什么会阻止队列中的作业处理? [PHP / Laravel 5]

Posted

技术标签:

【中文标题】什么会阻止队列中的作业处理? [PHP / Laravel 5]【英文标题】:What would prevent jobs in a queue from processing? [PHP / Laravel 5] 【发布时间】:2016-03-15 00:50:27 【问题描述】:

我在 Laravel 5 中设置了一个队列来删除公司和相关记录。每次发生这种情况时,后端都会发生大量工作,因此队列是我的最佳选择。

我设置了我的config/queue.php 文件和我的.env 文件,以便使用database 驱动程序。我正在使用Queue::pushOn 方法将作业推送到名为company_deletions 的队列中。例如。

Queue::pushOn('company_deletions', new CompanyDelete($id));

其中CompanyDelete 是使用php artisan command:make CompanyDelete --queued 创建的命令

我已尝试使用以下命令处理我的队列:

php artisan queue:work
php artisan queue:work company_deletions
php artisan queue:listen
php artisan queue:listen company_deletions
php artisan queue:work database
php artisan queue:listen database

有时在查看上述命令的输出时,我会收到以下错误:

[InvalidArgumentException]  
No connector for []  

即使我没有收到错误,由于某种原因,我也无法让它实际处理作业。当我查看我的jobs 表时,我可以看到队列中的作业,但是attempts 列显示0,reserved 显示0 并且reserved_at 为空。我错过了一些步骤吗?我已经多次查看文档,但无法终生找出问题所在。我也没有在 laravel 错误日志中看到任何内容。一旦这些作业在jobs 数据库中,什么会阻止它们被处理?任何帮助表示赞赏。

【问题讨论】:

你应该公开你的config/queue.php 查看日志,看看有没有什么错误…… 如果 laravel 处理失败,它可以记录,它可能会帮助您调试。更多-laravel.com/docs/5.0/queues#failed-jobs 没有日志很难调试这个问题 【参考方案1】:

我遇到了一个类似的问题,因为我没有在默认队列中添加作业..

        $job = (new EmailJob(
            $this->a,
            $this->b,
            $this->c,
            $this->d,
            $e
        ))->onQueue('emails');

那我得听具体的队列:

php artisan queue:listen --queue=emails

在你的情况下是

php artisan queue:listen --queue=company_deletions

【讨论】:

以上是关于什么会阻止队列中的作业处理? [PHP / Laravel 5]的主要内容,如果未能解决你的问题,请参考以下文章

如何防止 Elastic Beanstalk 上长时间运行的作业在不阻止缩减的情况下终止?

阻止用户访问我的 cron 作业脚本

使用Supervisor来管理你的Laravel队列

PHP之错误处理

PHP 在CodeIgniter中阻止对CRON作业脚本的公共访问

阻止 Visual Studio 2013 自动删除作业中的多余空格