4. rész: RabbitMQ cserék, útválasztási kulcsok és kötések

Mi az a csere? Mik azok az útválasztási kulcsok és kötések? Hogyan kapcsolódnak egymáshoz a cserék és a várólisták? Mikor és hogyan kell használni őket? Ez a cikk a RabbitMQ különböző cseretípusait és a használatukkal kapcsolatos forgatókönyveket ismerteti.

Az üzenetek nem közvetlenül egy várólistára kerülnek közzétételre. Ehelyett a termelő üzeneteket küld egy cserének. A cserék üzenetek útválasztó ügynökei, amelyeket a RabbitMQ-n belül a virtuális hoszt határoz meg. Egy csere felelős az üzenetek különböző várólistákba való továbbításáért a fejlécattribútumok, kötések és útválasztási kulcsok segítségével.

A kötés egy “kapcsolat”, amelyet egy várólista és egy csere között hoz létre.

Az útválasztási kulcs egy olyan üzenetattribútum, amelyet a központ figyelembe vesz, amikor eldönti, hogyan irányítsa az üzenetet a várólistákhoz (a központ típusától függően).

A cserék, kapcsolatok és várólisták olyan paraméterekkel konfigurálhatók, mint a tartós, ideiglenes és automatikus törlés létrehozáskor. A tartós cserék túlélik a kiszolgáló újraindítását, és mindaddig fennmaradnak, amíg kifejezetten nem törlik őket. Az ideiglenes cserék a RabbitMQ leállításáig léteznek. Az automatikusan törlődő cserék eltávolításra kerülnek, amint az utolsó kötött objektumot leválasztják a cseréről.

A RabbitMQ-ban négy különböző típusú csere létezik, amelyek különböző paraméterek és kötési beállítások segítségével különböző módon irányítják az üzenetet. Az ügyfelek létrehozhatják saját cseréiket, vagy használhatják az előre definiált alapértelmezett cseréket, amelyek a kiszolgáló első indításakor jönnek létre.

  1. A termelő közzéteszi az üzenetet a cserének.
  2. A csere megkapja az üzenetet, és most már ő felel az üzenet továbbításáért.
  3. A várólista és a csere között kötést kell beállítani. Ebben az esetben két különböző várólistához van kötésünk a központból. A központ továbbítja az üzenetet a várólistákba.
  4. Az üzenetek a várólistában maradnak, amíg egy fogyasztó nem kezeli őket.
  5. A fogyasztó kezeli az üzenetet.

Ha nem ismeri a RabbitMQ-t és az üzenetvárakoztatást, olvassa el a RabbitMQ kezdőknek – mi a RabbitMQ?mielőtt a cserékről, útválasztási kulcsokról, fejlécekről és kötésekről olvasna.

Direkt csere

A közvetlen csere az üzeneteket egy üzenet útválasztási kulcs alapján juttatja el a várólistákba. Az útválasztási kulcs egy olyan üzenetattribútum, amelyet a gyártó ad hozzá az üzenet fejlécéhez. Gondoljunk az útválasztási kulcsra úgy, mint egy “címre”, amelyet a csereprogram arra használ, hogy eldöntse, hogyan irányítsa az üzenetet.Az üzenet azon várólistára (várólistákra) kerül, amelynek kötési kulcsa pontosan megegyezik az üzenet útválasztási kulcsával.

A közvetlen csereprogram típusa hasznos az ugyanazon csereprogramhoz közzétett üzenetek megkülönböztetésére egy egyszerű karakterlánc-azonosító segítségével.

Az AMQP brókereknek alapértelmezetten az “amq.direct” cserét kell megadniuk a közvetlen cseréhez.

Az alábbi képen (Direct Exchange ábra) az A sor (create_pdf_queue) egy közvetlen cseréhez (pdf_events) van kötve a kötési kulccsalypdf_create.Amikor egy új üzenet érkezik a közvetlen csereállomáshoz a routing keypdf_create kulcsával, a csereállomás átirányítja azt abba a várólistába, ahol a binding_key = routing_key, ebben az esetben az A várólistába (create_pdf_queue).

Scenario 1

  • Exchange: pdf_events
  • Queue A: create_pdf_queue
  • Binding key between exchange (pdf_events) and queue A (create_pdf_queue): pdf_create

Scenario 2

  • Csere: pdf_events
  • Queue B: pdf_log_queue
  • Binding key between exchange (pdf_events) and Queue B (pdf_log_queue): pdf_log

