Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
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.
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.
Idempotent Consumer ve Inbox: Aynı Mesaj İki Kez Geldiğinde
Aynı mesajın ikinci kez işlenmesini kontrolle değil, veritabanındaki bir unique constraint'le engelle: MessageId'li inbox satırını iş verisiyle aynı transaction'da yaz ya da iş anahtarına ON CONFLICT uygula. Check-then-act'in iki fatura kestiği gerçek koşu, PostgreSQL ile inbox ve upsert, yan etkiler, dedupe temizliği ve MassTransit inbox'ı.
Message Queue Kodunu Test Etmek: Testcontainers, MassTransit Test Harness ve Contract Testleri
Mantığı broker'dan ayırıp unit test et, broker davranışını Testcontainers ile gerçek RabbitMQ'da dene, beklemeyi Task.Delay ile değil sinyal ve sınırlı polling ile çöz. MassTransit test harness'ı, negatif assert'in hareketsizlik maliyeti, Total→TotalAmount değişikliğinin varsayılan JSON ayarlarıyla sessizce 0'a dönmesi ve .NET 10'da xUnit v3 için gereken Microsoft.Testing.Platform ayarı.
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ı.