See artikkel on masintõlke peegelartikkel, palun klõpsake siia, et hüpata algse artikli juurde.

Vaade: 3797|Vastuse: 0

AMQP protokolli üksikasjalik selgitus

[Kopeeri link]
Postitatud 14.08.2022 23:22:55 | | | |
Sissejuhatus AMQP protokolli

AMQP (Advanced Message Queuing Protocol) on rakenduskihi standardprotokoll, mis pakub ühtseid sõnumiteenuseid ning on avatud standard rakenduskihi protokollidele, mis on mõeldud sõnumipõhisele vahendustarkvarale. AMQP on võrguprotokoll asünkroonsete sõnumite edastamiseks protsesside vahel.

Selle protokolli põhjal töötavad kliendid ja sõnumivahevara suudavad sõnumeid edastada ilma, et neid piiraksid erinevad kliendi/vahendustarkvara tooted, erinevad arenduskeeled jne.

AMQP peamised omadused on sõnumipõhine, järjekorras, marsruutimine (sh peer-to-peer ja publish/subscribe), töökindlus ja turvalisus. AMQP rakendab sõnumipakkujate ja klientide käitumist, võimaldades erinevate tarnijate vahel tõelist koostalitlusvõimet.

AMQP ja JMS

JMS oli katse standardiseerida varajast sõnumite vahevara, see oli standardiseeritud vaid API tasemel ning see oli kaugel koostalitlusvõime loomisest.

Erinevalt JMS-ist on AMQP juhtmega protokoll, mis kirjeldab võrgus edastatud andmete vormingut, mis voolab baitides. Seetõttu on iga tööriist, mis järgib seda andmeformaati, mis loob ja tõlgendab sõnumeid, ühilduv teiste ühilduvate tööriistadega.

AMQP põhikoosseis



Produtsent

Tootmisuudised.

ConnectionFactory

Tehas, mis toodab Connectioni.

Ühendus

Ühendus, rakendusvõrgu ühendus Broker TCP/IP/Triple Handshake ja Quad Wave'iga.

AMQP ühendused on tavaliselt pikad ühendused. AMQP on rakenduskihi protokoll, mis kasutab TCP-d usaldusväärse edastamise tagamiseks. AMQP kasutab autentimismehhanisme ja pakub TLS (SSL) kaitset. Kui rakendus ei pea enam AMQP proksiga ühenduma, peab ta AMQP ühenduse sujuvalt vabastama, mitte lihtsalt TCP ühendust sulgema.

Kanal

Võrgukanal on kerge ühendus, mis on ehitatud ühenduse peale. Peaaegu kõik toimingud toimuvad kanalites, mis on sõnumite lugemiseks ja kirjutamiseks mõeldud kanalid, ning kliendid saavad iga kanali jaoks luua paarid, millest igaüks esindab sessiooniülesannet.

Kui ühendust võrrelda fiiberoptilise kaabliga, siis kanalikanalit võrreldakse ühe fiiberoptilise kaabli kiududega. Ühenduse kaudu saab luua suvaline arv kanaleid.

Enamik meie äritegevusest toimub kanali liideses, sealhulgas:


  • queueDeclare
  • Vahetusdeklaratsioon lüliti jaoks
  • queueBind queueBind queueBind
  • Avalda sõnum põhiAvalda
  • Tarbija uudised, põhi, tarbimine jne.



Maakler

Aktsepteeri kliendi ühendust, et rakendada AMQP entiteediteenuseid, näiteks rabbitmq.

VirtualHost (veebimajutus)

Virtuaalne majutus, mida kasutatakse loogiliseks isoleerimiseks, võib virtuaalsel hostil olla mitu vahetust ja järjekorda ning sama virtuaalne hostil ei tohi olla sama nimega vahetusi.

Mitme isoleeritud keskkonna (kasutajad, kasutajagrupid, lülitid, järjekorrad jne) rakendamiseks ühel proxyl pakub AMQP virtuaalsete hostide (virtuaalsed hostid – vhostid) kontseptsiooni. See on väga sarnane veebiserverite veebimajutuse kontseptsioonile, mis pakub AMQP üksustele täiesti isoleeritud keskkonda. Kui ühendus on loodud, määrab AMQP klient, millist virtuaalhosti kasutada.

Vahetada

Lüliti võtab vastu sõnumeid ja saadab sõnumeid seotud järjekorda vastavalt marsruutimisvõtmele (ilma sõnumite salvestamise võimaluseta).

Lüliti on AMQP üksus, mida kasutatakse sõnumite saatmiseks. Kui lüliti saab sõnumi, suunab ta selle ühele või nullile järjekorda. Kasutatav marsruutimisalgoritm sõltub lüliti tüübist ja sidumisreeglitest.

Lüliti tüüp:


  • Otsene vahetus
  • Fännivahetus
  • Teemade vahetus
  • Päiste vahetus



Lüliti omadused:

  • Nimi: Lüliti nimi
  • Vastupidavus: Püsivuslipp, mis näitab, kas see lüliti on püsiv või mitte
  • Automaatne kustutamine: Kustuta lipp, mis näitabKui kõik järjekorrad on selle vahetuse abil lõpetatud, kas need kustutatakse
  • Argumendid: Sõltub agendist endast


Lüliti staatus:

  • Vastupidav
  • Mööduv


Püsivad lülitid eksisteerivad pärast maakleri taaskäivitamist, samas kui staadiumi lülitid ei eksisteeri (need tuleb uuesti deklareerida pärast maakleri taaskäivitamist).


Vaikimisi lüliti

Vaikimisi vahetus on tegelikult otsene vahetus, mis on sõnumimaakleri poolt eelnevalt deklareeritud ja millel puudub nimi (nimi on tühi string).

Vaikimisi lülitit võib mõelda kui spetsiaalset otse ühendatud lülitit.
Vaikimisi lüliti nimi: nullstring (AMQP vaikeseade)
Vaikimisi lüliti tüüp: Otse ühendatud lüliti

Järjekorra loomisel, kui sidumiseks määratav lüliti ei ole määratud, on see automaatselt seotud vaikimisi lülitiga ning sidumise marsruutimisvõtme nimi on sama mis järjekorra nimi.

Otseühendus lülitiga

Otse ühendatud lüliti edastab sõnumeid vastavate sidumisvõtmete järjekorda, mis põhineb sõnumi kandmisel oleval marsruutimisvõtmel. Unicast marsruutimine, mida kasutab otselüliti sõnumi töötlemiseks.

Järjekorra loomisel, kui see on seotud otsese lülitiga, ei pea see määrama marsruutimisvõtme nime, sest sellel on vaikimisi marsruutimisvõtme nimi, mis on sama mis järjekorra nimi.

Otse ühendatud lülitite järjekord jaotab ülesanded tavaliselt mitmele tarbijale tsüklis (seda nimetatakse küsitluseks).

Töövoog:


  • Kui seod järjekorra lülitiga, anna sellele sidumisvõti, eeldades R;
  • Kui sõnum marsruutimisvõtmega saadetakse otse ühendatud lülitile, suunab lüliti selle marsruutimisvõtmega järjekorda.





Ventilaatori lülitid

Ventilaatorilüliti suunab sõnumid kõigile sellele seotud järjekordadele, sõltumata seotud marsruutimisvõtmest.

Kui N järjekorda on seotud sektorilülitiga, siis kui sellele sektorilülitile saadetakse sõnum, saadab lüliti sõnumi koopia kõigile N järjekorda eraldi. Ventilaatori lüliteid kasutatakse üldiselt sõnumite edastamise haldamiseks.




Rakendusstsenaariumid:

sõnumite edastamine;
Grupivestluse funktsioon.

Teemavahetus

Teemavahetus saadab sõnumeid ühele või mitmele järjekorrale vastavalt marsruutimisvõtmele ja Exchange'i tüübile ning me kasutame seda sageli erinevate avaldamise/tellimise ehk avaldamistellimuste rakendamiseks.

Otse ühendatud lülitite marsruutimisreeglid on rangelt sobitatud, mis tähendab, et marsruutimisvõti peab enne järjekorda sõnumi saatmist sobima sidumisvõtmega.
Teemavahetuse marsruudireeglid on udused mängud, mida saab korraldada, täites mõningaid reegleid wild card'idega.

