RabbitMQ 5 Dakikada veya Daha Kısa Sürede Açıklanıyor

Yayınlanan: 2022-11-24

Bugün RabbitMQ sayesinde en ağır işlemleri asenkron olarak yürüterek sayfalarınızın yükleme süresini nasıl hızlandırabileceğinizi göreceğiz.

Bir uygulamanın veya web sitesinin kararlılığı ve hızı, kullanıcılar için kesinlikle en önemli faktörler arasındadır. Çok uzun sürdüğü için ilk sayfayı görmeden kim bir siteden hiç ayrılmadı?

RabbitMQ nedir?

TavşanMQ-1

RabbitMQ, üreticiler ve tüketiciler arasında verimli iletişim için bir aracı görevi gören açık kaynaklı, dağıtılmış ve ölçeklenebilir bir mesajlaşma aracısıdır.

RabbitMQ, komisyoncudan üreticiye ve tüketicilerden üreticiye mesajların alındığına dair onaylar yoluyla teslimat garantili asenkron mesajların iletilmesine odaklanan uygulama katmanı mesajlaşma protokolü AMQP'yi uygular.

RabbitHQ nasıl çalışır?

Basitleştirilmiş bir şekilde RabbitMQ, alıcı uygulamalar mesajı alıp işleyene kadar üreticiler tarafından gönderilen mesajları saklayacak kuyrukları tanımlar. Bir sistemin birbiriyle mesajlar aracılığıyla iletişim kuran bağımsız modüllere bölündüğü dağıtılmış sistemler tasarlamamıza ve uygulamamıza olanak tanır.

Tüm iletişimlerde olduğu gibi, bir üreticiye, bir mesaja ve bir alıcıya ihtiyacımız var. Pastanın ortasında, mesajın alıcıyı beklediği yer olan RabbitMQ yer alır.

Mesaj alışverişini temsil eden değişim türlerini tanıyarak nasıl çalıştığını daha iyi anlayalım.

Değişim Türleri

Borsalar aracılığıyla, RabbitMQ aracılığıyla bir mesaj gönderdiğimizde, onu doğrudan bir kuyruğa göndermeyiz; diğer sistemlerin okuması için, mesajları farklı kuyruklara iletmekten sorumlu olan bir değiş tokuşa göndeririz.

exchanges-topic-fanout-direct
Resim Kredisi: CloudAQMP

Değişim türleri Doğrudan, Fanout, Konu ve Okuyuculardır.

Doğrudan Değişim

Bir üreticinin üç tüketiciye bir satın alma onay mesajı göndermesi gerektiğini varsayalım. Yani satın alma işlemini gerçekleştirmek için sistemin diğer üç farklı sistemle iletişim kurması gerekiyor.

RabbitMQ mesajı her kuyruğa ayrı ayrı gönderdiğinden, bu diğer sistemlerin mesajı doğrudan almasını sağlamak için bir ivme vardır.

Normalde santral, mesajı kuyruklara iletir, ancak çoğu zaman mesajlarımızın tüm kuyruklara gönderilmesini istemeyiz. Bu nedenle, bir değişim çalışması yapmak için uygulayabileceğimiz birkaç koşul vardır.

Böylece mesajınızı sadece bir tüketiciye gönderebilirsiniz; herkese gönderilmek yerine.

Bağlama Anahtarı : Bir kuyruğu bir değiş tokuşa bağlamak için, bir bağlayıcı gibi bir kuyruk ile bir değişim arasında bir ilişki olan bir bağ oluşturmanız gerekir.

Yönlendirme Anahtarı : Bu bağlantıda, yönlendirme anahtarı adı verilen, başka bir deyişle mesajlarımızı belirli bir kuyruğa iletmek için bir anahtar olan bir öğe de oluşturabiliriz.

Bir X yönlendirme anahtarınız, bir Y yönlendirme anahtarınız ve bir Z yönlendirme anahtarınız varsa, örneğin Y yönlendirme anahtarına sahip mesaj, Y kuyruğundan geçecek ve doğrudan mesajı almak için tanımladığınız tüketiciye teslim edilecektir.

Bu şekilde, bir santrale bağlı birkaç kuyruğumuz olabilir, ancak aynı zamanda, yönlendirme anahtarlarını kullanarak santrallerle farklı ilişkilere sahip olabilirler.

Fanout Değişimi

