Wat is Advanced Message Queuing Protocol (AMQP)?

27 maart 2024

Advanced Message Queuing Protocol (AMQP) is een open standaard applicatielaagprotocol voor berichtgeoriënteerde berichten middleware, met de nadruk op berichtenwachtrijen, routering (punt-tot-punt en publiceren en abonneren), betrouwbaarheid en beveiliging.

In tegenstelling tot propriëtaire berichtensystemen is AMQP een open, gestandaardiseerd protocol dat interoperabiliteit tussen systemen en applicaties mogelijk maakt. Het stelt applicaties in staat om op een betrouwbare en schaalbare manier met elkaar te communiceren en berichten naar elkaar te verzenden, ongeacht hun onderliggende platform, architectuur of taal. Deze mogelijkheid maakt het tot een essentieel hulpmiddel voor het bouwen van complexe gedistribueerde systemen of het integreren van heterogene omgevingen.

AMQP werkt op basis van een makelaarsarchitectuur, waarbij de berichtenmakelaar optreedt als tussenpersoon die berichten van producenten ontvangt (verzenden toepassingen) en stuurt deze berichten naar de juiste consumenten (ontvangende applicaties). Dit model ontkoppelt producent en consument, waardoor ze onafhankelijk kunnen opereren.

Het protocol definieert een reeks componenten, zoals berichtenwachtrijen, uitwisselingen en bindingen die helpen bij het verzenden van berichten flexbare routering en bezorging van berichten. Bovendien specificeert AMQP zowel het gedrag van de berichten makelaar en het berichtenprotocol zelf, waardoor een betrouwbare bezorging van berichten wordt gegarandeerd via functies zoals berichtbevestiging, duurzame wachtrijen en berichtpersistentie.

Een korte geschiedenis van AMQP

AMQP is ontstaan ​​uit de behoefte aan een gestandaardiseerd, open en interoperabel protocol voor messaging-middleware. De ontwikkeling ervan begon in 2003 toen John O'Hara van JPMorgan Chase in Londen de beperkingen en kosten onderkende van het gebruik van bedrijfseigen berichtensystemen voor applicatie-integratie. Het doel was om een ​​protocol te creëren om berichtgerichte communicatie tussen verschillende platforms en technologieën te vergemakkelijken, waardoor de afhankelijkheid van specifieke leveranciers en eigen systemen wordt verminderd. De eerste officiële versie van AMQP, AMQP 0-9-1, werd uitgebracht in 2006.

De release van AMQP 1.0 in oktober 2011 markeerde een belangrijke mijlpaal. AMQP 1.0 introduceerde grote veranderingen, waardoor het protocol uitgebreider werd flexbaar en interoperabel door het definiëren van een taalonafhankelijk binair wire-level protocol dat op elk platform kan worden geïmplementeerd. Deze versie van AMQP kreeg brede steun vanuit de sector en werd in 2014 door de International Organization for Standardization (ISO) en de International Electrotechnical Commission (IEC) als internationale norm geratificeerd als ISO/IEC 19464.

Sindsdien is AMQP wereldwijd toegepast voor verschillende toepassingen, variërend van financiële dienstverlening tot IoT (internet der dingen) en cloud computergebruik.

Hoe werkt AMQP?

AMQP (Advanced Message Queuing Protocol) werkt via een zorgvuldig ontworpen raamwerk dat de berichtenstroom tussen producenten en consumenten op een betrouwbare, veilige en efficiënte manier orkestreert.

In de kern maakt het protocol gebruik van een op makelaars gebaseerde architectuur die als tussenpersoon fungeert en de communicatiepaden binnen het berichtensysteem beheert. Producenten sturen berichten naar de makelaar, waarin ze niet alleen de inhoud specificeren, maar ook kritisch zijn metadata, zoals routeringssleutels en berichtprioriteiten. Deze makelaar neemt vervolgens de verantwoordelijkheid op zich voor het verwerken van deze berichten, waarbij de juiste bestemmingen worden bepaald op basis van de vastgestelde routeringslogica.

