У меня есть 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
Не уверен, если ошибка или функция ...