Wat is AMQP?
AMQP (Advanced Message Queuing Protocol) is een open, binair applicatieprotocol voor betrouwbare, asynchrone uitwisseling van berichten tussen applicaties, meestal via een message broker, en is in versie 1.0 gestandaardiseerd door OASIS (2012) en als ISO/IEC 19464:2014. Binnen OT, het Industrial Internet of Things en OT-convergentie verbindt AMQP vooral systemen op enterpriseniveau: SCADA, historians, MES, ERP en cloudplatformen. Waar MQTT en CoAP zijn geoptimaliseerd voor lichte telemetrie vanaf kleine apparaten, ligt de kracht van AMQP in gegarandeerde aflevering, flow control en flexibele routering.
🧠 Waar komt AMQP vandaan en welke versies bestaan er?
AMQP ontstond begin jaren 2000 bij JPMorgan Chase. Banken gebruikten veel message-oriented middleware, maar elk product had een eigen, gesloten protocol. Wie een broker koos, zat vast aan de bibliotheken van die leverancier. AMQP moest een open protocol worden waarmee componenten van verschillende leveranciers, talen en besturingssystemen berichten kunnen uitwisselen.
Belangrijk voor de praktijk: “AMQP” zijn eigenlijk twee verschillende protocollen die niet compatibel zijn.
| Kenmerk | AMQP 0-9-1 | AMQP 1.0 |
|---|---|---|
| Status | Werkgroepspecificatie (2008), geen officiële norm | OASIS-standaard (oktober 2012), ISO/IEC 19464:2014 |
| Brokermodel | Vastgelegd: exchanges, queues en bindings | Niet voorgeschreven; alleen de berichtoverdracht tussen twee partijen |
| Topologie | Client naar broker | Client-client, client-broker en broker-broker |
| Bekende implementaties | RabbitMQ (oorspronkelijk protocol) | Azure Service Bus, Azure IoT Hub, Apache Qpid, ActiveMQ Artemis, Red Hat AMQ, RabbitMQ vanaf 4.0 |
| Transacties | Beperkt (tx-klasse) | In de specificatie gedefinieerd, niet door elke broker ondersteund |
Wie “we gebruiken AMQP” hoort, moet dus altijd vragen welke versie. Een Azure-koppeling spreekt AMQP 1.0, een klassieke RabbitMQ-installatie meestal 0-9-1. RabbitMQ ondersteunt sinds versie 4.0 (2024) beide protocollen native op dezelfde poort 5672; de protocolheader van de client bepaalt welke versie de verbinding gebruikt.
🔧 Hoe werkt AMQP 0-9-1 met exchanges en queues?
Het model van AMQP 0-9-1 is het bekendste beeld van AMQP. De bouwstenen zijn:
| Component | Functie |
|---|---|
| Producer | Publiceert berichten naar een exchange, nooit direct naar een queue |
| Broker | Server die exchanges en queues beheert, bijvoorbeeld RabbitMQ |
| Exchange | Routeringslogica: bepaalt in welke queues een bericht terechtkomt |
| Binding | Regel die een queue aan een exchange koppelt, eventueel met een sleutelpatroon |
| Queue | Buffer die berichten bewaart tot een consumer ze verwerkt |
| Consumer | Applicatie die berichten uit een queue leest en bevestigt |
Er zijn vier standaardtypen exchanges:
| Type | Routering | OT-voorbeeld |
|---|---|---|
| Direct | Exacte overeenkomst van de routing key | Alle batchrecords naar de MES-queue |
| Topic |
Patroon op een routing key met punten; * is precies één woord, # nul of
meer
|
temperatuur.fabriek1.# voor alle temperaturen in fabriek 1 |
| Fanout | Kopie naar elke gekoppelde queue | Een alarm naar SCADA, historian en analytics tegelijk |
| Headers | Op berichtheaders in plaats van de routing key | Routering op metadata zoals site of productlijn |
Zo ondersteunt één broker zowel point-to-point (één queue, meerdere consumers die het werk verdelen) als
publish/subscribe (één bericht, meerdere queues). Een routing key als temperatuur.fabriek1.lijn3 maakt fijnmazige filtering mogelijk zonder de producer aan te passen.
🔄 Wat is er anders aan AMQP 1.0?
AMQP 1.0 beschrijft geen broker, maar alleen hoe twee partijen veilig en betrouwbaar berichten overdragen. Een connection (TCP, optioneel met TLS) bevat sessions, en binnen een session lopen links: eenrichtingskanalen van een bron naar een doel, aangeduid met een adres. Wat er achter dat adres zit, een queue, een topic of een andere applicatie, is aan de implementatie.
Drie eigenschappen maken AMQP 1.0 interessant voor industriële integratie:
- Credit-based flow control - de ontvanger geeft per link aan hoeveel berichten hij aankan, zodat een trage cloudverbinding of een overbelaste consumer de afzender afremt in plaats van berichten kwijt te raken.
- Afleveringsgaranties per bericht - van “fire-and-forget” (at-most-once) tot bevestigde aflevering (at-least-once) en exactly-once via tweefasige afhandeling (settlement).
- Multiplexing - over één TLS-verbinding lopen meerdere sessions en links. Azure IoT Hub raadt AMQP daarom aan voor veld- en cloudgateways die namens veel apparaten, elk met een eigen identiteit, berichten doorsturen.
⚡ Welke betrouwbaarheidsmechanismen biedt AMQP?
Een deel van de betrouwbaarheid zit in het protocol, een deel in de broker. Dat onderscheid is belangrijk bij het ontwerp.
| Mechanisme | Protocol of broker? | Functie |
|---|---|---|
| Acknowledgements | Protocol | Consumer bevestigt verwerking; onbevestigde berichten worden opnieuw afgeleverd |
| Publisher confirms | Broker (RabbitMQ-extensie op 0-9-1) | Broker bevestigt aan de producer dat een bericht veilig is opgeslagen |
| Persistente berichten en durable queues | Beide | Berichten overleven een herstart van de broker |
| Transacties | Protocol, beperkt ondersteund | Meerdere acties atomair uitvoeren |
| Dead-letter queues | Broker | Onverwerkbare of verlopen berichten apart zetten voor analyse |
| Quorum queues | Broker (RabbitMQ sinds 3.8) | Queue gerepliceerd over meerdere nodes via het Raft-algoritme |
Bij RabbitMQ zijn de oude “classic mirrored queues” in versie 4.0 verwijderd; voor hoge beschikbaarheid zijn quorum queues op een cluster van drie of vijf nodes nu de standaard. Een oneven aantal nodes is aanbevolen: met drie nodes mag er één uitvallen en met vijf twee, omdat een meerderheid (quorum) beschikbaar moet blijven; een vierde node voegt geen extra fouttolerantie toe.
📡 Hoe verhoudt AMQP zich tot MQTT en Kafka?
AMQP, MQTT en Apache Kafka worden vaak in één adem genoemd, maar lossen verschillende problemen op.
| Eigenschap | AMQP | MQTT | Apache Kafka |
|---|---|---|---|
| Kernmodel | Queues en routering (0-9-1) of links (1.0) | Publish/subscribe op topics | Gedistribueerd, persistent log |
| Omvang client | Middel | Zeer klein, geschikt voor embedded apparaten | Groot |
| Routering | Rijk: direct, topic, fanout, headers | Topicfilters met + en # |
Topics en partities |
| Afleveringsgarantie | Acknowledgements, at-least-once; exactly-once alleen in de 1.0-specificatie | QoS 0, 1 en 2 tussen client en broker | At-least-once, exactly-once binnen Kafka |
| Berichten bewaren | Tot verwerking | Laatste retained bericht per topic, plus wachtende berichten voor offline sessies | Dagen tot onbeperkt, opnieuw afspeelbaar |
| Norm | AMQP 1.0: ISO/IEC 19464 | MQTT 3.1.1: ISO/IEC 20922 | Geen; eigen protocol |
In de praktijk vullen ze elkaar aan. Een veelvoorkomende keten is: PLC naar edge-gateway via OPC UA of Sparkplug B, van de gateway naar de cloud via AMQP of MQTT, en in het datacenter een Kafka-cluster voor langetermijnopslag en analyse. Een Unified Namespace draait meestal op MQTT; AMQP komt vaker voor bij de koppeling met bedrijfsapplicaties.
🏭 Waar wordt AMQP gebruikt in industriële automatisering?
Binnen industriële automatisering zit AMQP zelden op het veldniveau. Het protocol is te zwaar voor sensoren en niet deterministisch genoeg voor realtime regelen. Het speelt een rol hogerop in het Purdue Model:
| Toepassing | Rol van AMQP |
|---|---|
| Historian- en MES-integratie | Betrouwbaar transport van batchrecords, orders en productie-events |
| Edge naar cloud | Gateways voor edge computing sturen data via AMQP naar Azure IoT Hub of Service Bus, met store-and-forward bij uitval van de WAN-verbinding |
| Alarmdistributie | Fanout van alarmen naar meldsystemen, dashboards en analytics |
| Microservices | Losgekoppelde services rond een broker, wat schaalbaarheid en foutisolatie geeft |
| Gebouwautomatisering | Energie- en HVAC-data van meerdere gebouwen centraal verwerken |
| OPC UA PubSub | Deel 14 van OPC UA beschrijft AMQP naast MQTT als broker-transport, zie OPC UA PubSub |
Het voordeel van de broker in deze OT-architectuur is ontkoppeling: een historian die even offline is, mist geen berichten, omdat de queue ze bewaart. De architectuur wordt wel afhankelijk van de broker zelf, die daarom redundant moet zijn.
🔐 Hoe beveiligt u een AMQP-omgeving?
AMQP biedt de bouwstenen voor security en cybersecurity, maar de standaardinstellingen van een broker zijn niet automatisch veilig. Een gecompromitteerde broker geeft een aanvaller controle over alle berichtstromen.
| Risico | Impact | Maatregel |
|---|---|---|
| Onversleuteld verkeer op poort 5672 | Afluisteren van procesdata en wachtwoorden | Alleen TLS op poort 5671, oude TLS-versies uit |
| Standaard- of gedeelde accounts | Ongeautoriseerde toegang | SASL-authenticatie met eigen accounts of certificaten per applicatie |
| Te ruime rechten | Rogue publishers sturen valse data | RBAC per virtual host, exchange en queue (configure, write, read) |
| Bereikbare beheerinterface | Overname van de broker | Management-UI (poort 15672) alleen vanuit een beheersegment, met MFA via een jump server |
| Queue flooding | Geheugen of schijf vol, broker stopt | Limieten op queuelengte en verbindingen, monitoring van queue depth |
RabbitMQ staat het standaardaccount guest sinds versie 3.3 alleen toe vanaf localhost, maar
dat account hoort in productie verwijderd te worden. Voor AMQP 1.0 eist RabbitMQ altijd SASL.
Passend bij IEC 62443 hoort een broker in een eigen zone, vaak de IDMZ tussen OT en IT, met netwerksegmentatie en een industriële firewall die alleen de benodigde poorten toelaat. Hardening, logging van verbindingen en toegangsfouten en security monitoring maken het geheel af. NIST SP 800-82 en ISO 27001 geven het bredere kader. Organisaties die onder de Cyberbeveiligingswet vallen, moeten zo’n broker als onderdeel van hun kritieke keten meenemen in de risicoanalyse.
🛠️ Hoe zet u AMQP stapsgewijs op in een OT-omgeving?
Een praktische aanpak voor een eerste AMQP-koppeling tussen productie en IT:
- Kies de versie bewust - AMQP 1.0 voor koppelingen met Azure en voor interoperabiliteit tussen leveranciers; 0-9-1 als u al een RabbitMQ-ecosysteem heeft met bestaande clients.
-
Ontwerp de routering - leg een naamgeving vast voor routing keys of adressen,
bijvoorbeeld
site.gebied.lijn.signaal, en houd die gelijk aan de ISA-95-hiërarchie die u elders gebruikt. - Plaats de broker in de juiste zone - niet in het besturingsnetwerk zelf, maar in een DMZ-segment waar OT publiceert en IT consumeert.
- Regel beschikbaarheid - een cluster van drie nodes met quorum queues, persistente berichten en dead-letter queues voor berichten die niet te verwerken zijn.
- Beveilig vanaf dag één - TLS met certificaten onder certificaatbeheer, een account per applicatie en minimale rechten.
- Monitor actief - queue depth, aantal unacked berichten, geheugen- en schijfalarmen van de broker en certificaatverloopdata.
- Neem de broker op in het beheer - lifecyclemanagement, patchmanagement, configuratiebeheer van de definities (exchanges, queues, gebruikers), een back-up daarvan en een disaster recovery-plan.
Typische vuistregel: een gezonde queue staat bijna leeg. Een queue die gestaag groeit, betekent dat consumers het tempo niet bijhouden, en dat is een vroege waarschuwing voordat de broker zijn geheugengrens bereikt.
❓ Veelgestelde vragen
Is AMQP hetzelfde als RabbitMQ?
Nee, AMQP is een protocol en RabbitMQ is een broker die dat protocol implementeert. RabbitMQ is gebouwd rond AMQP 0-9-1 en ondersteunt sinds versie 4.0 ook AMQP 1.0 native. Andere producten zoals Azure Service Bus en ActiveMQ Artemis spreken AMQP 1.0.
Welke poort gebruikt AMQP?
AMQP gebruikt standaard TCP-poort 5672 voor onversleuteld verkeer en poort 5671 voor AMQP over TLS. In omgevingen waar alleen HTTPS naar buiten mag, kan AMQP via WebSockets over poort 443 lopen, zoals Azure ondersteunt. In OT-netwerken hoort alleen de versleutelde variant open te staan.
Is AMQP 1.0 compatibel met AMQP 0-9-1?
Nee, AMQP 1.0 en AMQP 0-9-1 zijn verschillende protocollen met een ander model. AMQP 0-9-1 legt exchanges en queues vast, terwijl AMQP 1.0 alleen de berichtoverdracht via connections, sessions en links beschrijft. Een client voor de ene versie kan niet zonder meer met een broker van de andere versie praten.
Wanneer kiest u AMQP in plaats van MQTT?
AMQP is de betere keuze wanneer berichten tussen bedrijfsapplicaties gegarandeerd en geordend moeten aankomen, wanneer u rijke routering nodig heeft of wanneer een gateway veel apparaten over één verbinding bundelt. MQTT past beter bij kleine apparaten, sensoren en een Unified Namespace, omdat de client lichter is. Veel architecturen gebruiken beide.
Is AMQP geschikt voor realtime besturing?
AMQP is niet geschikt voor deterministische realtime besturing van een proces. De brokerarchitectuur, buffering en TCP-verbindingen geven variabele latency. Voor regelen blijven veldbussen en industrieel Ethernet zoals PROFINET de juiste keuze; AMQP hoort op het niveau van data-integratie.
Is AMQP veilig?
AMQP ondersteunt TLS-versleuteling en SASL-authenticatie, maar is alleen veilig als die ook zijn ingeschakeld en goed geconfigureerd. Standaardaccounts, onversleuteld verkeer op poort 5672 en een open beheerinterface zijn de meest voorkomende zwakke plekken. Een AMQP-broker hoort in een gesegmenteerde zone met minimale rechten per applicatie.
📌 Samengevat
AMQP is het open messagingprotocol voor betrouwbare, ontkoppelde berichtuitwisseling tussen industriële systemen, bedrijfsapplicaties en de cloud. Het onderscheid tussen AMQP 0-9-1 (RabbitMQ, exchanges en queues) en de ISO-norm AMQP 1.0 (Azure, links en flow control) is essentieel bij elke keuze. Gebruik AMQP op het integratieniveau naast MQTT, niet voor realtime besturing, en beveilig de broker met TLS, SASL, minimale rechten en een eigen zone in uw OT/IT-architectuur.