See sätestab:

  • Sidumisvõtmes võib olla kaks erimärki * ja # häguseks sobitamiseks. kus * kasutatakse sõna sobitamiseks, #用于匹配多个单词 (võib olla null)
  • Marsruutimisvõti on punktidega eraldatud string (nimetame iga üksikut stringi, mis on eraldatud punktiga, märgi sõna)





  • Kui tootja saadab sõnumi Routing Key=A.A.A.A, rahuldatakse ainult A.*.* ja see suunatakse ainult queue1-le.
  • Kui tootja saadab sõnumi Routing Key=A.B.A, suunatakse rahuldavad A.*.* ja *.B.* järjekorda 1 ja järjekord2.
  • Kui tootja saadab sõnumi Routing Key=A.B.C, siis A.*.* ja *.B.* ning *.* on rahuldatud. C suunatakse ridadele 1, järjekord2, järjekord 3.


Rakendusstsenaariumid:

  • uudiste uuendused, mis puudutavad kategooriaid või silte;
  • Taustaülesanded, mida täidavad mitmed töötajad, kellest igaüks vastutab konkreetsete ülesannete täitmise eest.



Pealüliti

Päise lülitid ei tugine marsruutimisvõtme sidumisvõtmete reeglitele sõnumite marsruutimiseks, vaid sobivad saadetud sõnumi sisu päise atribuudi alusel.

Pealülitiid võib pidada otse ühendatud lüliti teiseks ilminguks. Kuid otsese lüliti marsruutimisvõti peab olema string ning päise atribuudi väärtused ei ole sellega piiratud, vaid võivad olla isegi täisarvud või räsiväärtused (sõnastikud) jne. Rohkem paindlikkust (aga praktikas kasutame pealülitiid harva).

Töövoog:


  • Kui järjekord on seotud päise lülitiga, on mitu päist samaaegselt seotud sobitamiseks.
  • Saabuvad sõnumid kannavad päist ja "x-match" parameetrit. Kui "x-match" on seatud "ükskõik milliseks", saab sobitada ükskõik millise päise väärtuse, ja kui "x-match" on seatud "all"-ks, tuleb kõik päise väärtused sobitada.



Switchi kokkuvõte



Siduv

Virtuaalne ühendus Exchange'i ja Queue'i vahel.

BindingKey on reeglite kirjeldus vahetus- ja järjekorra sidumiste kohta. Sidumisvõti määrab, millist tüüpi marsruutimisvõti määratakse praeguse vahetuse järjekorrale.

Marsruutimisvõti

Marsruutimisreeglid, mida virtuaalmasin saab kasutada, et määrata, kuidas konkreetset sõnumit suunata.

Sidumisvõti vs. marsruutimisvõti


  • Sidumisvõti on sidumisvõti järjekorra ja lüliti vahel;
  • Marsruutimisvõti on info, mille tootja saadab lülitile;
  • Kui sidumisvõti ja marsruutimisvõti vastavad, pane sõnum vastavasse järjekorda.



Sidumisvõti on Exchange'i ja järjekorra sidumise reeglite kirjeldus, mida kasutatakse selleks, et analüüsida, kui Exchange saab sõnumi, saab Exchange'i vastu võetud sõnumil Marsruutimisvõtme väli ning Exchange sobitab selle Routing Key kõigi praeguse Exchange'i sidumisvõtmetega ning kui nõuded on täidetud, saadetakse see Binding'i Võti on järjekorraga seotud sõnumi saatmiseks.

Sidumisvõti vs. marsruutimisvõti erinevates lülitites


Vaikimisi lüliti: Sidumisvõti on järjekorra nimi, mida ei saa kohandada. Marsruutimisvõti on ka järjekorra nimi enne, kui see edukalt järjekorda suunatakse
Otseühenduse lüliti: Sidumisvõti on järjekorra nimi, mida saab kohandada. Marsruudivõtmeid saab edukalt järjekorda suunata ainult siis, kui sidumisvõti on sama
Ventilaatori lüliti: Sidumisvõtit pole; Muidugi ei ole marsruutimisvõtit. Automaatselt suunatakse kõigile lülitiga seotud järjekordadele
Teema lüliti: kohandatud sidumisvõti; Kohanda marsruutimisvõtit. Marsruutimisvõti == Sidumisvõti ning udune sobitus tuleb edukalt järjekorda suunata
Pealüliti: ilma sidumisvõtmeta; Muidugi ei ole marsruutimisvõtit. Vasted, mis põhinevad saadetud sõnumi sisu päiste atribuudil