Mesaj santrale gönderildiğinde kendisine bağlı tüm kuyruklara gönderilir. Dolayısıyla, bir fanout alışverişine bağlı 10 kuyruğunuz varsa, tüm kuyruklar gönderilen mesajı alır.

Konu Değişimi

Konuya göre mesaj göndermemizi sağlayan en esnek borsalardan biridir. Yönlendirme anahtarlarını adlandırma şeklinize bağlı olarak, sistemler arasında kural ve ilişki kalıpları oluşturmak mümkündür.

Örneğin: routing key (x.*); routing key(*.z); routing key (*.y.*). routing key (x.*); routing key(*.z); routing key (*.y.*).

RabbitMQ'da AQMP nedir?

AMQP (Advanced Message Queuing Protocol), mesajların birden fazla uygulama arasında taşınmasını tanımlamak için kullanılan açık bir mesajlaşma protokolüdür. Asenkron taşımaya izin vermesi dışında, kablo seviyesinde bir protokol olması bakımından HTTP ve TCP protokollerine benzer.

RabbitMQ, birkaç nedenden dolayı AMQP'yi uygulamayı seçti. Birincisi, bu protokolün, bir API tanımlayan JMS'den farklı olarak, ara yazılım için bir standart olarak tanımlanmasıdır.

Red Hat, Cisco Systems ve Microsoft gibi büyük şirketlerin dahil olduğu uluslararası bir konsorsiyum bu AMQP Spesifikasyonunu yazdı. İkincisi, AMQP uygulayan herhangi bir uygulamanın bir AMQP aracısı ile iletişim kurmasına izin veren bu protokolün birlikte çalışabilirliğidir.

AMQP, RabbitMQ tarafından kullanılan tek protokol değildir. Aşağıdaki resim, RabbitMQ tarafından uygulanan ve/veya desteklenen tüm protokolleri, dilleri ve API'leri temsil etmektedir.

RabbitMQ'nun En İyi Özellikleri

Farklı uygulamaların asenkron olarak ve farklı konumlardan gelen mesajlar aracılığıyla entegrasyonuna izin vermenin yanı sıra, RabbitMQ bize onu mesajlaşma aracıları dünyasında çok popüler yapan başka özellikler de sunuyor:

Güvenilir Depolama

RabbitMQ, mesaj teslimini garanti etmesine izin veren çeşitli özellikler içerir. Bunların arasında, hiçbir tüketici mesajı alamadığında depolama sağlar. Başarılı bir şekilde işlendiğinden emin olmak için tüketicilerin mesajın teslimini kabul etmelerini sağlar.

İşlem başarısız olursa, RabbitMQ mesajın tüketicinin farklı bir örneği tarafından tüketilmesi veya kurtarıldığında başlangıçta başarısız olan aynı tüketici tarafından yeniden işlenmesi için mesajın yeniden kuyruğa alınmasına izin verir.

RabbitMQ ayrıca mesajların teslim sırasını da garanti eder; yani, RabbitMQ sıralarına geldikleri sırayla tüketilirler.

Küme oluşturma

RabbitMQ saniyede binlerce mesajı işleyerek mükemmel performans sağlasa da, bazen uygulama performansını etkilemeden daha fazla sayıda mesajı işleyebilmesi gerekir.

Bunun için RabbitMQ, hem üreticiler hem de tüketiciler için şeffaf olan çözümü yatay olarak ölçeklendirmek için kümelerin oluşturulmasına izin verir.

Yüksek Kullanılabilir Kuyruklar

RabbitMQ'da, kuyruklar bir kümedeki birden çok düğümde çoğaltılabilir, bu da bir düğüm hatası veya kesinti durumunda, aracının üreticilerden mesaj almaya devam etmesini ve bunları uygun tüketicilere iletmesini sağlar.

Esnek yönlendirme

RabbitMQ'da, belirli bir modeli takip etse bile, mesajları bağlamalar aracılığıyla değiş tokuşlar ve kuyruklar arasında yönlendirmek için esnek yönlendirme kuralları tanımlanabilir.

Çoklu protokol desteği

AMQP protokolünü desteklemenin yanı sıra RabbitMQ, eklentiler aracılığıyla STOMP, MQTT ve HTTP'yi destekler. Ayrıca, her aracının bileşenleri için kimlik doğrulama ve erişim kontrol mekanizmalarını içerir.

RabbitMQ'nun Gerçek Hayattaki Kullanım Örnekleri

