Queue ve Job Sistemi
Uzun süren işlemleri (email gönderimi, dosya işleme, API çağrıları) arka plana atarak uygulama yanıt süresini kısaltın.
Queue Konfigürasyonu
# .env
QUEUE_CONNECTION=database # sync, database, redis, sqs
# Database driver için migration
php artisan queue:table
php artisan migrate
Job Oluşturma
php artisan make:job ProcessPodcast
php artisan make:job SendWelcomeEmail
user->email)
->send(new WelcomeEmail($this->user));
}
/**
* Job başarısız olursa
*/
public function failed(\Throwable $exception): void
{
// Log veya bildirim
Log::error('Welcome email failed', [
'user_id' => $this->user->id,
'error' => $exception->getMessage(),
]);
}
}
Job Dispatch
use App\Jobs\SendWelcomeEmail;
// Basit dispatch
SendWelcomeEmail::dispatch($user);
// Delay ile
SendWelcomeEmail::dispatch($user)->delay(now()->addMinutes(5));
// Belirli queue'ya
SendWelcomeEmail::dispatch($user)->onQueue('emails');
// Belirli connection'a
SendWelcomeEmail::dispatch($user)->onConnection('redis');
// Zincir (sıralı çalışma)
Bus::chain([
new ProcessPodcast($podcast),
new OptimizeAudio($podcast),
new PublishPodcast($podcast),
])->dispatch();
// Dispatch if/unless
SendWelcomeEmail::dispatchIf($condition, $user);
SendWelcomeEmail::dispatchUnless($condition, $user);
// Sync dispatch (queue'ya atmadan direkt çalıştır)
SendWelcomeEmail::dispatchSync($user);
Queue Worker
# Worker başlat
php artisan queue:work
# Belirli queue
php artisan queue:work --queue=high,default,low
# Tek job çalıştır
php artisan queue:work --once
# Bellek limiti
php artisan queue:work --memory=512
# Timeout
php artisan queue:work --timeout=60
# Sleep (job yokken bekleme)
php artisan queue:work --sleep=3
# Failed job'ları listele
php artisan queue:failed
# Failed job'ları retry
php artisan queue:retry all
php artisan queue:retry {id}
# Failed job'ları temizle
php artisan queue:flush
Supervisor (Production)
# /etc/supervisor/conf.d/laravel-worker.conf
[program:laravel-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /var/www/html/artisan queue:work --sleep=3 --tries=3
autostart=true
autorestart=true
stopasgroup=true
killasgroup=true
user=www-data
numprocs=4
redirect_stderr=true
stdout_logfile=/var/www/html/storage/logs/worker.log
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start laravel-worker:*
Önemli Noktalar
- Queue uzun süren işleri arka plana atar
- Job sınıfları queue'ya gönderilen iş birimleri
- Database, Redis, SQS gibi driver'lar var
- php artisan queue:work ile worker başlatılır
- Failed job'lar için retry mekanizması