RabbitMQ. Hissə 2. Exchanges ilə tanış oluruq

Exchange — mübadilə mərkəzi və ya dəyişdirmə nöqtəsi. Buraya mesajlar göndərilir. Exchange mesajı bir və ya bir neçə sıra göndərir. O mesajları sıralara yönləndirir yaradılan əlaqələr əsasında (bindings) onunla sıra arasında.

Exchange deyildir Erlang prosesi. Miqyaslandırma baxımından exchange bir sətirdir (kod modulu ilə bağlı link, burada yönləndirmə mantığı yerləşir) daxili verilənlər bazasında mnesia. 1 min mübadilə mərkəzi yalnız 1MB yaddaş istifadə edəcək.

Mündəricat

Direct Exchange

Direct exchange — müəyyən sıralara mesajın çatdırılması lazım olduqda istifadə olunur.Mesaj mübadilə mərkəzinə belirli bir yönləndirmə açarı ilə dərc olunur və bu mübadilə mərkəzi ilə eyni yönləndirmə açarı ilə bağlı olan bütün sıralara düşür. Yönləndirmə açarı — bir sətirdir. Uyğunluğu tapmaq üçün sətirlərin bərabərliyini yoxlama.

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

RabbitMQ. Hissə 2. Exchanges ilə tanış oluruq

İ rabbitmq default mübadilə mərkəzi anlayışı var . Budirect exchange ad olmadan. Default mübadilə mərkəzi istifadə edildikdə, mesaj yönləndirmə açarının adına bərabər olan sıraya yönləndiriləcək. mesajın yönləndirmə açarının.

Topic Exchange

Topic exchange — bənzərdir ad olmadan. Default mübadilə mərkəzi istifadə edildikdə, mesaj yönləndirmə açarının seçimli yönləndirməyə imkan verir, yönləndirmə açarını müqayisə etməklə. Lakin, bu halda, açar şablonla verilir. şablonla. Şablon yaradarkən 0 bir və ya daha çox söz (hərflər AZaz və rəqəmlər 0-9), nöqtələr ilə ayrılır, eləcə də simvollar *#.

  • * — tam olaraq 1 söz
  • # — bir və ya daha çox sözlə 0 dəyişdirilə bilər

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

RabbitMQ. Hissə 2. Exchanges ilə tanış oluruq

Sürüm RabbitMQ 2.4.0 yönləndirmə alqoritmi topic exchange artıq 145 iki dəfə daha sürətli işləyir. Onlar bunu trie implementation, şablonların ağac strukturu kimi təqdim olunmasını təmin etməklə həyata keçirdilər. Məsələn, şablonlar a.b.c, a.*.b.c, a.#.cb.b.c aşağıdakı struktura təqdim olunacaq:

RabbitMQ. Hissə 2. Exchanges ilə tanış oluruq

Şablona uyğunluğu aşkar etmə prosesi kökdən başlayaraq yuxarıdan aşağıya doğru aparılır.

Xüsusiyyətlər:

  • bu mübadilə mərkəzinin tətbiqi proqramın gələcək inkişafı üçün yaxşı bir seçim ola bilər, çünki şablonlar hər zaman konfiqurasiya edilə bilər ki, mesaj analoji olaraq ad olmadan. Default mübadilə mərkəzi istifadə edildikdə, mesaj yönləndirmə açarınınfanout exchange
  • şablonlardan istifadə edənlərdən * xeyli daha sürətli, nəinki şablonlardan istifadə edənlər #.
  • topic exchange daha yavaşdır ad olmadan. Default mübadilə mərkəzi istifadə edildikdə, mesaj yönləndirmə açarının

Fanout Exchange

Fanout exchangebütün mesajlar bütün sıralara çatdırılır mesajda yönləndirmə açarı müəyyən olsa belə.

Xüsusiyyətlər:

  • RabbitMQ yönləndirmə açarları və şablonlarla işləmir. performansa üzərində müsbət təsir edən amillər. Bu, ən sürətli exchange;
  • bütün müştərilər bütün mesajları işləmək imkanına sahib olmalıdır;

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

RabbitMQ. Hissə 2. Exchanges ilə tanış oluruq

