Laravel长时间运行队列作业由第二名工人拾取

Laravel长时间运行队列作业由第二名工人拾取,laravel,queue,supervisord,Laravel,Queue,Supervisord,我对添加到队列中的laravel长时间运行进程有问题。使用数据库驱动程序和监控命令。问题是,在工人1选择这项工作后,它必须做一些5到20分钟长的繁重处理,到那时工人2也选择了这项工作!如何应对 如何添加这些长时间运行的作业: Artisan::queue('process:import', [ 'file' => $file_to_import->id, ]); 当前队列.php 'database' => [ 'driver' => 'database

我对添加到队列中的laravel长时间运行进程有问题。使用数据库驱动程序和监控命令。问题是,在工人1选择这项工作后,它必须做一些5到20分钟长的繁重处理,到那时工人2也选择了这项工作!如何应对

如何添加这些长时间运行的作业:

Artisan::queue('process:import', [
    'file' => $file_to_import->id,
]);
当前队列.php

'database' => [
    'driver' => 'database',
    'table' => 'jobs',
    'queue' => 'default',
    'retry_after' => 1800,
],
目前我将numproc限制为1

当前主管配置

[program:laravel-worker-autoitbs]
process_name=%(program_name)s_%(process_num)02d
command=php /home/web/www/xxx/public_html/artisan queue:work database --memory=2048 --sleep=3 --tries=3 --timeout=0
autostart=true
autorestart=true
user=web
numprocs=1
redirect_stderr=true
stdout_logfile=/home/web/www/xxx/logs/worker.log

我的猜测是,队列机制认为长时间运行的作业超时,从而将其释放回队列。然后,第二个工人也会尝试处理该作业

您指定了-timeout=0,因此作业本身不会超时


也许在工作完成之前,其他事情确实超时了。例如,数据库连接可能丢失。您可以检查日志中是否有超时的迹象吗?

您是否将其作为计划任务运行?你可以试试这个方法。不确定它是否只适用于不同的服务器或不同的工作人员。我正在使用Artisan::queue'process:import'添加这些作业,并且此作业需要一些时间才能完成,另一个工作人员过来拾取相同的作业,而忽略另一个工作人员已经在处理。所以结果是两倍甚至三倍的服务器负载。Noup,这个作业不使用DB,只是将大文件分割成更小的块。我想问题出在主管身上。我没有得到任何错误,PHP部分本身是好的。