Sitemap
Sahin Yelkenci

Sahin Yelkenci

DDD & Clean Architecture odaklı yazılım mimarı. Dayanıklı, gözlemlenebilir event-driven sistemler tasarlar.

Press enter or click to view image in full size

RabbitMQ Derinlemesine — Protokolden Prodüksiyona — Bölüm 38 — CQRS ve Event-Driven Mimaride RabbitMQ’nun Rolü

20 min readOct 20, 2026

--

Bir dilin harflerini bilmek bir şeydir; o harflerle şiir yazmak başka. Bu serinin ilk kısımları RabbitMQ’nun harflerini — exchange’leri, kuyrukları, mesajları — öğretti; desenler ise o harflerle nasıl anlamlı yapılar kurulacağını gösterdi. Çünkü gerçek ustalık, araçları tek tek bilmekte değil, onları bir araya getirerek dağıtık dünyanın karmaşık sorunlarına zarif çözümler örmektedir.

Press enter or click to view image in full size

Desenlerden mimariye geçişi bilmenin dersi şudur: tek tek desenlerin ötesinde, sistemleri olaylar etrafında kurmanın bütünsel yaklaşımları vardır — EDA, CQRS, event sourcing. Bunlar, pub/sub’ın ayrıştırmasını ve olayların merkeziliğini bir mimari felsefeye yükseltir; ve RabbitMQ onların omurgasıdır. Bu bölüm, serinin desenlerinin doruğa ulaştığı yerdir. İlk yaklaşımla — Event-Driven Architecture ile — başlayalım.

Press enter or click to view image in full size
Press enter or click to view image in full size

Event-Driven Architecture’ı bilmenin dersi şudur: EDA, sistemlerin doğrudan çağrılar yerine olaylar aracılığıyla iletişmesidir; olay, olmuş bir şeyin kaydı olarak birinci sınıf bir vatandaştır. Bileşenler olayları yayımlar ve dinler, birbirini doğrudan bilmeden. RabbitMQ, bu mimarinin olay veriyoludur. Şimdi, EDA’nın merkezindeki önemli bir ayrıma — olay ve komut ayrımına — bakalım.

Press enter or click to view image in full size

Olay ve komut ayrımını bilmenin dersi şudur: komut bir şeyin yapılmasını isteyen, tek alıcıya yönelik bir mesajdır; olay ise bir şeyin olduğunu bildiren, çok alıcıya yayınlanan bir gerçektir. Komutlar emir kipinde ve yönlendirilir, olaylar geçmiş zamanda ve yayınlanır. Bu ayrımı doğru yapmak, olay-tabanlı bir sistemi doğru tasarlamanın temelidir. Şimdi, EDA’nın getirdiği fayda ve bedellere bakalım.

Press enter or click to view image in full size

EDA’nın faydalarını ve bedellerini bilmenin dersi şudur: EDA gevşek bağlılık, genişletilebilirlik, ölçeklenebilirlik ve dayanıklılık sağlar; ama nihai tutarlılık, karmaşıklık ve izlenebilirlik/hata ayıklama zorluğu bedeliyle gelir. Çok bileşenli, evrilen sistemler için faydaları değerlidir; basit sistemler için gereksiz olabilir. Şimdi, olaylar üzerine kurulan bir başka güçlü desene — CQRS’e — bakalım.

Press enter or click to view image in full size
Press enter or click to view image in full size

CQRS’i bilmenin dersi şudur: CQRS, yazma modelini (komutlar, durumu değiştirir) okuma modelinden (sorgular, durumu okur) ayırır; böylece her biri kendi ihtiyacına göre optimize edilir. Okuma ve yazmanın farklı ihtiyaçları (tutarlılık vs hız, farklı şekiller) bu ayrımı değerli kılar; ve olaylar, iki modeli birbirine bağlar. Şimdi, CQRS’in tam olarak nasıl çalıştığına — olaylarla projeksiyona — bakalım.

Press enter or click to view image in full size
Press enter or click to view image in full size

CQRS’in nasıl çalıştığını bilmenin dersi şudur: CQRS, yazma modelinin olaylar yayımlamasıyla ve okuma modellerinin (projeksiyonların) bu olayları tüketip güncellenmesiyle çalışır. Okuma modeli, olaylardan inşa edilen bir projeksiyondur; ve aynı olaylardan farklı ihtiyaçlara optimize birden çok projeksiyon oluşturabilirsiniz. Okuma modeli, yazma modelinden nihai olarak tutarlıdır. Şimdi, CQRS’in fayda ve bedellerine bakalım.

Get Sahin Yelkenci’s stories in your inbox

Join Medium for free to get updates from this writer.

Press enter or click to view image in full size

CQRS’in faydalarını ve bedellerini bilmenin dersi şudur: CQRS bağımsız optimizasyon, bağımsız ölçeklenebilirlik, çoklu okuma modeli ve esneklik sağlar; ama iki model, nihai tutarlılık ve karmaşıklık bedeliyle gelir. Okuma ve yazma ihtiyaçları belirgin biçimde farklıysa değerlidir; basit CRUD için ise gereksizdir. Şimdi, olayları daha da merkeze alan bir yaklaşıma — event sourcing’e — bakalım.

Press enter or click to view image in full size
Press enter or click to view image in full size
Press enter or click to view image in full size

Event sourcing’in faydalarını ve bedellerini bilmenin dersi şudur: event sourcing, tam denetim izi, yeniden oynatma/inşa ve zamansal sorgular sağlar; ama karmaşıklık, güncel durumu sorgulama zorluğu ve olay sürümleme bedeliyle gelir. Denetim ve yeniden oynatma değerli olduğunda güçlüdür; basit durumlar için gereğinden fazladır. Şimdi, bu üç yaklaşımın nasıl birlikte çalıştığına bakalım.

Press enter or click to view image in full size
Press enter or click to view image in full size

Üçünü birlikte bilmenin dersi şudur: EDA (iletişim tarzı), CQRS (okuma/yazma ayrımı) ve event sourcing (olay-tabanlı saklama), ortak ipliği olaylar olan, katmanlı ve birleştirilebilir yaklaşımlardır. İhtiyacınıza uyan seviyeyi seçersiniz; olaylar her aşamada daha merkezi olur. RabbitMQ, üçü boyunca omurgadır. Şimdi, tüm bunları canlı oran senaryomuzda — tam bir olay-tabanlı bahis sisteminde — birleştirelim.

Press enter or click to view image in full size
Press enter or click to view image in full size

Bu senaryonun dersi şudur: Olgun bir bahis sistemi, EDA (olaylarla gevşek bağlı iletişim), CQRS (okuma/yazma ayrımı, çoklu projeksiyon) ve event sourcing (olay günlüğü gerçeğin kaynağı) ile, tam bir olay-tabanlı mimari olarak kurulur. RabbitMQ, bu mimarinin omurgasıdır ve serinin tüm öğrendiklerini bir araya getirir. Sonuç: esnek, ölçeklenebilir ve denetlenebilir bir sistem. Şimdi, bunu kendi elimizle denemek için laboratuvara geçelim.

Press enter or click to view image in full size

İlk deney, EDA’dır. Küçük bir olay-tabanlı akış kurun: bir üretici olaylar yayımlar, birden çok tüketici bunlara tepki verir ('teki pub/sub). Üreticinin tüketicileri bilmediğini ve yeni bir tüketici eklemenin üreticiyi değiştirmediğini gözlemleyin.

Press enter or click to view image in full size

İkinci deney, CQRS’tir. Bir yazma modeli olaylar yayımlasın; bir okuma modeli (projeksiyon) bu olayları tüketsin ve sorguları yanıtlasın. Okuma modelinin, yazma modelini biraz gecikmeyle takip ettiğini — nihai tutarlılığı — gözlemleyin.

Press enter or click to view image in full size

Üçüncü deney, event sourcing’tir. Olayları bir stream’de saklayın ('deki RabbitMQ Streams); durumu olayları yeniden oynatarak inşa edin. Sonra, mevcut olay geçmişini baştan yeniden oynatarak yeni bir projeksiyon ekleyin; var olan olaylardan yepyeni bir okuma modeli inşa etmenin gücünü — yeniden oynatmanın değerini — gözlemleyin. Bu, event sourcing’in en güçlü yeteneklerinden biridir: geçmiş olaylar, gelecekteki ihtiyaçlar için yeni görünümler üretebilir.

Press enter or click to view image in full size
Press enter or click to view image in full size
Press enter or click to view image in full size

--

--

Sahin Yelkenci

Written by Sahin Yelkenci

DDD & Clean Architecture odaklı yazılım mimarı. Dayanıklı, gözlemlenebilir event-driven sistemler tasarlar.