我可以在 Laravel 中处理作业超时吗?

Nik*_*ola 5 php queue jobs timeout laravel

我正在使用 Laravel 5.5,我有一些工作使用 IMAP 检查电子邮件。有时这可能需要很长时间,或者说用户错误的端口或用户名,IMAP 服务器响应需要很长时间。所以我想出了我可以将我的工作限制在某个时期的想法,但是当那个时期到期时,不仅我的工作不会转移到失败的工作中,而且我的工人也会被杀死。我错过了什么?有没有其他方法可以做到这一点?如果工作到期,我想对数据库进行一些更改。任何的想法?先感谢您

San*_*r82 8

首先,您需要使用 Supervisor 管理您的员工。如果它们被杀死,supervisor 将重新启动它们。
https://laravel.com/docs/5.5/queues#supervisor-configuration

之后,您需要在 Laravel 文档中阅读有关作业过期和超时的信息。
https://laravel.com/docs/5.5/queues#job-expirations-and-timeouts

要解决您的问题,您需要增加工作人员的超时时间。您可以尝试 3600 秒。您还需要增加作业到期时间(config/queues.pho 上队列中的 retry_after 值)。尝试 3550 秒。如果您发现问题再次出现,您可以增加超时值。

如果您发现问题并且不要等待 3550 秒来释放作业和工作人员,那么您的代码必须具有 try/catch 以捕获异常以退出,这一点非常重要。