TavşanMQ. Bölüm 2. Değişimleri Anlamak

Exchange - eşanjör veya değişim noktası. Ona mesajlar gönderilir. Exchange mesajı dağıtır bir veya daha fazla kuyrukta. O iletileri bir kuyruğa yönlendirir oluşturulan bağlantılara göre (bindings) onunla sıra arasında.

Exchange değil Erlang süreci. Ölçeklenebilirlik nedeniyle exchange - bu, yerleşik veritabanındaki bir satırdır (yönlendirme mantığının bulunduğu kodlu bir modüle bağlantı). hafıza kaybı. 1 bin eşanjör yalnızca 1 MB bellek tüketecek.

içindekiler

  • TavşanMQ. Bölüm 1. Giriş. Erlang, AMQP ve RPC
  • TavşanMQ. Bölüm 2. Değişimleri Anlamak
  • TavşanMQ. Bölüm 3. Kuyrukları ve Bağlantıları Anlamak
  • TavşanMQ. Bölüm 4. Mesajların ve çerçevelerin ne olduğunu anlamak
  • TavşanMQ. Bölüm 5: Mesaj Yayınlama ve Tüketim Performansı
  • TavşanMQ. Bölüm 6. Federasyon ve Kürek modüllerinin gözden geçirilmesi
  • TavşanMQ. Bölüm 7. Bağlantı ve Chanel Hakkında Detaylar
  • TavşanMQ. Bölüm 8. .NET'te RabbitMQ
  • TavşanMQ. Bölüm 9. İzleme

Doğrudan Değişim

Direct exchange - ihtiyaç duyulduğunda kullanılır mesajı belirli kuyruklara ilet. Mesaj, değiştiriciye belirli bir şekilde yayınlanır. yönlendirme anahtarı ve benzer bir yönlendirme anahtarıyla bu eşanjöre bağlı tüm kuyruklara girer. Yönlendirme anahtarı bir dizedir. Eşleştirme kullanılarak bulunur dizelerin denklik açısından kontrol edilmesi.

Mesaj akışının grafiksel gösterimi:

TavşanMQ. Bölüm 2. Değişimleri Anlamak

В rabbitmq bir konsept var varsayılan değiştirici. O direct exchange isimsiz. Varsayılan değiştirici kullanılırsa mesaj, şuna eşit ada sahip bir kuyruğa yönlendirilecektir: mesaj yönlendirme anahtarı.

Konu Değişimi

Topic exchange - benzer direct exchange Yönlendirme anahtarını karşılaştırarak seçici yönlendirmeyi etkinleştirir. Ancak bu durumda anahtar verilir. desene göre. Bir şablon oluştururken şunu kullanın: 0 veya daha fazla kelime (harfler) AZ и az ve sayılar 0-9), bir noktayla ayrılmış ve semboller * и #.

  • * - tam olarak değiştirilebilir 1 kelime
  • # - ile değiştirilebilir 0 veya daha fazla kelime

Mesaj akışının grafiksel gösterimi:

TavşanMQ. Bölüm 2. Değişimleri Anlamak

Sürümden beri RabbitMQ 2.4.0 için yönlendirme algoritması topic exchange kadar çalışmaya başladı 145 kat daha hızlı. Bunu bir yaklaşım getirerek başardılar. deneme uygulamasıdesenlerin bir ağaç yapısı olarak temsil edilmesini içerir. Örneğin şablonlar a.b.c, a.*.b.c, a.#.c и b.b.c aşağıdaki yapı ile temsil edilecektir:

TavşanMQ. Bölüm 2. Değişimleri Anlamak

Bir deseni eşleştirme arayışı kökten başlayıp yukarıdan aşağıya doğru gerçekleştirilir.

Özellikler:

  • bu değiştiricinin kullanımı uygulamanın gelecekteki olası gelişimi için iyi bir seçim, Çünkü şablonlar her zaman mesajın aynı şekilde yayınlanmasını sağlayacak şekilde özelleştirilebilir direct exchange veya fanout exchange
  • kullanılan şablonlar * Çok daha hızlıkullanılan şablonlardan daha #.
  • topic exchange yavaş direct exchange

Fanout Değişimi

Fanout exchange - tüm iletiler tüm sıralara teslim edilir mesajda bir yönlendirme anahtarı belirtilmiş olsa bile.

Özellikler:

  • RabbitMQ yönlendirme anahtarları ve şablonlarıyla çalışmaz bu da üretkenlik üzerinde olumlu bir etkiye sahiptir. Bu en hızlısı exchange;
  • tüm tüketiciler tüm mesajları işleyebilmelidir;

Mesaj akışının grafiksel gösterimi:

TavşanMQ. Bölüm 2. Değişimleri Anlamak

Başlık Değişimi

Headers exchange - (anahtar, değer) özellik çiftlerinin karşılaştırılmasına dayalı olarak mesajları ilgili kuyruklara yönlendirir headers bağlamalar ve benzer mesaj özellikleri. headers kendilerini temsil et Dictionary<ключ, значение>.

Sözlüğe özel bir anahtar eklerseniz x-match anlamı olan any, (anahtar, değer) çiftlerinin kısmi eşleşmesi varsa mesaj yönlendirilir. Bu davranış operatöre benzer or.

var bindingArguments = new Dictinary<String, Object>();
bindingArguments.add("x-match", "any");

Varsayılan anahtar x-match değeri içerir all. Bu, (anahtar, değer) çiftlerinin tam olarak eşleşmesi durumunda mesajın yönlendirileceği anlamına gelir. Bu davranış operatöre benzer and.

Mesaj akışının grafiksel gösterimi:

TavşanMQ. Bölüm 2. Değişimleri Anlamak

Özellikler:

  • ek esneklik
  • ek hesaplama yükü. Bir özelliğin tüm (anahtar, değer) çiftleri headers mesaj yönlendirme değerleri hesaplanmadan önce anahtar adına göre sıralanmalıdır. Diğer değişim türlerine göre daha yavaş.

Tutarlı Karma Değişimi

Bu değiştirici Eklenti и yerleşik değil в RabbitMQ.

Consistent-hashing exchange (tutarlı karma ile değişim) - bir mesajın potansiyel alıcıları olan birkaç kuyruk olduğunda ve aralarındaki yükü dengelemeniz gerektiğinde kullanılır. Bir mesajın kuyrukla bağlantısı ağırlığa göre gerçekleşir (koşullu dize değeri 0 - n).

Kuyrukların eşdeğer ağırlığı - her kuyruğun alacağını belirtir yaklaşık olarak aynı miktarda mesajlar (her mesaj yalnızca bir sıraya yerleştirilecektir). Mesajların tekdüze dağıtımı konusunda tam bir garanti yoktur.

Mesaj akışının grafiksel gösterimi:

TavşanMQ. Bölüm 2. Değişimleri Anlamak

Hash yönlendirme anahtarına veya özelliğine göre hesaplanır headers mesajlar. Yayınlanan tüm mesajların farklı yönlendirme anahtarları varsa veya headers, bu durumda dağıtım ağırlığa göre gerçekleşecektir. Aksi takdirde yönlendirme anahtarı kullanılacak veya headers.

Tek bir kuyruğu kullanan birden fazla tüketicinin olduğu bir çözüme göre tüketici veriminin daha fazla artması gerektiğinde yardımcı olacaktır.

Eşanjörlerin birleştirilmesi (E2E)

Tüm eşanjörlerin davranışları iletişim kullanılarak birleştirilebilir Borsadan Borsaya (eşanjörlerin birleştirilmesi spesifikasyona dahil değildir AMQP. Bu, protokolün yandan bir uzantısıdır RabbitMQ).

Mesaj akışının grafiksel gösterimi:

TavşanMQ. Bölüm 2. Değişimleri Anlamak

içinden E2E hem mevcut hem de büyüyen gereksinimleri karşılamak için doğru ölçeklenebilir konfigürasyonu bulabiliriz.

Değişim Oluştur

Bir eşanjörün oluşturulması senkronize kullanılarak gerçekleşir RPC sunucuya istekte bulunun. Talep yöntemi kullanılarak yapılır Exchange.Declareparametrelerle çağrılır:

  • eşanjör adı
  • eşanjör tipi
  • diğer parametreler

