繁体   English   中英

Laravel 5 队列作业冻结

[英]Laravel 5 queue job freezes

我正在执行一个处理上传文件的命令。

这些文件最多可包含 300MB 的数据,因此作业需要排队,我还预计需要一段时间才能完成。

我的问题是,当我运行php artisan queue:listen它从队列中获取作业,开始正常处理它,但大约 20 秒后,它冻结了。 该作业不会启动任何异常,也不会继续,因此不会从队列中删除。

我正在使用database驱动程序。 我在这里遗漏了什么吗?

php artisan queue:listen不会为用户输出错误。 运行php artisan queue:work它将输出错误。 这个命令只会运行队列中的一个进程。 因此,您需要确保下一个进程是您要调试的进程。

也许它没有冻结,但是当您在运行 php artisan queue:work 或 php artisan queue:listen 命令后在命令行界面中看不到任何事情时,它似乎冻结了。

就我而言,

// 在 coomand 行接口上按队列名称执行 Laravel 队列->

我正在使用运行命令php artisan queue:work
它没有在作业表中运行我排队的作业。

然后我重新定义,它仅适用于队列列值 = 'default' 的作业,并且我给出了诸如 sendemail、inboxemail 等名称。

因此,当我在作业表的队列列中将此其他值更改为“默认”时,该作业立即运行,因为我打开了 cli 并且 php artisan queue:work 命令处于活动状态。

因此,如果您只想按队列名称运行特定队列,请运行命令 ->

php artisan queue:listen --queue=sendemail

或者

php artisan queue:listen --queue=inboxemail

对于和我犯同样错误的人,不要根据“工作”表创建表!

它不是 memory 泄漏或某事。 我有另一个表“ job_info ”,其中有一个引用jobs表的外键; 事实证明,laravel 无法在成功完成后从表中删除作业(就像通常那样)。 那是因为它会破坏数据库中的关系。 所以它会一直重试,直到超过最大尝试次数导致异常,而没有关于实际问题的信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM