Laravel 5.8 не соблюдает $retryAfter, указанный в классе задания

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

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

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

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

Не знаю, баг или фича...


person Buno    schedule 08.07.2019    source источник
comment
Вы перезапустили свою очередь после того, как добавили $retryAfter к своей работе?   -  person Rwd    schedule 08.07.2019
comment
Да :( приятно отметить это, хотя я делал эту ошибку в прошлом ..   -  person Buno    schedule 08.07.2019
comment
Какой обработчик очереди вы используете?   -  person Rwd    schedule 08.07.2019
comment
Обработчик очереди по умолчанию с супервизором, поддерживающим его работу   -  person Buno    schedule 08.07.2019
comment
Извините, я имел в виду, какое соединение вы используете, т. Е. Redis, db, beanstalkd, sqs и т. д.?   -  person Rwd    schedule 08.07.2019
comment
О, с помощью драйвера db. Я отредактировал свой исходный пост с дополнительной информацией, возможно, опция повторной попытки после не работает должным образом (или, по крайней мере, я ожидал, что она сработает)   -  person Buno    schedule 09.07.2019
comment
Не могли бы вы сообщить мне, какая именно версия 5.8 у вас установлена?   -  person Rwd    schedule 09.07.2019
comment
Laravel Framework 5.8.27, сэр!   -  person Buno    schedule 09.07.2019
comment
Вы решили это?   -  person Ivan Carosati    schedule 23.02.2020
comment
Не на самом деле нет. Обходной путь, который я в конечном итоге принял, заключался в том, чтобы установить для retry_after в драйвере очереди длинное значение (больше, чем значение тайм-аута моей самой длинной работы) и установить параметр $retryAfter индивидуально в каждой работе.   -  person Buno    schedule 24.02.2020
comment
любое решение?? У меня также есть тот же вопрос com/questions/63816367/ @Buno   -  person joy    schedule 10.09.2020