Exchange — hőcserélő vagy cserepont. Üzeneteket küldenek rá. Exchangeüzenetet terjeszt egy vagy több sorban. Ő sorba irányítja az üzeneteket a létrehozott kapcsolatok alapján (bindings) közte és a sor között.
Exchange nem Erlang folyamat. Méretezhetőségi okokból exchange - ez egy sor (hivatkozás egy kóddal rendelkező modulhoz, ahol az útválasztási logika található) a beépített adatbázisban mnézia. 1 hőcserélő csak 1 MB memóriát fogyaszt.
RabbitMQ. 3. rész: Várólisták és kötések megértése
RabbitMQ. 4. rész: Az üzenetek és keretek megértése
RabbitMQ. 5. rész: Üzenetkiadás és fogyasztási teljesítmény
RabbitMQ. 6. rész. Az összevonás és a lapát modulok áttekintése
RabbitMQ. 7. rész. Részletek a Connectionról és a Chanelről
RabbitMQ. 8. rész. RabbitMQ .NET-ben
RabbitMQ. 9. rész Monitoring
Közvetlen csere
Direct exchange - szükség esetén használják üzenetet küldeni meghatározott sorokhoz. Az üzenetet egy konkrét útválasztó kulcs és minden olyan sorba bekerül, amely ehhez a hőcserélőhöz hasonló útválasztó kulccsal csatlakozik. Az útválasztó kulcs egy karakterlánc. Az egyezés a használatával található karakterláncok egyenértékűségének ellenőrzése.
Az üzenetfolyam grafikus ábrázolása:
В rabbitmq van egy koncepció alapértelmezett hőcserélő. Azt direct exchange névtelen. Ha az alapértelmezett hőcserélőt használjuk, az üzenet a következővel megegyező nevű sorba kerül üzenettovábbítási kulcs.
Témacsere
Topic exchange – hasonló direct exchange lehetővé teszi a szelektív útválasztást az útválasztási kulcs összehasonlításával. De ebben az esetben a kulcs adott sablon szerint. Sablon létrehozásakor használja 0 vagy több szó (betűk AZ и az és számok 0-9), ponttal, valamint szimbólumokkal elválasztva * и #.
* - pontosan helyettesíthető 1 слово
# - helyettesíthető 0 vagy több szót
Az üzenetfolyam grafikus ábrázolása:
A verzió óta RabbitMQ 2.4.0 útválasztási algoritmus a számára topic exchange ig kezdett el dolgozni 145 alkalommal gyorsabban. Ezt egy megközelítés bevezetésével érték el próbáld meg a megvalósítást, amely magában foglalja a minták fastruktúraként történő ábrázolását. Például sablonok a.b.c, a.*.b.c, a.#.c и b.b.c a következő szerkezettel lesz ábrázolva:
A megfelelő minta keresése a gyökértől kezdve, fentről lefelé haladva történik.
Jellemzők:
ennek a hőcserélőnek a használata válhat jó választás az alkalmazás esetleges jövőbeni fejlesztéséhez, mert A sablonok mindig testre szabhatók, hogy az üzenetet ugyanúgy közzétegyük direct exchange vagy fanout exchange
használt sablonok *sokkal gyorsabbmint a használó sablonok #.
topic exchange lassabban direct exchange
Fanout Exchange
Fanout exchange - minden üzenetet az összes sorba kézbesítenek akkor is, ha az üzenetben meg van adva egy útválasztó kulcs.
Jellemzők:
RabbitMQnem működik útválasztási kulcsokkal és sablonokkal amely pozitív hatással van a termelékenységre. Ez a leggyorsabb exchange;
minden fogyasztónak képesnek kell lennie az összes üzenet feldolgozására;
Az üzenetfolyam grafikus ábrázolása:
Fejlécek cseréje
Headers exchange - a (kulcs, érték) tulajdonságpárok összehasonlítása alapján az üzeneteket a kapcsolódó sorokba irányítja headers kötések és hasonló üzenettulajdonságok. headers a Dictionary<ключ, значение>.
Ha speciális kulcsot ad hozzá a szótárhoz x-match jelentéssel any, akkor az üzenet akkor kerül továbbításra, ha a (kulcs, érték) párok részleges egyezése van. Ez a viselkedés hasonló az operátorhoz or.
var bindingArguments = new Dictinary<String, Object>();
bindingArguments.add("x-match", "any");
Alapértelmezett kulcs x-match értéket tartalmazza all. Ez azt jelenti, hogy az üzenet akkor kerül továbbításra, ha a (kulcs, érték) párok pontosan egyeznek. Ez a viselkedés hasonló az operátorhoz and.
Az üzenetfolyam grafikus ábrázolása:
Jellemzők:
további rugalmasság
további számítási többletköltség. Egy attribútum összes (kulcs, érték) párja headers Az üzenettovábbítási értékek kiszámítása előtt kulcsnév szerint kell rendezni. Lassabb, mint a többi cseretípus.
Konzisztens-kivonatcsere
Ez a hőcserélő az csatlakoztat и nincs beépítve в RabbitMQ.
Consistent-hashing exchange (csere konzisztens kivonattal) – akkor használatos, ha több sor is potenciális címzettje lehet egy üzenetnek, és ha egyensúlyba kell hozni a terhelést közöttük. Egy üzenet kapcsolata a sorral súly szerint történik (feltételes karakterlánc értéke innen 0 - n).
Várólisták egyenértékű súlya – azt jelzi, hogy minden sor fogadni fog megközelítőleg ugyanannyi üzeneteket (minden üzenet csak egy sorba kerül). Nincs teljes garancia az üzenetek egységes terjesztésére.
Az üzenetfolyam grafikus ábrázolása:
Hash az útválasztási kulcs vagy tulajdonság alapján számítják ki headers üzenetek. Ha az összes közzétett üzenetnek különböző útválasztási kulcsa volt, ill headers, akkor az eloszlás tömeg szerint történik. Ellenkező esetben az útválasztó kulcsot, ill headers.
Segítenie kell, ha a fogyasztói átviteli sebességnek magasabbra kell nőnie, mint egy olyan megoldásnál, amelyben több fogyasztó egyetlen sort használ.
Kombinált hőcserélők (E2E)
Az összes hőcserélő viselkedése kombinálható kommunikáció segítségével Csere-csere (a hőcserélők kombinálása nem szerepel a specifikációban AMQP. Ez a protokoll kiterjesztése oldalról RabbitMQ).
Az üzenetfolyam grafikus ábrázolása:
Rovására E2E megtaláljuk a megfelelő méretezhető konfigurációt, amely megfelel a jelenlegi és a növekvő igényeknek egyaránt.
Hozzon létre Exchange
A hőcserélő létrehozása szinkron használatával történik RPC kérjen a szerverhez. A kérés a módszerrel történik Exchange.Declareparaméterekkel hívják:
exchange — a létrehozni kívánt hőcserélő neve. A névnek egyedinek kell lennie
type — hőcserélő típusa
durable - ha telepítve van true, Akkor exchange állandó lesz. A lemezen lesz tárolva, és túlélheti a szerver/bróker újraindítását. Ha az érték false, Akkor exchange ideiglenes, és a szerver/bróker újraindításakor törlődik
autoDelete - automatikus eltávolítás. Exchange törlődik, ha az összes hozzá tartozó sor törlődik
arguments - opcionális érvek. Leggyakrabban argumentumokon keresztül határoznak meg alternative exchange (alternatív hőcserélő). Ha egy üzenet nem tud továbbhaladni az eredeti útvonalon, akkor elküldheti egy másik hőcserélőre, hogy egy másik útvonalon továbbítsa.
Ha a teremtés exchangelehetséges, akkor a szerver szinkron üzenetet küld a kliensnek RPC válasz Exchange.DeclareOk. Ha a teremtés lehetetlen (a kérést elutasították Exchange.Declare), azután a csatorna bezárul aszinkron paranccsal Channel.Close és az ügyfél kivételt kap OperationInterruptedException, amely tartalmazza a hibakódot és annak leírását.
Üzenetek feladása előtt létre kell hozni egy hőcserélőt. Ha közzétesz egy üzenetet egy nem létező hőcserélőnek - RabbitMQ csendben eltávolítja.
Exchange létrehozása GUI-n keresztül
Lépjen az adminisztrációs panelre RabbitMQ felhasználó alatt guest (felhasználónév: guest és jelszó: guest). Felhívjuk figyelmét, hogy a felhasználó guest csak localhostról tud csatlakozni. Most menjünk a lapra Exchanges és kattintson rá Add a new exchange. Töltse ki a tulajdonságokat:
A legtöbb tulajdonságot fentebb leírtuk. Itt jegyezzük meg, hogy ha beállítjuk Internal, akkor a csere csak arra használható fel E2E. Producer nem tud üzenetet küldeni egy ilyen központnak.
Következtetés
Egy rendszer fejlesztésénél célszerű a topológia leírása útvonalválasztás grafikon segítségével. De mielőtt elkezdené a grafikon felépítését, érdemes kiemelni a nagy forgalmú utakat, mert ők azok, akik igénylik nagyobb áteresztőképesség (teljesítmény). Ezután osztályozhatja a forgalmat. És csak ezután kezdje el az építkezést.
Ha a felépített gráfban van véges halmaz útválasztó kulcsokat, akkor érdemes több felé nézni fanout exchange, amelyek 1:1 arányban kapcsolódnak az útválasztási kulcshoz. Emlékszünk erre fanout exchange a leggyorsabb.
Ha az útvonalak száma a végtelenbe hajlik, akkor érdemes odafigyelni topic exchange vagy ha nincs szükség a sablonra, választhat direct exchnge, mert ő gyorsabb topic exchange.
Különböző kombinációk exchange segítenie kell megtalálni a megfelelőt méretezhető konfiguráció, amely megfelel a jelenlegi és a növekvő rendszerkövetelményeknek egyaránt.
Szám exchange és a sorok minimálisak legyenek az útvonalak számához képest.
A következő cikkben elkezdjük részletesebben megérteni a sorokat és a kötéseket.