Berichtroutering binnen AMQP wordt vergemakkelijkt door uitwisselingen, die berichten classificeren en naar de juiste wachtrijen sturen op basis van vooraf gedefinieerde regels en het gebruikte type uitwisseling. Deze opstelling maakt een verscheidenheid aan berichtenpatronen mogelijk, van eenvoudige point-to-point-berichten tot complexere modellen voor publiceren en abonneren. Wachtrijen slaan de berichten tijdelijk op, zodat ze veilig worden bewaard totdat een consument klaar is om ze te verwerken. Bij ontvangst van een bericht kunnen consumenten de verwerking ervan bevestigen en de makelaar een signaal geven het bericht uit de wachtrij te verwijderen, waardoor de integriteit en ordelijkheid van de bezorging van het bericht behouden blijft.

Deze geavanceerde interactie tussen de componenten van AMQP zorgt ervoor dat berichten niet alleen efficiënt worden afgeleverd, maar ook met een hoge mate van betrouwbaarheid en veiligheid. Het protocol ondersteunt geavanceerde functies zoals berichtbevestiging, transacties en duurzame berichtenuitwisseling, die essentieel zijn voor toepassingen die een gegarandeerde berichtaflevering vereisen en de mogelijkheid om te herstellen van systeemstoringen. Bovendien zorgen de beveiligingsmechanismen van AMQP, waaronder SASL, voor authenticatie en TLS voor het versleutelen van gegevens tijdens het transport.

AMQP-componenten

AMQP faciliteert complexe berichtenuitwisseling via een reeks kerncomponenten die op een gestructureerde manier met elkaar samenwerken. Deze componenten zijn van fundamenteel belang voor de AMQP-architectuur, waardoor deze een grote verscheidenheid aan berichtpatronen kan ondersteunen. Hier is een lijst en uitleg van deze belangrijke componenten:

  • Makelaar. De makelaar fungeert als tussenpersoon tussen de producenten van berichten (afzenders) en consumenten (ontvangers). Het is verantwoordelijk voor het ontvangen van berichten van producenten, het op de juiste manier routeren ervan en het bezorgen ervan bij de beoogde consumenten. De makelaar zorgt ervoor dat berichten efficiënt worden opgeslagen, beheerd en doorgestuurd, waardoor het berichtensysteem betrouwbaar en schaalbaar wordt.
  • Producent. De producer, ook wel uitgever genoemd, is een applicatie of dienst die berichten verzendt. Producenten creëren berichten en sturen deze naar een centrale binnen de makelaar, vaak zonder te weten welke specifieke consumenten de berichten zullen ontvangen. Hierdoor worden de verzendende en ontvangende delen van het systeem ontkoppeld, wat de communicatie verbetert flexibiliteit en schaalbaarheid.
  • Klant. Een consument is een applicatie of dienst die berichten ontvangt. Consumenten abonneren zich op een wachtrij binnen de makelaar en verwerken berichten zodra ze binnenkomen. Consumenten kunnen berichten bevestigen zodra ze zijn verwerkt, waardoor de makelaar wordt geïnformeerd dat het bericht veilig uit de wachtrij kan worden verwijderd.
  • Uitwisseling. Uitwisselingen zijn AMQP-entiteiten waar producenten berichten verzenden. Een centrale ontvangt en stuurt berichten naar een of meer wachtrijen op basis van de routeringssleutel, het uitwisselingstype en de bindingen van het bericht. Uitwisselingen ontkoppelen producenten van wachtrijen, waardoor complexere routeringslogica mogelijk wordt. Er zijn verschillende soorten uitwisselingen, waaronder:
    • Directe uitwisseling. Stuurt berichten naar wachtrijen op basis van een overeenkomende routeringssleutel.
    • Fanout-uitwisseling. Zendt berichten uit naar alle gebonden wachtrijen zonder rekening te houden met routeringssleutels.
    • Onderwerp uitwisseling. Stuurt berichten naar wachtrijen op basis van jokertekenovereenkomsten tussen de routeringssleutel en het routeringspatroon dat is opgegeven in de binding.
    • Kopteksten wisselen. Stuurt berichten door op basis van overeenkomende headerwaarden in plaats van routeringssleutels.
  • Wachtrij. Een wachtrij is een buffer waarin berichten worden opgeslagen totdat ze veilig door een consument kunnen worden verwerkt. Wachtrijen zorgen ervoor dat berichten bij de consument worden afgeleverd in de volgorde van wie het eerst komt, het eerst maalt, hoewel er prioriteiten kunnen worden gesteld. Consumenten abonneren zich op wachtrijen om berichten te ontvangen.
  • Verbindend. Bindingen zijn regels die wachtrijen aan uitwisselingen koppelen. Een binding kan een routeringssleutel of -patroon bevatten dat bepaalt hoe berichten van de centrale naar de wachtrij moeten worden gerouteerd. Bindingen bepalen de relatie tussen uitwisselingen en wachtrijen en bepalen hoe berichten worden gefilterd en gerouteerd binnen de makelaar.
  • Routeringssleutel. Een routeringssleutel is een label of identificatie die producenten aan berichten hechten wanneer deze naar een centrale worden verzonden. De waarde van de routeringssleutel wordt door de centrale gebruikt, in combinatie met de bindingsconfiguraties, om te bepalen welke wachtrijen het bericht moeten ontvangen.
  • Bericht. De boodschap bestaat uit de gegevens die tussen producent en consument worden getransporteerd. Het bestaat uit een payload (de feitelijke gegevens die moeten worden verzonden) en headers of eigenschappen (metagegevens over het bericht, zoals het type, de prioriteit en de bezorgingsmodus).
  • Kanaal. Een kanaal is een virtuele verbinding binnen een fysieke netwerkverbinding. Kanalen helpen bij het multiplexen van de netwerkverbinding tussen de AMQP-client (producent/consument) en de makelaar voor efficiëntere communicatie.
  • Virtuele host (vHost). Een virtuele host biedt een manier om applicaties te scheiden met behulp van dezelfde AMQP-broker. Elke virtuele host kan zijn eigen onafhankelijke set uitwisselingen, wachtrijen en bindingen hebben.