Başlıqlar Mübadiləsi

Başlıqların mübadiləsi — mesajları əlaqəli növbələrə yönləndirir, açar-dəyər cütü xüsusiyyətinə əsasən müqayisə edilərək başlıqlar bağlılığı və mesajın eyni xüsusiyyətini. başlıqlar təşkil edir Dictionary<key, value>.

Əgər lüğətə xüsusi bir açar əlavə etsəniz x-match dəyəri ilə any, mesaj açar-dəyər cütü üzrə qismən uyğunsuzluq olduqda yönləndirilir. Bu davranış, operatora bənzəyir or.

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

Təqdimata görə açar x-match dəyəri ehtiva edir hamısı. Bu, mesajın açar-dəyər cütü üzrə tam uyğunsuzluğu olduqda yönləndirilir. Bu davranış, operatora bənzəyir and.

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

RabbitMQ. Hissə 2. Exchanges ilə tanış oluruq

Xüsusiyyətlər:

  • əlavə çeviklik
  • həmçinin hesablamanın əlavə xərclərini yaradır. Bütün cütlər (açar, dəyər) atributu başlıqlar məqsədli yönləndirmə dəyərlərini hesablamağa başlamazdan əvvəl açar adlarına görə sıralanmalıdır. Digər mübadilə növlərindən daha yavaşdır.

Konsistent-Haş Mübadiləsi

Bu mübadilə plagindaxil deyil daxilindədir. RabbitMQ.

Konsistent-haş mübadiləsi (konsistent hash mübadiləsi) – bir neçə növbənin olması halında istifadə olunur ki, bunlar mesajın mümkün alıcılarıdır və yükü onların arasında tarazlaşdırmaq lazımdır. Mesajın növbəyə bağlılığı, çəkisi əsasında həyata keçirilir (şərti string dəyəri 0 - n).

Növbələrin ekvivalent çəkisi – hər bir növbəyə təxminən eyni sayda mesajın (hər bir mesaj yalnız bir növbəyə yerləşdiriləcək) çatacağını göstərir. Mesajların bərabər bölüşdürülməsi ilə bağlı tam zəmanət yoxdur Hash.

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

RabbitMQ. Hissə 2. Exchanges ilə tanış oluruq

marşrut açarı ya da mesajın xüsusiyyətinə əsaslanaraq hesablanır. Əgər bütün yayımlanan mesajlar fərqli marşrut açarlarına sahib idisə və başlıqlar , o zaman bölüşdürülmə çəkisi üzrə həyata keçiriləcək. Əks halda marşrut açarı ya da başlıqlarİstehlakçının keçid genişləndirməsi lazım olduqda kömək etməlidir, bu, bir növbəni paylaşaraq bir neçə istehsalçıdan daha yüksəkdir. başlıqlar.

Mübadilələrin birləşməsi (E2E)

Bütün mübadilə davranışları, mübadilənin

Mübadilədən Mübadiləyə (mübadilələrin birləşdirilməsi spesifikasiyaya daxil deyil AMQP . Bu, protokolun genişləndirilməsidirE2E RabbitMQ).

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

RabbitMQ. Hissə 2. Exchanges ilə tanış oluruq

vasitəsilə biz doğru miqyaslı konfiqurasiyaya görə bilirik ki, bu, həm cari, həm də artan tələblərə cavab verir. Mübadilə yaratma

Mübadilənin yaranması, sinxron

RPC serverə sorğu edilməsi ilə həyata keçirilir. Sorğu Exchange.Declare metodu ilə edilir, parametrlərlə çağırılır:mübadilə adı

  • mübadilə növü
  • digər parametrlər
  • Mübadilənin yaradılması

RabbitMQ.Client exchange Wine 5.4 – yaratmaq istədiyimiz mübadilənin adıdır. Adun unikal olması tələb olunur:

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

  • exchange tip
  • type — mübadilə növü
  • dayanıqlı — əgər quraşdırılsa true, o exchange daimi olacaq. O diskdə saxlanılacaq və server/brokerin yenidən başladılmasını keçirə biləcək. Əgər dəyər false, o exchange müvəqqətidirsə və server/broker yenidən başladıldıqda silinəcək
  • autoDelete — avtomatik silmə. Exchange silinəcək, bütün bağlı növbələr silindikdə
  • arguments — qeyri-məcburi arqumentlər. Tez-tez arqumentlər vasitəsilə daxil edilir alternatif mübadilə (alternatif mübadiləçi). Əgər mesaj ilkin marşrutdan keçə bilmirsə, alternativ mübadiləçiyə göndərilə bilər ki, başqa bir yol ilə yönləndiriləcək.

RabbitMQ. Hissə 2. Exchanges ilə tanış oluruq

Mübadiləçi yaradılmalıdır mesajların dərc edilməsindən əvvəl. Əgər siz bir mövcud olmayan mübadiləçidə mesaj dərc etsəniz — exchange sakitcə silinəcək., o zaman server müştəriyə sinxron serverə sorğu edilməsi ilə həyata keçirilir. Sorğu cavab göndərəcək Exchange.DeclareOk. Əgər yaradılması mümkün deyilsə (tələbə görə imtina baş verdi metodu ilə edilir, parametrlərlə çağırılır:), o zaman kanal server tərəfindən asinxron əmr ilə bağlanacaq Channel.Close və müştəri bir istisna alacaq OperationInterruptedException , bu kod və onun təsviri olacaq., bu hata kodu və onun təsvirini ehtiva edəcək.

Mübadiləçi, mesajların dərc edilməsindən əvvəl yaradılmalıdır. Əgər siz qeyri-mövcud mübadiləçidə mesaj dərc etsəniz — RabbitMQ sakitcə silinəcək.

Qrafik interfeys vasitəsilə mübadilə yaradılması

İdarəetmə panelinə daxil olun RabbitMQ istifadəçi altında guest (istifadəçi adı: guest və şifrə: guest). Qeyd edin ki, istifadəçi guest yalnız yerli hostdan qoşula bilər. İndi isə Exchanges sekmesine keçək və klikləyək Yeni mübadilə əlavə edin. Xüsusiyyətləri doldurun:

RabbitMQ. Hissə 2. Exchanges ilə tanış oluruq

Xüsusiyyətlərin əksəriyyəti yuxarıda izah edilmişdir. Burada qeyd etməliyik ki, əgər Daxili, o zaman mübadilə yalnız üçün istifadə oluna bilər biz doğru miqyaslı konfiqurasiyaya görə bilirik ki, bu, həm cari, həm də artan tələblərə cavab verir.. İstehsalçı belə mübadiləyə mesaj göndərə bilməz.

Nəticə

Sistemi inkişaf etdirərkən, istiqamətlərin topologiyasını təsvir etmək rahatdır marşrutlaşdırma qrafik vasitəsilə. Amma qrafi qurmağa başlamazdan əvvəl, yüksək trafikli yolları ayırmaq lazımdır, çünki məhz onlara daha yüksək ötürmə qabiliyyəti (performans) tələb olunur. Sonra trafik təsnif edilə bilər. Və yalnız sonra qurmağa başlamaq olar.

Əgər qurulan qrafikdə sonlu sayda marşrut açarları varsa, bir neçə tərəfdən baxmaq lazımdır fanout exchange, bunlar marşrut açarları ilə 1:1 bağlıdır. Unutmayaq ki, fanout exchange ən sürətlidir.

Əgər marşrutların sayı sonsuzluğa meyillidirsə, o zaman diqqət yetirmək lazımdır topic exchange və ya, əgər şablon lazım deyilsə, onda direct exchange, çünki o, daha sürətlidir. topic exchange.

Müxtəlif exchange kombinasiyaları düzgün olanı tapmağa kömək etməlidir ölçülən konfiqurasiya, həm cari, həm də artan tələblərə cavab verir.

Say exchange və növbələrin sayı marşrutların sayı ilə müqayisədə minimum olmalıdır.

Sonrakı məqalədə Növbələr və Bağlamalarla daha dərindən tanış olacağıq.

Bağlantılar

Mənbə: habr.com

DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər 🔥 DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər | ProHoster