Метод delay
Метод delay применяется к экземпляру класса PendingDispatch,
который возвращается при вызове статического метода dispatch
у класса задачи (Job). Он позволяет задать временную задержку
перед тем, как задача будет отправлена в очередь на выполнение.
Первый и единственный параметр метода - это длительность задержки,
которая может быть передана в виде целого числа (количество секунд)
или экземпляра класса DateTimeInterface.
Метод возвращает тот же объект PendingDispatch,
что позволяет использовать цепочки вызовов.
Синтаксис
<?php
SomeJob::dispatch($arguments)->delay($delay);
?>
Пример
Давайте отправим задачу в очередь с задержкой в 60 секунд:
<?php
namespace App\Jobs;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class SendNotificationJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $userId;
public function __construct($userId)
{
$this->userId = $userId;
}
public function handle()
{
// Логика отправки уведомления пользователю
echo "Notification sent to user: " . $this->userId;
}
}
?>
<?php
use App\Jobs\SendNotificationJob;
use Illuminate\Support\Facades\Route;
Route::get('/send-notification/{id}', function ($id) {
SendNotificationJob::dispatch($id)->delay(60);
return "Job dispatched with 60 seconds delay";
});
?>
Результат выполнения кода при обращении к маршруту, например, /send-notification/5:
"Job dispatched with 60 seconds delay"
Пример
Отправим задачу с задержкой до конкретного момента времени,
используя класс Carbon:
<?php
use App\Jobs\SendNotificationJob;
use Carbon\Carbon;
use Illuminate\Support\Facades\Route;
Route::get('/schedule-notification/{id}', function ($id) {
$delayUntil = Carbon::now()->addHours(2);
SendNotificationJob::dispatch($id)->delay($delayUntil);
return "Job scheduled at " . $delayUntil->toDateTimeString();
});
?>
Результат выполнения кода при обращении к маршруту, например, /schedule-notification/10:
"Job scheduled at 2026-09-07 16:00:00"
Пример
Метод delay часто используется в цепочках вместе с другими
методами класса PendingDispatch, такими как onQueue
и onConnection:
<?php
use App\Jobs\SendNotificationJob;
use Illuminate\Support\Facades\Route;
Route::get('/chain-dispatch/{id}', function ($id) {
SendNotificationJob::dispatch($id)
->onQueue('high')
->onConnection('redis')
->delay(30);
return "Job dispatched to high queue with 30 seconds delay";
});
?>
Результат выполнения кода при обращении к маршруту, например, /chain-dispatch/3:
"Job dispatched to high queue with 30 seconds delay"
Смотрите также
-
класс
PendingDispatch,
который представляет собой отложенный запуск задачи -
метод
dispatch,
который отправляет задачу в очередь -
метод
onQueue,
который задаёт очередь для выполнения задачи -
метод
timeout,
который задаёт максимальное время выполнения задачи