RabbitMQ nedir?

RabbitMq mesaj dağıtıcısı veya sıra yöneticisi olarak da bilinen bir mesaj kuyruğu yazılımıdır. Basitçe söylersek RabbitMQ ile sıralar tanımlar, bu sıralara mesaj gönderir ve istediğinizde de “RabbitMQ şu sıramda yeni mesaj var mı söyle bakalım?” dersiniz.


RabbitMQ nedir?

RabbitMq mesaj dağıtıcısı veya sıra yöneticisi olarak da bilinen bir mesaj kuyruğu yazılımıdır. Basitçe söylersek RabbitMQ ile sıralar tanımlar, bu sıralara mesaj gönderir ve istediğinizde de “RabbitMQ şu sıramda yeni mesaj var mı söyle bakalım?” dersiniz.

Bir başka deyişe, Rabbit MQ yazılımlarınızın mesajlaşması için ortak bir platform, mesajlarınız alınana kadar bekleyecekleri posta kutuları sağlar.

Yazılımlar arası mesaj ne demek?

Mesaj, bir alıcıdan bir vericiye gönderilmesi gereken herhangi bir bilgi olabilir. Çalıştırılması gereken herhangi bir işle ilgili bilgi ve parametreler, gönderilecek bir maille ilgili bilgiler, veya ihtiyacınıza göre basit bir metin mesajı olabilir. Örneklersek daha anlaşılır olacaktır.

RabbitMQ kullanım örnekleri

RabbitMQ veya mesaj kuyrukları genel olarak tamamlanması vakit alan işlemleri kullanıcıyı bekletmeden arka planda yapmak için kullanılıyor. Böylece farklı işlemler için farklı altyapılar, programlama dilleri, sunucular vb. kullanmak da mümkün oluyor, büyük sistemlerde kapasiteyi daha etkin kullanmak ve daha kolay artırmak mümkün oluyor.

Eğer mesaj kuyruğu kavramını ilk defa duyuyorsanız ne olduğunu anlamanın en kolay yolu örnekler üzerinden gitmektir. Bunu için aşağıda bazı senaryolar ile anlatmaya çalışacağım. (Mümkün olduğunca basitleştirerek, olayın mantığı anlatmaya çalıştığım için gerçek hayat kullanımlarını birebir yansıtmayabilir.)

Senaryo 1: E-posta gönderimi

Kullanıcının yaptığı işleme göre, kullanıcının kendisine veya etkilenen diğer kişilere e-posta göndereceğimizi düşünelim. E-posta gönderimini gerçek zamanlı olarak yaparsak kullanıcının işlem tamamlanana kadar beklemesi gerekecektir. Basit bir kullanıcı kaydı işleminden sonra, sunucu tarafında maili gönderip tarayıcıya yanıt gönderene kadar kullanıcıyı 3-4 saniye bekletmeniz gerekir. Peki ya kullanıcının yaptığı bir işlemi onu takip eden 1000 kişiye ayrı ayrı mail atmanız gerekiyorsa, kullanıcıyı saatlerce bekletecek misiniz?

Bu sorunu aşmak için gönderilmesi gereken mailleri bir veri tabanına yazar, düzenli olarak çalıştırdığınız başka bir script ile veri tabanını düzenli olarak sorgular, işlemleri gerçekleştirdikçe ilgili satırları veri tabanından silersiniz. (Kendim böyle bir mantık kurup php ve mysql ile kodladığımda hem çok zevk almış, hem de “çok güzel oldu beee” diyip kendimle gurur duymuştum. )

Buna benzer veya belki biraz daha gelişmiş bir mantığı kendiniz kurup kodladığınızı varsayalım. Yine de veri tabanınızı gereksiz yoracak, performans sorunları yaşayacak ve gerçek zamanlı olarak işlem yapamayacaksınız.

Bunun yerine RabitMQ ile “eposta” kuyruğuna “parametreleri” göndermeniz, mail gönderen asıl scriptinize de “RabbitMQ’ya bağlan, eposta kuyruğuna yeni mesaj geldiğinde sana haber versin, mesaj gelince de içindeki parametreleri al maili gönder” demeniz yeterlidir. RabbitMQ bunu hem yüksek performansla yapar, hem de hata giderme dahil bir çok senaryo için çözümleri içinde hazır olarak barındırır.

Senaryo 2: Video dosyası işleme, belirli bir fomata dönüştürüp, farklı kalitelerde kaydetme

Bir diğer örnek ise youtube veya Facebook’a bir video gönderdiğimizde “videonuz arka planda işleniyor, tamamlandığında bilgilendirileceksiniz” benzeri bir mesaj aldığımızda karşımıza çıkıyor.

Gönderdiğimiz videonun farklı format ve kalitelere çevrilmesi oldukça zaman alan bir işlem olduğu gerçek zamanlı yapılması halinde uzun süre beklememiz gerekir. Zaten bu işlem o an dosyayı gönderdiğimiz sunucu tarafından değil, bambaşka bir altyapı, donanım ve kod ile yapılmaktadır.

Biz videoyu gönderdikten sonra “şu kullanıcının gönderdiği şu videonu ham dosyasını işle” mesajı kuyruğa gönderilir ve asıl dönüştürme işini yapan proses bu mesajı aldığında dönüştürme işlemini yapar. Bu hem işlemin arka planda yapılmasını,, hem de aynı anda 100 istek geldiğinde bunların sırayla yapılmasına olanak sağlar.

Eğer işleri hızlandırmak istersek bu kuyruğa birden fazla video işleme prosesi bağlayarak işlerin daha hızlı yürümesini sağlayabiliriz. RabbitMQ gelen mesajları bu proseslere belirlediğimiz kurallar dahilinde dağıtır, eğer bir sorun çıkar ve “tamam video işlemeyi tamamladım” yanıtını alamazsa o işi otomatik olarak tekrar kuyruğa alır.

Senaryo 3: Bildirim Gönderme

Yukarıdaki örneğimizin devamında, video işleme tamamlandığında videomuzun tamamlandığına dair bir bildirim alıyoruz, hatta takipçilerimize de video gönderdiğimize dair bildirim gidiyor. Video dönüştürme işlemi için güçlü grafik kartları koyduğumuz donanımımızı bildirim göndermek için neden meşgul edelim? İlgili kuyruklara mesaj gönderelim ve bırakalım o kuyrukları takip eden, bu iş için çalışan yazılımlarımız bunu yapsın.

RabbitMQ’yu hangi programlama dilleri ile kullanabilirim?

RabbitMQ .NET, PHP, Python, Ruby on Rails, Java, Node.js üzerinde javascript vb. bir çok programlama dili ile kullanılabiliyor. Bu büyük projelerde farklı mimarilerin kullanılabilmesine de olanak sağlıyor. Örneğin PHP ile web sayfasını servis ederken, projenin makine öğrenmesi gerektiren bölümlerini python’a yaptırıp bu ikisi arasındaki iletişimi kolayca sağlayabiliyorsunuz?

Bu yazıda kod ya da kuruluma girmeden, RabbitMQ nedir kısaca anlatmaya çalıştım ve buna rağmen epey uzun oldu. Bu nedenle “Docker üzerinde RabbitMQ” kurulumu yapıp PHP ve Pyhton kod örneklerini paylaşacağım ayrı bir yazı planlıyorum. Açıklık getirmemi istediğiniz bir konu varsa aşağıdaki yorum kutucuğuna yazarak sorabilirsiniz.

Bu Yazıda Yapılan Değişiklikler
  • 11.05.2022: Yazı özeti düzenlendi.

Bir soru, öneri ya da yorumunuz mu var?

  • Yorumlar2
aydın dedi ki

Senaryolar ile örneklendirmeniz harika olmuş. Emeğinize sağlık.

Evren Bal dedi ki

Beğendiğiniz ve umarım işinize yaradığı için sevindim.

Evren Bal

Ben Evren BAL

1996'dan beri ‘Internet canlısıyım!’

Evren Bal Hakkında daha fazla bilgi.

Tanışmak isterseniz hemen sosyal medyadan iletişime geçebilirsiniz.

Bana Ulaşın

Bana Ulaşın

  • Bir sorunuz mu var?
  • Yazıda bir hata mı farkettiniz?
  • Sayfa ile ilgili bir öneriniz mi var?
  • Yazmamı önereceğiniz bir konu mu var?

Lütfen iletişim formunu kullanarak veya sosyal medya hesaplarımdan bana ulaşın.

Digital Ocean Logo

VPS sunucusu denemek ister misiniz?

Digital Ocean'a referans bağlantımdan kayıt olarak yeni oluşturacağınız hesabınızı 60 gün geçerli 100$ kredi ile açabilirsiniz. Bu miktar yüksek performanslı VPS'leri bile denemeniz için yeterlidir.

Yapacağınız onca kurulumun boşa gitmemesi için benim tavsiyem uzun vadede kullanabileceğiniz özellik ve maliyetlerde bir sunucu oluşturmanızdır.

Ücretsiz 100$ kredi bağlantısı

60 günlük denemeniz sonunda eğer devam etmek istemezseniz hiç bir ücret ödemeyeceksiniz. Hizmeti kullanmaya devam etmek isterseniz harcamanız 25$'a ulaştığında benim hesabıma da 25$ kredi yüklenecektir.

Diğer bir deyişle, siz 100$ ücretsiz krediyi her halükarda kazanırken, daha sonra ücretli devam etmeye karar verirseniz ben de 25$ kredi kazanacağım.

Copyright © 2022 - Evren BAL