
RabbitMQ Nedir? Kuyruk (Queue) Sistemlerinde Ne İşe Yarar?
RabbitMQ nedir, kuyruk sistemleri nasıl çalışır ve servisleri nasıl bağımsızlaştırır? Producer, exchange ve consumer kavramlarını örneklerle öğrenin.

Kürşat Sezgin
Teknik Ekip Lideri
Bir sipariş verildiğinde e-posta gönderimi, stok güncellemesi ve faturalama aynı anda çalışmak zorunda kalırsa uygulama yavaşlar, biri aksadığında diğerleri de durur. RabbitMQ nedir sorusunun cevabı tam bu noktada başlıyor: servisler arasındaki işi sıraya koyan, güvenle taşıyan ve tüketicilere dağıtan bir mesaj aracısı (message broker).
Rabbitmq nedir nasıl kullanılır
RabbitMQ, üreticilerin (producer) gönderdiği mesajları kuyruklarda saklayıp tüketicilere (consumer) ileten açık kaynaklı bir mesaj aracısıdır. AMQP 0-9-1 protokolünü temel alır, ayrıca MQTT ve STOMP gibi protokolleri eklentilerle destekler. Kullanım mantığı üç adımdan oluşur.
- Bağlantı kur: Uygulamanız broker'a bağlanır ve bir kanal (channel) açar.
- Gönder: Producer mesajı bir exchange'e yayınlar.
- Tüket: Consumer ilgili kuyruğu dinler, mesajı işler ve onay (ack) döner.
Temel kavramlar şöyle özetlenebilir:
| Kavram | Görevi |
|---|---|
| Producer | Mesajı üretip gönderen uygulama |
| Exchange | Mesajı kurallara göre kuyruklara yönlendiren bileşen |
| Queue | Mesajların tüketilene kadar beklediği yapı |
| Binding | Exchange ile kuyruk arasındaki yönlendirme kuralı |
| Consumer | Kuyruktan mesajı alıp işleyen uygulama |
| Virtual host | Kaynakları ve yetkileri izole eden mantıksal ortam |
Python için pika, .NET için RabbitMQ.Client, Java için Spring AMQP, Node.js için amqplib gibi istemci kütüphaneleri yaygındır.
MassTransit nedir?
MassTransit, .NET ekosisteminde mesaj tabanlı uygulamalar geliştirmeyi kolaylaştıran açık kaynaklı bir dağıtık uygulama çatısıdır. RabbitMQ'nun üzerinde bir soyutlama katmanı sağlar; exchange ve kuyrukları sizin yerinize tanımlar, yeniden deneme (retry), hata kuyruğu ve saga gibi kalıpları hazır sunar. Böylece ham AMQP kodu yazmadan consumer sınıfları üzerinden çalışabilirsiniz. Aynı kod başka broker'larla da kullanılabilir.
Rabbitmq nedir ne işe yarar
RabbitMQ, sistemler arasındaki iletişimi eşzamansız hale getirerek servisleri birbirinden bağımsızlaştırır. Bir servis yavaşladığında ya da çöktüğünde mesajlar kuyrukta bekler, kaybolmaz. Bu da hem dayanıklılığı hem de ölçeklenebilirliği artırır.
Tipik kullanım senaryoları:
| Senaryo | RabbitMQ'nun rolü |
|---|---|
| E-posta ve SMS gönderimi | Gönderim işini arka plana alır, web isteğini bekletmez |
| Sipariş işleme | Stok, ödeme ve faturalama servislerine ayrı mesaj dağıtır |
| Görsel/video işleme | Ağır işleri worker havuzuna paylaştırır |
| Mikroservis iletişimi | Servisler arası gevşek bağlantı sağlar |
| Olay bildirimleri | Bir olayı birden çok aboneye yayınlar |
Pratik bir ipucu: Kullanıcıyı bekleten her uzun işlem kuyruğa taşınmaya adaydır. Ancak ihtiyaç anlık yanıt gerektiriyorsa her şeyi kuyruğa atmak karmaşıklığı gereksiz yere artırır.
Rabbitmq nedir medium
Medium'da "RabbitMQ nedir" diye arandığında çıkan yazılar genellikle üç konuda yoğunlaşır: Docker ile kurulum, çalışan örnek kod ve mesaj akışını anlatan şemalar. Bunlar başlangıç için iyidir, fakat çoğu zaman üretim ortamı detaylarını atlar.
Bir Medium yazısını değerlendirirken şunlara bakın:
- Yazının tarihi ve kullanılan RabbitMQ sürümü güncel mi?
- Kodda manuel ack, kalıcı (durable) kuyruk ve hata yönetimi var mı?
- Yazar kendi denemesini mi anlatıyor, yoksa dokümantasyonu mu özetliyor?
Uyarı: Eski örneklerde otomatik ack ve varsayılan guest kullanıcısı sık görülür. Bunları üretime olduğu gibi taşımayın. Güvenilir referans için resmi dokümantasyonu esas alın.
Kafka rabbitmq nedir
Kafka ve RabbitMQ farklı problemler için tasarlanmıştır. RabbitMQ, mesajı tüketici işleyip onayladığında kuyruktan siler ve esnek yönlendirme sunar. Kafka ise olayları bir günlük (log) olarak saklar, tüketiciler istedikleri noktadan tekrar okuyabilir.
| Özellik | RabbitMQ | Kafka |
|---|---|---|
| Model | Akıllı broker, basit tüketici | Basit broker, akıllı tüketici |
| Mesaj ömrü | Tüketilince silinir | Saklama süresi boyunca kalır |
| Yönlendirme | Exchange tipleriyle esnek | Topic ve partition tabanlı |
| Tekrar okuma | Kısıtlı | Doğal olarak desteklenir |
| Tipik kullanım | Görev kuyruğu, servis iletişimi | Olay akışı, log toplama, analitik |
| Öğrenme eğrisi | Daha düşük | Daha yüksek |
Görev dağıtımı ve karmaşık yönlendirme gerekiyorsa RabbitMQ, yüksek hacimli olay akışı ve yeniden oynatma gerekiyorsa Kafka daha uygundur. Birçok mimaride ikisi birlikte de çalışır.
Rabbitmq exchange nedir
Exchange, producer'dan gelen mesajı alıp binding kurallarına göre bir veya birden fazla kuyruğa yönlendiren bileşendir. Producer mesajı doğrudan kuyruğa değil exchange'e yollar; kararı exchange verir.
| Exchange tipi | Çalışma biçimi | Örnek kullanım |
|---|---|---|
| Direct | Routing key tam eşleşirse iletir | Öncelik veya log seviyesine göre ayırma |
| Fanout | Bağlı tüm kuyruklara kopyalar | Genel duyuru, önbellek temizleme |
| Topic | Desen (örn. `siparis.*.yeni`) ile eşleştirir | Kategori bazlı olay dağıtımı |
| Headers | Mesaj başlıklarına göre eşleştirir | Karmaşık filtreleme |
Eşleşen kuyruk yoksa mesaj sessizce düşer. Bunu önlemek için mandatory bayrağı veya alternate exchange kullanılabilir.
Rabbitmq shovel nedir
Shovel, bir broker'daki kuyruk ya da exchange'den mesajları alıp başka bir broker'a (ya da aynı broker'daki başka hedefe) aktaran bir eklentidir. Farklı veri merkezleri arasında mesaj taşımak, taşıma sırasında sistem geçişi yapmak veya ağ kesintilerine dayanıklı köprüler kurmak için kullanılır.
Etkinleştirme için rabbitmq_shovel ve yönetim arayüzü için rabbitmq_shovel_management eklentileri açılır. Shovel, kaynağa tüketici, hedefe üretici gibi davranır ve bağlantı koparsa yeniden bağlanır.
Benzer işi gören federation eklentisiyle karıştırılır. Shovel daha basit ve doğrudan bir taşıma aracıdır; federation ise dağıtık exchange ve kuyrukları gevşek bağlı şekilde birbirine bağlamaya odaklanır.
Rabbitmq unacked nedir
Unacked, bir tüketiciye teslim edilmiş ancak henüz onaylanmamış (acknowledge edilmemiş) mesajların sayısıdır. Yönetim panelinde "Ready" ile "Unacked" sütunlarını görürsünüz; Ready teslim bekleyen, Unacked ise işlenmekte olan mesajları ifade eder.
Unacked sayısı sürekli artıyorsa şu nedenleri kontrol edin:
- Consumer ack göndermeyi unutuyor olabilir.
- İşlem çok uzun sürüyor veya takılmış olabilir.
- Prefetch değeri gereğinden yüksek ayarlanmış olabilir.
- Consumer hata alıyor ve mesajı ne onaylıyor ne reddediyor olabilir.
İpucu:
basic.qosile prefetch değerini makul tutun. Consumer bağlantısı koptuğunda unacked mesajlar otomatik olarak kuyruğa geri döner; hatalı mesajlar içinnackve dead-letter kuyruğu kullanın.
Rabbitmq server nedir
RabbitMQ server, mesajları kabul eden, kuyruklarda saklayan ve tüketicilere ileten broker sürecinin kendisidir. Erlang/OTP üzerinde çalışır; bu yüzden kurulumda uyumlu bir Erlang sürümü gerekir. Linux, Windows ve konteyner ortamlarında çalıştırılabilir.
Varsayılan portlar:
| Port | Kullanım |
|---|---|
| 5672 | AMQP istemci bağlantıları |
| 15672 | Yönetim arayüzü |
| 25672 | Düğümler arası iletişim |
Üretimde birden çok düğümden oluşan küme (cluster) kurulabilir; yüksek erişilebilirlik için quorum kuyrukları önerilir. Broker'ın düzenli çalışması için yeterli RAM, disk alanı ve ağ kararlılığı gerekir. Kendi sunucunuzda çalıştıracaksanız Netlen İnternet Hizmetleri'nin sunucu çözümleri üzerinde kaynaklarınızı ihtiyacınıza göre planlayabilirsiniz. Paylaşımlı hosting ise broker kurulumuna uygun bir ortam değildir; bunun için root erişimi olan bir sunucu gerekir.
Rabbitmq ne ise yarar
RabbitMQ'nun asıl faydası, uygulamanın parçalarını birbirinden ayırarak sistemi daha dayanıklı ve ölçeklenebilir kılmasıdır. Yük arttığında consumer sayısını çoğaltmak çoğu zaman yeterlidir.
| Avantaj | Dezavantaj |
|---|---|
| Servisler arası gevşek bağlantı | Ek bir altyapı bileşenini yönetme yükü |
| Mesaj kalıcılığı ve onay mekanizması | Eşzamansız akışta hata ayıklama zorluğu |
| Esnek yönlendirme seçenekleri | Yanlış yapılandırmada mesaj yığılması |
| Çoklu dil ve protokol desteği | Çok yüksek hacimli akışlarda Kafka kadar uygun olmayabilir |
Başlamadan önce mesajların kalıcı olup olmayacağını, tekrar işlenmesi durumunda sonucun değişip değişmeyeceğini (idempotency) ve hatalı mesajların nereye gideceğini planlayın.
Sık Sorulan Sorular
RabbitMQ ücretsiz mi?
RabbitMQ açık kaynaklıdır ve Mozilla Public License ile dağıtılır. Kendi sunucunuza ücretsiz kurabilirsiniz. Maliyet, çalıştıracağınız sunucu kaynaklarından ve yönetim emeğinden oluşur.
RabbitMQ hangi programlama dillerini destekler?
Python, Java, .NET, Node.js, Go, PHP, Ruby gibi birçok dil için resmi veya topluluk istemci kütüphaneleri vardır. AMQP standart bir protokol olduğundan farklı dillerde yazılmış servisler aynı broker üzerinden haberleşebilir.
Mesajlar RabbitMQ'da kaybolur mu?
Varsayılan ayarlarla kaybolabilir. Kuyruğu durable tanımlamak, mesajı persistent olarak yayınlamak ve manuel ack kullanmak riski büyük ölçüde azaltır. Publisher confirms özelliği de mesajın broker'a ulaştığını doğrular.
Dead-letter kuyruğu ne işe yarar?
İşlenemeyen, reddedilen veya süresi dolan mesajlar dead-letter exchange üzerinden ayrı bir kuyruğa yönlendirilir. Böylece hatalı mesajları kaybetmeden inceleyebilir, düzeltip yeniden işleyebilirsiniz.
Netlen'i Google'da Takip Edin
En güncel rehberlerimize, duyurularımıza ve teknik içeriklerimize Google üzerinden öncelikli ulaşmak için Netlen'i tercih ettiğiniz kaynaklar arasına ekleyin.
Bu yazıyı paylaşın

Yazar Hakkında
Kürşat Sezgin
Teknik Ekip Lideri
Netlen'de teknik ekip lideri olarak sunucu yönetimi, ağ güvenliği ve web teknolojileri alanında sistem yönetimi ve teknik destek sağlıyorum. Zaman zaman bu konularda teknik blog yazıları da paylaşıyorum.
Yorumlar
Bu yazı hakkında okuyucu yorumları


