Blog
Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.
.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.
Confluent.Kafka ile .NET'te Kafka: Producer, Consumer Group, Offset Commit ve Rebalance
Producer'ı singleton tut, key ile sıra, Acks=All ve idempotence kullan, dispose öncesi Flush et; consumer'da EnableAutoOffsetStore=false ile işlem sonrası StoreOffset yap ve poison mesajı dead-letter topic'e yaz. Varsayılan auto commit'in yarım kalan mesajı atlaması, kill -9 sonrası tekrar, eager rebalance, KIP-848 ve consumer lag gerçek çıktılarla.
Mesaj Contract'ları: Serialization, Versioning ve Geriye Dönük Uyumluluk
Contract'ı domain entity'sinden ayrı record'larla tut, yalnızca opsiyonel alan ekleyerek ilerle, System.Text.Json'da RespectRequiredConstructorParameters ve RespectNullableAnnotations'ı aç, sürümü type header'ında taşı. Varsayılan ayarlarla rename'in 0 TL'lik faturaya dönüşmesi, enum'a eklenen değerin eski consumer'ı kırması ve Schema Registry'nin uyumsuz şemayı 409 ile reddetmesi gerçek çıktılarla.
Mesajlaşmada Observability: OpenTelemetry Trace Context, Queue Depth ve Consumer Lag
RabbitMQ.Client 7'nin hazır ActivitySource'unu dinle, Kafka'da traceparent'ı propagator ile header'a kendin yaz; bir siparişin API, RabbitMQ, Billing, Kafka ve Notification yolculuğu tek trace'te beş span olarak görünür. Log scope'unda MessageId ve CorrelationId, messaging.process.duration histogram'ı, kardinalite, queue depth ve Kafka consumer lag ölçümü gerçek çıktılarla.