Laravel 5.8 не уважает $ retryAfter, указанный в классе задания - PullRequest
0 голосов
/ 08 июля 2019

У меня есть Laravel с несколькими заданиями, которые обычно очень быстро бегают. Следовательно, я настроил мое значение по умолчанию retry_after в config / queue.php на 20 секунд

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

У меня, однако, есть один тип заданий, который может занять гораздо больше времени, вплоть до нескольких минут, поэтому я обновился до Laravel 5.8, чтобы иметь возможность указать параметр retry-after, специфичный для этого класса:

class LongJob implements ShouldQueue {
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;

    public $timeout = 600;
    public $tries = 3;
    public $retryAfter = 610;

Однако, когда я отправляю LongJob в очередь, я обнаруживаю в своих журналах, что задание вызывается дважды, т. Е. При отправке, а затем через 20 секунд.

Можете ли вы вспомнить причину, по которой Laravel не «увидел» мою опцию $ retryAfter - которая, насколько я понимаю, должна переопределять глобальные настройки?

РЕДАКТИРОВАТЬ: после дальнейшего тестирования кажется, что $ retryAfter и retry_after не работают точно так же ... Из того, что я пробовал:

  • задание будет предпринято снова через retry_after секунд, независимо от того, выполняется ли оно с предыдущей попытки
  • если задание не выполнено и его возвращают в очередь, оно будет предпринято снова через $retryAfter секунд

Следовательно, в моем случае правильные значения будут:

retry_after = 610; //As long as the longest timeout is + small buffer
$retryAfter = 5; //I'd like my job to be re-attempted quickly after it fails

Не уверен, если ошибка или функция ...

...