Bevezetés a RabbitMQ-ba, az üzenetközvetítőbe, az AMQP modellbe és egyebekbe.
Az elosztott rendszerekben a különféle alkalmazások közötti kommunikáció fontos szerepet játszik. Az üzenetek hatékony továbbítása az alkalmazások között mindig döntő döntés volt a rendszer tervezésében. Az egyik elegáns megoldás az üzenetek továbbítására az elosztott rendszerben az üzenetközvetítő.
Az elosztott rendszerekben a különféle alkalmazások közötti kommunikáció fontos szerepet játszik. Az üzenetek hatékony továbbítása az alkalmazások között mindig döntő döntés volt a rendszer tervezésében. Az egyik elegáns megoldás az üzenetek továbbítására az elosztott rendszerben az üzenetközvetítő.
Bevezetik az alkalmazások közötti szétválasztást, és hatékony módot kínálnak a kommunikációra. Az üzenetközvetítőknél az alkalmazásnak nincs szüksége a címzettek előzetes ismeretére a kommunikációhoz.
Mi azonban a RabbtiMQ? Hogyan illik a RabbitMQ ebbe a képbe? Mi az AMQP?
A cikk végére képesek leszünk megválaszolni ezeket a kérdéseket. Hozzátettem néhány animációt is, hogy a RabbitMQ koncepcióit megjeleníthesse.
Tehát izgatott vagy? Én vagyok! Ha valaha is nehézségei támadtak az üzenetközvetítők megértésével, ahogy én tettem, akkor ez a cikk a megfelelő hely az utazás megkezdéséhez. Maradj velem ?
Message Broker
A bróker általában olyan személy, aki megkönnyíti a vevő és az eladó közötti kereskedelmet. Ilyen lehet például egy ingatlanügynök vagy egy tőzsdeügynök.
Hasonlóképpen, ha két elosztott szoftverkomponens között akarunk üzeneteket cserélni, szükségünk van egy közvetítőre. Ez a közvetítő üzenetközvetítőként ismert. A bejövő üzeneteket fogadja a feladótól, és elküldi a címzettnek. Így a feladó és a vevő teljesen elszigetelhető.
Az üzenetközvetítő másik analógiája lehet a Posta (lásd 1. ábra). Vegyünk egy forgatókönyvet, amelyben levelet fog küldeni egy másik városban élő unokatestvérének. Akkor ennek az analógiának megfelelően Ön termelő, unokatestvére fogyasztó, a posta pedig üzenetközvetítő.

RabbitMQ mint üzenetközvetítő
Most már tudjuk, hogy az üzenetközvetítő célja az üzenetek továbbítása a termelőtől a fogyasztóig. Vizsgáljuk meg az egyik ilyen üzenetközvetítőt - a RabbitMQ-t. Manapság az egyik legszélesebb körben használt üzenetközvetítő.
Az, hogy a RabbitMQ milyen módon továbbítja az üzeneteket, az általa alkalmazott üzenetkezelési protokolltól függ. A RabbitMQ több üzenetküldési protokollt támogat. Azonban az, ami érdekel, az AMQP. Ez az Advanced Message Queuing Protocol rövidítése.
Tehát minden további nélkül nézzük meg közelebbről az AMQP protokoll modelljét.
Advanced Message Queuing Protocol
Az AMQP koncepcionális modellje meglehetősen egyszerű és egyértelmű. Három entitása van:
- Sor
- Kötés
- Csere
Amikor egy kiadó egy üzenetet tol a RabbitMQ-hoz, akkor először egy csere felé érkezik. Ezután a központ elosztja ezen üzenetek másolatait különböző módon összekapcsolt sorokban. Végül a fogyasztók megkapják ezeket az üzeneteket.
Tekintsünk egy üzenetet adatként. Ez szükségszerűen egy hasznos terhelést és némi metaadatot tartalmazó csomag. A hasznos teher teljes adatokat tartalmaz, míg a metaadatok a RabbitMQ által használt tulajdonságok.
A 2. ábra az AMQP modell grafikus ábrázolását mutatja.

