Introduksjon til AMQP-protokollen
AMQP (Advanced Message Queuing Protocol) er en applikasjonslagsstandardprotokoll som tilbyr enhetlige meldingstjenester, og er en åpen standard for applikasjonslagsprotokoller designet for meldingsorientert mellomvare. AMQP er en nettverksprotokoll for overføring av asynkrone meldinger mellom prosesser.
Klienter og meldingsmellomvare basert på denne protokollen kan levere meldinger uten å være begrenset av ulike klient-/mellomvareprodukter, ulike utviklingsspråk osv.
Hovedegenskapene til AMQP er meldingsorientert, købasert, ruting (inkludert peer-to-peer og publish/subscribe), pålitelighet og sikkerhet. AMQP håndhever oppførselen til meldingsleverandører og klienter, og muliggjør ekte interoperabilitet mellom ulike leverandører.
Rutingsmeldinger
I AMQP-arkitekturen består enhver vellykket meldingsruting av tre deler:
- Utveksling: Der produsenter publiserer meldinger
- Køer: Hvor forbrukere mottar meldinger
- Bindings: Hvordan meldinger rutes fra svitsjen til en spesifikk kø
Utvekslinger og innbindinger
Så hvordan når meldingen køen? Når du ønsker å levere en melding til en forbruker, må du først sende den til utveksleren. Deretter, basert på visse regler eller rutingnøkler, vil RabbitMQ bestemme hvilken kø den skal levere meldinger til.
Regler – eller rutingnøkler – gjør det mulig å binde en kø til sentralen. RabbitMQ vil forsøke å matche rutingnøkkelen i meldingen med nøkkelen som brukes i bindingen. Meldingen leveres deretter til køen basert på én av fire utvekslingstyper: fanout, topic, direct, header
Utvekslingsutveksling
Denne typen utveksling sender alle meldingene den mottar til alle køer knyttet til den. Alle rutingnøkler som følger med den publiserte meldingen vil bli ignorert.
Temautveksling
I denne typen utveksling sendes meldinger til en kø basert på rutingnøkkelen. Dette betyr at meldinger sendt til emneutvekslingen må ha en spesifikk rutingnøkkel, som må være en liste med ord, adskilt av punkter (f.eks. 'acs.deviceoperations.'). Tekstgrensen er 255 byte.
Bindingsnøkkelen må være i samme format som rutingnøkkelen. Derfor vil meldinger sendt med en spesifikk rutingnøkkel bli levert til hver kø bundet med en tilsvarende bindingsnøkkel.
Bindingsnøkler tillater følgende uttrykksregler:
*(stjerne) kan bare erstatte ett ord # (hash) kan erstatte null eller flere ord Når en kø er bundet med en "#" (hash) bindingsnøkkel, vil den motta alle meldinger uavhengig av rutingnøkkelen, akkurat som i en Fanout fan-out utveksling.
Direkte utveksling
Når en kø erklæres, vil denBind automatisk til en bryter som bruker kønavnet som rutingtast。 Hvis rutingnøkkelen stemmer, leveres meldingen til riktig kø.
Header-utveksling
Header-svitsjer ligner noe på emnesvitsjer, men i motsetning til emnesvitsjer baseres rutingen på rutenøkler, og rutingverdiene til header-svitsjer er basert på meldingens headerdata. Topic switch-rutingnøkkelen er bare en streng, mens header-switchen kan være et heltall og en hash.
(Slutt)
|