Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Yazı Tipi BoyutlandırıcıAa
  • Anasayfa
  • Teknoloji
    • Siber Güvenlik
    • Yapay Zeka
    • Donanım
    • Bilim
  • Yazılım
  • Savunma & İstihbarat
  • Oyun
  • Yaşam
    • Finans
    • Sinema
    • Dünyadan Haberler
  • İş Birliği
Okuma: Laravel 13 Queue::route(): Tüm Kuyruk Topolojisini Kontrol Etmek İçin Tek Nokta
Paylaş
Yazı Tipi BoyutlandırıcıAa
Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Ara
Bizi Takip Et
  • Hakkımızda
  • Gizlilik politikası
  • Tanıtım Yazısı ve Backlink Hizmeti
© 2026 Teknomers. All Rights Reserved.

Anasayfa » Laravel 13 Queue::route(): Tüm Kuyruk Topolojisini Kontrol Etmek İçin Tek Nokta

Yazılım

Laravel 13 Queue::route(): Tüm Kuyruk Topolojisini Kontrol Etmek İçin Tek Nokta

teknomers
Son güncelleme: 25 Mart 2026 10:56
teknomers
Paylaş
Paylaş

Kaynak: hafiz.dev


Laravel uygulamalarının çoğu, bir süre sonra karmaşık bir kuyruğa dönüşüyor. Öncelikle temiz bir başlangıç yapıyorsunuz: tek bir varsayılan kuyruk, tüm işler oraya gidiyor, hayat basit. Sonra bir müşteri, e-postaların yavaş olduğunu şikayet ediyor, bu yüzden özel bir emails kuyruğu oluşturuyorsunuz. Sonra Stripe web kancaları birikmeye başlıyor, bu nedenle billing kendi kuyruğunu alıyor. Ardından AI işlem görevleri ortaya çıkıyor ve her şeyi yiyor, bu yüzden heavy noktası daha güçlü bir Redis bağlantısına yönlendiriliyor.

Altı ay sonra, kuyruk topolojiniz birden fazla yerde yaşıyor: bazı iş sınıflarındaki $queue özelliklerinde, denetleyicilerde ve planlı komutlarda dağılmış ->onQueue() zincirlerinde ve yapılandırılmamış bazı işlerin varsayılan kuyrukta sessizce düşmesi. Bir kuyruk adını değiştirdiğinizde, tüm kod tabanını taramak zorunda kalıyorsunuz. Yeni bir geliştirici eklediğinizde, nereye bakacağını bilmeden geliyor. “ProcessInvoice nereye gidiyor?” sorusunun cevabı: yazana bağlı olarak her yere gider.

Laravel 13 ile birlikte Queue::route() geliyor. RateLimiter::for() oran limitleri veya Route::model() model bağlama için aynı felsefe. Altyapı yapılandırması tek bir yerde olmalı, yirmi iş sınıfında dağılmamalı. Bu, on bir kuyruk ve sıfır tutarlılık olan bir SaaS kod tabanını temizlerken istediğim bir yazıydı.


Muhtemelen Şu Anda Karıştırdığınız İki Model

Öncelikle Queue::route() kullanılmadan önce, belli bir kuyrukta işlem yapmanız gerektiğinde iki gerçek seçeneğiniz vardı.

Birinci seçenek: sınıf özellikleri. Çalışır, ancak iş sınıfını altyapını bilgilendirilmiş hale getiriyor.

class ProcessInvoice implements ShouldQueue
{
    use Queueable;
    public string $queue = 'billing';
    public string $connection = 'sqs';
}

ProcessInvoice işinizin üretimde SQS kullandığını, test ortamında ise veritabanı kullandığını bilmemesi gerekir; bu bir çevre sorunudur, iş mantığı sorunu değildir. Eğer bu işi farklı bir kuyruğa taşımak isterseniz, sınıfın kendisine dokunmanız gerekir. Bu, iş mantığı değişmediği sürece olmamalıdır. Altyapıyı yeniden organize etmek için değil.

İkinci seçenek: dağıtımda zincirleme. Altyapı bilgisini arayıcıya kaydırıyor.

ProcessInvoice::dispatch($invoice)
    ->onQueue('billing')
    ->onConnection('sqs');

Artık bu işi dağıtan her denetleyici, komut ve dinleyici doğru kuyruk ve bağlantıyı zincirlemeyi hatırlamak zorundadır. Bir çağrı noktasını atladığınızda, görev sessizce varsayılan kuyruğa düşer. Hiçbir hata olmaz, uyarı yok. Yavaş faturalama süreci ve billing Horizon işçisini boşta izleyen bir geliştirici varsa, işlerin yavaş yavaş birikmesi oluyor.

Uygulamalar genellikle her iki modeli karıştırma eğilimindedir. Bazı işler sınıf özelliklerini kullanır, bazıları dağıtım zincirlerini kullanır. Bazıları her iki yerde de yer alır ve biri diğerini hatırlamadan geçersiz kılar. Yeni birine katılırken, bakacak mantıklı bir yer yoktur. Sadece tarayıp umut etmeniz gerekir.

Queue::route(), her iki modeli tek bir model ile değiştirir.


Queue::route() Nasıl Çalışır

Kuyruk topolojinizi bir kez kaydedersiniz, AppServiceProvider::boot() içinde:

use Illuminate\Support\Facades\Queue;

public function boot(): void
{
    Queue::route(ProcessInvoice::class, connection: 'sqs', queue: 'billing');
    Queue::route(SendWelcomeEmail::class, queue: 'emails');
    Queue::route(GenerateReport::class, connection: 'redis', queue: 'heavy');
    Queue::route(ProcessPodcast::class, queue: 'media');
}

Tamam. Artık ProcessInvoice‘nin her dağıtımı otomatik olarak billing kuyruğuna, sqs bağlantısı ile yönlendirilir, bunu hangi kod tabanında dağıttığınızın önemi yok. Zincirleme yok. Sınıf özellikleri gerekli değil.

// Billing/sqs'ye otomatik olarak gider
ProcessInvoice::dispatch($invoice);

// Bu da öyle, uygulamanın herhangi bir yerinden
dispatch(new ProcessInvoice($invoice));

İş sınıfı temiz kalır:

class ProcessInvoice implements ShouldQueue
{
    use Queueable;
    
    public function __construct(
        public readonly Invoice $invoice,
    ) {}

    public function handle(): void
    {
        // sadece iş mantığı burada
    }
}

Hiçbir $queue yok. Hiçbir $connection yok. Faturalama mantığı ile ilgili olan bir sınıfın üst kısmında altyapı gürültüsü yok.

Laravel, ayrıca toplu kayıt için bir dizi kısayol da gönderir:

Queue::route([
    ProcessInvoice::class   => ['billing', 'sqs'],  // kuyruk + bağlantı
    SendWelcomeEmail::class => 'emails',             // kuyruk yalnızca, varsayılan bağlantı
    GenerateReport::class   => ['heavy', 'redis'],
]);

Her iki stil de çalışıyor. Ben, satır bazında yaklaşımı tercih ediyorum çünkü kod incelemesinde fark etmek daha kolay. Ancak dizi söz dizimi, servis sağlayıcınız uzun hale geldiğinde faydalı olabilir.


Gerçekten Zeki Kısım: Arayüz ve Trait Yönlendirme

Bireysel iş sınıflarını yönlendirmek faydalıdır. Ancak arayüzle yönlendirme daha da güçlü bir hale geliyor, özellikle uygulamanız büyüdüğünde.

Diyelim ki, faturalama sisteminize ait bir düzine işiniz var: ProcessInvoice, RefundPayment, ChargeSubscription, GenerateReceipt vs. Her birini bireysel olarak kaydedebilirsiniz. Ama her yeni faturalama işini eklediğinizde AppServiceProvider‘ı güncellemek zorundasınız. Bu, kaçınmaya çalıştığınız aynı bakım yüküdür.

