RabbitMQ Nədir və Windows’a Quraşdırılması

Sərxan Baxşaliyev
3 min readFeb 22, 2019

--

RabbitMQ növbəli mesaj sistemidir. Publish və Subscribe pattern məntiqiylə işləyir. Yəni, bir appllication-dan bir mesajı alıb, digər bir appllicationa növbəsi, vaxtı gələndə göndərir. Gündəlik həyatdan misal çəkmək lazım gələrsə online olaraq amazondan kitab alırıq. Bizim çatdırılma növbəmiz gəlib çatanda kitab bizə göndərilir. RabbitMq open source-dur. Alternativləri Apache Kafka, Msmq, Microsoft Azure Service Bus, Kestrel, ActiveMQ kimi mesaj sistemləridir.Bütün bunun kimi sistemlərdə məqsəd hər hansı bir mənbədən alınan bir mesajın növbəsi çatdığı zaman bir başqa mənbəyə göndərilməsidir.

RabbitMq işləyərkən ən azından bunları bilmək lazımdır

1. Publisher: Növbəyə mesaj göndərən tətbiqdir.

2. Consumer: Növbədəki mesajı dinləyəcək (qarşılayan) olan tətbiqdir.

3. Queue: Mesajların RabbitMQ tərəfindən əlavə olunduğu növbədir.

4. Exchange: Bir neçə Exchange növü vardır. Funksiyası isə mesajı əlaqəli Routing Key‘ə görə əlaqəli Queue‘ya yönləndirməktir. Exchange özünün bir neçə növləri vardır.

· Direct exchange: Ediləcək işlərə görə bir routing key təyin olunur və buna görə əlaqəli direct exchange ilə məqsədə ən uyğun queue göndərilir.

· Fanout exchange: Burda routing key’in bir vacibliyi yoxdur. Daha çox broadcast dərclər üçün işlədilir. Məsələn, real-time idman xəbərləri kimi dərclərdə fanout exchange işlədilir.

· Topic Exchange: Bir route mesajın bir və ya daha çox queue’yə getməsi üçün işlədilir. Publish/Subscribe pattern’in bir variasiyasıdır.

· Headers Exchange: Bu exchange-də routing key’i işlətməz və message headers’dakı bir neçə xüsusiyyətlər və identifikasiyası ilə düzgün queue’yə göndərilir. Header üzərindəki attributlar ilə queue üzərindəki attributların hamısının dəyərlərinin bir-birini tutması lazımdır.

5.Exchange Type: Əlaqəli mesajın Routing Key-ə görə hansı Queue‘ya necə istiqamətləndirəcəyini bildirməkdir.

6.Fifo: RabbitMQ’da gedən mesajların işləmə sırası “first in first out”, yəni, ilk daxil olan ilk çıxar şəklindədir.

Niyə islətməliyik?

Hər şey scalability bir mühit yaratmaq üçündür. İşləri asenxron bir şəkildə həyata keçirərək, həm proyektimizi işlədən insanları response time maliyyətindən qutarmaq, həm də server üzərindəki concurrent process maliyyətindən minimuma endirilməsi üçündür. Bu tərz texnologiyalar çıxmamışdan əvvəl bir çoxumuz mesaj quyruq sistemimizi sql uzərindən edirdik. Buna misal olaraq, proyektimizdə email göndərmə işlərini MailMq adında table düzəldib ora yazırdıq. Daha sonra bu tabledən service yazaraq əlaqəli email-ri asenxron şəkildə sırasıyla göndərirdik. Ancaq bunun öz dezavantajları vardır. Aşağıda olanları nəzərə alaraq RabbitMQ bütün bu məsələləri bizim yerimizə həll edir.

1. RDBMS üzərində həm Queue’ya bir data əlavə edərkən, həm də Queue’yu işlədərkən çoxlu transaction’lara səbəbiyət verdiyimizdən scalability danışmaq olmazdı.

2. Maintenance və performans problemləriylə ilə məsğul olmaq lazım olurdu.

RabbitMQ içərisində olan Publish, SubscribeRouting mexanizmləri genişləndirilmiş mesaj sırası protokolu (AMQP) standartına uyğun olaraq işləməkdədir. Red Hat Enterprise MRG, MSMQ, OpenAMQ həllər arasında RabbitMQ performans və scalability baxımından öndə gədir. RabbitMQ virtual runtime’da çalışır və erlang dili ilə yazılmışdır.

Erlang nədir?

Joe Armstrong, Mike Williams və Robert Virding in tərəfindən yaradılan, eyni zamanda message broker olan RabbitMQ üçün möhtəşəm bir platform olan proqramlaşdırma dilidir.

Quraşdırılması

Windows üzərindən qurulmasını həyata keçirək. Quraşdırılmasına başlamadan əvvəl, burdan Erlang yükləyirik. Erlang dilini quraşdırdıqdan sonra RabbitMQ qurasdırmağa başlayırıq. Bunun üçün burdan RabbitMq yükləyirik. Daha sonra Command Prompt –u administrator kimi açırıq. Orada “C:\Program Files\RabbitMQ Server\rabbitmq_server-3.6.0\sbin\” yoluna daxil olub rabbitmq-plugins.bat enable rabbitmq_management komandasını işlədirik.

Browser üzərində http://localhost:15672 adresini yazıb daxil olduqdan sonra aşağıdakı kimi ekran gəldisə deməli artıq sizin kompyuterinizdə RabbitMq qurulmuşdur.

Qeyd: İlk daxil olan zaman istifadəçi adı və şifrə yerinə default olaraq guest yazılır.

--

--