RabbitMQ nedir? Nasıl kurulur? Nasıl Konfigüre edilir?

Adem Olguner
5 min readNov 14, 2019

--

{
var ademOlguner = @”Ne zamandır Queue’da bekleyen, yazmak istediğim ancak fırsat bulamadığım bir yazı ile; Ne ola ki bu RabbitMQ, nasıl kuruyoruz yada kurmaya gerek varmı, kurmadan kullanabilir miyiz , konfigürasyon için neler yapmalıyız sorularına ait cevaplarımı paylaşmak istiyorum.”;
}

Tanım olarak Mesaj Kuyruğu sistemi diyebiliriz, tabi burada mesaj kuyruğundan kastımız herhangi bir işlem (process) olabilir. Genelde mesajlaşma sistemlerinde kullanılmaya başlansa da zaman içerisinde değişen ihtiyaçlardan dolayı projelerin ölçeklerinin büyümesi, yoğun istek(request) almaları , gelen isteklere cevap (response) zamanı uzaması gibi durumlardan dolayı kullanıcı kitlelerinin kaybedilmemesi, hizmetlerin aksamasının ve ihtiyaçlardan dolayı kullanım alanları gitgide genişledi. Bankaların kullandığı EFT vb. işlemlerde, yoğun istek (request) alan e-ticaret sistemlerinin olmazsa olmazı haline geldi.

Somut olarak; Postane veya Kargo firması gibi düşünebiliriz.

“Process olarak bilgi (nesne) kargoya verilir, kargo firması (kendi iş akışları doğrultusunda) işleme alır ve göndericiye ulaştırılır, kargo ulaşana kadar siz kendi işlerinizi yapmaya devam edersiniz kargonun gönderilmesini beklemeyiz.”

Benim karşılaştığım ve RabbitMQ kullanmamı gerektiren durumlara örnek vermek gerekirse;
* E-mail gönderimi işlemlerinde
* Hazır rapor sorgularının dışında ihtiyaca göre (anlık) oluşturulan parametrelerinin değişkenlik gösteren dinamik raporlama işlemlerde kullandım.

“Rapor için kullanıcıdan seçtiği parametre ve bu parametreye bağlı şartlar doğrultusunda oluşturulan talep queue de saklanır, Consumer’in dinlediği kuyruktan istek raporu byte[] şeklinde saklanan veri JSON ile istenilen tipe dönüştürülerek veri gerekli veri kaynağından çekilir, kullanıcı isteğine göre xml-xls-txt vb. türünde kullanıcıya response olarak geri dönülür.”

RabbitMQ asenkron şekilde çalışan bir yapıdır. Erlang programlama dili ile geliştirilmiştir.

RabbitMQ Kurulumu

RabbitMQ Erlang programlama dili ile geliştirildiğinden bahsetmiştik.

RabbitMQ Konfigürasyon

Ortam değişkenlerine (Environment variables) RabbitMQ node name ekleyelim.

RabbitMQ kurulumunu yaptığımız makine-bilgisayar’ın host name ile RabbitMQ node name aynı olmalıdır.

Ortam değişkenlerini açmak için.

Bilgisayarım-(This PC) => Sağ tık => Özellikler (Properties)

Bu ekranda Advanced system settings (Gelişmiş sistem Ayarları) tıklanır ve system properties ekranı açılır.

Advanced (Gelişmiş) sekmesinden Enviroment Variables (ortam değişkenlerine) tıklayalım.

Advanced (Gelişmiş) sekmesinden Environment Variables (ortam değişkenlerine) tıklayalım.

ademolguner1903 value değeri benim RabbitMQ kurmuş olduğum bilgisayarımın host name bilgisidir. Siz de aynı şekilde kurulumu yapmış olduğunuz makineye ait host name bilgisini girerek ekleyelim.

Bir sonraki konfigürasyon işlemi için Windows tuşuna basıp arama kısmına “RabbitMQ Command Prompt” yazarak arayalım.

RabbitMQ Command Prompt’a tıklayalım ve karşımıza çıkan ekran:

RabbitMQ kurulumlarından sonra RabbitMQ Plugin-Servisini aktif etmek için komut satırı dizesine alttaki komutu yazalım ve Servis-Plugin’i aktifleştirilmiş olur.

rabbitmq-plugins enable rabbitmq_management

Kurulum ve konfigürasyon işlemlerini tamamladık RabbitMQ için browser’a 15672 portundan artık erişebiliriz.

http://localhost:15672

http://localhost:15672

Karşımıza local makinemize kurmuş olduğumuz RabbitMQ login ekranı gelecektir. RabbitMQ kurulumunda varsayılan olarak kullanıcı adı ve şifre tanımlanmış olarak gelir.

UserName: guest
Password : guest

Varsayılan olarak gelen bu kullanıcı adı ve şifre bilgilerini güncelleyebilir veya birden çok kullanıcı oluşturabiliriz.

Yeni Kullanıcı ve şifre oluşturma, yetkilendirme işlemlerini alttaki komutlar ile yapabiliriz.

rabbitmqctl add_user test test
rabbitmqctl set_user_tags test administrator
rabbitmqctl set_permissions -p / test “.*” “.*” “.*”
rabbitmqctl change_password test test

Login işlemlerinden sonra RabbitMQ sunucusuna ait paneli görüntülenmektedir. Nodes, Connections, Channels, Exchanges, Queues vb. ekranları görüntüleyebiliriz.

RabbitMQ ve Bileşenleri

https://www.rabbitmq.com/tutorials/amqp-concepts.html
https://www.rabbitmq.com/tutorials/amqp-concepts.html

1- Publisher: Kuyruğa mesaj gönderen uygulamadır.
2- Consumer: Kuyruğu dinleyen uygulamadır.
3- RabbitMQ
* Routing key: Mesajımızı yönlendireceğimiz anahtarımızdır.
* Exchange: Mesajı ilgili “routing key”e göre ilgili queue’ya yönlendiren bölüm
* Queue: Mesajların son olarak düştüğü kuyruk
* Exchange type: Gelen mesajın, “routing key”e göre hangi queue’ya “nasıl” gönderileceğini belirtir.

Exchange Types

1- Direct Exchange: “routing key” (yönlendirme anahtarı) belirlenir ve bu anahtar bilgisi kuyruğa yazılır. “consumer” tarafından da bu anahtarlara göre işlem yapılır.

2- Fanout Exchange: Mesajlar “exchange” de yer alan bütün kuyruklara gönderilir. Sadece yönlendirme anahtarı (Routing Key) olanlar göz ardı edilir.

3- Topic Exchange: verilen yönlendirme anahtarlarına göre farklı kuyruklara yazma işlemleri rabbit exchange topic ile yapılabilir ve bu yazılan mesajlar “consumer” lar tarafından direk yönlendirme anahtarına göre veya (*) ile erişilebilir. Ayrıca (#) ile “exchange” de bulunan bütün kuyruklara ait mesajları yakalamak mümkün.

erkek.liked -> Erkeklerin beğendikleri
erkek.unliked -> Erkeklerin beğenmedikleri
kadin.liked -> Kadınların beğendikleri
kadin.unliked -> Kadınların beğenmediği ürünler
erkek.* -> Erkeklerin beğendiği ve beğenmediği herşey
kadin.* -> Kadınların beğendiği ve beğenmediği herşey
*.liked -> Bütün beğenilenler
*.unliked -> Bütün beğenilmeyenler
# -> Herşey

4- Headers Exchange: Topic exchange” in benzeridir. Yönlendirme anahtarları yerine mesajlar “header” içerir ve kuyruk eşleştirmesi gönderilen header lara göre yapılır.

Projelerimizde karşımıza çıkabilecek bir yapıya örnek olması açısından;

RabbitMQ hakkında giriş seviyesinde anlatacaklarım bu kadar. RabbitMQ ile ilgili gerçek bir proje örneği olması açısından .Net Core’da RabbitMQ ile E-Posta Gönderim İşlemleri makalesini okuyabilirsiniz.

Kaynaklar
* https://www.rabbitmq.com/getstarted.html

--

--