Bunun yerine, bir işaretçi arayüzü oluşturabilirsiniz:

namespace App\Contracts;

interface BillingJob {}

Her faturalama işinde bunu uygulayın:

class ProcessInvoice implements ShouldQueue, BillingJob
{
    use Queueable;
    // ...
}

class RefundPayment implements ShouldQueue, BillingJob
{
    use Queueable;
    // ...
}

class ChargeSubscription implements ShouldQueue, BillingJob
{
    use Queueable;
    // ...
}

Sonra bir kez kaydedin:

Queue::route(BillingJob::class, connection: 'sqs', queue: 'billing');

BillingJob arayüzünü uygulayan her iş, otomatik olarak faturalama/SQS’ye yönlendirilir. Yarın yeni bir faturalama işi ekleyin, arayüzü uygulayın ve doğru bir şekilde yönlendirilir. Hizmet sağlayıcısında herhangi bir değişiklik yapmaya gerek yok.

Aynı model, üst sınıflarla da çalışır, arayüzler yerine mirası tercih ederseniz:

abstract class BillingJob implements ShouldQueue
{
    use Queueable;
}

class ProcessInvoice extends BillingJob {}
class RefundPayment extends BillingJob {}

Ya da bileşen tercih ederseniz, trait’lerle:

trait IsBillingJob {}

Queue::route(IsBillingJob::class, connection: 'sqs', queue: 'billing');

İşlerinizi nasıl organize ettiğinize göre hangisini seçebilirsiniz. Yönlendirme çözümü, somut bir sınıf, arayüz, trait veya üst sınıf geçirip geçirmediğinize bakılmaksızın aynı şekilde çalışır.

Elde edilen her kuralın bir önceliği vardır: doğrudan sınıf kaydı her zaman arayüz eşleşmesinden daha ağır basar. Yani eğer BillingJob‘u billing/sqs‘ya yönlendirirseniz, ama sonra ProcessInvoice‘yi billing-priority/sqs‘ye işaret eden belirli bir yönlendirme ekliyorsanız, o sınıf için daha spesifik kural kazanır, diğerleri ise arayüz yönlendirmesini kullanmaya devam eder. Özel, genelden daha ağır basar. Bu, bekleyeceğiniz bir davranıştır.


Bir Görsel: Dağıtım Çözümü Nasıl Çalışır

Queue::route() yapılandırmasını yapıp, ne olduğunu görmek için tam resim:

flowchart LR
    A[ProcessInvoice::dispatch] --> R{Queue::route resolver}
    B[RefundPayment::dispatch] --> R
    C[SendWelcomeEmail::dispatch] --> S{Queue::route resolver}
    D[GenerateReport::dispatch] --> T{Queue::route resolver}
    R --> F[billing queue / SQS]
    S --> G[emails queue / default]
    T --> H[heavy queue / Redis]

Her dağıtım, çözücü üzerinden geçer. Çözücü, iş sınıfını kaydedilmiş yönlendirmelerle, ardından arayüzler, traitler ve üst sınıflarla kontrol eder. İlk eşleşme kazanır. Eşleşme yoksa, görev bağlı olduğu varsayılan kuyrukta düşer, tam olarak önceki gibi.

Dağıtım çağrı noktalarınız, uygulamanın neresinde olursa olsun temiz kalır.


Gerçek Bir Önce ve Sonra

İşte bu değişiklikten önce, üç kuyruk olan tipik bir uygulama ile birlikte görünüm. Dört dağıtım, dört farklı model:

// InvoiceController.php
ProcessInvoice::dispatch($invoice)
    ->onQueue('billing')
    ->onConnection('sqs');

