Introductie tot het AMQP-protocol
AMQP (Advanced Message Queuing Protocol) is een standaardprotocol op applicatielaag dat unified messaging-diensten biedt en een open standaard is voor applicatielaagprotocollen ontworpen voor message-oriented middleware. AMQP is een netwerkprotocol voor het doorgeven van asynchrone berichten tussen processen.
Clients en message-middleware gebaseerd op dit protocol kunnen berichten bezorgen zonder beperkt te worden door verschillende client-/middlewareproducten, verschillende ontwikkeltalen, enzovoort.
De belangrijkste kenmerken van AMQP zijn berichtgeoriënteerd, in de wachtrij, routering (inclusief peer-to-peer en publiceren/abonneren), betrouwbaarheid en beveiliging. AMQP handhaaft het gedrag van berichtproviders en klanten, waardoor echte interoperabiliteit tussen verschillende leveranciers mogelijk is.
Routeringsberichten
In de AMQP-architectuur bestaat elke succesvolle berichtroutering uit drie onderdelen:
- Uitwisseling: Waar producenten berichten publiceren
- Wachtrijen: Waar consumenten berichten ontvangen
- Bindings: Hoe berichten van de switch naar een specifieke wachtrij worden gerouteerd
Uitwisselingen en bindingen
Hoe bereikt het bericht dan de wachtrij? Wanneer je een bericht aan een consument wilt overbrengen, moet je het eerst naar de uitwisselaar sturen. Vervolgens bepaalt RabbitMQ op basis van bepaalde regels of routeringssleutels aan welke wachtrij berichten moet worden afgeleverd.
Regels - of routeringssleutels - stellen je in staat een wachtrij aan de exchange te koppelen. RabbitMQ zal proberen de routeringssleutel in het bericht te matchen met de toets die in de binding wordt gebruikt. Het bericht wordt vervolgens aan de wachtrij geleverd op basis van een van vier uitwisselingstypen: fanout, topic, direct, header
Fanout-uitwisseling
Dit type uitwisseling zendt alle ontvangen berichten uit naar alle wachtrijen die eraan gekoppeld zijn. Alle routeringssleutels die bij het gepubliceerde bericht worden geleverd, worden genegeerd.
Onderwerpuitwisseling
In dit type uitwisseling worden berichten naar een wachtrij gestuurd op basis van de routeringssleutel. Dit betekent dat berichten die naar de topic-uitwisseling worden gestuurd, een specifieke routeringssleutel moeten hebben, die een lijst van woorden moet zijn, gescheiden door punten (bijv. 'acs.deviceoperations.'). De limiet voor de formulering is 255 bytes.
De bindingstoets moet in hetzelfde formaat zijn als de routeringssleutel. Daarom worden berichten die met een specifieke routeringssleutel worden verzonden, geleverd aan elke wachtrij die met een bijpassende bindingssleutel is gebonden.
Bindingssleutels maken de volgende expressieregels mogelijk:
*(asterisk) kan slechts één woord vervangen # (hash) kan nul of meer woorden vervangen Wanneer een wachtrij wordt gebonden met een "#" (hash) bindingssleutel, ontvangt deze alle berichten ongeacht de routeringssleutel, net als bij een Fanout fan-out uitwisseling.
Directe uitwisseling
Wanneer een wachtrij wordt aangekondigd, zal deze dat doenBind automatisch aan een switch die de wachtrijnaam als routingsleutel gebruikt。 Als de routeringssleutel overeenkomt, wordt het bericht afgeleverd aan de juiste wachtrij.
Headerruil
Headerswitches lijken enigszins op topic switches, maar in tegenstelling tot topic switches is de routing gebaseerd op routesleutels, en zijn de routeringswaarden van header switches gebaseerd op de headergegevens van het bericht. De topic switch routing key is slechts een string, terwijl de headerswitch een geheel getal en een hash kan zijn.
(Einde)
|