AMQP-gebruiksscenario's

AMQP is een veelzijdig berichtenprotocol dat een breed scala aan gebruiksscenario's in verschillende industrieën en toepassingen ondersteunt. De robuuste functieset, inclusief berichtenwachtrijen, routering, betrouwbaarheid en beveiliging, maakt het zeer geschikt voor complexe, gedistribueerde en schaalbare systemen. Hier zijn enkele belangrijke gebruiksscenario's voor AMQP:

  • Integratie van bedrijfsapplicaties. AMQP maakt bedrijfsapplicaties, -systemen en -systemen mogelijk databanken om op een betrouwbare en veilige manier te communiceren en gegevens uit te wisselen. Dit is vooral handig in heterogene omgevingen waar applicaties zijn gebouwd op verschillende platforms en technologieën die naadloos moeten samenwerken.
  • Ontkoppelde systemen. In microservices-architecturen of bij het implementeren van servicegeoriënteerde architecturen (SOA) zorgt AMQP ervoor dat services kunnen communiceren zonder nauw met elkaar te zijn gekoppeld. Deze ontkoppeling verbetert de schaalbaarheid en veerkracht van het systeem, omdat services onafhankelijk kunnen worden ontwikkeld, geïmplementeerd en geschaald.
  • Realtime gegevensverwerking. AMQP wordt gebruikt in scenario's die vereisen realtime gegevens verwerking, zoals streaming analytics, waarbij gegevens onmiddellijk moeten worden verzameld, verwerkt en geanalyseerd. Het protocol zorgt voor een betrouwbare bezorging van berichten, zelfs tijdens netwerkstoringen of verwerkingsvertragingen.
  • Load-balancing. AMQP kan taken of werklasten verdelen over meerdere werkprocessen of diensten, en daarbij helpen breng de lading in evenwicht en de algehele efficiëntie en het reactievermogen van het systeem verbeteren. Deze functie is vooral handig bij cloud computeromgevingen en gedistribueerde computeromgevingen met onvoorspelbare werklasten.
  • Asynchrone communicatie. AMQP ondersteunt asynchrone communicatiepatronen, waardoor applicaties berichten kunnen verzenden en ontvangen zonder bewerkingen te blokkeren. Dit type communicatie is cruciaal voor applicaties die een hoge doorvoersnelheid en lage latentie vereisen, omdat ze hierdoor responsief kunnen blijven terwijl ze op berichten wachten.
  • Internet der dingen (IoT). In IoT-toepassingen wordt AMQP gebruikt om gegevens van verschillende sensoren en apparaten te verzamelen en deze naar verwerkingssystemen te verzenden cloud Diensten. Het vermogen om via beperkte netwerken te werken en de veilige, betrouwbare berichtenuitwisseling maken het een uitstekende keuze voor IoT-scenario's.
  • Financiële diensten. AMQP wordt in de financiële sector gebruikt voor transactieverwerking, realtime handelssystemen en betalingsverwerking. De betrouwbaarheid en ondersteuning voor transactionele berichtenuitwisseling garanderen de integriteit en consistentie van financiële transacties.
  • Meldingen en waarschuwingen. AMQP kan worden gebruikt om meldingssystemen te implementeren, waarbij waarschuwingen, meldingen of e-mails naar gebruikers of systemen worden verzonden als reactie op specifieke gebeurtenissen of omstandigheden. De betrouwbare berichtenuitwisseling garandeert dat meldingen worden afgeleverd, zelfs als de ontvanger tijdelijk niet beschikbaar is.
  • Gezondheidszorg. In de gezondheidszorg maakt AMQP veilige en betrouwbare communicatie mogelijk tussen verschillende systemen, zoals patiëntendossiers, facturering en diagnostische apparatuur. Het zorgt ervoor dat gevoelige gegevens veilig worden verzonden en verwerkt in overeenstemming met de regelgeving.

