RabbitMQ. Hissə 2. Mübadilələri Anlamaq

Exchange - dəyişdirici və ya mübadilə nöqtəsi. Ona mesajlar göndərilir. Exchange mesajı yayır bir və ya bir neçə növbədə. O mesajları növbəyə yönləndirir yaradılmış keçidlər əsasında (bindings) onunla növbə arasında.

Exchange deyil Erlang prosesi. Ölçeklenebilirlik səbəbləri üçün exchange daxil edilmiş verilənlər bazasında sətirdir (marşrutlaşdırma məntiqinin olduğu kodla modula keçid) mneziya. 1 min dəyişdirici yalnız 1 MB yaddaş istehlak edəcək.

Mündəricat

  • RabbitMQ. Hissə 1. Giriş. Erlang, AMQP və RPC
  • RabbitMQ. Hissə 2. Mübadilələri Anlamaq
  • RabbitMQ. Hissə 3. Növbələri və Bağlamaları Anlamaq
  • RabbitMQ. Hissə 4. Mesajların və çərçivələrin nə olduğu ilə məşğul olmaq
  • RabbitMQ. 5-ci Hissə: Mesaj Performansını Nəşr etmək və İstehlak etmək
  • RabbitMQ. Hissə 6. Federasiya və Kürək Modullarına Baxış
  • RabbitMQ. Part 7. Əlaqə və Chanel haqqında təfərrüatlar
  • RabbitMQ. Hissə 8. .NET-də RabbitMQ
  • RabbitMQ. Hissə 9. Monitorinq

Birbaşa mübadilə

Direct exchange - lazım olduqda istifadə olunur xüsusi növbələrə mesaj çatdırın. Mesaj xüsusi ilə dəyişdiriciyə dərc olunur marşrut açarı və oxşar marşrut açarı ilə bu dəyişdirici ilə əlaqəli bütün növbələrə daxil olur. Marşrut açarı sətirdir. Uyğunlaşma istifadə edərək həyata keçirilir bərabərlik üçün sətirlərin yoxlanılması.

Mesaj axınının qrafik təsviri:

RabbitMQ. Hissə 2. Mübadilələri Anlamaq

В rabbitmq anlayışı var standart dəyişdirici. O direct exchange Ad yoxdur. Defolt dəyişdirici istifadə edilərsə, mesaj ona bərabər olan bir növbəyə yönləndiriləcəkdir mesaj yönləndirmə açarı.

Mövzu mübadiləsi

Topic exchange - oxşar direct exchange marşrut açarını müqayisə edərək seçmə marşrutlaşdırmaya imkan verir. Ancaq bu vəziyyətdə açar verilir şablon üzrə. Şablon yaratarkən istifadə edin 0 və ya daha çox söz (hərflər AZ и az və nömrələr 0-9), nöqtə ilə, habelə simvollarla ayrılır * и #.

  • * - dəqiq ilə əvəz edilə bilər 1 söz
  • # - ilə əvəz edilə bilər 0 və ya daha çox söz

Mesaj axınının qrafik təsviri:

RabbitMQ. Hissə 2. Mübadilələri Anlamaq

Versiyadan başlayaraq RabbitMQ 2.4.0 üçün marşrutlaşdırma alqoritmi topic exchange qədər işə başladı 145 dəfə daha sürətli. Onlar yanaşmanı həyata keçirməklə buna nail olublar həyata keçirməyə çalışın, bu da şablonların ağac quruluşu kimi təqdim edilməsini nəzərdə tutur. Məsələn şablonlar a.b.c, a.*.b.c, a.#.c и b.b.c aşağıdakı strukturla təmsil olunacaq:

RabbitMQ. Hissə 2. Mübadilələri Anlamaq

Nümunə uyğunluğu kökdən başlayaraq yuxarıdan aşağıya doğru axtarılır.

Xüsusiyyətlər:

  • bu dəyişdiricinin istifadəsi halına gələ bilər mümkün gələcək proqram inkişafı üçün yaxşı seçimdir, çünki şablonlar həmişə fərdiləşdirilə bilər ki, mesaj eyni şəkildə dərc olunsun direct exchange və ya fanout exchange
  • istifadə edən şablonlar * daha sürətliistifadə edən şablonlardan daha çox #.
  • topic exchange yavaş direct exchange