// RefundController.php: biri onConnection'ı unuttu, üretimde yanlış bağlantı
RefundPayment::dispatch($refund)->onQueue();

// SendWelcomeEmail.php: iş sınıfında kodlanmış özellik
class SendWelcomeEmail implements ShouldQueue
{
    public string $queue = ;
}

// ReportCommand.php: hiç yönlendirme yok, sessizce varsayılan kuyruğa düşüyor
GenerateReport::dispatch();

Refaktörlemeden sonra, AppServiceProvider tek bir doğruluk kaynağı haline geliyor:

public function boot(): void
{
    Queue::route(BillingJob::class, connection: , queue: );
    Queue::route(SendWelcomeEmail::class, queue: );
    Queue::route(GenerateReport::class, queue: );
}

Artık her dağıtım yeri aynı temiz çağrı olur:

ProcessInvoice::dispatch();
RefundPayment::dispatch();
SendWelcomeEmail::dispatch();
GenerateReport::dispatch();

RefundPayment bağlantı hatası giderildi. Sessiz GenerateReport yönlendirme problemi düzeltildi. Ve kod tabanını okuyan herkes kuyruk yapılandırması için tam olarak nereye bakacaklarını biliyor.


Mevcut Bir Uygulamayı Geçiştirmek

Eğer Laravel 13’e yükseltiyorsanız, bu refaktör, güncelleme ile iyi bir şekilde birleşir. Laravel 12’den 13’e yükseltme kılavuzu yükseltme sürecini kapsar; bu refaktör, hemen ardından veya sırasında kullanılabilir.

Başlangıçta, iş sınıflarınızdaki her $queue ve $connection özelliğini bulun:

grep -rn 
grep -rn 10,000 kuyruk işini kırılmadan işleme adlı makale detayları kapsar. Eğer işçi yapılandırmanız da karmaşık ise, bu refaktörü okurken dikkatle okumak faydalı olacaktır.


->onQueue() Ne Zaman Anlamlı Olur

Queue::route() bir iş sınıfı için varsayılanı ayarlıyor. Dağıtım noktasında yine de geçersiz kılabilirsiniz. Bu özellik esnekliği kaldırmıyor. Sadece ne olacağını değiştiriyor.

Bu öncelik geçişleri için önemlidir. Diyelim ki çoğu faturayı billing kuyruğuna yönlendiriyorsunuz, ancak premium müşterilerin sırayı öne geçirmesi gerekiyor:

// Standart dağıtım: Queue::route() üzerinden billing'e gider
ProcessInvoice::dispatch();

// Premium müşteri: hızlı geçiş kuyruk için geçersiz kıl
if ($customer->isPremium()) {
    ProcessInvoice::dispatch()->onQueue();
}

Merkezi varsayılan, 99% durumları ele alır. Kenar durumlar, dağıtım noktasında açık geçersiz kılmalarla güncellenir. Kural ile istisna arasında temiz bir ayrım.


Açık Olması Gereken Takaslar

Sadece Laravel 13+ ‘da var. Eğer Laravel 12’deyseniz, bunu kullanamazsınız. Bu aynı zamanda güncellemeyi yapmak için makul bir teşviktir. 12 güvensiz değil (Şubat 2027’ye kadar güvenlik güncellemeleri alıyor), ancak yaşam kalitesi iyileştirmeleri birikiyor. Modeller, işler ve komutlar için PHP Attributes. Cache::touch(). Bu. Bireysel olarak küçükler. Bir araya geldiklerinde, günlük işlerinizi temizlemeyi sağlıyor. Çıkışın tam resmini istiyorsanız, PHP Attributes gönderisi ile o tarafı kapsar.