AMQP versus MQTT

AMQP en MQTT (Message Queuing Telemetry Transport) zijn beide protocollen die zijn ontworpen voor berichtgeoriënteerde middleware, maar ze dienen verschillende doeleinden en zijn geoptimaliseerd voor verschillende gebruiksscenario's.

AMQP is een protocol met meer functies en biedt een breed scala aan berichtfuncties, waaronder berichtenwachtrijen, routering, transactiebeheer en beveiliging. Het model is inherent complexer en flexDit biedt robuustheid voor systemen die nauwkeurige controle nodig hebben over berichtengedrag en integraties op verschillende platforms.

Aan de andere kant is MQTT ontworpen om eenvoudig en lichtgewicht te zijn. Dit protocol volgt een publicatie-abonneerpatroon en blinkt uit in scenario's die minimale datapakketten en efficiënte berichtendistributie naar meerdere consumenten vereisen. MQTT wordt gekenmerkt door zijn lage energieverbruik en eenvoudige implementatie op apparaten met beperkte verwerkingsmogelijkheden, waardoor het ideaal is voor realtime berichtenuitwisseling in IoT-ecosystemen.

Hier is een overzicht van deze vergelijkingen:

VergelijkingspuntAMQPMQTT
OntwerpdoelOntworpen voor complexe berichtpatronen en bedrijfsintegratie.Ontworpen voor lichtgewicht berichtenuitwisseling, voornamelijk in IoT-scenario's.
ProtocoloverheadHoger vanwege een uitgebreidere functieset.Lager, geoptimaliseerd voor minimaal bandbreedtegebruik.
BerichtenmodelOndersteunt zowel point-to-point- als publishing-subscribe-modellen, samen met geavanceerde routering, transacties en berichtenwachtrijen.Maakt voornamelijk gebruik van een publicatie-abonneermodel, met minder focus op berichtroutering.
Quality of Service (QoS)Biedt verschillende niveaus van garantie voor berichtbezorging, waaronder maximaal één keer, minimaal één keer en precies één keer bezorging.Biedt drie QoS-niveaus: 0 (maximaal één keer), 1 (minstens één keer) en 2 (precies één keer).
CasesIdeaal voor integratie van bedrijfsapplicaties, complexe bedrijfsprocessen en situaties die betrouwbare berichtlevering en transactieondersteuning vereisen.Meest geschikt voor het verbinden van IoT-apparaten, vooral in omgevingen met beperkte bandbreedte en stroom.
Flexibiliteit en complexiteitComplexer vanwege een breed scala aan functies, waarvoor meer kennis vereist is om effectief te kunnen implementeren.Eenvoudiger en duidelijker, waardoor het gemakkelijker te implementeren is in beperkte omgevingen.
SecurityBiedt uitgebreide beveiligingsfuncties, waaronder authenticatie en codering.Ondersteunt basisbeveiligingsmechanismen, maar is vaak afhankelijk van de onderliggende netwerkbeveiliging.
InteroperabiliteitOntworpen om interoperabiliteit tussen verschillende systemen en leveranciers mogelijk te maken, waardoor het geschikt is voor bedrijfsomgevingen met diverse technologieën.Gericht op interoperabiliteit in de context van IoT-apparaten en -platforms.

Anastasia
Spasojević
Anastazija is een ervaren contentschrijver met kennis en passie voor cloud computergebruik, informatietechnologie en onlinebeveiliging. Bij phoenixNAP, richt ze zich op het beantwoorden van brandende vragen over het waarborgen van de robuustheid en veiligheid van gegevens voor alle deelnemers aan het digitale landschap.