Rabbit MQ Nedir ?

Rabbit MQ Nedir ?

RabbitMQ, AMQP(Advanced Message Queuing Protocol) üzerine kurulmuş bir mesaj kuyruğu sunucusudur. Birçok yazılım dili ve işletim sistemi tarafından desteklenmektedir. Open source’dur. Kolaylıkla ölçeklenebilir, yüksek performanslı ve esnek bir sistemdir. Asenkron olarak yapılacak işlemleri bir kuyruğa koyarak sırası geldiğinde gerçekleşmesini istediğimiz durumlarda ve sistemler arasında güvenilir bir şekilde veri aktarımı amacıyla kullanılabilir.

Örnek vermek gerekirse bir işlem sonucunda mail veya bildirim atılmasını istediğimizde kuyruğa yazarız kullanıcı işlemi bitmiş olduğunu görür. Consumer kuyruktan okuyarak sonrasında mail veya bildirim gönderme işlevini yerine getirir. Bildirim gönderilmesi için kullanıcıyı bekletmemiş oluruz.

Nerelerde kullanılabilir ?

Mikroservislerde ve Dağıtık Sistemlerde iletişim

RabbitMQ, farklı programlama dilleri ve platformlar arasında iletişim kurulmasını mümkün kılar. Aynı zamanda Microservis içerisindeki uygulamalar arasında iletişimde de kullanılmaktadır. Uygulamaların birbirine bağımlı olmadan mesaj alıp göndermesini sağlar.(Loose Coupling)  Veri tutarlılığını sağlar. Bileşenlerin birbirleriyle senkronize olmasını ve veri kaybı olmadan veri aktarımını sağlamaktadır. 

Asenkron yürütülen işlerde

Arka planda uzun süren ve işleyişi etkilemeyen işlemleri belli bir sıra ile paralel olarak gerçekleşmesini istediğimiz durumlarda kullanılabilir. Response süreleri kısaltır ve performansı arttırır.

Veri İzlemek

İzlenecek verileri kuyrukta depolayıp sonrasında okuyarak anlamlı veriler çıkarmak için kullanılabilir.


Özellikleri

Yüksek Performans ve Ölçeklenebilirlik

RabbitMQ, yatay ve dikey olarak ölçeklenebilir. Yüksek trafikli sistemler için uygundur. Ölçekleme işlemini kolaylaştırmak için kümelenme (clustering) ve yük dengeleme (load balancing) gibi özellikler sunar. Kuyrukların yoğunluğuna göre dağılımını yaparak yük dengelemeyi sağlar.

Federasyon (federation), Farklı RabbitMQ cluster veya sunucuları arasında iletişimi kolaylaştıran bir yapı sunar.

Güvenilirlik ve Dayanıklılık

RabbitMQ güvenilir ve dayanıklı bir mesaj kuyruğu sunucusudur. Verilerin kaybolmaması ve bozulmaması için farklı yapılar sağlamaktadır. Bunlardan bazıları;

Persistence, Mesajların diskte veya bellekte saklanmasını sağlar.

Message Acknowledgement, Mesajların başarılı bir şekilde iletilip işlendiğinin doğrulamasını sağlar.

Ayna kuyruklar (mirrored queues), Bir kuyruğun birden fazla düğümde kopyasını bulundurmasıdır. Bununla birlikte bir kuyrukta problem olması durumunda diğeri devreye girmektedir.

Esneklik ve Uyarlama

RabbitMQ, farklı senaryolara uyum sağlamak için çeşitli değişim tipleri (exchange types) sunar. Değişim tipleri kurallara göre kuyruklara yönlendirme yapar. Bu konuyu daha ayrıntılı olarak inceleyeceğiz. RabbitMQ eklenti(plugin) desteği sunar. Bu sayede çeşitli özellikler kazandırılabilir.

Kolay Kurulum ve Kullanımı

RabbitMQ, birçok işletim sisteminde ve programlama dili ile çalışabilir ve oldukça kolay bir kuruluma sahiptir. Kullanıcı dostu bir arayüzü bulunmaktadır. Bu arayüzden izleme, yönetme gibi işleri yapabiliriz.


RabbitMQ Temel Bileşenler

Publisher, RabbitMQ’ya verinin gönderildiği yer. Veriyi üreten uygulama veya bileşendir.

Consumer, RabbitMQ’ya gelen verilerin işlendiği bileşendir.

Queue, Verilerin tutulduğu kuyruklardır.

Routing Key, Verilerin hangi kuyruğa iletileceğini tanımladığımız anahtardır.

Exchange, Verilerin kuyruklara route key’e göre iletilmesini sağlar. 3 çeşit Exchange tipi vardır.

Exchange Tipleri

Direct Exchange

Routing key değeri ile direk eşleşen kuyruğa mesajları yönlendirir. Producer tarafından net olarak belirtilir. İki routing key bir queue’ye bağlanabilir.

Fanout Exchange

Mesajları tüm kuyruklara route belirtmeksizin yönlendirir.

Topic Exchange

Mesajları routing key değeri içerisindeki özel karakterlere göre farklı farklı kuyruklara yönlendirme yapar. “#” veya “.” gibi özel karakterlerle bir gruba yada tüm gruba ulaşılabilir.

Yukarıdaki örneğe göre routing key değeri;

“weather.turkey.istanbul” – C ve B kuyruğuna 

“weather.italy.rome” – B kuyruğuna

“turkey.news.sport” – A kuyruğuna

“italy.news.sport” – A kuyruğuna

Headers Exchange

Mesajların header içerisinde key-value değerine göre yönlendirme yapar.Bir uygulamada sadece kadınlara özel bir bildirim atılması istendiği durumda headers exchange aracılığıyla ilgili kuyruklara gönderir.

Default Exchange

Bir tanımın yapılmadığı durumdur. Queue adıyla aynı isimde routing key ile bağlanır.

Dead Letter Exchange

Bir kuyruk ile eşleşme olmadığı durumda mesaj kaybolabilir. Böyle bir durum için bu exchange tipi  eklenti olarak kullanılabilir. Ortada kalan mesajları nasıl işleneceğine karar verebiliriz. İşlenemeyen mesajları da kaybolmasını önleriz.


KAYNAKÇA

https://www.cloudamqp.com

https://www.rabbitmq.com/tutorials

https://bluemarkacademy.com/rabbitmq-nedir-avantajlari-ve-uygulamalari-nelerdir

https://medium.com/trendyol-tech/rabbitmq-exchange-types-d7e1f51ec825

Codest Blog

Codest Blog yazılım hakkında her konuda bilgi sağlayan bir blog sitesidir. Bilgi paylaştıkça güzeldir felsefesi ile hareket ederek, yazılımcıların en cok karşılaştığı konuları sizlere aktarmayı hedefliyoruz. Keyifli okumalar 🙂