Bevezetés az üzenetekkel foglalkozó BrabbitMQ-ba

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:

  1. Sor
  2. Kötés
  3. 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 Durabilityingatlannal), hogy megvédje adatait arra az esetre, ha a bróker összeomlik. Nevet is megadhat (a Nametulajdonsággal együtt) a sorban. Más, mint Name, és Durabilityegy 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.errorfognak 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.successegyezik 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 anyvagy 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.

  1. Automatikus nyugtázás: Miután a fogyasztó megkapta az üzenetet
  2. 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.