RabbitMQ Nedir? Neden Kullanılır?
RabbitMQ mesaj kuyruğu (message queue) sistemidir. Yazdığımız programımız üzerinden yapılacak asenkron (asynchronous) işlemleri sıraya koyup, bunları sırayla kuyruktan çekip gerçekleyerek ilerleyen ölçeklenebilir ve performanslı bir sistemdir. RabbitMQ kullanımına potansiyel bir örnek verecek olursak, bulk mail gönderme işlemlerini Server’ı yormayacak bir sisteme çevirmek için RabbitMQ kullanabilirsiniz. RabbitMQ bir çok yazılım diline destek vermektedir, bir çok işletim sistemi üzerinde çalışabilmektedir ve open source’dur.
Neden Kullanılır?
Günlük hayattan bir örnek verelim. Örneğin 1 mail atma işlemi gerçekleştireceksiniz. Bunun için yapmanız gereken tek şey gönderilecek mail’i ve içeriği ayarlayıp, gönder butonuna tıklamak. Sonrasında 2–3 saniye içerisinde gönderiniz gittiğine dair bir bildirim alacaksınız. Peki bu gönderilmesi gereken mail miktarı 1000 olsaydı. RabbitMQ gibi bir teknoloji kullanmadan böyle bir işlem yapmanız halinde, mail gönderilecek kişileri for döngüsünde maillerine tek tek göndermeniz gerekirdi. Peki bu işlem ne kadar sürer? 1 dakika sürdüğünü farz edin. 2022 yılındayız ve 1000 maili gönderdikten sonra 1 dakika onu bekliyoruz. Ne kadar berbat bir senaryo. İşte burada imdadımıza RabbitMQ yetişiyor.
Konunun daha iyi anlaşılması için bir örnek daha verelim. Bir sesi videoya gömülmesini sağlayan bir servisiniz var. Bu işlem videonun uzunluğuna göre değişecektir elbet. Örneğin 2 saatlik bir videoya sesin gömülmesi 10 dakika sürsün. Bu işlem başladığında her hangi bir nedenden gömme işlemi duraksamış olsun. Bu durumda sistem nerede kaldığını bilmediği için işlemi tekraradan başlatmamız gerekir. Bu çok sorun değil, sonuçta 10 dakikalık bir işlem. Peki bu işlemi YouTube kadar büyük bir platformda yaşandığını düşünün. Saate 5 milyon videonun yüklendiği bir platformda böyle bir şeyin yaşanması büyük kullanıcı kaybına neden olurdu. Tahmin edin burada imdadımıza kim yetişiyor :)
Nerelerde Kullanılabilir?
- Yoğun E-mail gönderilen senaryolarda
- Yoğun bir şekilde veri işlemesinin bulunduğu alanlarda
- Yoğun işlem hacminin bulunduğu yerlerde
- Verilerin önemli olduğu yerlerde
RabbitMQ ve Bileşenleri
RabbitMQ Exchange ve Queue içerisinde barındıran yapıdır. Publish ve Receiver’ı ise biz oluşturuyoruz.
- Publisher: Verinin RabbitMQ’ye gönderildiği yer.
- Receiver: RabbitMQ Publisher’ları sıraya koyup ilgili Receiver’lara iletiyor.
- Routing key: mesajlarımızı ilgili yerlere göndermek için eklediğimiz anahtar kelimeler, etiketler.
- Exchange: Bu anahtar kelimelere göre ilgili kuyruğa veriyi göndermemizi sağlayan araçtır.
- Queue: Görevi, Consumer’lara (receiver) verileri teker teker göndermek.
- Channels: Publish ve Consumes kısımlarına channel denir.
- Exchange Type: Route key’e göre belirli Queue’lara belirli verileri iletmek Exhange’in göreviydi. Peki exchange type nedir? Gelin buna birlikte göz atalım.
Exchange Type
Belirli standartlar altında mesajları göndermemizi sağlıyor. Yani verileri, mesajları alırken belirli standartlara göre alabilmemize olanak sağlıyor. Üç çeşit exchange type vardır:
Direct Exchange: Routing Key belirlenir ve bu bilgi ilgili kuyruğa yazılır. Consumer bu anahtar bilgisine göre işlem yapar.
Fanout Exchange: Exchange içinde yer alan tüm mesajlar, tüm kuyruklara gönderilir. Routing Key olanlar ise göz ardı edilir.
Topic Exchange: Verilen anahtara göre farklı farklı kuyruklara yazma işlemini Topic Exchange yapar. Ayrıca kendine göre WildCard desteği bulunur. Örneğin “*” ve “#” ile belirli bir gruba ya da tüm mesajlara erişmek mümkündür.