RabbitMQ'nun en önemli kullanım durumları, uygulamalar arasında eşzamansızlığın garantisini mümkün kılmak, uygulamalar arasındaki bağlantıyı azaltmak, uyarıları dağıtmak ve arka planda iş kuyruğunu kontrol etmektir.

Bununla birlikte, RabbitMQ'nun pratik kullanım durumları, satış siparişlerinizi dağıtım ve fatura düzenleme gibi diğer sektörlerdeki sistemlere yönlendirmek, işlemek ve iletmek için kullanıldığı e-Ticaret'tedir.

Siparişleri işlerken satış mesajınızı dağıtım merkezine ve bir fatura alanına iletebilirsiniz. Bu şemada, mesaj göndermek için eşzamansız modeli izleyerek her şey yatay olarak çalışır, ancak genellikle birkaç kuyruğa eylem göndermek mümkündür.

Bir önceki örnekte olduğu gibi, bu işlev, müşteri bir satın alma işlemi gerçekleştirdiğinde ve ürünün dağıtım, nakliye ve faturalar için hazırlanması gerektiğinde çok yararlı olabilir.

Ve bu sektörlerin her biri farklı bir sistem olduğundan, RabbitMQ'nun amacı tüm bu mesajları ilgili sistemlere iletmektir.

Tavşan MQ alternatifleri:

RabbitMQ göründüğünden çok daha basittir ve aşağıdakileri içeren birkaç alternatif vardır:

1 numara. demirMQ

IronMQ, süper hızlı mesaj kuyruğu yazılımıdır. Yüksek oranda bulunur, tasarım açısından dayanıklıdır ve tercihen tek seferlik teslimat içindir. IronMQ, modern uygulama mimarisi için en güçlü bulut yerel çözümüdür.

demirmq-1

Yoklama isteklerinin daha uzun süre açık kalmasını sağlayan push kuyruklarını, çekme kuyruklarını ve uzun yoklamaları destekler. Ayrıca, ölçeklenebilirliği kolaylaştıran birden çok yüksek kullanılabilirliğe sahip veri merkezi kullanabilir.

Bulutta, paylaşılan veya ayrılmış donanımda veya şirket içinde dağıtabilirsiniz. Ayrıca, okunması kolay belgelere sahip bir dizi istemci kitaplığına da sahiptir.

2 numara. Apaçi Kafkası

Kafka, dağıtılmış olay akışında güçlü bir varlığa sahip bir platformdur. Özünde Kafka, çoğaltılmış, dağıtılmış, kalıcı bir işlem günlüğü olarak tasarlanmıştır.

kafka-1

En büyük kullanılabilirliği, hata toleransı ve yüksek kullanılabilirlik için küme içinde eşzamansız olarak olayları otomatik olarak çoğaltan, olay güdümlü güç mikro hizmetleri veya büyük ölçekli akış işleme uygulamalarıdır.

3 numara. Apache ActiveMQ

Apache ActiveMQ

ActiveMQ, Java tabanlı çok protokollü bir Mesaj Aracısıdır. Bununla, uygulama katmanında AMQP mesaj sıralama protokolünü kullanarak uygulamaları entegre edebiliriz.

Diğerlerinin yanı sıra JMS (yerel Java) ve Stomp (PHP uygulamaları tarafından kullanılabilen) gibi entegrasyon için çeşitli protokoller uygular.

Ayrıca Amazon'un, hizmeti kullanmayı çok daha kolaylaştıran Amazon MQ adlı "yönetilen" sürümü vardır.

Son sözler

Mesajlaşma komisyoncuları, geleneksel olarak kuruluşların mimarilerinde önemli bir parça olmuştur. Yine de, şirket sistemlerine farklı kanallardan giren kullanıcıların artmasıyla birlikte, düşük maliyetle yatay olarak ölçeklenebilmelerini sağlayan ürünlere ihtiyaç duyulmaktadır. Saniyede çok sayıda mesajın işlenmesine izin verilmesi.

Bu, RabbitMQ gibi yeni nesil aracıların, müşterilerimize yüksek düzeyde kullanılabilirlik, güvenilirlik, birlikte çalışabilirlik ve performans sunmayı amaçlayan modern uygulamalarda daha alakalı hale geldiği yerdir.

Uygulamanız için bazı güvenilir RabbitMQ barındırma platformlarını da keşfedebilirsiniz.