Az AMQP egy programozható protokoll. A programozók szabadon használhatják a könyvtárakat az entitások (csere, kötés és várólista) konfigurálásához saját igényeik szerint. A RabbitMQ rendszergazdának nincs szerepe ezen entitások beállításában.
Rengeteg könyvtár áll rendelkezésre a RabbitMQ használatához. Választhat a Nodejs, a Python, a .Net, a Java és még sok más közül.
Sorok
Ezek a sorok valahogy hasonlítanak az adatszerkezeti osztályaink soraihoz. A RabbitMQ sorok a FIFO - First-In-First-Out módszertant is követik. A várólista az a hely, ahol a RabbitMQ üzeneteket / adatokat tárol.
A programozók a rendelkezésre álló programozási könyvtárak segítségével konfigurálhatják a sorokat. Tartóssá teheti a várólistát (az Durability
ingatlannal), hogy megvédje adatait arra az esetre, ha a bróker összeomlik. Nevet is megadhat (a Name
tulajdonsággal együtt) a sorban. Más, mint Name
, és Durability
egy sorban van néhány olyan tulajdonság, mint az auto-törlés, exkluzív, és érveket.
Mielőtt továbblépne, fontos megértenie, hogy ki közvetlenül fogyasztja ezeket a sorokat. Sőt, hányféleképpen fogyaszthatja a felhasználó a sorból érkező üzeneteket?
Fogyasztók
A fogyasztók azok, akik a sorban tárolt üzeneteket fogják használni. Egyszerre több fogyasztót is lehet sorba kötni. A fogyasztók vagy kivonhatják az üzenetet a sorból az összesítéssel, vagy a sorok akár a különböző összekötő fogyasztókhoz is eljuthatnak.
Kötések
A kötések azok a szabályok, amelyeket a sor meghatároz, miközben kapcsolatot létesít egy cserével. Számos központhoz kapcsolódhat egy sor. Minden sor egy alapértelmezett központhoz is kapcsolódik. Egy csere ezeket az összerendeléseket használja az üzenetek sorokba irányításához.
Cserék és típusaik
Az Exchange egy átjáró a RabbitMQ-hoz az üzenetekhez. Az üzenet távolsága a RabbitMQ belsejében a csere típusától függ. Elsősorban négy típus létezik.
- Közvetlen
- Fanout
- Téma
- Fejléc
Közvetlen
A név mindent megmagyaráz! - A közvetlen csere közvetlenül az alábbi feltételeknek megfelelő sorokhoz juttat üzenetet:
Routing key == Binding key
Az útválasztási kulcs az üzenet attribútuma. Másrészt a kötési kulcsot megadhatja, miközben létrehoz egy kötést egy sor és egy csere között.
A 3. ábra vizuális magyarázata annak, hogyan áramlanak az üzenetek közvetlen csere használata közben.
Az üzenet egy gyártótól származik (zöld kör), amelynek útválasztási kulcsa van img.resize
. Amint eléri a csomópontot (narancssárga kör), a csere megpróbálja megtalálni az összes várólistát kötési kulccsal - img.resize
. Egyezés esetén az üzenet az összes egyező sorba kerül (esetünkben átméretezés). Ha nincs találat, akkor az üzenetet visszaküldhetjük a producernek, vagy akár el is dobhatjuk. Szerencsénk van, hogy találtunk egyezést a példánkban?
[gif kép]
Amint az üzenet eléri a kívánt várólistát (esetünkben átméretezés), körbefutó módon elosztják az összes csatlakoztatott fogyasztó számára (esetünkben resizer.1 / resizer.2).
Az üzenetek körözött módon történő terjesztésével a RabbitMQ biztosítja, hogy az üzenetek kiegyenlítettek legyenek.
Bizonyára észrevette, hogy a crop nevű sor nem kap üzenetet. Mivel ebben a példában az útválasztási kulcs az img.resize
. Ahhoz, hogy üzeneteket küldhessen ebbe a sorba, olyan útválasztókulccsal kell üzeneteket küldeni, amely megegyezik a kötési kulccsal (mondjuk img.crop
például).
Fanout
A Fanout központ figyelmen kívül hagyja az útválasztási kulcsokat, és üzenetet küld az összes csatlakoztatott sornak. Nem csoda, hogy Fanout-nak hívják (üzenetek fújása az összes csatlakoztatott sorba!?).
Az ilyen típusú csere egyik felhasználási esete az üzenetszórás.

