Отложенный запуск Job в Laravel
Иногда Job нужно выполнить не сразу,
а через минуту, час или завтра:
напоминание, отложенное письмо,
повторная попытка. Laravel позволяет
задать задержку цепочкой после
dispatch.
Вызывают dispatch и сразу
delay с интервалом:
<?php
use App\Jobs\SendWelcomeEmail;
use Illuminate\Support\Carbon;
SendWelcomeEmail::dispatch($user)
->delay(now()->addMinutes(10));
?>
В примере задание станет доступно
worker примерно через 10 минут.
До этого момента worker его
не заберёт (при нормальной работе
очереди). Вместо минут можно
использовать addSeconds,
addHours или конкретный
Carbon-момент.
delay не заменяет worker
и не меняет код handle -
только сдвигает момент, когда
задание можно выполнить. При
sync задержка может
вести себя иначе, чем на
database: для проверки
отложенного запуска лучше
настоящий драйвер очереди
и запущенный queue:work.
Задиспатчьте Job с задержкой
1 минута через
delay.
Чем dispatch()->delay(...)
отличается от обычного
dispatch?
Отложите задание на 30
секунд и дождитесь выполнения
через worker.