Laravel队列不遵守作业特定的超时时间

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

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

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

因此,当我不使用artisan queue:listen选项运行--timeout并在作业中定义超时时(例如Laravel告诉我:)]

public $timeout = 600;

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

我在PHP 7.4中使用Laravel 6。根据Laravel的建议,我还启用了pcntl PHP扩展。对于队列,我将database驱动程序与以下配置一起使用:

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

根据Laravel文档,我应该能够指定特定于作业的超时:如果在作业上指定了超时,则它将优先于在命令行[...]上指定的任何超时>] >

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

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

queue:listen运行多个进程,而queue:work是单个进程。 queue:listen为运行的进程设置超时,因此,如果主进程由于某种原因被杀死,我们不会在机器上运行幻影进程。

php laravel queue jobs
1个回答
0
投票

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

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

queue:listen运行多个进程,而queue:work是单个进程。 queue:listen为运行的进程设置超时,因此,如果主进程由于某种原因被杀死,我们不会在机器上运行幻影进程。

© www.soinside.com 2019 - 2024. All rights reserved.