RabbitMQ Nedir?

Selamlar,bu makalede open source ve platform bağımsız çalışabilen, alanında çok kullanılan mesaj kuyruk teknolojilerinden birisi olan RabbitMQ üzerine konuşuyor olacağız.

RabbitMQ bir mesaj kuyruk sistemidir. Temel olarak bir kaynaktan gelen mesajı başka bir kaynağın tüketebilmesi için sırası geldiğinde göndermektir. Mesaj kuyruk yapılarına alternatif olarak Apache,Kafka,Azure Storage Queue,Kestrel, ActiveMQ olarak örneklendirebiliriz.

Örnek


Şimdi bir senaryo üzerinden konuşalım. Burs başvurularını aldığımız bir uygulamamız var. Başvurular tamamlandı ve burs kazanan öğrencileri mail yoluyla bilgilendirme yapmamız istenildi.Burs almaya hak kazanan 500 öğrencimiz olduğunu düşünelim. Toplu olarak mail gönderme işlemini başlattık.

  1. Veritabanından burs almaya hak kazanan öğrenciler bulunur.
  2. Öğrencilere ait mail adresleri bulunur
  3. Bir döngü ile dönüp mail gönderim metodu çalıştırılır.

Oldukça uzun ve maliyetli bir işlem. Peki sistemde ki çalışmamızı hiç etkilemeden bu işlemlerin bir kuyruğa gönderilmesi ve bu kuyruğu dinleyen başka bir uygulamanın bu işi gerçekleştirmesi bir nebzede olsa senaryomuza daha uygun bir çözüm gibi geliyor kulağa.

Windows İşletim Sistemi Kurulumu

  1. RabbitMQ Erlang dili ile geliştirilmiş bir teknolojidir. Kullanabilmek için ilk olarak Erlang indirip kurmanız gerekmektedir.
  2. Hemen sonrasında RabbitMQ Server kurulumunu gerçekleştiriyoruz.
  3. Son olarak kurulumun gerçekleştiği dizine gelip rabbitmq-plugins enable rabbitmq_management komutu ile arayüzü kullanabilmek için gerekli aktif etme işlemini gerçekleştiriyoruz.

RabbitMQ bir windows servis gibi çalışmaktadır. Kurulumu tamamladıktan sonra servisler kısmında RabbitMQ’nun eklendiğini görebilirsiniz.


Tarayıcıya gelinip http://localhost:15672 yazdığınızda aşağıdaki gibi panel açıklacaktır.Bize sunmuş olduğu arayüz bu şekildedir. Kurulumlarımızı tamamladık.Biraz yapıyı tanıyalım.

Exchange:Gelen mesajı alır ve ilgili route ile kuyruğa gönderir.
Queue:Gönderilen mesajların tutulduğu yerdir.
Producer:Mesajı gönderen kaynaktır.
Consumer:Mesajı tüketen kaynaktır.

Şimdi bu terimlerin daha iyi oturması için bir uygulama üzerinde mantığını daha iyi anlamaya çalışalım. İki adet console uygulamamız var. ilk uygulamamız Producer mesajı gönderen. İkinci uygulamamız ise mesajı okuyan Consumer uygulaması. ilk olarak Producer uygulamamızın adımlarına bakalım.

Producer

Kodlarımızı inceleyecek olursak ConnectionFactory sınıfından bir nesne yaratılır. Yaratılan bu sınıf üzerinden HostName set edilir. ConnectionFactory sınıfı bizim RabbitMQ hostuna bağlanmamıza sağlayacak olan sınıftır. Daha sonra CreateConnection()methodu ile bağlantı gerçekleştirilir.

CreateModel() methodu ile yeni bir channel oluşturulur.Channel üzerinden QueueDeclare() methodu ile yeni bir Queue oluşturulur. Son olarak ilgili channel kullanılarak BasicPublish() methodu çağırılır ve mesaj gönderimi gerçekleştirilir.

Consumer

QueueDeclare() methodu ile yeni bir Queue oluşturulur. EventingBasicConsumer sınıfından bir nesne yaratılır. Oluşturulan channel parametre olarak geçilir. Üretilen nesne üzerinden Received event’i tetiklenir ve kuyruk dinlemeye alınır. Son olarak BasicConsume methodu ile ilgili kuyruktan mesaj alınır ve işlenir.

Bu makalede RabbitMQ konusuna giriş yaptık ve örnek bir uygulama üzerinden konuyu daha iyi kavramaya çalıştık. Benim bu makalede aktaracaklarım bukadar. Umarım faydalı bir yazı olmuştur. Bir sonraki makalede Fanout Exchange konusu ile ediyor olacağız. Hoşçakalın 🙂

BUNLAR DA HOŞUNUZA GİDEBİLİR...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir