Как запускается Job в Laravel?

«Как запускается Job в Laravel?» — вопрос из категории Laravel, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Laravel Jobs можно запускать несколькими способами, в зависимости от требуемого поведения.

1. Синхронный запуск (для тестирования или немедленного выполнения):

$job = new ProcessPodcast($podcast);
$job->handle(); // Выполняется немедленно в текущем процессе

2. Асинхронный запуск через dispatch (основной способ):

// Используя статический метод фасада Job
ProcessPodcast::dispatch($podcast);

// Или через глобальный хелпер dispatch()
dispatch(new ProcessPodcast($podcast));

3. Запуск с задержкой:

ProcessPodcast::dispatch($podcast)
    ->delay(now()->addMinutes(10));

4. Запуск в конкретную очередь:

ProcessPodcast::dispatch($podcast)
    ->onQueue('processing'); // Помещает задачу в очередь 'processing'

5. Запуск после ответа клиенту:

ProcessPodcast::dispatchAfterResponse($podcast);

Требования для асинхронного выполнения:

  • Настроенный драйвер очереди в .env (например, QUEUE_CONNECTION=database, redis, sqs)
  • Запущенный воркер для обработки очереди: php artisan queue:work
  • Класс Job должен реализовывать интерфейс IlluminateContractsQueueShouldQueue

Структура: Jobs обычно размещаются в директории app/Jobs/. Для создания нового Job можно использовать Artisan-команду: php artisan make:job ProcessPodcast.