Laravel立即运行所有队列

时间:2016-06-07 06:40:01

标签: laravel queue jobs

如果我有多个队列,是否可以按顺序运行所有队列,而无需在--queue选项上为每个队列命名?

3 个答案:

答案 0 :(得分:1)

这解决了我的问题,我不知道它是否对您有帮助。

php artisan queue:work --queue=low,high,

默认情况下,Laravel中有3个队列; “低,高”,第三个是空的。在查询中添加这3个队列并不难。

不幸的是,这将比没有queue参数的持续时间更长。它将首先完成高和低。

拥有队列名称确实很有用,有时某些队列中的作业太多,您需要控制进程数。

如果您安装了诸如Supervisor之类的进程监视器,则只需为默认队列添加另一个后台进程。不要忘记numprocs,因为默认队列可能更重要,所以您可以将其提高到比高低队列更高的水平。

答案 1 :(得分:0)

您可以使用php artisan queue:work --queue=queue1,queue2,queue3运行多个进程,但这将是一个进程,并且首先执行队列作业的优先级是在命令中列出队列的顺序。 (因此,在此示例中,首先是所有queue1作业,然后是所有queue2作业,依此类推)

运行以下示例将创建许多并行进程,这些进程独立监视队列而无需任何队列优先级:

php artisan queue:work --queue=queue1 & php artisan queue:work --queue=queue2 & php artisan queue:work --queue=queue3 &

我认为不支持侦听所有可能的队列,因为定义独立队列的原因是独立处理。 (例如在其他计算机上执行电子邮件作业)

答案 2 :(得分:-2)

您可以使用Symfony的Process通过PHP运行命令。

$process = new Process('php artisan queue:work --queue=your_queue');
$process->run(); // Sync
$process->start(); // Async

如果您将使用特定的队列名称,可以按documentation中的指定将其添加到侦听器。

php artisan queue:listen --queue=queue1,queue2