Yaratılış örneği exchange vasıtasıyla RabbitMQ.Client:

//...
channel.ExchangeDeclare(
    exchange: "my_exchange",
    type: "direct",
    durable: "false",
    autoDelete: "false",
    arguments: null
);
//...

  • exchange — oluşturmak istediğimiz değiştiricinin adı. Ad benzersiz olmalı
  • type — eşanjör tipi
  • durable - yüklüyse trueSonra exchange kalıcı olacaktır. Diskte depolanacak ve sunucu/aracı yeniden başlatıldığında hayatta kalabilir. Eğer değer falseSonra exchange geçicidir ve sunucu/aracı yeniden başlatıldığında silinecektir
  • autoDelete - otomatik kaldırma. Exchange kendisiyle ilişkili tüm kuyruklar silindiğinde silinecek
  • arguments - isteğe bağlı argümanlar. Çoğu zaman argümanlar aracılığıyla belirtirler alternative exchange (alternatif eşanjör). Bir mesaj orijinal rota boyunca ilerleyemiyorsa, farklı bir yol üzerinden yönlendirilmek üzere alternatif bir göndericiye gönderilebilir.

TavşanMQ. Bölüm 2. Değişimleri Anlamak

Eğer yaratılış exchange belki, ardından sunucu istemciye senkronize bir mesaj gönderecektir. RPC cevap Exchange.DeclareOk. Eğer yaratılış imkânsız (istek reddedildi Exchange.Declare), o zaman kanal kapanacak eşzamansız bir komut kullanan sunucu Channel.Close ve müşteri bir istisna alacak OperasyonKesintiye Uğrayan İstisnahata kodunu ve açıklamasını içerecektir.

Mesaj göndermeden önce bir değiştirici oluşturulmalıdır. Var olmayan bir değiştiriciye mesaj yayınlarsanız - RabbitMQ sessizce kaldıracak.

GUI aracılığıyla Exchange oluşturma

Yönetici paneline gidin RabbitMQ kullanıcı altında guest (Kullanıcı adı: guest ve şifre: guest). Lütfen kullanıcının guest yalnızca localhost'tan bağlanabilir. Şimdi sekmeye geçelim Exchanges ve üzerine tıklayın Add a new exchange. Özellikleri doldurun:

TavşanMQ. Bölüm 2. Değişimleri Anlamak

Özelliklerin çoğu yukarıda açıklanmıştır. Burada şunu belirtiyoruz; eğer ayarlarsak Internal, bu durumda takas yalnızca şunlar için kullanılabilir: E2E. Producer böyle bir santrala mesaj gönderemeyecektir.

Sonuç

Bir sistem geliştirirken topolojiyi tanımlamak uygundur yönlendirme bir grafik kullanarak. Ancak bir grafik oluşturmaya başlamadan önce, yüksek trafiğe sahip yolları vurgulamakta fayda var çünkü talep edenler onlar daha yüksek verim (verim). Daha sonra trafiği sınıflandırabilirsiniz. Ve ancak o zaman inşa etmeye başlayın.

Oluşturulan grafikte varsa Sınırlı set yönlendirme anahtarları, o zaman birkaç tanesine bakmaya değer fanout exchangeyönlendirme anahtarıyla 1:1 ilişkilidir. Bunu hatırlıyoruz fanout exchange en hızlı.

Güzergah sayısı ise sonsuza eğilimlio zaman şuna dikkat etmelisin topic exchange veya şablona gerek yoksa, direct exchnge, Çünkü o daha hızlı topic exchange.

Farklı kombinasyonlar exchange doğru olanı bulmanıza yardımcı olmalı ölçeklenebilir yapılandırmaHem mevcut hem de büyüyen sistem gereksinimlerini karşılayan.

Numara exchange ve rota sayısına kıyasla kuyruklar minimum düzeyde olmalıdır.

Bir sonraki makalede Kuyrukları ve Bağlantıları daha ayrıntılı olarak anlamaya başlayacağız.

referanslar

Kaynak: habr.com

Yorum ekle