Keşfedebilirlik, servis sağlayıcısına taşınıyor. ProcessInvoice.php‘yu okuyan bir geliştirici, hangi kuyruk kullanıldığına bakmadan, AppServiceProvider‘a da bakmayı bilmelidir. Eğer ekibiniz iş sınıflarının altyapı yapılandırmasında tam olarak belgelenmesini değerliyorsa, bu gerçekten tartışmaya değer bir takas. Benim görüşüm: altyapı yapılandırması sınıfta yaşamamalıdır. Bu, RateLimiter::for() özellikleri geldiğinde de söz konusu olan bir tartışmaydı ve şimdi bu model hakkında kimse şikayet etmiyor.

Test doğrulamaları hâlâ çalışır, ancak farklı nedenlerden. Eğer Queue::assertPushedOn('billing', ProcessInvoice::class) kullanan testleriniz varsa, bu geçişten sonra hâlâ geçer. Ancak şimdi, ->onQueue() zincirine ek olarak çalışıyorlar. Bu, aslında daha doğru bir davranıştır. Ancak bir test geçerken, şaşırtıcı bir şekilde geçerse, bu geçiş sırasında geçici olup bu karışıma dikkat etmeniz önemlidir. Bu bir hata değil; bu, özelliğin çalıştığı anlamında.


SSS

Queue::route() Horizon ile çalışıyor mu?

Evet. Horizon kuyrukları alırken isimlerini görür. Queue::route() iş kuyruğuna girmeden önce çözülür, bu yüzden Horizon, işi doğru isimli kuyrukta görür. Horizon yapılandırmanız hâlâ her bir kuyruk için işçi sayıları ve öncelikler kontrol eder. Bu konuda hiçbir değişiklik yoktur.

Kayıtlı bir yönlendirme ve sınıf özelliği olmayan bir iş dağıtırsam ne olur?

Bağlantı için varsayılan kuyruğa düşer, tam olarak önceki gibi. Queue::route() tamamen ekleyici bir özelliktir. Mevcut davranışları kırmaz.

Bu, toplu ve zincirlenmiş işler için çalışıyor mu?

Toplu işler için, evet. Her bir toplu iş, Queue::route() ile bağımsız bir şekilde çözülüyor. Zincirlenmiş işler için, zincirin nasıl yapılandırıldığına bağlı. Zinciri ->onQueue() veya ->onConnection() ile açıkça dağıtsanız, bu değerler, zincir düzeyindeki tüm işler için, bireysel olarak geçersiz kılınmadıkça öncelik kazanır, çünkü zincir düzeyindeki kuyruk ayarları tüm işler için geçerlidir. Eğer zincir düzeyinde hiçbir kuyruk belirtilmezse, her bir iş için normal olarak Queue::route() çözülür. Sonuç olarak: belirtilmiş olan zincir davranışını test edin.

Queue::route()’yu kullanabilir miyim ve hâlâ dağıtım noktasında geçersiz kılabilirim?

Evet. ->onQueue() ve ->onConnection() her zaman ağır basar. Yönlendirme yalnızca belirtilmediğinde varsayılan olur.

Bu, ShouldQueue uygulayan postalar ve bildirimlerle çalışıyor mu?

Hayır. Queue::route() yalnızca iş sınıflarına uygulanır. Postalar ve bildirimler, kendi onQueue() yöntemini kullanır ve bu özelliklerden etkilenmez.

Eğer bir iş birden fazla arayüz yönlendirmesi ile eşleşiyorsa ne olur?

Doğrudan sınıf kayıtları, arayüz kayıtlarından ağır basar. Arayüzler arasında ise, ilk eşleşen yönlendirme kazanır. Arayüzlerinizi bir işin yalnızca bir yönlendirmeye eşleşecek şekilde tasarlayın. Bu, öngörülebilirliği korur ve altı ay sonra başa bela olabilecek ince sıralama bağımlılığından kaçınır.


Sonuç

Queue::route() gösterişli değil. Hiçbir konferans anahtarı gövdesine girmeyecek. Ama bu, kullanmaya başladıktan sonra her gün fark ettiğiniz bir özellik: bir dosya, bir yere bakmak, bir işin nereye gideceği ile ilgili sürpriz yok.

