【问题标题】:Laravel run all queues at onceLaravel 一次运行所有队列
【发布时间】:2016-10-06 22:21:30
【问题描述】:

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

【问题讨论】:

  • php artisan queue:listen 将保持后台进程监听任何待处理的作业
  • @Edwin 我已经尝试过了,但不适用于具有队列名称的作业

标签: laravel queue jobs


【解决方案1】:

您可以使用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】:

    这解决了我的问题,不知道对你有没有帮助。

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

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

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

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

    如果您已经安装了一个进程监视器,如 supervisor,您可以简单地为您的默认队列添加另一个后台进程。不要忘记numprocs,你可以提高它而不是高低队列,因为默认队列可能更重要。

    【讨论】:

      【解决方案3】:

      您可以使用 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
      

      【讨论】:

      • 使用 PHP 启动队列工作者/侦听器不是 OP 所要求的
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-20
      • 2016-09-09
      • 2020-04-21
      • 2015-02-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多