Example

Example: Az üzenetet a pdf_log_queue-ba irányítják, mivel az útválasztási kulcs (pdf_log) megegyezik a kötési kulccsal (pdf_log).

Ha az üzenet útválasztási kulcsa nem egyezik meg egyetlen kötési kulccsal sem, az üzenet elvetésre kerül.

Közvetlen csere: Az üzenet azokba a várólistákba kerül, amelyek kötési kulcsa pontosan megegyezik az üzenet útválasztási kulcsával.

Előreértelmezett csere

Az alapértelmezett csere egy előre bejelentett, név nélküli közvetlen csere, amelyre általában egy üres karakterlánc utal. Ha az alapértelmezett cserét használja, az üzenet az üzenet útválasztási kulcsával megegyező névvel kerül a várólistára. Minden várólista automatikusan az alapértelmezett cseréhez van kötve egy útválasztási kulccsal, amely megegyezik a várólista nevével.

Topic Exchange

A topic exchange az üzeneteket az útválasztási kulcs és az útválasztási minta közötti vadkeretes egyezések alapján irányítja a várólistákhoz, amelyet a várólista kötése határoz meg. Az üzeneteket egy vagy több várólistába irányítja az üzenet útválasztási kulcsa és ez a minta közötti egyezés alapján.

Az útválasztási kulcsnak egy szavakból álló, ponttal (.) elválasztott listának kell lennie. Példák:agreements.usésagreements.eu.stockholmamely ebben az esetben egy olyan vállalat számára létrehozott megállapodásokat azonosít, amelynek számos különböző helyen vannak irodái. Az útválasztási minták tartalmazhatnak csillagot (“*”), hogy az útválasztási kulcs egy adott pozíciójában lévő szóval egyezzenek meg (pl. a “agreements.*.*.*.b.*” útválasztási minta csak olyan útválasztási kulcsokkal egyezik meg, ahol az első szó a “agreements” és a negyedik szó a “b”). A fontjel (“#”) nulla vagy több szó egyezését jelzi (pl. az “agreements.eu.berlin.#” útválasztási minta minden “agreements.eu.berlin” kezdetű útválasztási kulcsra illik).

A fogyasztók jelzik, hogy mely témák érdeklik őket (mintha egy egyedi címke feedjére iratkoznának fel). A fogyasztó létrehoz egy várólistát, és egy adott útválasztási mintával kötést hoz létre a cseréhez. Minden olyan útválasztási kulccsal rendelkező üzenet, amely megfelel az útválasztási mintának, a sorba kerül, és ott marad, amíg a fogyasztó el nem fogyasztja az üzenetet.

A témacseréhez az AMQP brókereknek alapértelmezetten az “amq.topic” cserét kell biztosítaniuk.

Scenario 1

A jobb oldali kép egy olyan példát mutat, ahol A fogyasztó A az összes berlini megállapodás iránt érdeklődik.

  • Exchange: agreements
  • Queue A: berlin_agreements
  • Routing pattern between exchange (agreements) and Queue A (berlin_agreements): agreements.eu.berlin.#
  • Példa az üzenet útválasztási kulcsára, amely megfelel: agreements.eu.berlin és agreements.eu.berlin.headstore

Scenario 2

Fogyasztó B az összes megállapodás iránt érdeklődik.

  • Börze: megállapodások
  • Kiadó B: minden_megállapodás
  • Útirányítási minta a börze (megállapodások) és a B sor (minden_megállapodás) között: megállapodások.#
  • Példa a megfelelő üzenet útválasztási kulcsra: agreements.eu.berlin és agreements.us

Témacsere:

3. forgatókönyv

Fogyasztó C érdeklődik az európai központi áruházak összes megállapodása iránt.

  • Börze: megállapodások
  • Kiadó C: headstore_megállapodások
  • Továbbítási minta a börze (megállapodások) és a C várólista (headstore_megállapodások) között: agreements.eu.*.headstore
  • Példa az egyező üzenet útválasztási kulcsokra: agreements.eu.berlin.headstore és agreements.eu.stockholm.headstore

Példa

Egy üzenet útválasztási kulcsmegállapodásokkal.eu.berlinis küldött a exchangeagreements.Az üzeneteket a queueberlin_agreementsbe irányítják, mivel az “agreements.eu.berlin.#” útválasztási minta megegyezik az “agreements.eu.berlin”-nel kezdődő útválasztási kulcsokkal. Az üzenet az all_agreements várólistára is átirányításra kerül, mivel az útválasztási kulcs (agreements.eu.berlin) megegyezik az útválasztási mintával (agreements.#).

Fanout Exchange

A fanout exchange másolja és továbbítja a kapott üzenetet a hozzá kötött összes várólistára, függetlenül az útválasztási kulcsoktól vagy a minta egyezésétől, mint a direct és topic exchanges esetében. A megadott kulcsokat egyszerűen figyelmen kívül hagyja.

A fanout csere hasznos lehet, ha ugyanazt az üzenetet egy vagy több olyan fogyasztói sorba kell küldeni, amelyek ugyanazt az üzenetet különböző módon dolgozhatják fel.

A jobb oldali kép (Fanout csere) egy olyan példát mutat, ahol a csere által fogadott üzenet másolásra kerül és mindhárom, a csere által kötött sorba továbbítódik. Ez lehet például sport- vagy időjárás-frissítés, amelyet minden csatlakoztatott mobileszközre ki kell küldeni, ha valami történik.

Az AMQP brókereknek alapértelmezetten az “amq.fanout” cserét kell biztosítaniuk a témacseréhez.

Fanout Exchange: A fogadott üzenetet az összes olyan várólistára továbbítja, amely a cseréhez van kötve.

Scenario 1

  • Exchange: sport_news
  • Queue A: Mobile client queue A
  • Binding:

Példa

Egy üzenetet küldünk az exchangesport_news-ra.Az üzenet az összes sorba (A, B, C sorba) továbbításra kerül, mivel az összes sor az exchange-hez van kötve. A megadott útválasztási kulcsok figyelmen kívül maradnak.

Headers Exchange

A headers exchange az üzeneteket headereket és opcionális értékeket tartalmazó argumentumok alapján irányítja. A fejléccserék nagyon hasonlítanak a témacserékhez, de az üzeneteket útválasztási kulcsok helyett fejlécértékek alapján irányítják. Egy üzenet akkor felel meg, ha a fejléc értéke megegyezik a kötéskor megadott értékkel.

A csere és a várólista közötti kötésben hozzáadott “x-match” nevű speciális argumentum határozza meg, hogy az összes fejlécnek meg kell-e egyeznie, vagy csak egynek. Vagy az üzenet és a kötés közötti bármely közös fejléc egyezésnek számít, vagy a kötésben hivatkozott összes fejlécnek jelen kell lennie az üzenetben az egyezéshez. Az “x-match” tulajdonságnak két különböző értéke lehet: “any” vagy “all”, ahol az “all” az alapértelmezett érték. Az “all” érték azt jelenti, hogy minden fejlécpárnak (kulcs, érték) meg kell egyeznie, míg az “any” érték azt jelenti, hogy legalább az egyik fejlécpárnak meg kell egyeznie. A fejlécek a karakterlánc helyett az adattípusok szélesebb skáláját használhatják, például egész számot vagy hash-t. A fejlécek cseretípus (az “any” kötési argumentummal együtt használva) hasznos olyan üzenetek irányításához, amelyek ismert (rendezetlen) kritériumok egy részhalmazát tartalmazzák.

Az AMQP brókereknek a témacseréhez az “amq.headers” alapértelmezett cserét kell biztosítaniuk.

Példa

Scenario 3

A 3. üzenet a (kulcs = érték) fejléc argumentumokkal kerül közzétételre a cserére: “

Megjegyzendő, hogy a fejléccserében a kulcs-érték párok tényleges sorrendje az üzenetben lényegtelen.

Holt levélcsere

Ha az üzenethez nem találunk megfelelő várólistát, akkor az üzenet csendben eldobásra kerül. A RabbitMQ biztosít egy “Dead Letter Exchange” néven ismert AMQP-bővítményt, amely a nem kézbesíthető üzenetek rögzítésére nyújt funkciót.

Kérjük, írjon nekünk a [email protected] címre, ha bármilyen javaslata van a hiányzó tartalommal vagy egyéb visszajelzése van.

Útmutató – RabbitMQ kezdőknek

Van kedve a cikkhez? Ne felejtsd el megosztani másokkal is 😉

Vélemény, hozzászólás?

Az e-mail-címet nem tesszük közzé.