Kaynak: Performans ve Mimari
Dağıtılmış bir sistemde, çeşitli uygulamalar arasında verimli bir şekilde nasıl iletişim kurulacağı, sistem tasarımının anahtarıdır.
Kullanım Mesaj komisyoncusu Zarif bir çözümdür.
RabbitMQ Yaygın olarak kullanılan bir mesaj komisyoncusu, aşağıdaki AMQP protokolü .
Sonra anlayacağız:
komisyoncu Bir emlak komisyoncusu gibi, satıcı ile alıcı arasındaki işlemi kolaylaştıran bir komisyoncunun anlamıdır.
Mesaj modelinde, mesajların üreticileri ve tüketicileri, satıcılar ve alıcılar ile eşdeğerdir.
Bu nedenle, bir mesaj simsarına da ihtiyaç vardır, bu da mesaj komisyoncusu kavramı.
Mesaj simsarı üreticilerden gelen mesajları alıp tüketicilere iletir, böylelikle üreticiler ve tüketiciler tamamen izole edilebilir.
RabbitMQ Sadece bir mesaj komisyoncusu .
Mesaj nasıl iletilir? Kullanılan mesaj protokolüne bağlıdır.
RabbitMQ, en önemlileri olan çoklu protokolleri destekler. AMQP (Gelişmiş Message Queuing Protokolü).
AMQP'nin kavramsal modeli çok basittir ve 3 bölümden oluşur:
Bir mesaj RabbitMQ'ya yayınlandığında, önce Exchange'e ulaşır, ardından Exchange mesajı Queue'ye dağıtır ve tüketiciler mesajı Queue'dan alır.
AMQP programlanabilir bir protokoldür; değişimi, bağlanmayı ve kuyruğu serbestçe yapılandırabiliriz.
Sıra, ilk giren ilk çıkar veri yapısıdır.
Sıra, RabbitMQ'nun mesajları sakladığı yerdir.
Sıra esnek bir şekilde yapılandırılabilir, örneğin:
Bir kuyruk, aynı anda birden fazla tüketiciye bağlanabilir.
Tüketici, mesajı kuyruğun kendisinden çekebilir veya kuyruk, mesajı aktif olarak tüketiciye itebilir.
Bağlama, Kuyruk ve Değişim arasındaki bağlantıdır kural .
Her Sıra varsayılan bir Exchange'e bağlıdır ve bu Sıraya daha fazla Borsayı bağlayabiliriz.
Exchange, iletileri Bağlama kuralları aracılığıyla karşılık gelen Sıraya yönlendirir.
Exchange, RabbitMQ'nun mesajlaşma ağ geçididir.
Değişim, mesajı aldıktan sonra nasıl ileteceğine karar veren bir operatör gibidir.
Esas olarak 4 tür yönlendirme vardır:
Hadi daha yakından bakalım.
Üretici (yeşil top) ile bir mesaj gönderdi yönlendirme anahtarı - img.resize.
Mesaj değiş tokuşa ulaştığında (turuncu top), değişim tüm resim boyutlarını arayacaktır. Bağlama anahtarı Kuyruk.
Eşleşen kuyruğu bulduktan sonra mesaj bu kuyruklara gönderilecektir.
Bulunmazsa, mesaj yapımcıya iade edilecek veya atılacaktır.
Mesaj belirtilen kuyruğa geldikten sonra, yoklama Yük dengesini sağlamak için tüketicilere (resizer.1 / resizer.2) dağıtılır.
Bu yöntem, yönlendirme anahtarını yok sayar ve mesajı tüm bağlı kuyruklara gönderir.
En yaygın senaryo Haber yayını .
Bu yöntemin, borcun tüketiciye yayın yapması değil, borsanın kuyruğa yayın yapmasıdır. Tüketiciye kuyruk, hala bir sorgulama yöntemidir.
Yönlendirme anahtarı, ciltleme anahtarı ile model uyumludur.
Yönlendirme anahtarı == Bağlama anahtarındaki desenRabbitMQ, * ve # olmak üzere iki joker karakter kullanır.
* -Bir kelime eşleştirin.
#-0 veya daha fazla kelimeyi eşleştirin.
yönlendirme anahtarı Logs.error mesajıdır, eşleşme bağlayıcı anahtar - logs.error ve logs. *, bu nedenle mesaj "yalnızca hata" ve "tüm günlükler" e gider.
yönlendirme anahtarı Logs.success mesajı, eşleşiyor mu bağlayıcı anahtar - # başarı ve günlükler. *, böylece mesaj "yalnızca başarı" ve "tüm günlükler" olarak girecektir.
Bu form için yayınlama-abone olma modunda kullanılabilen, ilgili verileri istenen çalışanlara dağıtabilen ve benzeri birçok uygulama senaryosu vardır.
İleti başlığındaki anahtara dayalı yönlendirme, özel bir değişim türü.
Bu yöntemi kullandıktan sonra mesaj göz ardı edilecektir. yönlendirme anahtarı Öznitellikler.
Bir başlık değişimi için bir bağlama oluştururken, birden fazla başlığı bir kuyruğa bağlayabilirsiniz. Bu durumda, mesaj üreticisinin RabbitMQ'ya hangi anahtarların eşleşeceğini söylemesi gerekir. Üretici bir x-match tanımlayıcı belirleyebilir ve değer şu şekilde olabilir:
İleti hedefe ulaştıktan sonra, aracı onu kuyruktan silmelidir Bu, çok fazla iletinin taşmaya neden olmasını önlemek içindir.
Mesajı silmeden önce, komisyoncu teyit konusunda bilgilendirilmelidir.
2 bildirim yöntemi vardır: