Yazılımlar arası mesajlaşma ile insanlar arası mesajlaşma arasında kavramsal bir fark var. İnsanlar Skype veya WhatsApp gibi uygulamalarla doğrudan metin veya sesli mesajlar gönderir. Yazılımlar arasındaki mesajlaşma ise daha çok veri veya bilgi alışverişi anlamına gelir ve bir yazılımın diğerine veri göndermesi veya bir işlemi tetiklemesi gibi senaryolarda kullanılır.
Yazılımlar Arasında Mesajlaşma Neden Gerekli?
Birçok yazılım veya sistem birbirleriyle doğrudan iletişim kurmak zorunda kalır. Örneğin:
• E-ticaret Uygulaması: Bir müşteri sipariş verdiğinde, sipariş bilgileri veritabanına kaydedilir ve aynı anda bir kargo sistemine siparişin gönderilmesi gerekir. Bu iki yazılımın birbirinden haberdar olup mesaj alışverişi yapması gerekir.
• Mikroservis Mimarisi: Bir uygulama birçok küçük servisten oluşur. Örneğin, kullanıcı kaydını yapan bir servis, e-posta gönderme servisine bir mesaj gönderir ve kullanıcıya hoş geldin e-postası iletilir.
• Farklı Teknolojiler: Bir yazılım PHP ile yazılmış, diğer yazılım ise Python ile yazılmış olabilir. İki farklı teknoloji arasında doğrudan iletişim kurmak zor olabilir. Mesajlaşma sistemleri, bu iletişimi kolaylaştırır.
Bu noktada mesajlaşma sistemleri devreye girer. Örneğin, RabbitMQ gibi bir mesaj kuyruğu, bir yazılımın diğerine mesaj göndermesini sağlar ve bu mesajı belirli bir sıraya koyarak işlenmesini bekler. Yani, bir uygulama bir kuyruk aracılığıyla mesajı gönderir, diğer uygulama ise bu kuyruğu dinleyerek mesajları alır ve işleyebilir.
RabbitMQ ile İki Yazılımın Haberleşmesi: Örnek Senaryo
Şimdi bir örnek üzerinden RabbitMQ'yu anlatayım. Diyelim ki bir e-ticaret uygulaması yazıyorsunuz. Bu uygulama iki ayrı servise sahip:
1. Sipariş Servisi: Kullanıcı sipariş verdiğinde bu servis çalışır.
2. Kargo Servisi: Sipariş onaylandıktan sonra bu servis çalışarak kargo bilgilerini işler.
Bu iki servis nasıl haberleşir? İşte RabbitMQ bu noktada devreye girer. RabbitMQ'nun işleyişini şöyle bir adım adım inceleyelim:
1. Mesaj Gönderimi (Sipariş Servisi)
• Sipariş servisi, bir kullanıcı sipariş verdiğinde bu sipariş bilgilerini RabbitMQ'nun sipariş kuyruğuna (queue) bir mesaj olarak gönderir. Bu mesaj, siparişin detaylarını içerir: ürün adı, miktar, adres vb.
2. Mesaj Kuyruğa Alınır (RabbitMQ)
• RabbitMQ, gelen bu mesajı bir kuyruğa yerleştirir. Bu, mesajın kaybolmamasını sağlar ve alıcı sistem hazır olduğunda mesajı işleyebilir.
3. Mesajı Alma ve İşleme (Kargo Servisi)
• Kargo servisi, RabbitMQ'yu dinler. Yani kargo servisi sürekli olarak RabbitMQ'dan yeni sipariş mesajları gelip gelmediğini kontrol eder.
• Eğer bir sipariş mesajı kuyruğa düşerse, kargo servisi bu mesajı alır ve kargo işlemini başlatır.
Örnek RabbitMQ Mesajlaşma Süreci
1. Sipariş Servisi -> RabbitMQ (Mesaj Gönderimi)
2. RabbitMQ -> Mesaj Kuyruğa Alınır
3. Kargo Servisi -> RabbitMQ'dan Mesaj Alır ve İşler
Bu sistemin avantajı şudur:
• Güvenilirlik: Mesajlar kaybolmaz. Eğer kargo servisi geçici olarak çalışmazsa, RabbitMQ mesajı sırada bekletir ve servis tekrar çalışmaya başladığında mesajı alır.
• Esneklik: Servisler birbirinden bağımsızdır. Sipariş servisi işini bitirdikten sonra kargo servisi ne zaman hazır olursa mesajı işleyebilir.
• Performans: Asenkron çalıştığı için sistemler birbiriyle beklemeden işlem yapabilir. Sipariş servisi hemen yeni bir sipariş işleyebilirken, kargo servisi siparişleri arka planda işleyebilir.
Bu tür bir mesajlaşma sistemi, yazılım bileşenlerinin birbiriyle bağlantılı ama bağımsız çalışmasına izin verir. Özellikle dağıtık sistemlerde, performans ve güvenilirlik açısından önemli bir yapı sunar.
Eğer bu temel yapı anlaşıldıysa, RabbitMQ'da daha derin konulara (exchange tipleri, routing, queue yapılandırmaları gibi) geçebiliriz.