Laravel队列作业不考虑超时

时间:2019-11-22 04:40:28

标签: php laravel queue jobs beanstalkd

我有此过程设置。

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

我在这里想念什么?

1 个答案:

答案 0 :(得分:0)

控制台

我想从命令行执行的事情(正如您在工作中提到的那样,会创建更多工作)。但事实是,您可以将其业务逻辑提取到命令

Example:带有的控制台命令会触发命令从Imgur获取图像。 FetchImages类包含获取图像的实际业务逻辑。

命令

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

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

工作

Laravel 5.0,所以jobs当时不是问题。但正如我所看到的,乔布斯就像命令一样,但是它们排在队列中并且可以分派。 (正如您在这些示例中可能看到的那样,这些命令实现了您提到的接口SelfHandlingShouldBeQueued)。


我发现CommandsJobs中的变化很难理解。

编辑: 从Laravel文档中:

  

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

     

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

     

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