Kuyruk topolojisi altyapı yapılandırmasıdır. AppServiceProvider‘da bulunmalı, oran sınırlayıcıları ve model bağlamaları yanında. İş sınıflarında gömülü olmamalı ve her dağıtım çağrı noktasında tekrarlanmamalıdır. Eğer Laravel 13’e geçerseniz ve iki kuyruğunuzdan fazlası varsa, bu refaktör bu hafta bir saat değer.

Bu model, kuyruk topolojinizi genel bir şekilde düşünmenizi sağlar. Hepsi bir dosyada olduğunda, altyapınızın zihninizdeki modelle eşleşip eşleşmediğini hemen görebilirsiniz. Boşluklar belirginleşir. Yanlış bir yapılandırma göze çarpar. Çok küçük bir değişiklik, ekibinizin sistemi anlaması konusunda çok büyük bir etkiye sahiptir.

Kaynak: Orijinal Makale

Günlük Kullanımınıza Almanız Gereken 5 Modern PHP Özelliği
Brave CMS – Basitlik, Esneklik ve Ölçeklenebilirlik İçin Tasarlanmış Bir CMS
Yeni Yayınlandı: API’leri Ustalıkla Öğrenmek için Bir Sandbox (Laravel ile Geliştirildi)
Ajanslar için Laravel AI: MCP, Boost ve Kaos Olmadan Gönderim Ajanı Hazır Ürünler
Proje BookMyShow: 2. Gün – DEV Community
Bu Makaleyi Paylaş
Facebook Bağlantıyı Kopyala Yazdır
Paylaş
Önceki Makale Amazon Bahar İndirimleri: Gerçekten İyi 25 Teknoloji Teklifi!
Sonraki Makale Manchester United Kadınları için Tarihi Bir Haftaya Hazır!

Sanal Medya

FacebookBeğen
452Takip Et
PinterestSabitle
237Takip Et

Son Eklenenler

Gears Of War’ta Devrim Niteliğinde Hareket Yeniliği
Oyun
Acil: Yapay Zeka Destekli Windows Terminal ile Tanışın!
Siber Güvenlik
Elegoo Jupiter 2 Reçineli 3D Yazıcı İncelemesi: Dev Geri Döndü
Donanım
Yeni Spyro Oyunu: A Realm Beyond ile Efsane Yeniden Canlanıyor
Oyun
NASA Ay’a Yüksek Teknoloji Prada Termal Giysileriyle Gidecek
Liste
Çin, Saishiteng Dağı’nı Dünyanın En Büyük Astronomi Üssü Yapıyor!
Bilim
//

Siber güvenlik, yapay zeka ve savunma sanayiinden; finans ve sinema dünyasına uzanan geniş bir yelpaze. Teknomers; teknoloji, strateji ve yazılım dünyasını sade bir dille sizlerle buluşturuyor.

Kurumsal

  • Hakkımızda
  • Gizlilik politikası
  • Tanıtım Yazısı ve Backlink Hizmeti

Kategoriler

  • Teknoloji
  • Oyun
  • Sinema
  • Siber Güvenlik
  • Bilim
  • Finans
  • Dünyadan Güncel Haberler

Populer

  • TV'de Ücretsiz İzlenebilen Şifresiz Erotik Kanallar (2025 Güncel Frekans Listesi)

  • The Last of Us PC Kontrolleri: Hızlı Silah Değiştirme ve Tüm Tuşlar (2025)

  • Hogwarts Legacy'de Odaklanma İksiri Nasıl Yapılır?

Teknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor HaberleriTeknomers | Dünyadan Güncel Teknoloji | Oyun | Müzik | Film | Spor Haberleri
Bizi Takip Et
© 2026 Teknomers. All Rights Reserved.
Welcome Back!

Sign in to your account

Kullanıcı Adı veya E-posta Adresi
Şifre

Şifrenizi mi unuttunuz?