簡體   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