[program:laravel_queue] command=php artisan queue:listen --timeout=1800 --tries=5 directory=/var/app/current stdout_logfile=/var/app/support/logs/laravel-queue.log logfile_maxbytes=0 logfile_backups=0 redirect_stderr=true autostart=true autorestart=true startretries=86400 EOB
某些队列任务可能需要大约10分钟才能完成.
我有两个问题:
1)如何编辑上述脚本以在同一队列上运行多个(例如3个)队列工作程序.
2)是否有办法根据等待处理的作业数量来扩展运行的队列工作者数量?
问题2的原因是我们有很多繁忙的时间,然后很多安静的时间,所以我真的不想浪费资源与3个听众一直运行.
解决方法
numprocs = 5
现在,您可以做一些聪明的事情,例如,如果只有一些队列上运行的进程花费的时间太长,您可以创建一组不同的队列进程来处理这些进程以及其他用于轻量级进程的进程.
为了实现这一点,您可以使用一个队列名称(如–queue = longprocess)创建一个超级用户配置,使用–queue = lightprocess创建另一个队列名称,并在程序中将作业分派到相应的队列中,这样,长进程不会延迟流程短.
您还可以在一个管理程序配置文件中指定queue priorities,例如–queue = lightprocess,longprocess.这样,您的工作人员将在运行longprocess之前首先查找lightprocess.
要回答你的第二个问题,不,就主管而言,所有进程都在运行,它不知道队列是忙还是空闲,因此它不能杀死进程并根据它们的使用创建它们,所以不,你可以没有动态配置,只有在您拥有的进程繁忙时才创建更多进程.
注意,如果分配的numprocs超过1个,则必须在该名称中添加进程数.根据主管配置文档:
Supervisor will start as many instances of this program as named by numprocs. Note that if numprocs > 1,the process_name expression must include %(process_num)s (or any other valid Python string expression that includes process_num) within it.