Очереди и фоновые задачи
AI-запросы медленные. Очереди позволяют не блокировать HTTP.
Проблема
Route::post('/analyze', function (Request $request) {
$response = (new SalesCoach)->prompt($request->input('transcript'));
return response()->json(['analysis' => (string) $response]);
});
Пользователь ждёт. Если запрос длинный — таймаут.
Решение: queue()
use Laravel\Ai\Responses\AgentResponse;
(new SalesCoach)
->queue($request->input('transcript'))
->then(function (AgentResponse $response) {
// уведомить пользователя
$user->notify(new AnalysisDone($response));
})
->catch(function (Throwable $e) {
Log::error('AI failed', ['error' => $e->getMessage()]);
});
return response()->json(['status' => 'queued']);
Запрос выполняется в фоне. Пользователь получает уведомление.
Очередь для broadcast
(new SalesCoach)->broadcastOnQueue(
'Анализ...',
new Channel('analysis.' . $user->id),
);
Конфигурация очереди
В .env:
QUEUE_CONNECTION=database
Или Redis для продакшена.
Когда использовать
- Генерация длинного текста
- Анализ больших документов
- Генерация изображений
- Batch-обработка
- Всё, что дольше 3–5 секунд
Итоги
queue()для фоновых задачthen()иcatch()для обработкиbroadcastOnQueue()для каналов- Не блокирует HTTP
- Для длинных запросов