RabbitMQ. 2. rész: A cserék megértése

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.

tartalomjegyzék

  • RabbitMQ. 1. rész Bevezetés. Erlang, AMQP és RPC
  • RabbitMQ. 2. rész: A cserék megértése
  • 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. 2. rész: A cserék megértése

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

RabbitMQ. 2. rész: A cserék megértése

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:

RabbitMQ. 2. rész: A cserék megértése

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:

  • RabbitMQ nem 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:

RabbitMQ. 2. rész: A cserék megértése

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:

RabbitMQ. 2. rész: A cserék megértése

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:

RabbitMQ. 2. rész: A cserék megértése

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:

RabbitMQ. 2. rész: A cserék megértése

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:

  • hőcserélő neve
  • hőcserélő típusa
  • egyéb paraméterek

Létrehozási példa exchange révén RabbitMQ.Client:

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

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

RabbitMQ. 2. rész: A cserék megértése

Ha a teremtés exchange lehetsé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:

RabbitMQ. 2. rész: A cserék megértése

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.

referenciák

Forrás: will.com

Hozzászólás