У меня есть 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
Не знаю, баг или фича...
$retryAfter
к своей работе? - person Rwd   schedule 08.07.2019