当队列为空时,Laravel队列入睡

时间:2018-11-24 04:44:33

标签: laravel performance queue jobs

我有一个控制器功能,该功能可以调度job。处理此job后,最后将再次分派相同的job(具有不同的参数)。共有5个相同的工作。

Queue driver: database

问题是:我记录了从create()handle()的持续时间。控制器调度的第一个作业耗时1700毫秒,而作业本身调度的其他作业仅耗时40毫秒。

Queue driver: sync

当我更改为使用sync队列驱动程序时,所有作业都以闪电般的速度工作。

发现:

第一个队列作业从create()handle()花费了很长时间。在此之前,队列为空。可能是队列驱动程序问题。

为什么以及如何解决?谢谢!

更新:

添加了一个TestJob,它在处理作业时自动调度。这意味着队列中总是有TestJob被处理或等待处理。

重复我原来的工作,从created()handle(),它们都只花了不到70毫秒。

结论:

我很确定这是队列驱动程序问题。队列为空时,工作人员似乎正在入睡。有人知道该修复程序吗?

1 个答案:

答案 0 :(得分:1)

我在这里发布答案,希望对互联网上的其他人有用。

参考

https://divinglaravel.com/queue-system/workers

答案

echoecho debug_backtrace()[1]['function'];放在各处后,发现Illuminate\Queue\Console\WorkCommand内的队列为空时睡眠的默认值

  

受保护的$ signature ='queue:work {-sleep = 3:无可用工作时的睡眠秒数}

解决方案

因此解决方案是在控制台命令中提及sleep

php artisan queue:work --sleep=0

感谢阅读。