RabbitMQ Nedir? RabbitMQ Neden Kullanılır? RabbitMQ Nasıl Kurulur?
Yazılım dünyasında ölçeklenebilir, güvenilir ve asenkron iletişim sistemlerine olan ihtiyaç giderek artıyor. Mikroservis mimarileri, yüksek…
RabbitMQ Nedir? RabbitMQ Neden Kullanılır? RabbitMQ Nasıl Kurulur?

Yazılım dünyasında ölçeklenebilir, güvenilir ve asenkron iletişim sistemlerine olan ihtiyaç giderek artıyor. Mikroservis mimarileri, yüksek veri trafiği ve gerçek zamanlı işlemler, geliştiricileri mesaj kuyruğu sistemlerine yönlendiriyor. İşte bu noktada karşımıza RabbitMQ çıkıyor. Bu yazıda, RabbitMQ’nun ne olduğunu, nasıl çalıştığını ve yazılım projelerinizde neden tercih etmeniz gerektiğini tüm yönleriyle ele alacağız.
🧭 RabbitMQ Nedir?
RabbitMQ, 2006 yılında geliştirilen ve AMQP (Advanced Message Queuing Protocol) tabanlı çalışan açık kaynaklı bir mesaj kuyruğu sistemidir. Erlang diliyle geliştirilen bu sistem, uygulamalar arasında güvenli, esnek ve asenkron bir iletişim kanalı sunar.
[embed]
Mesaj kuyruğu sistemleri, yazılım bileşenleri arasındaki doğrudan bağımlılığı ortadan kaldırarak ölçeklenebilirlik ve güvenilirlik sağlar. RabbitMQ bu alanda en çok tercih edilen çözümlerden biridir.
🎯 RabbitMQ Neden Kullanılır?
RabbitMQ’nun tercih edilmesinin birçok nedeni var:
- Servisler arası bağımsızlık: Üretici (producer) ve tüketici (consumer) uygulamalar birbirinden bağımsız çalışabilir.
- Asenkron iletişim: Uzun süren işlemler sistemi tıkamadan arka planda yürütülür.
- Yük dengeleme: Gelen istekler sıraya alınır ve uygun olduğunda işlenir.
- Kayıpsız mesajlaşma: Mesajlar güvenli şekilde saklanır ve iletilir.
Bu özellikler sayesinde mikroservis mimarileri, dağıtık sistemler ve büyük ölçekli uygulamalarda kritik bir rol oynar.
🌐 Kimler RabbitMQ Kullanıyor?
RabbitMQ’nun başarısı yalnızca teoride değil, uygulamada da kanıtlanmıştır. İşte dünya çapında bazı örnekler:
SoundCloud: Ses dosyalarının dönüştürülmesi
Indeed: İş ilanlarının toplanması
Huffington Post: İçerik yönetimi ve canlı yayın akışı
Mozilla: Pulse altyapısı
Ericsson: Ağ yönetim sistemleri
Bu örnekler, RabbitMQ’nun hem medya hem de kurumsal çözümlerde güvenle kullanıldığını gösteriyor.
🧠 RabbitMQ Hangi Alanlarda Kullanılır?
RabbitMQ, çeşitli sektör ve uygulamalarda kullanılabilecek kadar esnek ve güçlüdür:
✅ Yoğun e-posta gönderimi ✅ Gerçek zamanlı veri analizi ✅ E-fatura ve sipariş sistemleri ✅ Video/ses işleme altyapıları ✅ Mikroservisler arası haberleşme
Özellikle yüksek veri trafiğine sahip sistemlerde performans farkı yaratır.
🧩 RabbitMQ’nun Temel Bileşenleri
RabbitMQ’nun iç yapısı birkaç ana bileşene dayanır:
Bileşen Görevi Publisher Mesaj üreten taraf Consumer Mesajı tüketen taraf Queue Mesajların tutulduğu kuyruk Exchange Mesajı hangi kuyruğa yönlendireceğini belirleyen yapı Routing Key Mesaj yönlendirme için kullanılan anahtar Channel İletişimi sağlayan bağlantı kanalı
Bu yapı, sistemin hem modüler hem de yüksek performanslı olmasını sağlar.

🔁 RabbitMQ Nasıl Çalışır?
RabbitMQ’nun temel çalışma mantığı aşağıdaki diyagramda özetlenmiştir:
[Producer]
│
▼
[Exchange] ◄──── Routing Key
/ \
[Queue A] [Queue B]
│ │
▼ ▼
[Consumer A] [Consumer B]
Yani bir mesaj, önce exchange üzerinden yönlendirilir, ardından ilgili queue’ya düşer ve oradan consumer tarafından alınarak işlenir.
🔄 Exchange Türleri
1. Direct Exchange
- Routing key tam eşleşmeli olmalıdır.
- Örneğin
email.sendmesajı yalnızca bu key'e sahip kuyruğa gider.

RabbitMQ Direkt Exchange
2. Fanout Exchange
- Routing key dikkate alınmaz.
- Mesaj tüm bağlı kuyruklara gönderilir.
- Yayın tipi mesajlar için idealdir (örnek: log dağıtımı).

RabbitMQ Fanout Exchange
3. Topic Exchange
- Routing key desenleriyle eşleşir.
*bir kelime,#birden fazla kelime yerine geçer.- Örnek:
order.*veya*.created

RabbitMQ Topic Exchange
Tür Routing Key Hedef Kullanım Senaryosu Direct Tam eşleşme Belirli kuyruk E-posta sistemi Fanout Yok Tüm kuyruklar Bildirim sistemleri Topic Wildcard Desene uyanlar Mikroservis mesajlaşması
[embed]
🛠️ Uygulamalı RabbitMQ: Docker ile Kurulum
RabbitMQ’yu hızlıca kurmak için aşağıdaki Docker komutunu kullanabilirsiniz:
docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:management
➡ Yönetim paneli: http://localhost:15672
➡ Kullanıcı: guest, Şifre: guest
Bu arayüz üzerinden kuyruklarınızı, exchange yapılarını ve mesaj akışlarını görsel olarak takip edebilirsiniz.
👨💻 RabbitMQ ile Basit Bir .NET Örneği
Öncelikle boş bir proje oluşturup içerisine 2 adet yeni proje ekliyorsunuz.

Yukarıdaki görselde gördüğünüz üzere ConsumerApp ve ProducerAppadında 2 adet projemiz var.
Projelerimizi yükledikten sonra .NET uygulamalarınızda RabbitMQ kullanmak için ister Package Manager Console üzerinden ister Nuget Package Yönetim Paneli üzerinden RabbitMQ.Client kütüphanesini projelerimize ayrı ayrı yüklüyoruz.
cd ProducerApp
install-package RabbitMQ.Client
cd ../ConsumerApp
install-package RabbitMQ.Client
👨💻 Şimdi ProducerApp/Program.cs dosyamızı yazalım
Öncelikle RabbitMQ ile iletişim kurmak için bir bağlantı (connection) ve kanal (channel) oluşturuyoruz. Bağlantı, RabbitMQ sunucusuna erişmemizi sağlar; kanal ise mesaj gönderip almak gibi işlemleri gerçekleştirdiğimiz iletişim hattıdır.
var factory = new ConnectionFactory() { HostName = "localhost" };
using var connection = factory.CreateConnection();
using var channel = connection.CreateModel();
Ardından RabbitMQ üzerinde "hello" adında bir kuyruk tanımlıyoruz. Bu kuyruk, mesajların sırayla tutulduğu yerdir:
channel.QueueDeclare(queue: "hello", durable: false,
exclusive: false, autoDelete: false, arguments: null);
Şimdi basit bir mesaj hazırlayıp bu kuyruğa gönderelim:
string message = "Hello RabbitMQ!";
var body = Encoding.UTF8.GetBytes(message);
channel.BasicPublish(exchange: "", routingKey: "hello",
basicProperties: null, body: body);
Yukarıdaki kod, "hello" kuyruğuna "Hello RabbitMQ!" mesajını bir defaya mahsus gönderir.
🔁 Şimdi örneğimizi güçlendirelim
Kodumuzun sonuna, her 2 saniyede bir yeni mesaj oluşturup "message" kuyruğuna gönderen bir döngü ekleyelim. Bu mesajlar, hem zaman bilgisini hem de benzersiz bir Guid içerir.
for (int i = 0; i < 10; i++)
{
var message = $"{DateTime.UtcNow} - {Guid.CreateVersion7()}";
var body = Encoding.UTF8.GetBytes(message);
await channel.BasicPublishAsync(
exchange: string.Empty,
routingKey: "message",
mandatory: false,
basicProperties: new BasicProperties { Persistent = true }, // mesaj kalıcı
body: body
);
Console.WriteLine($" [x] Sent {message}");
await Task.Delay(2000);
}
Bu sayede uygulamanız, 10 adet zaman damgalı mesajı belirli aralıklarla RabbitMQ kuyruğuna gönderir.
📨 Şimdi de *ConsumerApp/Program.cs* dosyasını yazalım
Bu taraf, mesajları alan yani “tüketen” (consumer) uygulamadır. Yine benzer şekilde bir bağlantı ve kanal oluşturuyoruz:
var factory = new ConnectionFactory { HostName = "localhost" };
using var connection = await factory.CreateConnectionAsync();
using var channel = await connection.CreateChannelAsync();
Mesajları almak istediğimiz "message" kuyruğunu tanımlıyoruz. Burada durable: true parametresi sayesinde mesajlar, RabbitMQ yeniden başlasa bile silinmez.
channel.QueueDeclareAsync(
queue: "message",
durable: true,
exclusive: false,
autoDelete: false,
arguments: null
);
Ardından bir AsyncEventingBasicConsumer nesnesi oluşturuyoruz. Bu, kuyruktan gelen mesajları dinlememizi sağlar:
Console.WriteLine("Waiting for messages...");
var consumer = new AsyncEventingBasicConsumer(channel);
consumer.ReceivedAsync += async (sender, eventArgs) =>
{
byte[] body = eventArgs.Body.ToArray();
string message = Encoding.UTF8.GetString(body);
Console.WriteLine($"Received: {message}");
await ((AsyncEventingBasicConsumer)sender)
.Channel.BasicAckAsync(eventArgs.DeliveryTag, multiple: false);
};
Son olarak, tüketici ile kuyruğu dinlemeye başlıyoruz:CopyEdit
await channel.BasicConsumeAsync("message", autoAck: false, consumer);
Console.ReadLine();
Buradaki autoAck: false parametresi, mesajın elle onaylanmasını sağlar. Bu sayede mesaj işlendikten sonra BasicAckAsync ile RabbitMQ’ya mesajın başarıyla alındığını bildiriyoruz.
Şimdi iki projeyi aynı anda başlayabilmek için projemize sağ tıklayarak Configure Startup Projects seçeneğine tıklıyoruz.

