Nedir bu RabbitMQ?

Onur KARAKUŞ
5 min readJun 12, 2021

Merhaba,

Öğrenme isteği hem işimizin hem de hayatımızın önemli bir parçası. Bilgileri kovalamak, kovalayıp yakaladıkça işimize ve hayatımıza yenilikler katmak ve en önemlisi başarma duygusu. Bunların yeri çok önemli insan hayatında.

Tabii son yıllarda bilgiye ulaşmak özellikle internetin de yardımıyla kolaylaşmış durumda. Aradığımızı okumak için, okumak zor geliyorsa birilerinin anlatması için bir vidyo olarak bulmak artık çok kolay. Eskilere baktığımız zaman bir bilgiye ulaşmak, bir veriye ulaşmak o kadar kolay değildi. Yaşlıyım kabul edelim.

Benden büyüklerle (fakat çok büyüklerle) konuştuğum zaman bu bilgi alışverişinin zorluğunu bir nebze de olsa anlayabiliyorum. Örnek vermek gerekirse dedem. Aslında kendisi öğretmen fakat okuma aşkı yüzünden dışarıdan posta ile bir üniversite daha bitirmiş. Posta? Evet kitapların, sınavların ve diğer dokümanların posta ile gönderildiği bir üniversite yapısı.

Hem okuyan için zor bir süreç hem de okul için zor bir süreç aslında. Özellikle sınavlar konusu biraz karışık. Öğrencilere gönderilecek sınavların hazırlanması, bu sınavların öğrenciler tarafından tamamlandıktan sonra gönderilmesi ve okulda görevli kişiler tarafından kontrol edilip notlarının verilmesi. Şimdi baktığımız zaman elektronik ortamlarda bu işlemler kolay oluyor.

Fakat yazılımlarımız içerisinde de bu sorunlar yaşanmıyor mu? Yazılımların mesajlaşmaları, bu mesajların işlenmesi ve geriye cevaplarının dönülmesi tıpkı mektup ile yapılan sınavlar gibi zor olabilir mi? Dilerseniz bugün bu konuyu ve bu konu için sunulan güzel bir çözümü inceleyelim.

Geliştirdiğimiz uygulamalar, verilerin işlenmesinden sorumlu temel olarak. En küçük noktada düşünürsek uygulama genelinde mesajların işlenmesi (alınması ve cevaplanması) uygulama performansını etkileyen bir durumdur. Bu noktada bazı kullanılan işlemlerin anlık yapılması ihtiyacının olmadığının düşünerek bu işlemleri asenkron olarak yapmak isteyebiliriz. Bir örnekle konuyu açıklamaya çalışayım. Loglama. Bir API uygulamamızda gelen istek (request) ve cevapların (response) loglanması için middleware katmanın yazdığımız loglama işlemi her request ve response için uygulamıza bir yük oluşturacaktır. Peki, bu işlemleri asenkron bir şekilde yapsak? O zaman işte bize yardım için devreye RabbitMQ giriyor.

RabbitMQ açık kaynak kodlu bir mesaj kuyruk sistemidir. Şu an kullanılan RabbitMQ gibi farklı uygulamalar da mevcuttur. (Apache Kafka, Microsoft Azure Service Bus veya MSMQ)

Genel Özellikleri ile RabbitMQ?

  • Erlang dili üzerinde geliştirilmiştir.
  • Açık kaynak kodlu olduğu için yaygın bir kullanım alanına ulaşmıştır.
  • Cross platform yapısından dolayı farklı işletim sistemlerinde de kullanılabilmektedir.
  • Web arayüzü ile kullanım kolaylığı sağlamaktadır.

RabbitMQ Pusblish ve Subscriber mantığı ile çalışmaktadır. Bunun anlamı ise bir uygulamadan mesajı alıp sırası geldiği zaman bu mesajı başka bir uygulmaya iletmek olarak açıklanabilir.

RabbitMQ Genel Çalışması

Burada bazı terimlerin açıklamasına ihtiyaç olacağı için onları da açıklamaya çalışalım.

Publisher : Kuyruğa mesaj gönderen uygulamadır.
Consumer : Kuyruktan gönderilmiş olan mesajı okuyan uygulamadır.
Queue : RabbitMQ içerisinde kullanılan mesajların alıp / verildiği kuyruk adıdır.
Exchange : Routing Key bilgisine göre mesajların ilgili kuyruklara gönderilmesini sağlayan bilgidir.
Exchange Type : Routing Key bilgisine göre mesajları hangi kuyruğa nasıl yönlendirilmesi gerektiğini belirleyen yapıdır.

RabbitMQ Kuralım

Ben iki farklı şekilde kurulum işlemlerini anlatmaya çalışacağım. İlk olarak her yerde karşımıza çıkan onpremise kurulumdan bahsetmek istiyorum.

RabbitMQ Erlang dilinde yazıldığından dolayı öncelikle bilgisayarımıza Erlang kurmamız gerekmektedir. Bunun için aşağıda bulunan bağlantıyı kullanabilirsiniz.

Erlang kurulumlarımızı tamamladıktan sonra RabbitMQ kurulum dosyaları için de aşağıdaki bağlantıyı kullanabilirsiniz.

Kurulumların ardından http://localhost:15672 adresi ile de RabbitMq yönetim panelini açabilirsiniz.

Bir başka kurulum yöntemi ise Docker kullanmak. Ben genellikle Docker üzerinde bu tarz uygulamalarımı kullanıyorum ve OnPremise kuruluma göre bir hayli avantajlı olduğunu düşünüyorum.

Gelin şimdi hep beraber Docker üzerinde RabbitMQ’yu nasıl kuracağımıza bakalım.

İlk olarak tabii ki Docker kurulumlarını tamamlamak gerekecek. Bu konu ile ilgili aşağıda bulunan makaleye bakabilir, kurulum işlemlerinin nasıl yapıldığını görebilirsiniz.

Docker kurulum işlemlerimizi tamamladıktan sonra RabbitMQ imajını indirmemiz gerekmektedir. Bunun için Powershell üzerinden aşağıdaki komutu yazmamız yeterli olacaktır.

docker pull rabbitmq

RabbitMQ imajını indirdikten sonra Container’ı hazırlamak ve çalışır hale getirmemiz gerekmektedir. Bunun için aşağıdaki komut satırının Powershell üzerinde çalışmamız yeterli olacaktır.

docker run -d -p 1360:15672 -p 5672:5672 — — name MyRabbitMQContainer rabbitmq:3-management

Bu komut ile iki farklı konfigürasyon düzenlemesi yapmaktayız. Bunlardan ilki Docker içerisinde çalışacak olan RabbitMQ 5672 portunun kendi lokal bilgisayarımızın 5672 portu ile eşliyoruz.

Yönetim uygulaması için de kullanılacak olan 15672 portunu da yine lokal bilgisayarımızın 1360 numaralı portuna eşiliyoruz. Böylelikle lokal bilgisayarımız üzerinden http://localhost:1360 adresine girdiğimiz zaman RabbitMQ yönetim paneline ulaşabileceğiz.

Daha sonra Docker Desktop uygulaması üzerinden çalıştırdığımız komutların hem imaj hem de container için çalıştığının görebiliriz.

RabbitMQ yönetim paneline giriş için ise lokal bilgisayarımızdan http://localhost:1360 adresine gitmemiz yeterli olacaktır. Açılan giriş ekranına aşağıdaki bilgiler ile giriş yapabilirsiniz.

Kullanıcı Adı: guest
Şifre: guest

Genel olarak RabbitMQ’nun ne olduğu ve kendi bilgisayarımız nasıl kurulacağı konusunda bilgiler aktarmaya çalıştım. Bir sonraki yazımda ise RabbitMQ ile mesajlarımızı nasıl yöneteceğimiz konusuna bakacağız.

Bir başka makalede görüşmek üzere.

Kaynaklar:
https://www.rabbitmq.com/
https://www.gencayyildiz.com/blog/dockerda-rabbitmq-ayaga-kaldirma/
https://www.borakasmer.com/rabbitmq-nedir/

--

--