Fanout mübadiləsi

Fanout exchange - bütün mesajlar bütün növbələrə çatdırılır mesajda marşrut açarı göstərilsə belə.

Xüsusiyyətlər:

  • RabbitMQ marşrut açarları və şablonları ilə işləmir performansa müsbət təsir göstərir. Bu ən sürətlidir exchange;
  • bütün istehlakçılar bütün mesajları emal edə bilməlidirlər;

Mesaj axınının qrafik təsviri:

RabbitMQ. Hissə 2. Mübadilələri Anlamaq

Başlıqlar mübadiləsi

Headers exchange - cüt (əsas, dəyər) xassələrinin müqayisəsi əsasında mesajları əlaqəli növbələrə yönləndirir headers bağlama və oxşar mesaj xüsusiyyəti. headers birdir Dictionary<ключ, значение>.

Lüğətə xüsusi açar əlavə etsəniz x-match mənası ilə any, sonra cütlər (açar, dəyər) qismən uyğun gələrsə, mesaj yönləndirilir. Bu davranış operatora bənzəyir or.

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

Defolt açar x-match dəyəri ehtiva edir all. Bu o deməkdir ki, mesaj cütlər (açar, dəyər) tam uyğunlaşdıqda yönləndirilir. Bu davranış operatora bənzəyir and.

Mesaj axınının qrafik təsviri:

RabbitMQ. Hissə 2. Mübadilələri Anlamaq

Xüsusiyyətlər:

  • əlavə çeviklik
  • əlavə hesablama xərcləri. Atributun bütün cütləri (açar, dəyər). headers mesaj yönləndirmə dəyərlərinin hesablanmasından əvvəl açar adına görə çeşidlənməlidir. Digər mübadilə növlərinə nisbətən daha yavaş.

Ardıcıl Hashing Mübadiləsi

Bu dəyişdiricidir plagin и tikilməyib в RabbitMQ.

Consistent-hashing exchange (ardıcıl hashing ilə mübadilə) - mesajın potensial alıcıları olan çoxsaylı növbələr olduqda və onlar arasında yükü balanslaşdırmaq lazım olduqda istifadə olunur. Mesaj çəkiyə görə növbə ilə əlaqələndirilir (şərti sətir dəyəri 0 - n).

Növbələrin ekvivalent çəkisi - hər növbənin qəbul ediləcəyini bildirir təxminən eyni miqdarda mesajlar (hər mesaj yalnız bir növbəyə qoyulacaq). Mesajların vahid paylanmasına tam zəmanət yoxdur.

Mesaj axınının qrafik təsviri:

RabbitMQ. Hissə 2. Mübadilələri Anlamaq

Hash marşrut açarı və ya mülkiyyət əsasında hesablanır headers mesajlar. Bütün dərc edilmiş mesajların fərqli marşrut açarları olsaydı və ya headers, onda paylama çəki ilə baş verəcəkdir. Əks halda, marşrut açarı istifadə olunacaq və ya headers.

İstehlakçı məhsuldarlığının eyni növbədən istifadə edən birdən çox istehlakçı ilə həlldən daha yüksək böyüməsi lazım olduqda kömək etməlidir.

dəyişdiricilərin birləşməsi (E2E)

Bütün dəyişdiricilərin davranışı rabitədən istifadə etməklə birləşdirilə bilər Birjadan birjaya (deyişdiricilərin birləşməsi spesifikasiyaya daxil deyil AMQP. Bu yan tərəfdən protokol uzantısıdır RabbitMQ).

Mesaj axınının qrafik təsviri:

RabbitMQ. Hissə 2. Mübadilələri Anlamaq

Hesabına E2E həm cari, həm də artan tələblərə cavab verən düzgün miqyaslana bilən konfiqurasiya tapa bilərik.

Mübadilə yaradın

Mübadilə cihazı sinxron istifadə edərək yaradılmışdır RPC serverə sorğu göndərin. Sorğu metoddan istifadə etməklə edilir Exchange.Declare, parametrlərlə çağırılır:

  • dəyişdirici adı
  • dəyişdirici növü
  • digər variantlar

