繁体   English   中英

Laravel 地平线排队作业因 MaxAttemptsExceededException 而失败

[英]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_afterconfig/queue.php

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM