Tämä artikkeli on konekäännöksen peiliartikkeli, klikkaa tästä siirtyäksesi alkuperäiseen artikkeliin.

Näkymä: 3797|Vastaus: 0

Yksityiskohtainen selitys AMQP-protokollasta

[Kopioi linkki]
Julkaistu 14.8.2022 23.22.55 | | | |
Johdanto AMQP-protokollaan

AMQP (Advanced Message Queuing Protocol) on sovelluskerroksen standardiprotokolla, joka tarjoaa yhtenäiset viestipalvelut ja on avoin standardi sovelluskerroksen protokollille, jotka on suunniteltu viestipohjaiseen väliohjelmistoon. AMQP on verkkoprotokolla asynkronisten viestien välittämiseen prosessien välillä.

Tähän protokollaan perustuvat asiakkaat ja viestiväliohjelmistot voivat välittää viestejä ilman, että niitä rajoittavat eri asiakas-/middleware-tuotteet, eri kehityskielet jne.

AMQP:n pääominaisuuksia ovat viestipohjainen, jonotettu, reititys (mukaan lukien vertaisverkko ja julkaise/tilaa), luotettavuus ja turvallisuus. AMQP valvoo viestintoimittajien ja asiakkaiden käyttäytymistä, mahdollistaen todellisen yhteentoimivuuden eri toimittajien välillä.

AMQP ja JMS

JMS oli yritys standardoida varhaista viestien middlewarea, se standardoitiin vain API-tasolla, eikä se ollut lainkaan yhteensopivuuden luomista.

Toisin kuin JMS, AMQP on langallinen protokolla, joka kuvaa verkon yli siirrettävän datan muotoa tavuina. Tämän seurauksena mikä tahansa työkalu, joka noudattaa tätä tietomuotoa ja luo sekä tulkitsee viestejä, on yhteensopiva muiden yhteensopivien työkalujen kanssa.

AMQP:n ydinkoostumus



Tuottaja

Tuotantouutiset.

ConnectionFactory

Tehdas, joka valmistaa Connectionia.

Yhteys

Yhteys, sovellusverkkoyhteys Broker TCP/IP/Triple Handshake ja Quad Wave.

AMQP-yhteydet ovat yleensä pitkiä yhteyksiä. AMQP on sovelluskerroksen protokolla, joka käyttää TCP:tä luotettavan toimituksen takaamiseksi. AMQP käyttää tunnistautumismekanismeja ja tarjoaa TLS (SSL) -suojan. Kun sovelluksen ei enää tarvitse yhdistyä AMQP-välityspalvelimeen, sen täytyy vapauttaa AMQP-yhteys sulavasti sen sijaan, että vain sulkisi TCP-yhteyden.

Kanava

Verkkokanava on kevyt yhteys, joka on rakennettu Connectionin päälle. Lähes kaikki operaatiot suoritetaan kanavissa, jotka ovat kanavia viestien lukemiseen ja kirjoittamiseen, ja asiakkaat voivat muodostaa parit jokaiselle kanavalle, joista kukin edustaa istuntotehtävää.

Jos liitäntää verrataan valokuitukaapeliin, kanavakanavaa verrataan yhteen kuituoptisen kaapelin kuiduista. Connectionille voidaan luoda minkä verran kanavia tahansa.

Suurin osa liiketoimintatoiminnoistamme tapahtuu kanavan käyttöliittymässä, mukaan lukien:


  • queueDeclare
  • Vaihdon ilmoitus kytkimen osalta
  • queueBind queueBind
  • Julkaise viesti perusJulkaise
  • Kuluttajauutiset, peruskulutus, jne.



Välittäjä

Hyväksy asiakkaan yhteys AMQP-entiteettipalveluiden, kuten rabbitmq:n, toteuttamiseksi.

VirtualHost (Web-hosting)

Virtuaalinen isännöinti, jota käytetään loogiseen eristykseen, virtuaaliisännällä voi olla useita vaihtoja ja jonoja, ja samalla virtuaaliisännällä ei voi olla samannimisiä vaihtoja.

Useiden erillisten ympäristöjen (käyttäjät, käyttäjäryhmät, kytkimet, jonot jne.) toteuttamiseksi yhdellä välityspalvelimella AMQP tarjoaa virtuaalisten isäntien käsitteen (virtuaaliset isännät – vhostit). Tämä on hyvin samankaltainen kuin verkkopalvelimien webhotellikonsepti, joka tarjoaa täysin eristäytyneen ympäristön AMQP-yksiköille. Kun yhteys on muodostettu, AMQP-asiakas määrittää, mitä virtuaalista isäntää käytetään.

Vaihto

Kytkin vastaanottaa viestejä ja lähettää viestejä sidotulle jonolle reititysavaimen perusteella (ilman viestin tallennusmahdollisuuksia).

Kytkin on AMQP-yksikkö, jota käytetään viestien lähettämiseen. Kun kytkin saa viestin, se ohjaa sen yhteen tai nollaan jonoon. Sen käyttämä reititysalgoritmi määräytyy kytkimen tyypin ja sitomissääntöjen mukaan.

Kytkintyyppi:


  • Suora vaihto
  • Fanout-vaihto
  • Aiheenvaihto
  • Otsikonvaihto



Kytkimen ominaisuudet:

  • Nimi: Kytkimen nimi
  • Kestävyys: Pysyvyyslippu, joka osoittaa, onko tämä kytkin säilynyt vai ei
  • Automaattinen poisto: Poista lippu, joka osoittaaKun kaikki jonot on tehty tämän vaihdon avulla, poistetaanko ne
  • Argumentit: Riippuvainen itse agentista


Switchin tila:

  • Kestävä
  • Lyhytaikainen


Pysyvät kytkimet ovat olemassa välittäjän uudelleenkäynnistyksen jälkeen, kun taas vaihekytkimiä ei ole (ne täytyy julistaa uudelleen, kun välittäjä on taas toiminnassa).


Oletuskytkin

Oletusvaihto on itse asiassa suora vaihto, jonka viestivälittäjä on ennalta ilmoittanut eikä sillä ole nimeä (nimi on tyhjä merkkijono).

Voit ajatella oletuskytkintä erityisenä suoraan kiinnitettynä kytkimenä.
Oletuskytkimen nimi: Null string (AMQP-oletus)
Oletuskytkintyyppi: Suoraan kiinnitetty kytkin

Jonon luomisessa, kunhan sidottavaa kytkintä ei ole määritelty, se sidotaan automaattisesti oletuskytkimeen, ja sidonnan reititysavaimen nimi on sama kuin jonon nimi.

Suora yhteys kytkimeen

Suoraan liitetty kytkin välittää viestit vastaavien sitomisavainten jonoon, joka perustuu viestin kuljettamaan reititysavaimeen. Suoran kytkimen käyttämä unicast-reititys viestin käsittelyyn.

Jonon luomisessa, jos se on sidottu suoraan kytkimeen, sen ei tarvitse määrittää reititysavaimen nimeä, koska sillä on oletusreititysavaimen nimi, joka on sama kuin jonon nimi.

Suoraan kytkettyjen kytkimien jono jakaa tehtävät tyypillisesti useille kuluttajille silmukassa (tätä kutsutaan kyselyksi).

Työnkulku:


  • Kun sitoo jonon kytkimeen, anna sille sitomisavain, olettaen R;
  • Kun viesti, jossa on reititysavain, lähetetään suoraan liitetylle kytkimelle, kytkin ohjaa sen jonoon, jossa on reititysavain.





Tuuletinkytkimet

Tuuletinkytkin ohjaa viestit kaikille siihen sidotuille jonoille, riippumatta sidotusta reititysavaimesta.

Jos N jonoa on sidottu sektorikytkimeen, kun viesti lähetetään tälle sektorikytkimelle, kytkin lähettää kopion viestistä kaikille N jonolle erikseen. Tuuletinkytkimiä käytetään yleensä viestien lähetyksen ohjaamiseen.




Sovellusskenaariot:

viestien lähettäminen;
Ryhmäkeskustelutoiminto.

Teeman vaihto

Aiheenvaihto lähettää viestejä yhdelle tai useammalle jonolle reititysavaimen ja Exchange-tyypin mukaan, ja käytämme sitä usein erilaisten julkaise/tilaamisen, eli julkaisutilausten toteuttamiseen.

Suoraan liitettävien kytkimien reitityssäännöt ovat tiukasti sovitettuja, mikä tarkoittaa, että reititysavaimen täytyy vastata sitomisavainta ennen viestin lähettämistä jonoon.
Aiheenvaihdon reitityssäännöt ovat epämääräisiä otteluita, jotka voidaan järjestää täyttämällä joitakin sääntöjä villikorttien avulla.

Se määrää:

  • Binding key -avaimessa voi olla kaksi erikoismerkkiä * ja # fuzzy matchingia varten. missä * käytetään vastaamaan sanaa, #用于匹配多个单词 (voi olla nolla)
  • Reititysavain on piste-eroteltu merkkijono (kutsumme jokaista yksittäistä merkkijonoa, joka on erotettu pisteellä, merkitse sana)





  • Kun tuottaja lähettää viestin Routing Key=A.A.A.A, vain A.*.* täyttyy, ja se reititetään vain queue1:lle.
  • Kun tuottaja lähettää viestin Routing Key=A.B.A, tyydyttävät A.*.* ja *.B.* reititetään queue1:lle ja queue2:lle.
  • Kun tuottaja lähettää viestin Routing Key=A.B.C, niin A.*.*, *.B.* ja *.* täyttyvät. C reititetään jonoon 1, jonoon 2, jonoon 3.


Sovellusskenaariot:

  • uutispäivityksiä, jotka liittyvät kategorioihin tai tageihin;
  • Taustatehtävät, jotka suorittavat useat työntekijät, joista jokainen vastaa tiettyjen tiettyjen tehtävien hoitamisesta.



Pääkytkin

Otsikkokytkimet eivät perustu reititysavaimen ja viestien reititysnäppäimen yhdistämissääntöihin, vaan vastaavat lähetetyn viestin sisällön otsikottattribuutin perusteella.

Pääkytkimiä voidaan pitää toisena suoraan kiinnitetyn kytkimen ilmentymänä. Kuitenkin suoran kytkimen reititysavaimen täytyy olla merkkijono, eikä otsikkoattribuuttiarvot ole tämän rajoittamia, vaan ne voivat olla kokonaislukuja tai hajautusarvoja (sanakirjoja) jne. Enemmän joustavuutta (mutta käytännössä käytämme harvoin pääkytkimiä).

Työnkulku:


  • Kun jono on sidottu otsikkokytkimeen, useita otsikoita on sidottu samanaikaisesti yhdistämistä varten.
  • Saapuvat viestit sisältävät otsikon ja "x-match"-parametrin. Kun "x-match" on asetettu "any"-arvoon, mikä tahansa otsikon arvo voidaan sovittaa, ja kun "x-match" on asetettu "all", kaikki otsikon arvot on sovitettava.



Kytkimen yhteenveto



Sitova

Virtuaaliyhteys Exchange- ja Queue-laitteiden välillä.

BindingKey on sääntökuvaus Exchange- ja Queue-sidoksille. Sitomisavain määrittelee, millainen reititysavain liitetään tällä hetkellä sidotulle jonolle nykyisessä vaihdossa.

Reititysavain

Reitityssäännöt, joita virtuaalikone voi käyttää määrittääkseen, miten tietty viesti reititetään.

Sitomisavain vs. reititysavain


  • Binding key on binding key jonon ja kytkimen välillä;
  • Reititysavain on tieto, jonka tuottaja lähettää kytkimelle;
  • Kun Binding Key ja Routing Key vastaavat, laita viesti vastaavaan jonoon.



Binding Key on Exchange- ja Queue-sidonnan sääntökuvaus, jota käytetään jäsentämään kun Exchange vastaanottaa viestin, viestin vastaanottama viesti sisältää Routing Key -kentän, ja Exchange yhdistää tämän Reititysavaimen kaikkiin nykyisen Exchangen sitomisavaimiin, ja jos vaatimukset täyttyvät, se lähetetään Binding -avaimelle Avain on sidottu jonoon viestin lähettämiseksi.

Näppäimen sitominen vs. reititysavain eri kytkimissä


Oletuskytkin: Binding Key on jonon nimi, jota ei voi muokata. Reititysavain on myös jonon nimi ennen kuin se voidaan onnistuneesti ohjata jonoon
Suora yhteyskytkin: Binding Key on jonon nimi, jota voi muokata. Reititysavaimet voidaan onnistuneesti reitittää jonoon vain, kun Binding Key on sama
Tuuletinkytkin: Ei sidontaavainta; Tietenkään reititysavainta ei ole. Automaattinen reititys kaikille kytkimeen sidotuille jonoille
Teemakytkin: räätälöity Binding Key; Muokkaa reititysavainta. Reititysavain==Binding Key, ja epämääräinen vastaavuus on reititettävä jonoon onnistuneesti
Pääkytkin: ei sidontaavainta; Tietenkään reititysavainta ei ole. Osumat perustuvat lähetetyn viestin sisältöön kuuluvan otsikon attribuuttiin


Jono

Tallentaa viestit, jotka sovellus on juuri ottamassa käyttöön.

Jonon ominaisuudet:

  • Nimi: Jonon nimi
  • Kestävä: Jono on edelleen olemassa viestivälittäjän uudelleenkäynnistyksen jälkeen
  • Eksklusiivinen: Käytössä vain yhdellä yhteydellä, ja jono poistetaan, kun yhteys suljetaan
  • Automaattinen poisto: Poistettu, kun viimeinen käyttäjä peruuttaa tilauksen
  • Argumentit: Jotkut viestinvälittäjät käyttävät sitä lisätoimintoihin, jotka muistuttavat TTL:ää


Jonon luominen:
Jonoja voi käyttää vasta niiden julkistamisen jälkeen. Jos jonoa ei vielä ole, jonon määrittäminen luo sen. Jos ilmoitettu jono on jo olemassa ja attribuutit ovat identtisiä, määrityksellä ei ole vaikutusta alkuperäiseen jonoon. Jos määritelmän attribuutit poikkeavat olemassa olevan jonon attribuutit, heitetään kanavatason poikkeus, jonka virhekoodi on 406.

Jonon pysyvyys:
Persistenssijono tallennetaan levylle ja pysyy siellä, kun välittäjä käynnistetään uudelleen. Jonoja, joita ei säilytetä, kutsutaan tilapäisiksi jonoiksi. Kaikki skenaariot ja tapaukset eivät vaadi jonon pysyvyyttä.

Pysyvä jono ei tee sille reititetyistä viesteistä pysyviä. Jos viestiagentti sulkee puhelun ja käynnistetään uudelleen, pysyvyysjono julistetaan uudelleen uudelleenkäynnistyksen aikana, ja joka tapauksessa vain säilyneet viestit voidaan palauttaa.

Kuluttaja

Kuluttajakulutusuutiset. AMQP:ssä kuluttajilla on kaksi tapaa saada odottavia viestejä:

Message middleware välittää viestejä kuluttajille (push API)
Kuluttajat saavat aktiivisesti viestejä (pull API)
Huomautus: Kun useampi kuluttaja kuuntelee samaa jonoa, jonossa olevat viestit kulutetaan vain yhden kuluttajan toimesta (ei kerran kukin kuluttaja)

Viesti

Viestien, palveluiden ja sovellusten välillä välitetty data koostuu ominaisuuksista ja kappaleista.

Attribuutit muuttavat viestejä, kuten viestin prioriteettia, viivettä ja muita edistyneitä ominaisuuksia, ja päärunko on viestin rungon sisältö.

Viestin ominaisuudet:

  • Sisältötyyppi
  • Sisällönkoodaus
  • Reititysavain
  • Toimitustapa (pysyvä tai ei)
  • Toimitustapa (pysyvä tai ei-pysyvä)
  • Viestin prioriteetti
  • Viestien julkaisuaikaleima
  • Vanhenemisaika
  • Julkaisijan sovelluksen id


Viestin runko:
Attribuuttien lisäksi AMQP-viesteissä on myös hyötykuorma (data, jonka viesti todella kantaa), jota AMQP-välityspalvelin käsittelee läpinäkymättömänä tavutaulukkona.

Viestivälittäjä ei tarkasta tai muokkaa hyötykuormaa. Viestit voivat sisältää vain attribuutteja ilman hyötykuormaa. Se käyttää tyypillisesti dataa sarjoitetussa muodossa kuten JSON, ja säästääkseen rahaa protokollapuskurit ja MessagePackit sarjallisoivat rakenteellisen datan julkaistavaksi viestikuormana. AMQP ja sen vertaiset käyttävät tyypillisesti "content-type"- ja "content-encoding" -kenttiä viestien kanssa kommunikoidakseen hyötykuormien tunnistamiseksi, mutta tämä perustuu vain käytäntöihin.

Viestin pysyvyys:
Viestit julkaistaan pysyvästi, ja AMQP-agentti tallentaa tämän viestin levylle. Jos palvelin käynnistetään uudelleen, järjestelmä vahvistaa, ettei vastaanotettu pysyvyysviesti ole menetetty.

Pelkkä viestin lähettäminen pysyvälle kytkimelle tai sen reitittäminen pysyvään jonoon ei tee viestistä pysyvää: viestin pysyvyys riippuu täysin viestin pysyvyystilasta.

Viestien jatkuva julkaiseminen voi vaikuttaa suorituskykyyn.

AMQP:n työprosessi

Julkaisija julkaisee viestin Exchangen kautta.

Kytkin jakaa saapuvat viestit kytkimeen sidottu jonoon reitityssääntöjen mukaisesti.

Lopuksi AMQP-agentti välittää viestin kuluttajalle, joka on tilannut jonon, tai kuluttaja saa sen itse tarpeen mukaan.

AMQP-viestintämekanismi

Viestin vahvistus

Kuluttajat epäonnistuvat ajoittain viestien käsittelyssä tai kaatuvat suoraan. Verkkoon liittyvät syyt voivat myös aiheuttaa erilaisia ongelmia.
Tämä herättää meille kysymyksen siitä, milloin on oikea aika AMQP-agenteille poistaa viestejä.

AMQP:n kaksi viestin kuittaustilaa:

Automaattinen vahvistustila: Poista viesti heti, kun viestivälitys lähettää sen kuluttajalle. (Käyttäen AMQP-menetelmää: basic.deliver tai basic.get-ok)
Eksplisiittinen vahvistustila: Odota, että käyttäjä lähettää kuittauksen ennen viestin poistamista. (Käyttäen AMQP-menetelmää: basic.ack)
Jos kuluttaja lopettaa puhelun lähettämättä vahvistuskuittia, AMQP:n edustaja välittää viestin toiselle kuluttajalle. Jos tuolloin ei ole saatavilla asiakkaita, viestinvälittäjä odottaa seuraavan kuluttajan rekisteröitymistä jonoon ja yrittää sitten toimittaa uudelleen.

Hylkää viestit

Kun kuluttaja saa viestin, käsittelyprosessi voi onnistua tai epäonnistua. Kuluttaja voi ilmoittaa viestinvälittäjälle (viestivälitysohjelma), että viestiä ei käsitelty (tai ei valmistunut tässä vaiheessa) "hylätyn viestin" vuoksi.
Kun viesti hylätään, kuluttaja voi kertoa viestinvälittäjälle, mitä viestille tehdä – tuhota se tai laittaa takaisin jonoon.

Kun jonossa on vain yksi kuluttaja, varmista, ettet hylkää viestiä ja laita sitä takaisin jonoon, jolloin viesti kiertyy loputtomasti samalla kuluttajalla.

AMQP:ssä käytetään basic.reject -menetelmää viestien hylkäämiseen. Basic.reject -sivustolla on kuitenkin rajoitus: et voi käyttää sitä useiden viestien hylkäämiseen, joissa on kuittaukset. Mutta jos käytät RabbitMQ:ta, voit ratkaista tämän ongelman AMQP 0-9-1 -laajennuksella nimeltä negative acquestments (myös nacks).


Alkuperäinen:Hyperlinkin kirjautuminen on näkyvissä.





Edellinen:JS-taulukot ovat ero ja käyttö jokaisessa ja jossain
Seuraava:Yksityiskohtainen selitys RabbitMQ AMQP -viestiarkkitehtuurista
Vastuuvapauslauseke:
Kaikki Code Farmer Networkin julkaisemat ohjelmistot, ohjelmamateriaalit tai artikkelit ovat tarkoitettu vain oppimis- ja tutkimustarkoituksiin; Yllä mainittua sisältöä ei saa käyttää kaupallisiin tai laittomiin tarkoituksiin, muuten käyttäjät joutuvat kantamaan kaikki seuraukset. Tämän sivuston tiedot ovat peräisin internetistä, eikä tekijänoikeuskiistat liity tähän sivustoon. Sinun tulee poistaa yllä oleva sisältö kokonaan tietokoneeltasi 24 tunnin kuluessa lataamisesta. Jos pidät ohjelmasta, tue aitoa ohjelmistoa, osta rekisteröityminen ja hanki parempia aitoja palveluita. Jos rikkomuksia ilmenee, ota meihin yhteyttä sähköpostitse.

Mail To:help@itsvse.com