【问题标题】:Laravel Queue fall asleep when Queue is empty当队列为空时,Laravel 队列进入睡眠状态
【发布时间】:2018-11-24 04:44:32
【问题描述】:

我有一个调度job 的控制器函数。当这个job 被处理时,最后它再次发送相同的job(使用不同的参数)。共有5个相同的工作。

Queue driver: database

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

Queue driver: sync

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

调查结果:

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

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

更新:

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

重复我原来的工作,从created()handle() 只用了

结论:

我很确定这是队列驱动程序的问题。当队列为空时,工作人员似乎睡着了。请问有谁知道解决方法吗?

【问题讨论】:

    标签: laravel performance queue jobs


    【解决方案1】:

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

    参考

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

    回答

    echoecho debug_backtrace()[1]['function'];到处都放了之后,发现里面Illuminate\Queue\Console\WorkCommand里面有队列为空时休眠的DEFAULT VALUE

    protected $signature = 'queue:work{--sleep=3 : 没有工作可用时休眠的秒数}

    解决方案

    所以解决方案是在控制台命令中提及sleep

    php artisan queue:work --sleep=0
    

    感谢阅读。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-14
      • 1970-01-01
      相关资源
      最近更新 更多