Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Supervisor运行多个Laravel队列工作程序_Laravel_Laravel 5_Queue_Supervisord_Laravel Artisan - Fatal编程技术网

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

使用Supervisor运行多个Laravel队列工作程序,laravel,laravel-5,queue,supervisord,laravel-artisan,Laravel,Laravel 5,Queue,Supervisord,Laravel Artisan,我使用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_s

我使用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=3
生成3个进程


还可以指定一个队列:
command=php artisan queue:listen--queue=myqueue--trys=5
在supervisor中,您可以使用参数
numprocs
指定进程的数量,这样您就可以在脚本中添加一行内容:


numprocs=5

现在,您可以做一些聪明的事情,例如,如果在队列上运行的某些进程花费的时间太长,您可以创建一组不同的队列进程来处理这些进程和其他轻进程。 为了实现这一点,您可以使用一个队列名称(如
--queue=longprocess
)和另一个队列名称(如
--queue=lightprocess
)创建一个主管配置,并且在您的程序中,您可以在相应的队列中调度作业,这样,长进程就不会延迟短进程

您还可以在一个管理器配置文件中指定,例如
--queue=lightprocess、longprocess
。这样,在运行
longprocess
之前,您的工作人员将首先查找
lightprocess

要回答第二个问题,不,就所有进程都在运行而言,它不知道队列是忙还是空闲,因此它无法终止进程并根据它们的使用情况创建它们,因此不,您不能有一个动态配置,仅当您拥有的进程忙时才创建更多的进程

请注意,如果分配了多个numproc,则必须将进程数添加到名称中。根据主管配置文件:

主管将启动numprocs指定数量的该程序实例。请注意,如果numprocs>1,则进程名称表达式必须包含%(进程数)s(或包含进程数的任何其他有效Python字符串表达式)


主管配置文档:

在主管配置文件中。添加以下代码

process_name=%(program_name)s_%(process_num)02d
numprocs=8
这将创建程序的8个不同进程。如果需要,只需更改
numprocs=8
的值

您可以检查有多少进程在
sudo-supervisortl状态下运行