Järjekorda

Salvestab sõnumeid, mida äpp hakkab tarbima.

Järjekorra omadused:

  • Nimi: Järjekorra nimi
  • Vastupidavus: järjekord eksisteerib ka pärast sõnumimaakleri taaskäivitamist
  • Eksklusiivne: Kasutatakse ainult ühe ühenduse poolt ja järjekord kustutatakse, kui ühendus suletakse
  • Automaatne kustutamine: kustutatud, kui viimane tarbija loobub tellimusest
  • Argumendid: Mõned sõnumivahendajad kasutavad seda lisafunktsioonide tegemiseks, mis sarnanevad TTL-ile


Järjekorra loomine:
Järjekordi saab kasutada alles pärast nende deklareerimist. Kui järjekorda veel ei eksisteeri, siis järjekorra deklareerimine loob selle. Kui deklareeritud järjekord juba eksisteerib ja atribuudid on identsed, ei mõjuta deklaratsioon algset järjekorda. Kui deklaratsiooni atribuudid erinevad olemasoleva järjekorra omadest, lisatakse kanalitasemel erand veakoodiga 406.

Järjekorra püsivus:
Püsivusjärjekord salvestatakse kettale ja jääb sinna ka maakleri taaskäivitamisel. Järjekordi, mida ei püsita, nimetatakse ajutisteks järjekordadeks. Kõik stsenaariumid ja juhtumid ei nõua järjekorra püsimist.

Püsiv järjekord ei muuda sinna suunatud sõnumeid püsivaks. Kui sõnumiagent katkeb ja taaskäivitatakse, deklareeritakse püsivusjärjekord taaskäivituse ajal uuesti ning igal juhul saab taastada ainult püsivad sõnumid.

Tarbija

Tarbijate tarbimise uudised. AMQP-s on tarbijatel kaks võimalust ootel olevate sõnumite saamiseks:

Sõnumite vahendustarkvara edastab sõnumeid tarbijatele (push API)
Tarbijad saavad aktiivselt sõnumeid (pull API)
Märkus: Kui mitu tarbijat kuulavad sama järjekorda, tarbib järjekorras olevad sõnumid ainult üks tarbijatest (mitte üks kord iga tarbija puhul)

Sõnum

Sõnumite, teenuste ja rakenduste vahel edastatav info koosneb omadustest ja kehadest.

Atribuudid muudavad sõnumeid, nagu sõnumi prioriteet, viivitus ja muud täiustatud funktsioonid, ning peamine osa on sõnumi keha sisu.

Sõnumi omadused:

  • Sisutüüp
  • Sisukodeerimine
  • Marsruutimisvõti
  • Edastusrežiim (püsiv või mitte)
  • Edastusrežiim (püsiv või mittepüsiv)
  • Sõnumi prioriteet
  • Sõnumite avaldamise ajatempel
  • Aegumistähtaeg
  • Kirjastaja rakenduse id


Sõnumi põhiosa:
Lisaks atribuutidele sisaldavad AMQP sõnumid ka kasulikku koormust (andmeid, mida sõnum tegelikult kannab), mida AMQP proxy käsitleb läbipaistmatu baitide massiivina.

Sõnumivahendaja ei kontrolli ega muuda koormust. Sõnumid võivad sisaldada ainult atribuute, ilma et nad kannaksid lasti. Tavaliselt kasutatakse andmeid serialiseeritud formaadis nagu JSON ning raha säästmiseks seriaaliseerivad protokollipuhvrid ja MessagePackid struktureeritud andmed avaldamiseks sõnumite payloadina. AMQP ja selle eakaaslased kasutavad tavaliselt "content-type" ja "content-encoding" välju sõnumitega suhtlemiseks ja kasulike koormuste tuvastamiseks, kuid see põhineb ainult konventsioonidel.

Sõnumi püsivus:
Sõnumid avaldatakse püsivalt ning AMQP agent salvestab selle sõnumi kettale. Kui server taaskäivitatakse, kinnitab süsteem, et vastuvõetud püsivussõnum ei ole kadunud.

