【发布时间】:2016-10-06 22:21:30
【问题描述】:
如果我有多个队列,是否可以按顺序运行所有队列而不需要在--queue 选项上命名每个队列?
【问题讨论】:
-
php artisan queue:listen将保持后台进程监听任何待处理的作业 -
@Edwin 我已经尝试过了,但不适用于具有队列名称的作业
如果我有多个队列,是否可以按顺序运行所有队列而不需要在--queue 选项上命名每个队列?
【问题讨论】:
php artisan queue:listen 将保持后台进程监听任何待处理的作业
您可以使用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 &
我认为不支持监听所有可能的队列,因为定义单独队列的原因是单独处理。 (例如,在不同的机器上做电子邮件工作)
【讨论】:
这解决了我的问题,不知道对你有没有帮助。
php artisan queue:work --queue=low,high,
Laravel 默认有 3 个队列; “低,高”第三个是空的。在查询中添加这 3 个队列并不难。
不幸的是,这将比没有队列参数的持续时间更长。它会先完成高低的。
拥有队列名确实很有用,有时某些队列中的作业太多,您需要控制进程数。
如果您已经安装了一个进程监视器,如 supervisor,您可以简单地为您的默认队列添加另一个后台进程。不要忘记numprocs,你可以提高它而不是高低队列,因为默认队列可能更重要。
【讨论】:
您可以使用 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
【讨论】: