Message Queue uygulamalarından bir olan RabbitMQ son zamanlarda yazılımcılar tarafından en çok tercih edilen uygulamalardan bir haline gelmiştir. Bu makaleyi okumadan önce *MQ (Message Queue) Mantığı makalesini okumanızı tavsiye ederim. Ön bilgi niteliğindeki bu makaleyi anlamak burada anlatacaklarımı daha iyi anlamanız için çok önemlidir. Bu makalemi de Message Queue mantığını iyi anladığınızı varsayarak yazıyorum.
Makalemizin içeriğinde RabbitMQ'nün ne olduğu, çalışma mantığı, RabbirMQ Server uygulaması, aynı zamanda RabbitMQ client kütüphanaleri ile ilgili bilgi verilecek ve makalenin sonunda örnek uygulama üzerinden konu pekiştirilecektir.
Öncelikle bilmeniz gereken en önemli konulardan bir tanesi RabbitMQ Client - Server mimarisi ile tasarlanmıştır. Önemli olan nokta publisher, Server ve consumer hepsi ayrı ayrı makinelerde olabilir. Ayrıca publisher ve consumer sayıları için herhangi bir kısıtlama yoktur. Bunu daha açıklayıcı şekilde açıklayacak olursak ortada bir queue sunucumuz var. Yani queue'larımız bu sunucu üzerinde tutulur ki buna da RabitMQ Server uygulaması denir. Publisher bu sunucuya bağlanarak mesajı gönderir. Ve publisher sayısı için de bir kısıtlama yoktur. Aslında kısıtlama size bağlıdır. Varsayılan ayar olarak belirli kısıtlamalar vardır tabi ki ama mimari olarak kısıtlamak size kalmış durumda. Yani istenilen sayıda kişinin RabbitMQ sunucusuna bağlanarak kuyruklara mesaj yazması mümkün. Bu aynı zamanda consumer için de geçerli. Yani kuyruktan mesajları alıp okuyan veya işleyenler için. Consumer uygulaması için de herhangi bir kısıtlama yoktur. Yukarıda bahsettiğimi RabitMQ server ayarlamaları dışında. Ama dediğim gibi bunu da sınırsız yapmak size kalmış.
Yukarıda anlattığım mimari aslında RabbitMQ mimarisi konusunda kısa da olsa önemli bilgiler içermektedir. Önemli olan nokta client-server mimarasinin RabbitMQ de nasıl uygulandığını iyi anlamaktır. Çünkü RabbitMQ konusuna hakim olmak sadece kuyruğa mesaj yazıp kuyruktan mesaj okumaktan ibaret değil. Aslında bu işin temelinde mimari tasarım vardır. Yani sizin RabbitMQ sunucunuz nerede olacak, RabbitMQ sunucusunda hangi kuyruklar olacak, bu kuyruklara verilere Exchange'in hangi paternine göre yazılacak, kuyruktan veriler nasıl okunacak, bir kaç consumer olması durumunda kuyruk mesajları hangi kurallar doğrultusunda dağıtılacak ve işlenecek?
Bu soruların tamamına cevap verebilmek için biraz yazılım ve mimari tasarım tecrübesi de önemli. Özellikle büyük yazılımlar için oluşabilecek yük durumların da doğru dağıtılması RabbitMQ mimari tasarımının anahtarlarından bir tanesidir.
Makalemizin konu başlığı da "RabbitMQ Nedir?" olduğu için bu makaleyi okuyan kişilerin bu sorunun cevabını alarak konuyla alakalı araştırmalarına devam etmesi gerektiğini düşünüyorum. O yüzden makalenin bu kısmından sonra daha spesifik olarak bu sorunun cevabı için odaklanacağım.
Öncelikle bilmeniz gereken en önemli konu RabbitMQ uygulamasının bir sunucu uygulaması olduğudur. Bu sunucu uygulamasının hangi işletim sisteminde olduğunun bir önemi yoktur. Zira RabbitMQ Server Kurulumu İçin İşletim Sistemi Seçimi makalesinde bu konuya odaklandım. Bu konunun da RabbitMQ'u anlamanız konusunda önemli olduğunu düşündüğüm için göz atmanızı tavsiye ederim.
Yukarıda da dediğim gibi RabbitMQ bir sunucu uygulamasıdır ve görevi client uygulamalarının sunucu içerisindeki kuyruklara veri yazıp bu kuyruktan verileri okumayı sağlamaktır. Bu işi yapma konusunda da diğer Message Queue uygulamalarından gerek mimari, gerek programlama dili desteği, gerek işletim sistemi desteği konusunda en önde olan uygulamadır desek yanılmayız.
Bahsettiğim mimari tasarım zenginliği de bu uygulamanın Message Queue alanından en tercih edilen uygulama olmasına getirip çıkarmıştır. Hatta yurtdışında RabbitMQ is a New King sözüyle defalarca karşılaştım ve RabbitMQ ile tanıştıktan sonra gerçekten böyle olduğunu ben de gördüm.
RabbitMQ'nün sunduğu en büyük avantajlardan biri aslında AMQP yani Advance Message Queue Protocol'üne göre dizayn edilmesi ve klasik Message Queue uygulamalarından farklı olarak message dağıtıcı görevinde Exchange teriminin çok efektif kullanılmasıdır. Aslında bu konuyu daha detaylı Exchange Message Patternlerini anlatırken anlatacağım. Ama burada da kısaca özetleyecek olursak örneğin bizim 10 tane kuyruğumuz(queue) varsa gönderdiğimiz mesajın hangi kuyruğa gideceğine nasıl karar veririz. Bunun için dizayn edilmiş direct, fanout, topic, header gibi yöntemlerin detaylarını yukarıda linkini verdiğim makalede bulabilirsiniz.
Son olarak da konuyu biraz toparlamak istiyorum. Umut ediyorum ki konuyu okuyan herkesin kafasında RabbitMQ ile ilgili bir şeyler canlanmıştır. Önemli olan nokta da budur zaten. Yani bu makalenin temel amacı zaten RabbitMQ konusunda bilgilendirmek. Konuyu tam olarak anlamanız içinse benim görüşüm RabbitMQ Server uygulamasını bir bilgisayara kurarak devamında program içinde, RabbitMQ üzerinde kuyruklar oluşturup bu kuyruklara veri yazdığınızda ve bu mesajları okuduğunuzda RabbitMQ konusunu tam olarak anlayabileceksiniz.
Bunun için de sırasıyla makale linkleri vereceğim. Bu makale linklerini takip ederek buradan sonra küçük bir RabbitMQ uygulaması yaparak konuyu pekiştirmenin en doğru yol olduğunu düşünüyorum.
Konu anlatımımı tekrar okuduktan sonra ister Message Queue konusunda başka uygulamalarda tecrübesi olan, isterse de bu konuya yeni başlayanlar için yeterli düzeyde bilgiler bulunduğunu düşünüyorum ki buradan sonrasının ise tecrübeyle sağlamlaşacağını düşünüyorum. Yine de konuyla alakalı sorularınız olursa sormaktan çekinmeyin. Fırsat buldukça sorularınızı yanıtlamaya çalışacağım...
Makalemizin içeriğinde RabbitMQ'nün ne olduğu, çalışma mantığı, RabbirMQ Server uygulaması, aynı zamanda RabbitMQ client kütüphanaleri ile ilgili bilgi verilecek ve makalenin sonunda örnek uygulama üzerinden konu pekiştirilecektir.
Öncelikle bilmeniz gereken en önemli konulardan bir tanesi RabbitMQ Client - Server mimarisi ile tasarlanmıştır. Önemli olan nokta publisher, Server ve consumer hepsi ayrı ayrı makinelerde olabilir. Ayrıca publisher ve consumer sayıları için herhangi bir kısıtlama yoktur. Bunu daha açıklayıcı şekilde açıklayacak olursak ortada bir queue sunucumuz var. Yani queue'larımız bu sunucu üzerinde tutulur ki buna da RabitMQ Server uygulaması denir. Publisher bu sunucuya bağlanarak mesajı gönderir. Ve publisher sayısı için de bir kısıtlama yoktur. Aslında kısıtlama size bağlıdır. Varsayılan ayar olarak belirli kısıtlamalar vardır tabi ki ama mimari olarak kısıtlamak size kalmış durumda. Yani istenilen sayıda kişinin RabbitMQ sunucusuna bağlanarak kuyruklara mesaj yazması mümkün. Bu aynı zamanda consumer için de geçerli. Yani kuyruktan mesajları alıp okuyan veya işleyenler için. Consumer uygulaması için de herhangi bir kısıtlama yoktur. Yukarıda bahsettiğimi RabitMQ server ayarlamaları dışında. Ama dediğim gibi bunu da sınırsız yapmak size kalmış.
Yukarıda anlattığım mimari aslında RabbitMQ mimarisi konusunda kısa da olsa önemli bilgiler içermektedir. Önemli olan nokta client-server mimarasinin RabbitMQ de nasıl uygulandığını iyi anlamaktır. Çünkü RabbitMQ konusuna hakim olmak sadece kuyruğa mesaj yazıp kuyruktan mesaj okumaktan ibaret değil. Aslında bu işin temelinde mimari tasarım vardır. Yani sizin RabbitMQ sunucunuz nerede olacak, RabbitMQ sunucusunda hangi kuyruklar olacak, bu kuyruklara verilere Exchange'in hangi paternine göre yazılacak, kuyruktan veriler nasıl okunacak, bir kaç consumer olması durumunda kuyruk mesajları hangi kurallar doğrultusunda dağıtılacak ve işlenecek?
Bu soruların tamamına cevap verebilmek için biraz yazılım ve mimari tasarım tecrübesi de önemli. Özellikle büyük yazılımlar için oluşabilecek yük durumların da doğru dağıtılması RabbitMQ mimari tasarımının anahtarlarından bir tanesidir.
Makalemizin konu başlığı da "RabbitMQ Nedir?" olduğu için bu makaleyi okuyan kişilerin bu sorunun cevabını alarak konuyla alakalı araştırmalarına devam etmesi gerektiğini düşünüyorum. O yüzden makalenin bu kısmından sonra daha spesifik olarak bu sorunun cevabı için odaklanacağım.
Öncelikle bilmeniz gereken en önemli konu RabbitMQ uygulamasının bir sunucu uygulaması olduğudur. Bu sunucu uygulamasının hangi işletim sisteminde olduğunun bir önemi yoktur. Zira RabbitMQ Server Kurulumu İçin İşletim Sistemi Seçimi makalesinde bu konuya odaklandım. Bu konunun da RabbitMQ'u anlamanız konusunda önemli olduğunu düşündüğüm için göz atmanızı tavsiye ederim.
Yukarıda da dediğim gibi RabbitMQ bir sunucu uygulamasıdır ve görevi client uygulamalarının sunucu içerisindeki kuyruklara veri yazıp bu kuyruktan verileri okumayı sağlamaktır. Bu işi yapma konusunda da diğer Message Queue uygulamalarından gerek mimari, gerek programlama dili desteği, gerek işletim sistemi desteği konusunda en önde olan uygulamadır desek yanılmayız.
Bahsettiğim mimari tasarım zenginliği de bu uygulamanın Message Queue alanından en tercih edilen uygulama olmasına getirip çıkarmıştır. Hatta yurtdışında RabbitMQ is a New King sözüyle defalarca karşılaştım ve RabbitMQ ile tanıştıktan sonra gerçekten böyle olduğunu ben de gördüm.
RabbitMQ'nün sunduğu en büyük avantajlardan biri aslında AMQP yani Advance Message Queue Protocol'üne göre dizayn edilmesi ve klasik Message Queue uygulamalarından farklı olarak message dağıtıcı görevinde Exchange teriminin çok efektif kullanılmasıdır. Aslında bu konuyu daha detaylı Exchange Message Patternlerini anlatırken anlatacağım. Ama burada da kısaca özetleyecek olursak örneğin bizim 10 tane kuyruğumuz(queue) varsa gönderdiğimiz mesajın hangi kuyruğa gideceğine nasıl karar veririz. Bunun için dizayn edilmiş direct, fanout, topic, header gibi yöntemlerin detaylarını yukarıda linkini verdiğim makalede bulabilirsiniz.
Son olarak da konuyu biraz toparlamak istiyorum. Umut ediyorum ki konuyu okuyan herkesin kafasında RabbitMQ ile ilgili bir şeyler canlanmıştır. Önemli olan nokta da budur zaten. Yani bu makalenin temel amacı zaten RabbitMQ konusunda bilgilendirmek. Konuyu tam olarak anlamanız içinse benim görüşüm RabbitMQ Server uygulamasını bir bilgisayara kurarak devamında program içinde, RabbitMQ üzerinde kuyruklar oluşturup bu kuyruklara veri yazdığınızda ve bu mesajları okuduğunuzda RabbitMQ konusunu tam olarak anlayabileceksiniz.
Bunun için de sırasıyla makale linkleri vereceğim. Bu makale linklerini takip ederek buradan sonra küçük bir RabbitMQ uygulaması yaparak konuyu pekiştirmenin en doğru yol olduğunu düşünüyorum.
Konu anlatımımı tekrar okuduktan sonra ister Message Queue konusunda başka uygulamalarda tecrübesi olan, isterse de bu konuya yeni başlayanlar için yeterli düzeyde bilgiler bulunduğunu düşünüyorum ki buradan sonrasının ise tecrübeyle sağlamlaşacağını düşünüyorum. Yine de konuyla alakalı sorularınız olursa sormaktan çekinmeyin. Fırsat buldukça sorularınızı yanıtlamaya çalışacağım...
Yorumlar
Yorum Gönder