[英]Laravel horizon queued jobs fails with MaxAttemptsExceededException
我分派工作在我的地平线队列上做一些工作。 似乎相同的作业总是以 60 秒的运行时间失败,在我看来,这似乎是一个超时问题:
我通过 cron 计划调度了大约 10 个作业,而这 4 个总是失败。
这是我的config/horizon.php
(只是有趣的部分):
<?php
use Illuminate\Support\Str;
return [
'waits' => [
'redis:default' => 60,
],
'memory_limit' => 512,
'defaults' => [
'my-app-queue' => [
'connection' => 'redis',
'queue' => ['default'],
'balance' => 'auto',
'minProcesses' => 1,
'maxProcesses' => 1,
'balanceMaxShift' => 1,
'balanceCooldown' => 3,
'memory' => 512,
'tries' => 3,
'nice' => 0,
'timeout' => 300,
],
],
'environments' => [
'production' => [
'my-app-queue' => [
'maxProcesses' => 10,
],
],
'local' => [
'my-app-queue' => [
'maxProcesses' => 10,
],
],
],
];
如您所见,我已将超时设置为 300 秒,但作业总是在 60 秒标记处失败。
我使用以下入口点命令在我的 docker 容器中启动地平线队列处理器: php /path/to/artisan horizon
为了调试问题,我手动实例化了作业类以查看它在哪里失败,如下所示:
$test = new DownloadBlockedIPFeed(8);
$test->handle();
exit('Done');
这似乎需要超过 60 秒,但它确实完成了。
所以我的问题是 - 你如何正确设置 Laravel 地平线的超时时间?
我正在使用 laravel 8.x 和最新版本的地平线包。
这也可能是平衡策略。 我发现如果我将“平衡”选项设置为“自动”,则会出现 MaxAttemptsExceededException 错误。 将其更改为“简单”或“假”似乎是解决方案。
不确定这是否是一个错误,但我认为这也不是预期的行为。 我见过执行的作业(登录作业的句柄方法)但在中间被杀死以进行重试。
检查生成的horizon:supervisor
进程中--timeout=
的值。 如果这是 60 秒,请在config/horizon.php
调整timeout
值。
同时检查retry_after
在config/queue.php
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.