Lihtsalt sõnumi saatmine püsivale lülitile või selle suunamine püsivale järjekorrale ei muuda sõnumit püsivaks: sõnumi püsivus sõltub täielikult sõnumi enda püsivusrežiimist.

Sõnumite järjepidev avaldamine võib mõjutada jõudlust.

AMQP tööprotsess

Kirjastaja avaldab sõnumi vahetuse kaudu.

Lüliti jagab saabuvad sõnumid järjekorda, mis on seotud lülitiga vastavalt marsruutimisreeglitele.

Lõpuks edastab AMQP agent sõnumi tarbijale, kes on selle järjekorra tellinud, või saab tarbija selle vajadusel ise.

AMQP sõnumimehhanism

Sõnumi kinnitamine

Tarbijad ei pruugi mõnikord sõnumeid töödelda või mõnikord jooksevad otse kokku. Ja võrgu põhjused võivad samuti põhjustada erinevaid probleeme.
See tõstatab küsimuse, millal on õige aeg AMQP agentidel sõnumeid kustutada.

AMQP kaks sõnumi kinnitusrežiimi:

Automaatne kinnitusrežiim: Kustuta sõnum kohe, kui see saadetakse tarbijale sõnumi vahendustarkvara kaudu. (Kasutades AMQP meetodit: basic.deliver või basic.get-ok)
Selge kinnitusrežiim: Oota, kuni tarbija saadab kinnituse enne sõnumi kustutamist. (AMQP meetodi kasutamine: basic.ack)
Kui tarbija katkestab kõne ilma kinnituskviitungit saatmata, edastab AMQP agent sõnumi teisele tarbijale. Kui sel ajal pole ühtegi tarbijat saadaval, ootab sõnumivahendaja, kuni järgmine tarbija selles järjekorras registreerub, ja proovib siis uuesti tarnida.

Sõnumite tagasilükkamine

Kui tarbija saab sõnumi, võib töötlemisprotsess õnnestuda või ebaõnnestuda. Tarbija võib sõnumivahendajale (sõnumi vahendustarkvarale) öelda, et sõnumit ei töödeldud (või ei lõpetatud sel hetkel) "tagasilükatud sõnumi" tõttu.
Kui sõnum lükatakse tagasi, saab tarbija sõnumivahendajale öelda, mida sõnumiga teha – hävitada see või panna tagasi järjekorda.

Kui järjekorras on ainult üks tarbija, veendu, et sa ei lükka sõnumit tagasi ja pane selle tagasi järjekorda, põhjustades sõnumi lõputu tsükli samal tarbijal.

AMQP-s kasutatakse basic.reject meetodit sõnumite tagasilükkamiseks. Siiski on basic.reject piirang: sa ei saa seda kasutada mitme kinnitusega sõnumi tagasilükkamiseks. Aga kui kasutad RabbitMQ-d, saad selle probleemi lahendamiseks kasutada AMQP 0-9-1 laiendust, mida nimetatakse negatiivseteks kinnitusteks (tuntud ka kui nacks).


Originaal:Hüperlingi sisselogimine on nähtav.





Eelmine:JS-massiivid on erinevus ja kasutus kõigile ja mõnele
Järgmine:RabbitMQ AMQP sõnumiarhitektuuri üksikasjalik selgitus
Disclaimer:
Kõik Code Farmer Networki poolt avaldatud tarkvara, programmeerimismaterjalid või artiklid on mõeldud ainult õppimiseks ja uurimistööks; Ülaltoodud sisu ei tohi kasutada ärilistel ega ebaseaduslikel eesmärkidel, vastasel juhul kannavad kasutajad kõik tagajärjed. Selle saidi info pärineb internetist ning autoriõiguste vaidlused ei ole selle saidiga seotud. Ülaltoodud sisu tuleb oma arvutist täielikult kustutada 24 tunni jooksul pärast allalaadimist. Kui sulle programm meeldib, palun toeta originaaltarkvara, osta registreerimist ja saa paremaid ehtsaid teenuseid. Kui esineb rikkumist, palun võtke meiega ühendust e-posti teel.

Mail To:help@itsvse.com