Laravel’de Queue (Kuyruk) Kullanımı ve Arka Plan İşlemleri
Laravel’de Queue (kuyruk) sistemi, uzun süren işlemleri arka planda çalıştırarak kullanıcı deneyimini iyileştirir ve performansı artırır.
Bu yazıda queue kullanımı, job oluşturma ve farklı kuyruk sürücülerinin nasıl kullanılacağını inceleyeceğiz.
1️⃣ Queue (Kuyruk) Nedir ve Neden Kullanılır?
Queue, yoğun işlem gerektiren işleri eşzamanlı yerine, arka planda çalıştırmak için kullanılır.
🛠 Örneğin:
✅ E-posta gönderme (Kullanıcı kayıt olduğunda)
✅ API ile veri alışverişi (Harici servislerden veri çekme)
✅ Büyük dosya işleme (Resim, PDF veya video işleme)
✅ Bildirim gönderme (SMS veya push bildirimler)
2️⃣ Laravel’de Queue Kullanımı
📌 a) Queue Kurulumu ve Yapılandırma
Laravel’de varsayılan queue sürücüsü sync
olarak gelir. Bunu .env
dosyasında değiştirebiliriz:
QUEUE_CONNECTION=database
Desteklenen Queue Sürücüleri:
sync
→ İşleri anında çalıştırır (kuyruk olmadan).database
→ Verileri veritabanında kuyruklar.redis
→ Redis ile yüksek performanslı kuyruk işlemi yapar.sqs
→ AWS SQS kullanır.
✅ Veritabanı sürücüsünü kullanmak için migration oluştur:
php artisan queue:table
php artisan migrate
📌 b) Kuyruğa Gönderilecek Job (Görev) Oluşturma
Bir job (arka plan görevi) oluşturmak için:
php artisan make:job SendEmailJob
📌 app/Jobs/SendEmailJob.php
dosyasına giderek handle()
metodunu düzenleyelim:
namespace App\Jobs;
use Mail;
use App\Mail\WelcomeMail;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldBeUnique;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Queue\SerializesModels;
class SendEmailJob implements ShouldQueue
{
use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
protected $user;
public function __construct($user)
{
$this->user = $user;
}
public function handle()
{
Mail::to($this->user->email)->send(new WelcomeMail($this->user));
}
}
📌 c) Job’ı Kuyruğa Gönderme
Şimdi, kullanıcı kayıt olduğunda e-posta göndermek için job’ı dispatch (kuyruğa ekleme) edelim:
use App\Jobs\SendEmailJob;
$user = User::find(1); // Kullanıcıyı bul
dispatch(new SendEmailJob($user)); // Kuyruğa ekle
Eğer işin belli bir süre sonra çalışmasını istiyorsak:
dispatch(new SendEmailJob($user))->delay(now()->addMinutes(5));
📌 d) Queue Worker Çalıştırma
Kuyruğa eklenen işleri çalıştırmak için şu komutu kullan:
php artisan queue:work
Sürekli çalışan bir kuyruk işçisi başlatmak için:
php artisan queue:work --daemon
Not: Production ortamında supervisor
ile kuyruk işçisini yönetmek gerekir.
3️⃣ Redis ile Queue Kullanımı (Performans İçin)
Redis, Laravel’de en iyi queue sürücülerinden biridir. Redis ile queue kullanımı için:
📌 Redis yükleyelim:
sudo apt install redis
📌 .env
dosyasında ayarları güncelle:
QUEUE_CONNECTION=redis
📌 Kuyruk işlerini çalıştır:
php artisan queue:work redis
4️⃣ Queue İşlemlerini Yönetme
✅ Kuyruğu temizleme:
php artisan queue:flush
✅ Belirli bir job’ı tekrar kuyruğa ekleme:
php artisan queue:retry all
✅ Belirli job’ları silme:
php artisan queue:forget job_id
Sonuç
Bu yazıda Laravel’de queue kullanımını, job oluşturmayı, veritabanı ve Redis ile kuyruk işlemlerini öğrendik. Umarız faydalı olmuştur. Sonraki makalemiz Laravel’de Event & Listener Kullanımı üzerine olacak.
Laravel Eğitimi Konular
- Laravel Nedir ve Neden Kullanılmalı?
- Laravel Kurulumu (Composer ile Adım Adım Rehber)
- Laravel Proje Yapısı ve MVC Mimarisi
- Laravel Routing ve Controller Kullanımı
- Laravel Middleware Kullanımı
- API isteklerinde middleware kullanımı
- Laravel Migration ve Seeder Kullanımı
- Laravel Factory ve Faker ile Test Verisi Üretme
- Laravel’de API Kullanımı ve Token Bazlı Authentication
- Laravel Rol ve Yetkilendirme İşlemleri
- Laravel’de Cache ve Performans Optimizasyonu
- Laravel’de Queue (Kuyruk) Kullanımı ve Arka Plan İşlemleri
- Laravel Event & Listener Kullanımı
- Laravel’de Scheduler (Zamanlanmış Görevler) Kullanımı: Otomatik İşlemler ve Zaman Yönetimi
- Laravel’de Test Driven Development (TDD) ve Test Yazımı