如何检查Laravel中队列的状态?

时间:2016-08-07 12:09:14

标签: laravel laravel-queue

我需要向Laravel queue提交一些作业来处理一些上传的CSV文件。如果文件较小,这些作业可以在一秒钟内完成,如果文件较大则可以在几秒钟内完成,如果CSV文件非常大,则可能在一秒钟内完成。我无法预先告诉文件有多大。

当用户进入"结果"页面,我需要显示结果 - 但只有队列完成了作业。如果队列仍在处理中,我需要显示一个"稍后再试一次"消息。

那么 - 是否有办法从控制器检查队列是否已完成?

我目前正在使用Laravel 5.1,但如果有帮助,我会很乐意升级。我目前正在使用database queue driver。理想情况下,我喜欢找到一种适用于所有队列驱动程序的通用技术,但如果唯一的方法是检查数据库表,那么我想这就是我必须做的事情。

谢谢!

1 个答案:

答案 0 :(得分:2)

我知道这已经有一年了,但为什么不为每次上传创建一个新的队列,并使用基于该请求的唯一键。

$job = (new ProcessCSVJob($data))->onQueue($uniqueQueueName);

如果您想要一个仅限DB的解决方案,那么您可以在队列名称字段中的数据库中进行计数。

要跨所有队列类型工作,可以使用队列大小方法返回队列大小。

$queue = App::make('queue.connection');
$size = $queue->size($uniqueQueueName);

这是在Laravel 5.4中。不确定这是多么向后兼容。