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.
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-modepolicy'leri artık çalışmaz.
Gerçek hayat senaryosu: Bir fintech uygulamasında ödeme işlem queue'su
x-queue-type: quorumile declare edilir.x-message-ttl: 86400000(24 saat) ile işlenmeyen mesajlar DLX'e yönlendirilir.x-max-length: 1000000ile 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