Mert Özen Her Satırda Daha İleri

Blog

Mert Özen'in yazılım geliştirme, backend, frontend ve DevOps üzerine blog yazıları.

Seriler
6 yazı bulundu #messaging
Transactional Outbox ve Inbox: Dual Write Problemini Anlamak ve Doğru Tasarlamak
Yazılım Mimarisi SERİ 07

Transactional Outbox ve Inbox: Dual Write Problemini Anlamak ve Doğru Tasarlamak

Veritabanına commit edip ayrıca broker'a publish etmek iki ayrı hata penceresi açar; çözüm, message'ı iş verisiyle aynı transaction'da bir outbox tablosuna yazıp ayrı bir relay ile yayınlamak ve relay'in ürettiği duplicate'leri consumer tarafında inbox ile elemektir. Dual write senaryoları, polling ve CDC relay karşılaştırması, PostgreSQL'de watermark ile message kaybı ve SKIP LOCKED ile çoklu relay gerçek çıktılarla.

7 Kas 2026 16 dk 5
Message Ordering ve Partitioning: Sıra Garantisi Nerede Başlar, Nerede Biter?
Yazılım Mimarisi SERİ 05

Message Ordering ve Partitioning: Sıra Garantisi Nerede Başlar, Nerede Biter?

Broker'lar global sıra vermez; Kafka'da partition key, Azure Service Bus'ta session, RabbitMQ'da single active consumer ile yalnızca anahtar başına sıra elde edilir ve consumer yine de version kontrolüyle sıradan bağımsız olmalıdır. OrderId ile partitioning, BookId key'inin yarattığı hot partition, partition sayısını artırınca taşınan key'ler ve librdkafka ile Java partitioner farkı Kafka 4.2 üzerinde gerçek çıktılarla.

7 Kas 2026 12 dk 4
Delivery Guarantee'leri: At-Most-Once, At-Least-Once ve "Exactly-Once" Gerçeği
Yazılım Mimarisi SERİ 04

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.

7 Kas 2026 12 dk 5
Channel'lar: Point-to-Point Queue, Publish/Subscribe Topic ve Competing Consumer'lar
Yazılım Mimarisi SERİ 03

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.

7 Kas 2026 12 dk 4
Message Türleri: Command, Event ve Query; Event Notification ve Event-Carried State Transfer
Yazılım Mimarisi SERİ 02

Message Türleri: Command, Event ve Query; Event Notification ve Event-Carried State Transfer

Command emir kipindedir ve tek bir alıcıya gider, event geçmiş zamanda bir olgudur ve alıcılarını tanımaz, query ise cevap bekler; bu ayrım message'ın adını, contract sahibini ve channel'ını belirler. MessageId, correlation ve causation id taşıyan bir envelope, Fowler'ın event notification ve event-carried state transfer ayrımı ve domain event ile integration event farkı gerçek çıktılarla.

7 Kas 2026 12 dk 6
Neden Messaging? Senkron Çağrı Zincirinden Asenkron İletişime
Yazılım Mimarisi SERİ 01

Neden Messaging? Senkron Çağrı Zincirinden Asenkron İletişime

Senkron HTTP zinciri her bağımlılığın aynı anda ayakta olmasını şart koşar; işi bir queue'ya bırakmak bu temporal coupling'i kırar ve checkout'u e-posta sağlayıcısının çöküşünden korur. Availability çarpımı, Channel<T> ile process içi queue, broker'ın buffer ve load leveling rolü, Web-Queue-Worker ve asenkronluğun bedeli gerçek çıktılarla.

7 Kas 2026 13 dk 4
Blog Haritası