我已经使用Beanstalkd设置了Laravel(5.5)排队,我正在使用Supervisor。 Laravel文档提到以下内容:
通过将作业推送到不同的队列,您可以“排序”排队的作业,甚至优先考虑分配给各种队列的工作人员数量。
但它从未提及如何做到这一点。如果我在beanstalkd连接上有2个队列,我会执行以下操作:
php artisan queue:work beanstalkd --queue=high,low
如果我正确理解文档,那么在处理来自high
的任何内容之前,它始终会处理来自low
的所有作业:
要在继续执行低队列上的任何作业之前启动一个验证所有高队列作业都已处理的工作线程,请将逗号分隔的队列名称列表传递给工作命令
假设我的队列名为apprequests
和emails
。我将如何为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.conf
,command=php /var/www/my_app/artisan queue:work beanstalkd --queue=emails --timeout=30
并将numprocs
设置为1
,并且应该将1名工作人员专用于我的emails
队列,该队列将处理来自该队列的作业,而不管apprequests
队列是什么,或者我对此有什么不妥?
答案 0 :(得分:1)
是的,你可以按照你的写作去做。您可以设置一个进程,该进程将查看email
队列作业,并处理4个将查看apprequests
队列的进程。
但您可能也对使用Redis作为队列驱动程序的Laravel Horizon感兴趣,并且可以将其设置为自动平衡队列,以根据当前负载增加某些队列的工作人员数量。