Rabbit MQ, çeşitli mesajlaşma protokollerini ve akışı destekleyen, hafif ve kolay kurulabilen bir mesaj aracısıdır. Mesaj aracısı, uygulamalar arasında mesaj alışverişini sağlayan bir yazılımdır. Mesajlar, her türlü bilgiyi içerebilir. Örneğin, başka bir uygulamada veya sunucuda başlatılması gereken bir işlem veya görev hakkında bilgi veya sadece basit bir metin mesajı olabilir. Mesaj aracısı yazılımı, mesajları alıcı uygulama bağlanıp kuyruktan bir mesaj alana kadar saklar. Alıcı uygulama daha sonra mesajı işler.

Rabbit MQ, en çok kullanılan açık kaynaklı mesaj aracılarından biridir. Başlangıçta Gelişmiş Mesaj Kuyruklama Protokolü (AMQP) temelinde geliştirilmiştir. Daha sonra, Mesaj Kuyruklama Telemetri Taşıma (MQTT), Akışlı Metin Yönelimli Mesajlaşma Protokolü (STOMP) ve birkaç diğer standart protokolü desteklemek için değiştirilmiştir.

Rabbit MQ’nun Özellikleri 

  • Asenkron Mesajlaşma: Birden fazla mesajlaşma protokolünü, mesaj kuyruklamasını, teslimat onayını, kuyruklara esnek yönlendirmeyi, çoklu değişim türünü destekler.
  • Geliştirici Deneyimi: Kubernetes, BOSH, Chef, Docker ve Puppet ile dağıtım yapabilirsiniz. Java, .NET, PHP, Python, JavaScript, Ruby, Go ve daha pek çok popüler dil gibi sevdiğiniz programlama dilleri ile çapraz dil mesajlaşması geliştirebilirsiniz.
  • Dağıtık Dağıtım: Yüksek kullanılabilirlik ve verimlilik için küme olarak dağıtılabilir; birden fazla kullanılabilirlik bölgesi ve bölgesi arasında federasyon yapılabilir.
  • Kurumsal ve Bulut Hazır: Takılabilir kimlik doğrulama, yetkilendirme, TLS ve LDAP’ı destekler. Hafiftir ve kamu ve özel bulutlarda kolayca dağıtılabilir.
  • Araçlar ve Eklentiler: Sürekli entegrasyonu, operasyonel metrikleri ve diğer kurumsal sistemlere entegrasyonu destekleyen çeşitli araçlar ve eklentiler. Rabbit MQ işlevselliğini genişletmek için esnek eklenti yaklaşımı.
  • Yönetim ve İzleme: Rabbit MQ’yu yönetmek ve izlemek için HTTP-API, komut satırı aracı ve web arayüzü.

Rabbit MQ Nasıl Çalışır?

Rabbit MQ’nun temel mimarisi basittir – üretici adı verilen istemci uygulamalar vardır; mesaj oluşturur ve aracıya (mesaj kuyruğu) iletirler. Aracıda tanımlanan kuyruklara bağlanan tüketici adı verilen başka istemci uygulamalar vardır; kuyruktan mesaj alır ve işlerler.

Rabbit MQ’da üç ana bileşen vardır: değişimler (exchanges), kuyruklar (queues) ve bağlantılar (bindings).

Değişimler 

Üreticilerden gelen mesajları alır ve hangi kuyruklara yönlendireceğine karar verir. Değişim türüne bağlı olarak farklı yönlendirme kuralları uygular. Örneğin, doğrudan (direct) değişimde mesajlar, mesajın yönlendirme anahtarı ile eşleşen kuyruklara gönderilir. Konu (topic) değişiminde ise, mesajlar, mesajın yönlendirme anahtarı ile eşleşen veya eşleşebilen kuyruklara gönderilir.

Kuyruklar

Mesajları saklar ve tüketicilere iletir. Bir kuyruk, bir veya daha fazla tüketiciye sahip olabilir. Bir kuyrukta birden fazla mesaj olabilir. Bir kuyrukta birden fazla tüketici varsa, mesajlar yuvarlak çevirme (round-robin) şeklinde dağıtılır. Yani, her mesaj sadece bir tüketici tarafından alınır ve işlenir. 

Bağlantılar

Değişimler ile kuyruklar arasındaki ilişkiyi tanımlar. Bir bağlantı, bir değişimden bir kuyruğa giden bir yönlendirme kuralları kümesidir. Bir bağlantı, bir yönlendirme anahtarı içerebilir. Bu anahtar, değişimin hangi mesajları hangi kuyruğa göndereceğini belirlemesine yardımcı olur.

Rabbit MQ’nun Avantajları 

Yüksek kullanılabilirlik

Rabbit MQ, kümeleme ve ayna kuyruklama (mirroring) gibi özellikler sayesinde yüksek kullanılabilirlik sağlar. Kümeleme, birden fazla Rabbit MQ sunucusunu tek bir mantıksal aracı olarak gruplandırır. Ayna kuyruklama ise, bir kuyruğun birden fazla düğümde kopyalanmasını sağlar. Böylece, bir düğüm çökerse, diğer düğümler devreye girer ve mesaj kaybını önler.

Yüksek ölçeklenebilirlik

Rabbit MQ, yatay ve dikey olarak ölçeklenebilir. Yatay ölçeklendirme, daha fazla düğüm ekleyerek veya çıkararak gerçekleştirilir. Dikey ölçeklendirme ise, mevcut düğümlerin donanım kaynaklarını artırarak veya azaltarak gerçekleştirilir. Rabbit MQ, yük dağılımını optimize etmek için farklı ölçeklendirme stratejileri sunar. Örneğin, federasyon (federation), farklı küme veya aracılardaki kuyrukları bağlamak için kullanılabilir. Konsantratör (shovel), mesajları bir aracıdan diğerine taşımak için kullanılabilir.

Yüksek performans

Rabbit MQ, yüksek performans için optimize edilmiştir. Mesajları bellekte veya diskte saklayabilir. Bellek içi mesajlaşma daha hızlıdır ancak diskte mesajlaşma daha güvenlidir. Rabbit MQ, mesajların teslimatını garanti etmek için teslimat onayları (acknowledgements) kullanır. Teslimat onayları, tüketici tarafından alındığında veya işlendiğinde gönderilir. Teslimat onayları sayesinde, bir tüketici çökerse veya bağlantısı kesilirse, mesaj başka bir tüketiciye yeniden gönderilebilir.

Yüksek güvenlik

Rabbit MQ, güvenli iletişim için TLS/SSL protokolünü destekler. Ayrıca, takılabilir kimlik doğrulama ve yetkilendirme mekanizmaları sunar. Kimlik doğrulama için LDAP, SASL veya harici eklentiler kullanılabilir. Yetkilendirme için ise erişim kontrol listeleri (ACL) veya harici eklentiler kullanılabilir.