首页 > 解决方案 > Laravel 队列作业不遵守超时

问题描述

我有这个过程设置。

php artisan queue:work beanstalkd --sleep=3 --tries=1 --timeout=0 --queue=medium,messages

我也有一个设置工作

public $timeout = 100000000;

但是在此之前,该作业已因has been attempted too many times or run too long. The job may have previously timed out首次运行的消息而停止。

我在 php.ini 中也有这个

max_execution_time = 0

我在这里想念什么?

标签: phplaravelqueuejobsbeanstalkd

解决方案


安慰

我想从命令行执行的事情(正如您在工作中提到的创建更多工作)。但问题是,你可以将它的业务逻辑提取到一个命令中。

示例:一个控制台命令触发一个从 Imgur 获取图像的命令。该类FetchImages 包含获取图像的实际业务逻辑。

命令

包含实际逻辑的类。您还应该能够从您的应用程序中使用app()->make(Command::class)->handle().

示例:示例 1 中提到的命令。包含对 Imgur 进行实际 API 调用并处理返回数据的逻辑。

工作

Laravel 5.0jobs那时还不是一回事。但正如我所看到的,作业就像命令,但它们是排队的并且可以被调度。(正如您可能在这些示例中看到的,这些命令实现了您提到的接口SelfHandlingShouldBeQueued)。


我看到了变化Commands并且Jobs很难理解。

编辑:来自 Laravel 文档:

app/Commands 目录已重命名为 app/Jobs。但是,您不需要将所有命令移动到新位置,您可以继续使用 make:command 和 handler:command Artisan 命令来生成类。

同样,app/Handlers 目录已重命名为 app/Listeners,现在只包含事件侦听器。但是,您不需要移动或重命名现有的命令和事件处理程序,您可以继续使用 handler:event 命令来生成事件处理程序。

通过为 Laravel 5.0 文件夹结构提供向后兼容性,您可以将您的应用程序升级到 Laravel 5.1,并在您或您的团队方便时慢慢将您的事件和命令升级到新位置。


推荐阅读