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 . 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 . 1 min mübadilə mərkəzi yalnız 1MB yaddaş istifadə edəcək.
Mündəricat
- RabbitMQ. Hissə 3. Queues və Bindings ilə tanış oluruq
- RabbitMQ. Hissə 4. Mesajlar və çərçivələr nədir
- RabbitMQ. Hissə 5. Mesajların nəşr və istehlak performansı
- RabbitMQ. Hissə 6. Federation və Shovel modullarının icmalı
- RabbitMQ. Hissə 7. Bağlantı və Kanal haqqında ətraflı
- RabbitMQ. Hissə 8. RabbitMQ .NET-də
- RabbitMQ. Hissə 9. Monitorinq
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 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 AZ və az və rəqəmlər 0-9), nöqtələr ilə ayrılır, eləcə də simvollar * və #.
*— tam olaraq1söz#— bir və ya daha çox sözlə0dəyişdirilə bilər
Mesaj axınının qrafik təqdimatı:

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 , ş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.#.c və b.b.c aşağıdakı struktura təqdim olunacaq:

Ş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ınvəfanout exchange - şablonlardan istifadə edənlərdən
*xeyli daha sürətli, nəinki şablonlardan istifadə edənlər#. topic exchangedaha yavaşdırad olmadan. Default mübadilə mərkəzi istifadə edildikdə, mesaj yönləndirmə açarının
Fanout Exchange
Fanout exchange – bü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:
RabbitMQyö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ətliexchange;- 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ı:

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ı:

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ıqlarmə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ə və daxil 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ı:

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ı:

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 :
//...
channel.ExchangeDeclare(
exchange: "my_exchange",
type: "direct",
durable: "false",
autoDelete: "false",
arguments: null
);
//...exchangetiptype— mübadilə növüdayanıqlı— əgər quraşdırılsatrue, oexchangedaimi olacaq. O diskdə saxlanılacaq və server/brokerin yenidən başladılmasını keçirə biləcək. Əgər dəyərfalse, oexchangemüvəqqətidirsə və server/broker yenidən başladıldıqda silinəcəkautoDelete— avtomatik silmə.Exchangesilinə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 ediliralternatif 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.

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 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:

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 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
