Ter*_*y D 0 queue performance jobs laravel
我有一个控制器函数,它调度一个job. 处理此job问题后,最后它会job再次分派相同的内容(使用不同的参数)。总共有5个相同的职位。
Queue driver: database
问题是:我记录了从create()到 的持续时间handle()。由控制器调度的第一个作业花费了 1700 毫秒,而由作业本身调度的其他作业仅花费了 40 毫秒。
Queue driver: sync
当我改用sync队列驱动程序时,所有工作都以闪电般的速度进行。
发现:
create()第一个队列作业从到花费了很长时间handle()。在此之前,队列是空的。可能是队列驱动程序的问题。
请问为什么以及如何解决?谢谢!!
更新:
TestJob在处理作业时添加了一个调度本身。这意味着队列总是有一个TestJob正在处理或等待处理。
重复我原来的工作,它们从完成created()到完成只用了不到 70 毫秒的时间handle()。
结论:
我很确定这是队列驱动程序问题。看起来工作人员在队列为空时就睡着了。请问有人知道修复方法吗?
我在这里发布我的答案,希望对互联网上的其他人有用。
参考
https://divinglaravel.com/queue-system/workers
回答
echo放到处后echo debug_backtrace()[1]['function'];发现队列为空时有DEFAULT VALUE of sleep,里面Illuminate\Queue\Console\WorkCommand
protected $signature = 'queue:work{--sleep=3 : 当没有可用作业时休眠的秒数}
解决方案
sleep所以解决办法是在控制台命令中提及:
php artisan queue:work --sleep=0
Run Code Online (Sandbox Code Playgroud)
谢谢阅读。