Ответ
В 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.