Daha sonra karşımıza çıkan ekranda Multiple startup project seçeneğine tıklıyoruz, ProducerApp ve ConsumerApp projelerimizi seçip Action kısmından Start’ı seçiyoruz.

Artık projemizi başlatabiliriz. Projemiz başladığında iki adet konsol penceresi açılacaktır:
- ProducerApp penceresi mesajları gönderen (üreten) taraf olacak.
- ConsumerApp penceresi ise bu mesajları alan (tüketen) taraf olacaktır.

-> Kodları github üzerinden paylaştım, buraya tıklayarak kodlara ulaşabilirsiniz.
🧪 Bu örneğin videolu anlatımına Building Messaging Apps in .NET Using RabbitMQ videosunu izleyerek ulaşabilirsiniz.
📹 Konuyla alakalı detaylı video için Kablosuz Kedi Kanalının 1 Videoda #RabbitMQ Eğitimi adlı videosunu buraya tıklayarak izleyebilirsiniz.
🔮 Gelecek Perspektifi
RabbitMQ, 2006'dan beri sektörde olmasına rağmen hala en çok tercih edilen mesajlaşma altyapılarından biridir. Özellikle Kubernetes, Docker ve mikroservis gibi modern yazılım çözümleriyle entegre çalışabilirliği onu daha da cazip hale getiriyor.
Yazılım dünyası daha da dağıtık hale geldikçe, mesaj kuyruğu sistemlerinin önemi artacak. RabbitMQ ise bu dönüşümde merkezi bir rol oynamaya devam edecek gibi görünüyor.
- RabbitMQ, yazılım bileşenleri arasında asenkron, güvenilir ve ölçeklenebilir iletişim kurmanın en güçlü yollarından biridir.
- Mikroservis mimarilerinden, e-posta sistemlerine, faturalama altyapısından bildirim sistemlerine kadar geniş bir kullanım alanı vardır.
- Docker ve yönetim paneli ile kurulumu ve takibi oldukça kolaydır.
- Gerçek dünyada SoundCloud, Mozilla ve VMWare gibi devler tarafından aktif olarak kullanılmaktadır.
🫶 Medium’da Takipte Kalın!
Bu yazıyı faydalı bulduysanız, Medium hesabımı takip etmeyi unutmayın! Yorumlarınızla katkıda bulunabilir, bir sonraki yazının konusunu siz belirleyebilirsiniz.
Kaynaklar:
메타데이터
- post_id
- 52a4fd3956aa
- slug
- rabbitmq-nedir-rabbitmq-neden-kullanılır-rabbitmq-nasıl-kurulur-52a4fd3956aa
- url
- https://medium.com/@ismailaydemirx/rabbitmq-nedir-rabbitmq-neden-kullan%C4%B1l%C4%B1r-rabbitmq-nas%C4%B1l-kurulur-52a4fd3956aa
- canonical_url
- https://medium.com/@ismailaydemirx/rabbitmq-nedir-rabbitmq-neden-kullan%C4%B1l%C4%B1r-rabbitmq-nas%C4%B1l-kurulur-52a4fd3956aa
- author_url
- https://medium.com/@ismailaydemirx
- status
- ok
- fetched_at
- 2026-09-17 09:13:34