10

我需要向Laravel 队列提交一些作业来处理一些上传的 CSV 文件。如果文件很小,这些作业可能在一秒钟内完成,如果文件较大,则可能在几秒钟内完成,如果 CSV 文件很大,则可能长达一分钟。而且我无法提前知道文件有多大。

当用户转到“结果”页面时,我需要显示结果 - 但前提是队列已完成作业。如果队列仍在处理中,我需要显示“稍后再试”消息。

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

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

谢谢!

4

1 回答 1

9

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

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

然后,如果您想要仅数据库的解决方案,您可以简单地在队列名称字段中的数据库中进行计数。

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

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

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

于 2017-08-04T13:26:23.157 回答