Очереди в Laravel позволяют откладывать трудоемкие задачи (например, отправку email или обработку файлов) для асинхронного выполнения. Вот подробное руководство по настройке:
Сначала настройте подключение в config/queue.php
. Laravel поддерживает несколько драйверов:
'connections' => [
'database' => [
'driver' => 'database',
'table' => 'jobs',
'queue' => 'default',
'retry_after' => 90,
],
'redis' => [
'driver' => 'redis',
'connection' => 'default',
'queue' => '{default}',
'retry_after' => 90,
'block_for' => null,
],
],
php artisan queue:table
php artisan migrate
Создайте класс задачи командой:
php artisan make:job ProcessPodcast
Пример класса Job:
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 ProcessPodcast implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public function __construct(public Podcast $podcast) {}
public function handle(): void
{
// Логика обработки подкаста
}
}
Для обработки задач запустите воркер:
php artisan queue:work
Полезные опции:
--queue=high,default
- приоритеты очередей--tries=3
- количество попыток--timeout=30
- таймаут выполненияДля надежной работы на production используйте Supervisor. Пример конфига (/etc/supervisor/conf.d/laravel-worker.conf
):
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/artisan queue:work --sleep=3 --tries=3
autostart=true
autorestart=true
user=www-data
numprocs=8
redirect_stderr=true
stdout_logfile=/var/www/worker.log
ProcessPodcast::dispatch($podcast);
// Или с задержкой
ProcessPodcast::dispatch($podcast)->delay(now()->addMinutes(10));
Создайте таблицу для неудачных задач:
php artisan queue:failed-table
php artisan migrate
Просмотр неудачных задач:
php artisan queue:failed
Для продвинутого мониторинга установите Horizon:
composer require laravel/horizon
php artisan horizon:install
Laravel предоставляет мощную систему очередей с поддержкой различных драйверов (database, redis, sqs и др.), возможностью повторения неудачных задач и инструментами для мониторинга. На production важно использовать Supervisor или Horizon для стабильной работы воркеров.