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

问题描述 投票:0回答:2

我正在使用 Laravel 5.5,我有一些工作需要使用 IMAP 检查电子邮件。有时这可能需要很长时间,或者假设用户弄错了端口或用户名,IMAP 服务器将需要很长时间才能响应。所以我想出了一个主意,我可以将我的工作限制在一段时间内,但是当该期限到期时,不仅我的工作不会转移到失败的工作,而且我的工人也会被杀死。我缺少什么?还有其他方法可以做到这一点吗?如果作业到期,我想在数据库中进行一些更改。有什么想法吗? 预先感谢您

php laravel queue timeout jobs
2个回答
14
投票

首先,你需要用Supervisor来管理你的工人。如果他们被杀死,主管将再次重新启动他们。
https://laravel.com/docs/5.5/queues#supervisor-configuration

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

要解决您的问题,您需要增加工人的

--timeout
。你可以尝试3600秒。您还需要增加作业过期时间(
retry_after
队列中的
config/queues.php
值)。尝试使用 3550 秒。 (如果您的
--timeout
选项比您的
retry_after
配置值长,您的作业可能会被处理两次。)如果您发现问题再次出现,您可以增加超时值。

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


0
投票

我总是使用以下命令来运行队列(它没有任何问题):

php artisan queue:work --timeout=0 --delay=0 --memory=0 --tries=0
© www.soinside.com 2019 - 2024. All rights reserved.