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:
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ä.
|