Introduktion til AMQP-protokollen
AMQP (Advanced Message Queuing Protocol) er en applikationslagsstandardprotokol, der tilbyder ensartede beskedtjenester, og er en åben standard for applikationslagsprotokoller designet til meddelelsesorienteret middleware. AMQP er en netværksprotokol til udveksling af asynkrone beskeder mellem processer.
Klienter og beskedmiddleware baseret på denne protokol kan levere beskeder uden at være begrænset af forskellige klient-/middlewareprodukter, forskellige udviklingssprog osv.
De vigtigste karakteristika ved AMQP er meddelelsesorienteret, købaseret, routing (inklusive peer-to-peer og publicish/subscribe), pålidelighed og sikkerhed. AMQP håndhæver adfærden hos beskedudbydere og klienter, hvilket muliggør ægte interoperabilitet mellem forskellige leverandører.
Routing-beskeder
I AMQP-arkitekturen består enhver succesfuld meddelelsesrouting af tre dele:
- Udveksling: Hvor producenter offentliggør beskeder
- Køer: Hvor forbrugere modtager beskeder
- Bindings: Hvordan beskeder dirigeres fra switchen til en specifik kø
Udvekslinger og bindinger
Så hvordan når beskeden køen? Når du ønsker at levere en besked til en forbruger, skal du først sende den til udveksleren. Derefter, baseret på visse regler eller routingnøgler, vil RabbitMQ beslutte, hvilken kø den skal levere beskeder til.
Regler – eller routing-taster – gør det muligt at binde en kø til børsen. RabbitMQ vil forsøge at matche routing-nøglen i beskeden med den nøgle, der bruges i bindingen. Beskeden leveres derefter til køen baseret på en af fire udvekslingstyper: fanout, topic, direct, header
Fanout-udveksling
Denne type udveksling sender alle de beskeder, den modtager, til alle køer, der er bundet til den. Alle routingnøgler, der følger med den offentliggjorte besked, vil blive ignoreret.
Emneudveksling
I denne type udveksling sendes beskeder til en kø baseret på routingnøglen. Det betyder, at beskeder sendt til emneudvekslingen skal have en specifik routingnøgle, som skal være en liste af ord, adskilt af punkter (f.eks. 'acs.deviceoperations.'). Tekstgrænsen er 255 bytes.
Bindingsnøglen skal være i samme format som routingtasten. Derfor vil beskeder sendt med en specifik routingnøgle blive leveret til hver kø, der er bundet med en tilsvarende bindingsnøgle.
Bindingsnøgler tillader følgende udtryksregler:
*(stjerne) kan kun erstatte ét ord # (hash) kan erstatte nul eller flere ord Når en kø bindes med en "#" (hash) bindingsnøgle, vil den modtage alle beskeder uanset routing-nøglen, ligesom i en Fanout fan-out exchange.
Direkte udveksling
Når en kø erklæres, vil denBind automatisk til en switch, der bruger køens navn som routing-nøgle。 Hvis routingnøglen matcher, leveres beskeden til den relevante kø.
Header-udveksling
Header-switches ligner til dels emne-switches, men i modsætning til topic-switches er routingen baseret på rute-nøgler, og routingværdierne for header-switches er baseret på header-dataene i beskeden. Emneskiftets routingnøgle er kun en streng, mens header-switchen kan være et heltal og en hash.
(Slut)
|