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

时间:2017-11-15 20:03:29

标签: laravel queue laravel-5.5 supervisor beanstalkd

我已经使用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

我是否可以假设我可以使用此命令添加另一个Supevisor配置,例如laravel_email_worker.confcommand=php /var/www/my_app/artisan queue:work beanstalkd --queue=emails --timeout=30并将numprocs设置为1,并且应该将1名工作人员专用于我的emails队列,该队列将处理来自该队列的作业,而不管apprequests队列是什么,或者我对此有什么不妥?

1 个答案:

答案 0 :(得分:1)

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

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