Ağır işleri arka planda sıraya alıp teker teker yapan sistem
Mail gönderme, resim işleme, HLS dönüşümü gibi zaman alan işlemleri kullanıcının beklemesine gerek kalmadan arka planda çalıştıran bir kuyruk sistemi kurduk. Laravel Horizon ile bu kuyrukları yönetiyoruz.
default, high, mail, media, notifications
Mail, HLS, thumbnail, notification vs.
CPU tasarruflu yapılandırma
Başarısız işler 3 kez tekrar denenir
Bir job kuyruğa eklendiğinde Laravel Queue sistemi şu süreci işletir:
ConvertToHlsJob::dispatch($song) çağrılır. Job sınıfı ShouldQueue interface'ini implement eder, $queue = 'media' ile kuyruk belirlenir.
Job nesnesi serialize() ile JSON'a dönüştürülür. Eloquent modeller sadece ID olarak saklanır (SerializesModels trait).
Redis'e LPUSH queues:media komutu ile job eklenir. delay() kullanıldıysa ZADD queues:media:delayed sorted set'e eklenir.
Horizon worker BRPOP ile kuyruktan job çeker. unserialize() ile nesneye dönüştürür, model ID'lerden fresh instance yükler.
Job'ın handle() metodu çağrılır. FFmpeg ile HLS dönüşümü yapılır, thumbnail oluşturulur. İşlem bitince job silinir.
Exception fırlatılırsa $tries kadar tekrar denenir. Başarısız olursa failed_jobs tablosuna yazılır ve failed() metodu çağrılır.
Canlı kuyruk durumu ve metrikleri
Kuyrukta sırada bekleyen job sayısı
Başarıyla biten job istatistikleri
Hata veren jobların detayları
Arka planda yapılacak tek bir iş birimi
Jobların beklediği kuyruk/sıra
Kuyruktaki jobları çalıştıran işçi süreci
Laravel'in kuyruk yonetim paneli