使用Supervisor运行多个Laravel队列工作程序

我使用Laravel队列使用数据库驱动程序和管理程序来保持队列工作程序始终运行:

[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指定进程数量,因此您可以在脚本中添加一行说明:

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.

主管配置文档:http://supervisord.org/configuration.html

相关文章

/etc/sysctl.conf这个目录主要是配置一些系统信息,/etc/sys...
1.作用 useradd或adduser命令用来建立用户帐号和创建用户的起...
它们都是多模式编辑器,不同的是vim 是vi的升级版本,它不仅...
不管是我们在安装软件还是监测软件的使用性能,我们都要随时...
装好Tomcat7后,发现除了本机能访问外界访问不了,岂有此理。...
修改防火墙配置需要修改 /etc/sysconfig/iptables 这个文件,...