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



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

通过将作业推送到不同的队列,您可以对排队的作业进行"分类",甚至可以优先考虑分配给不同队列的工人数量

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

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

如果我正确理解文档的话,它将始终处理high中的所有作业,然后再处理low中的任何作业:

要启动一个工作程序,在继续处理低队列上的任何作业之前,验证所有高队列作业都已处理,请将逗号分隔的队列名称列表传递给工作命令

假设我的队列被称为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

我假设我可以用这个命令-command=php /var/www/my_app/artisan queue:work beanstalkd --queue=emails --timeout=30添加另一个Suevisor配置,例如laravel_email_worker.conf,并将numprocs设置为1,这应该为我的emails队列指定一个工作线程,无论apprequests队列如何,它都将处理该队列中的作业,这是对的吗?还是我完全错了?

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

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

最新更新