Yaradılış nümunəsi exchange vasitəsilə RabbitMQ.Client:

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

  • exchange - yaratmaq istədiyimiz dəyişdiricinin adı. Ad unikal olmalıdır
  • type - dəyişdirici növü
  • durable - quraşdırılıbsa true, Sonra exchange daimi olacaq. O, diskdə saxlanacaq və serverin/brokerin yenidən başlamasından sağ çıxa biləcək. Əgər dəyər false, Sonra exchange müvəqqətidir və server/broker yenidən işə salındıqda silinəcək
  • autoDelete - avtomatik silinmə. Exchange bütün əlaqəli növbələr silindikdə silinəcək
  • arguments isteğe bağlı arqumentlərdir. Ən tez-tez, müəyyən arqumentlər vasitəsilə alternative exchange (alternativ dəyişdirici). Mesaj orijinal marşrutdan keçə bilmirsə, o, başqa bir yol boyunca yönləndirilmək üçün alternativ mübadilə göndərilə bilər.

RabbitMQ. Hissə 2. Mübadilələri Anlamaq

Əgər yaradılış exchange bəlkə, sonra server müştəriyə sinxron göndərəcək RPC cavab Exchange.DeclareOk. Əgər yaradılış mümkün deyil (tələbdən imtina edildi Exchange.Declare) sonra kanal bağlanacaq asinxron əmrdən istifadə edərək server Channel.Close və müştəri istisna alacaq OperationInterruptedException, səhv kodunu və onun təsvirini ehtiva edəcək.

Göndərmədən əvvəl dəyişdirici yaradılmalıdır. Bəzi mövcud olmayan dəyişdiriciyə mesaj dərc etsəniz - RabbitMQ səssizcə çıxarın.

Exchange GUI yaradın

İdarəetmə panelinə keçin RabbitMQ istifadəçi altında guest (istifadəçi adı: guest və parol: guest). Qeyd edək ki, istifadəçi guest yalnız localhost-dan qoşula bilər. İndi nişana keçək Exchanges və üzərinə klikləyin Add a new exchange. Xüsusiyyətləri doldurun:

RabbitMQ. Hissə 2. Mübadilələri Anlamaq

Mülkiyyətlərin əksəriyyəti yuxarıda təsvir edilmişdir. Burada qeyd edirik ki, biz təyin edirik Internal, onda mübadilə yalnız üçün istifadə edilə bilər E2E. Producer belə bir mübadiləsinə mesaj göndərə bilməyəcək.

Nəticə

Sistemi işləyib hazırlayarkən topologiyanı təsvir etmək rahatdır marşrutlaşdırma qrafikdən istifadə etməklə. Ancaq bir qrafik qurmağa başlamazdan əvvəl, yüksək trafik olan yolları vurğulamağa dəyər, çünki. tələb edirlər daha yüksək ötürmə qabiliyyəti (tamaşa). Sonra, trafiki təsnif edə bilərsiniz. Və sonra tikintiyə başlayın.

Əgər qurulmuş qrafikdə varsa sonlu çoxluq marşrut açarları, onda bir neçə istiqamətə baxmağa dəyər fanout exchange, marşrut açarı ilə əlaqəli olan 1:1. Bunu yadda saxla fanout exchange ən tez.

Əgər marşrutların sayı sonsuzluğa meyl edir, diqqət yetirməyə dəyər topic exchange və ya şablon lazım deyilsə, onda siz seçə bilərsiniz direct exchnge, çünki o daha sürətlidir topic exchange.

Müxtəlif birləşmələr exchange doğru olanı tapmağınıza kömək etməlidir. miqyaslana bilən konfiqurasiya, həm cari, həm də artan sistem tələblərinə cavab verir.

Nömrə exchange və növbələr marşrutların sayı ilə müqayisədə minimal olmalıdır.

Növbəti məqalədə biz Queues və Bindings haqqında daha çox başa düşməyə başlayacağıq.

References

Mənbə: www.habr.com

Добавить комментарий