Redis Queue و Laravel Horizon — راهاندازی production
database queue برای شروع خوب است؛ وقتی صدها job در دقیقه دارید، Redis + Horizon استاندارد صنعتی Laravel است. Horizon dashboard زنده، retry، throughput و failed jobs — بدون حدس زدن «worker زنده است یا نه».
چرا Redis برای Queue؟
- سریع in-memory
- atomic pop/push
- همان Redis برای cache — دو نقش
- Horizon فقط روی redis driver
تنظیم
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
QUEUE_CONNECTION=redis
// config/queue.php — connection redis
'redis' => [
'driver' => 'redis',
'connection' => env('REDIS_QUEUE_CONNECTION', 'default'),
'queue' => env('REDIS_QUEUE', 'default'),
'retry_after' => 90,
],
نصب Horizon
composer require laravel/horizon
php artisan horizon:install
php artisan migrate
مسیر dashboard: /horizon — با Gate محافظت کنید.
Gate::define('viewHorizon', fn (User $user) => $user->is_admin);
اجرای Horizon
php artisan horizon
جایگزین queue:work برای redis — خودش workerها را balance میکند.
Supervisor production
[program:horizon]
command=php /var/www/app/artisan horizon
autostart=true
autorestart=true
user=www-data
بعد از deploy: php artisan horizon:terminate — graceful restart.
چند queue
// config/horizon.php environments
'supervisor-1' => [
'queue' => ['default', 'emails'],
'balance' => 'auto',
'maxProcesses' => 10,
],
job سنگین queue جدا — onQueue('videos') در Job.
مانیتورینگ
Horizon: wait time، jobs per minute، failed. هشدار اگر queue انباشته شد.
اشتباهات
- Horizon و queue:work همزمان روی یک queue
- فراموش horizon:terminate بعد از deploy
- Redis بدون persistence در داده حیاتی — AOF/RDB
- dashboard عمومی بدون auth
جمعبندی
production queue = redis + horizon + supervisor. مقدمه: Queue. خطا: failed jobs.