0

我派遣工作在我的地平线队列上做一些工作。似乎相同的作业总是在 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 容器中启动 Horizo​​n 队列处理器:php /path/to/artisan horizon

为了调试问题,我手动实例化了作业类,以查看它在哪里失败,如下所示:

    $test = new DownloadBlockedIPFeed(8);
    $test->handle();
    exit('Done');

这似乎花费了超过 60 秒的时间,但它确实完成了。

所以我的问题是 - 你如何正确设置 laravel Horizo​​n 的超时时间?

我正在使用 laravel 8.x 和最新版本的 Horizo​​n 包。

4

2 回答 2

0

检查--timeout=生成horizon:supervisor过程中的值。如果这是 60 秒,请调整 中的timeoutconfig/horizon.php

还要签到retry_afterconfig/queue.php

于 2021-10-25T18:04:26.310 回答
0

这也可能是平衡策略。我发现如果我将“平衡”选项设置为“自动”,则会出现 MaxAttemptsExceededException 错误。将其更改为“简单”或“错误”似乎是解决方案。

不确定这是否是一个错误,但我认为这也不是预期的行为。我见过执行的作业(登录作业的句柄方法)但在中间被杀死以重试。

于 2021-09-23T12:13:48.983 回答