Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
Client Sürüm Geçişleri: RabbitMQ.Client 6→7 (IModel'dan IChannel'a) ve MassTransit 8→9
RabbitMQ.Client 7'ye geçiş ilk derlemede 5, ikinci dalgada 10 hata verdi; asıl riskler derleyicinin göstermediği body ömrü, timeout'un iptale dönmesi ve eşzamanlılık. RabbitMQ 4.x'te mirroring policy'sinin reddi, queue tipi uyuşmazlığı, AMQP 1.0 client'ı, MassTransit 9'un lisanssız açılmaması ve v8 desteğinin 31 Aralık 2026'da bitmesi, eski Service Bus SDK'sının karşılıkları.
Dead-Letter Queue Yönetimi: Poison Message'ı Bulmak, İncelemek ve Yeniden İşlemek
DLQ'yu bir iş listesi gibi yönet: mesajın neden düştüğünü header'lardan oku, büyümesini alarma bağla, düzeltmeden sonra dry-run, filtre, üst sınır ve kendi replay sayacınla geri gönder. RabbitMQ'da x-death'in client'ın geri yayınladığı mesajda ilerlemediği, Service Bus DLQ sebep kodları, Kafka DLT'de yanlış orijinal topic hatası ve MassTransit _error header'ları gerçek çıktılarla.
Consumer'da Retry ve Redelivery: Immediate, Delayed ve Exponential Backoff
Geçici hatayı kısa in-memory retry'la, uzun beklemeyi broker'la çöz; kalıcı hatayı hiç deneme, DLQ'ya gönder. RabbitMQ 4.4'te nack ile requeue'nun 5 saniyede 8036 teslimlik döngüsü, TTL + DLX bekleme queue'ları, quorum queue'nun yerleşik delayed retry'ı, Service Bus'ta scheduled retry, Kafka retry topic'leri ve MassTransit UseMessageRetry gerçek çıktılarla.
MassTransit ile Mesajlaşma: Consumer, Publish/Send ve Broker Topology'si — v9 Lisansı ve Alternatifler
MassTransit, connection, ack, serialization ve topology'yi üstlenip consumer'ı tek bir IConsumer<T>'ye indirir; bedeli kendi exchange convention'ı, zarf formatı ve v9'da ticari lisans. Billing'i MassTransit 8.5.12'ye taşıyıp publish/send farkını, oluşan RabbitMQ topology'sini ve zarfı gösteriyor, v9'un lisanssız açılmadığını gerçek çıktıyla görüp v8, Wolverine, Rebus, NServiceBus ve Brighter arasında karar tablosu kuruyoruz.
RabbitMQ Topology'si Kodda: Exchange Tipleri, Binding, Quorum Queue ve Stream
Kalıcı iş mesajları için quorum queue ve topic exchange kullan, topology'yi startup'ta idempotent declare et, değişebilecek limitleri (TTL, max-length, delivery-limit, DLX) queue argümanı yerine policy'ye bırak. Dört routing key'den dokuz kopya, PRECONDITION_FAILED hatası, fanout ile cache invalidation, stream replay ve reject-publish gerçek çıktılarla.
RabbitMQ.Client 7 ile İlk Producer ve Consumer: Async API, Connection/Channel Yaşam Döngüsü ve Manual Ack
IConnection'ı uygulama ömrü boyunca tek tut, IChannel'ı thread'ler arasında paylaşma, publish'i publisher confirmation ve mandatory ile doğrula, consumer'ı BackgroundService içinde autoAck=false ve prefetch ile çalıştır. Prefetch'siz consumer'ın 498 mesajı belleğe çekmesi, autoAck ile 17 mesajın kaybolması, automatic recovery ve graceful shutdown gerçek çıktılarla.
.NET'te Message Queue ile Çalışmaya Giriş: RabbitMQ, Azure Service Bus ve Kafka Client'ları, Hangi Durumda Hangisi
Esnek yönlendirme ve mesaj bazında ack/retry için RabbitMQ, Azure'da yönetilen servis için Azure Service Bus, yüksek hacim ve replay için Kafka; seri raw client ile başlayıp abstraction'lara geçiyor. Üç broker'ın modeli, pratik karşılaştırma tablosu, aynı OrderPlaced'ı üç client ile gönderip okuyan program, Docker Compose ortamı ve Amazon SQS/SNS notu.
Delivery Guarantee'leri: At-Most-Once, At-Least-Once ve "Exactly-Once" Gerçeği
Delivery guarantee'yi ack ile işin sırası belirler: önce ack at-most-once, önce iş at-least-once demektir; exactly-once yalnızca broker'ın kendi kontrol ettiği işlemlerde mümkündür, dış yan etkilerde at-least-once ile idempotent consumer birlikte effectively-once sağlar. RabbitMQ 4.4 üzerinde yeniden teslim, publisher confirm, duplicate'lerin üç kaynağı ve poison message'ın dead-letter queue'ya düşüşü gerçek çıktılarla.
Channel'lar: Point-to-Point Queue, Publish/Subscribe Topic ve Competing Consumer'lar
Point-to-point channel'da her message'ı tek bir consumer alır, publish/subscribe'da her abone grubu kendi kopyasını alır; competing consumer'lar ise aynı channel'ı paylaşarak ölçekler. Aynı OrderPlaced'i RabbitMQ'ya ve Kafka'ya yayınlayan iki adapter, exchange/queue/binding ile topic/partition/consumer group karşılaştırması, Kafka 4.2 share group'ları ve queue ile log arasındaki seçim gerçek çıktılarla.