RRabbitMQ Handbook

TEMEL

Queue Özellikleri

Queue (kuyruk), mesajların sırayla bekletildiği "dolap"tır — gelen mesajlar sıraya girer, consumer gelip sırayla alır (ilk giren ilk çıkar). RabbitMQ'da iki ana queue tipi vardır:

Kod örneği görünümü Bu sayfadaki eşleşen örnekleri seçilen istemciye göre gösterir.
  • Classic Queue — Tek sunucuda çalışır. Basit ama o sunucu çökerse mesajlar risk altında.
  • Quorum Queue — Birden fazla sunucuda kopyalanır. Biri çökse diğeri devam eder (production için önerilen).

Queue oluştururken çeşitli ayarlar (argument) verilebilir: boyut limiti, mesaj ömrü, taşma davranışı gibi.

Published Exchange'e geldi Ready Queue'da bekliyor Unacked Consumer'da, ack bekleniyor Acked Silindi ✓ Nacked Requeue / DLX TTL Expired DLX'e gider DLX Queue Dead letter

Queue Özellikleri Matrisi

Özellik Classic Queue Quorum Queue Açıklama
durable Opsiyonel Her zaman (zorunlu) Broker restart'ta queue hayatta kalır
exclusive Desteklemez Sadece declare eden connection kullanabilir
auto-delete Desteklemez Son consumer ayrılınca queue silinir
x-message-ttl Mesaj yaşam süresi (ms)
x-expires (kısmi) Kullanılmayan queue'nun silinme süresi
x-max-length Maksimum mesaj sayısı
x-max-length-bytes Maksimum toplam boyut
x-dead-letter-exchange (at-least-once) Rejected/expired mesajlar nereye gitsin
x-overflow drop-head / reject-publish drop-head / reject-publish Limit aşılınca davranış
x-queue-type "classic" "quorum" Queue tipini belirler
x-delivery-limit (default: 20) Poison message koruması
Replication (single node) (Raft, N replicas) HA için quorum queue kullan

Ne Zaman Kullan / Kullanma

Senaryo Queue Tipi Neden
Production iş yükleri, veri kaybı kabul edilemez Quorum Queue Raft consensus ile replicated, HA
Geçici/ephemeral queue'lar (reply-to, exclusive) Classic Queue Quorum exclusive desteklemez
Çok yüksek queue churn (sürekli create/delete) Classic Queue Quorum queue overhead'i yüksek
5M+ mesaj backlog, fan-out okuma Stream Quorum queue bu boyutta uygun değil

Dikkat: RabbitMQ 4.0'dan itibaren classic mirrored queue'lar tamamen kaldırıldı. HA için tek seçenek Quorum Queue'dur. Eski ha-mode policy'leri artık çalışmaz.

Gerçek hayat senaryosu: Bir fintech uygulamasında ödeme işlem queue'su x-queue-type: quorum ile declare edilir. x-message-ttl: 86400000 (24 saat) ile işlenmeyen mesajlar DLX'e yönlendirilir. x-max-length: 1000000 ile queue'nun kontrolsüz büyümesi engellenir.

var args = new Dictionary<string, object?>
{
    ["x-queue-type"] = "quorum",
    ["x-delivery-limit"] = 5,                      // poison message: 5 retry sonrası DLX'e
    ["x-dead-letter-exchange"] = "dlx.exchange",
    ["x-dead-letter-routing-key"] = "failed.payments",
    ["x-message-ttl"] = 86_400_000,                // 24h TTL
    ["x-max-length"] = 500_000                     // max 500K mesaj
};

await channel.QueueDeclareAsync(
    queue: "payment-processing",
    durable: true,       // quorum için zorunlu
    exclusive: false,    // quorum exclusive desteklemez
    autoDelete: false,   // quorum auto-delete desteklemez
    arguments: args);
# Tüm "payment." ile başlayan queue'lara policy uygula
rabbitmqctl set_policy payment-policy     "^payment."     '{"dead-letter-exchange":"dlx.exchange","delivery-limit":5,"max-length":500000}'     --priority 10     --apply-to "quorum_queues"

# Queue bilgilerini kontrol et
rabbitmqctl list_queues name type messages consumers