【问题标题】:Laravel Queue Job doesn't respect timeoutLaravel 队列作业不遵守超时
【发布时间】:2019-11-22 04:40:28
【问题描述】:

我有这个进程设置。

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

我在这里错过了什么?

【问题讨论】:

  • 尝试记录并查看您的作业执行的代码部分
  • 这个工作创造了这么多工作,他们可能会创造其他工作,可能没有办法记录下来。
  • 为什么这个工作创造了这么多工作?您应该使用控制台命令,而不是创建一个执行它的作业。

标签: php laravel queue jobs beanstalkd


【解决方案1】:

控制台

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

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

命令

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

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

工作

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


我发现Commands 和Jobs 的变化很难理解。

编辑: 来自 Laravel 文档:

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

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

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

【讨论】:

    猜你喜欢
    • 2020-05-10
    • 1970-01-01
    • 2015-02-04
    • 2020-04-04
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    • 2022-10-18
    • 1970-01-01
    相关资源
    最近更新 更多