【问题标题】:Laravel queue not honouring job specific timeoutLaravel 队列不遵守作业特定的超时
【发布时间】:2020-05-10 13:53:40
【问题描述】:

根据 Laravel 文档,我应该能够指定作业特定的超时:

如果在作业中指定了超时,它将优先于在命令行中指定的任何超时 [...]

所以,当我在没有 --timeout 选项的情况下运行 artisan queue:listen 并在作业中定义超时时(就像 Laravel 告诉我的那样):

public $timeout = 600;

我预计该特定作业的超时时间为 600 秒。不幸的是,我仍然收到ProcessTimedOutException。自定义超时仅在我使用 --timeout=600 运行队列时才有效。

我正在使用 Laravel 6 和 PHP 7.4。根据 Laravel 的建议,我还启用了 pcntl PHP 扩展。对于队列,我使用带有以下配置的database 驱动程序:

'database' => [
    'driver' => 'database',
    'table' => 'jobs',
    'queue' => 'default',
    'retry_after' => 90,
]

【问题讨论】:

  • queue.php文件中队列的配置设置是什么?
  • 如果将retry_after 更改为610 会发生什么?
  • 答案在 Laravel 的官方文档中queues,就在链接的开头。 --timeout for command line 也有。
  • 我想在作业类中设置超时,而不是命令行。根据this 部分的最后几段,这应该是可能的。在命令行中设置超时将为所有作业设置它。

标签: php laravel queue jobs


【解决方案1】:

我打开了bug report,因为我无法让它工作。但是,在使用queue:work 运行队列时,作业类中指定的超时似乎只优先于命令行中指定的超时。

我已经对此进行了测试,可以确认它适用于queue:work。根据我的错误报告的评论者,它不适用于queue:listen,因为:

queue:listen 运行多个进程,而queue:work 是一个进程。 queue:listen 为它运行的进程设置了一个超时时间,这样我们就不会让幽灵进程在机器上运行,以防主进程由于某种原因被杀死。

【讨论】:

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