Laravel 队列 - 如何将特定数量的工作人员分配到不同的队列

Laravel Queues - how to assign specific number of workers to different queues

我已经使用 Beanstalkd 设置了 Laravel (5.5) 队列,并且我正在使用 Supervisor。 Laravel 文档提到以下内容:

By pushing jobs to different queues, you may "categorize" your queued jobs and even prioritize how many workers you assign to various queues.

但从未提及如何做到这一点。如果我的 beanstalkd 连接上有 2 个队列,我会执行以下操作:

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

在处理来自 low 的任何内容之前,它将始终处理来自 high 的所有作业,如果我对文档的理解正确的话:

To start a worker that verifies that all of the high queue jobs are processed before continuing to any jobs on the low queue, pass a comma-delimited list of queue names to the work command

假设我的队列名为 apprequestsemails。我将如何为 emails 队列添加 1 个不关心 apprequests 队列的专用工作人员,然后为 apprequests 队列添加 4 个工作人员?

这是我的主管 laravel_worker.conf 配置:

[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/my_app/artisan queue:work beanstalkd --queue=apprequests --timeout=330
autostart=true
autorestart=true
user=root
numprocs=4
redirect_stderr=true
stdout_logfile=/var/www/my_app/worker.log

我是否可以假设我可以添加另一个主管配置,例如 laravel_email_worker.conf,使用此命令 - command=php /var/www/my_app/artisan queue:work beanstalkd --queue=emails --timeout=30 并将 numprocs 设置为 1,这应该为我的 emails 队列分配 1 个工作人员,无论 apprequests 队列如何,该队列都将处理该队列中的作业,或者我对此完全错了吗?

是的,你可以按照你写的去做。您可以设置一个将查看 email 个队列作业的进程和 4 个将查看 apprequests 个队列的已处理进程。

但您可能也对 Laravel Horizo​​n 感兴趣,它使用 Redis 作为队列驱动程序并且可以设置为自动平衡队列以根据当前负载增加某些队列的工作人员数量。