Felhívjuk figyelmét, hogy a RabbitMQ továbbra is körbetartást végez, ha egynél több fogyasztó van a sorban.
Téma
Egy témacsere úgy továbbítja az üzenetet, hogy az útválasztási kulcsot a kötési kulcs mintájához illeszti.
Routing key == Pattern in binding key.
A RabbitMQ két vadkártya karaktert használ a mintaillesztéshez *
és #
. Használjon a *
1 szót egy szóval, és a #
0-t vagy több szót egyezzen.
Az 5. ábra egy témacsere vizuális ábrázolása. Az útválasztókulccsal ellátott üzenetek - meg logs.error
fognak egyezni a mintákkal - logs.error
és logs.*
. Ezért ezek az üzenetek a sorokba kerülnek - only error
és all logs
.
Mivel a gyártó a bal alsó, üzenetek útválasztási kulcs- logs.success
egyezik minták kötési kulcs #success
és logs.*
. Ezért ezek az üzenetek a sorokba kerülnek - all logs
és only success
.
[gif]
Ez a típusú csere felhasználási esetek széles skálájával rendelkezik. Használható a közzététel-feliratkozás mintában, a releváns adatok terjesztésére a kívánatos munkavállalói folyamatokhoz és még sok máshoz.
Fejléc
A fejléc egy bizonyos típusú csere, amely az üzenet fejlécében található kulcsok alapján továbbítja az üzeneteket. Elnézi az üzenet routing key attribútumát.
Amikor kötéseket hoz létre egy fejléc-csere számára, lehetőség van egy sor kötésére, hogy egynél több fejléc is megfeleljen. Ilyen esetben a RabbitMQ-nak tudnia kell a gyártótól, hogy meg kell-e egyeznie ezeknek a kulcsoknak vagy azoknak.
A gyártó / alkalmazás ezt megteheti egy „x-match” nevű extra jelzővel. Az 'x-match' értéke any
vagy all
értéke lehet. Az első azt írja elő, hogy csak egy értéknek kell egyeznie, míg az utóbbinak mindenkinek meg kell egyeznie.
Üzenet nyugtázása
Amint az üzenet eléri a célját, a közvetítőnek törölnie kell az üzenetet a sorból. Erre azért van szükség, mert sor túlcsordulás léphet fel, ha folyamatosan üzeneteket halmoz fel.
Bármely üzenet törlése előtt a brókernek rendelkeznie kell kézbesítési nyugtával. Kétféleképpen lehet nyugtázni az üzenet kézbesítését.
- Automatikus nyugtázás: Miután a fogyasztó megkapta az üzenetet
- Kifejezett nyugtázás: Amikor a fogyasztó visszaküldi a nyugtázást
A legtöbb esetben kifejezett nyugtázást alkalmaznak, mivel ez biztosítja, hogy a fogyasztó minden feladatátvétel nélkül elfogyasztotta az üzenetet.
Mi a következő lépés
A RabbitMQ nagyon érett és hasznos termék. Ez a cikk csak egy magas szintű bevezetés a RabbitMQ-hoz. Leegyszerűsítettem a fogalmakat, hogy referenciapontot nyújtsak Önnek a továbblépéshez. Látogasson el a RabbitMQ weboldalára összetettebb témákért.
Remélem tetszik a cikk. Ne felejtsen el tapsolni (vagy tapsolni?). Kövesse, hogy elolvassa a következő történeteimet. Legközelebb addig tartsd a Sorbanállást.