What is AMQP?
AMQP (Advanced Message Queuing Protocol) is an open, binary application protocol for reliable, asynchronous message exchange between applications, usually through a message broker, standardised in version 1.0 by OASIS (2012) and as ISO/IEC 19464:2014. Within OT, the Industrial Internet of Things and OT convergence, AMQP mainly connects systems at enterprise level: SCADA, historians, MES, ERP and cloud platforms. Whereas MQTT and CoAP are optimised for lightweight telemetry from small devices, the strength of AMQP lies in guaranteed delivery, flow control and flexible routing.
🧠 Where does AMQP come from and which versions exist?
AMQP originated in the early 2000s at JPMorgan Chase. Banks relied heavily on message-oriented middleware, but every product had its own closed protocol. Choosing a broker meant being locked into that vendor’s libraries. AMQP was meant to be an open protocol that lets components from different vendors, languages and operating systems exchange messages.
One point matters a great deal in practice: “AMQP” is really two different protocols that are not compatible with each other.
| Feature | AMQP 0-9-1 | AMQP 1.0 |
|---|---|---|
| Status | Working group specification (2008), not an official standard | OASIS Standard (October 2012), ISO/IEC 19464:2014 |
| Broker model | Defined: exchanges, queues and bindings | Not prescribed; only the transfer of messages between two parties |
| Topology | Client to broker | Client-to-client, client-to-broker and broker-to-broker |
| Well-known implementations | RabbitMQ (its original protocol) | Azure Service Bus, Azure IoT Hub, Apache Qpid, ActiveMQ Artemis, Red Hat AMQ, RabbitMQ from 4.0 |
| Transactions | Limited (tx class) | Defined in the specification, not supported by every broker |
Whenever someone says “we use AMQP”, always ask which version. An Azure integration speaks AMQP 1.0, while a classic RabbitMQ installation usually speaks 0-9-1. Since version 4.0 (2024), RabbitMQ supports both protocols natively on the same port 5672; the client’s protocol header determines which version a connection uses.
🔧 How does AMQP 0-9-1 work with exchanges and queues?
The AMQP 0-9-1 model is the best-known picture of AMQP. Its building blocks are:
| Component | Function |
|---|---|
| Producer | Publishes messages to an exchange, never directly to a queue |
| Broker | Server that manages exchanges and queues, for example RabbitMQ |
| Exchange | Routing logic: decides which queues a message ends up in |
| Binding | Rule that links a queue to an exchange, optionally with a key pattern |
| Queue | Buffer that holds messages until a consumer processes them |
| Consumer | Application that reads messages from a queue and acknowledges them |
There are four standard exchange types:
| Type | Routing | OT example |
|---|---|---|
| Direct | Exact match on the routing key | All batch records to the MES queue |
| Topic |
Pattern on a dot-separated routing key; * matches exactly one word, #
zero or more
|
temperature.plant1.# for all temperatures in plant 1 |
| Fanout | Copy to every bound queue | One alarm to SCADA, historian and analytics at once |
| Headers | On message headers instead of the routing key | Routing on metadata such as site or product line |
A single broker therefore supports both point-to-point messaging (one queue, several consumers sharing the
work) and publish/subscribe (one message, several queues). A routing key such as temperature.plant1.line3 allows fine-grained filtering without changing the producer.
🔄 What is different about AMQP 1.0?
AMQP 1.0 does not describe a broker, only how two parties transfer messages securely and reliably. A connection (TCP, optionally with TLS) carries sessions, and within a session run links: one-way channels from a source to a target, identified by an address. Whatever sits behind that address, a queue, a topic or another application, is up to the implementation.
Three properties make AMQP 1.0 attractive for industrial integration:
- Credit-based flow control - the receiver states per link how many messages it can handle, so a slow cloud connection or an overloaded consumer throttles the sender instead of losing messages.
- Delivery guarantees per message - from fire-and-forget (at-most-once) to acknowledged delivery (at-least-once) and exactly-once through two-phase settlement.
- Multiplexing - one TLS connection carries several sessions and links. Azure IoT Hub therefore recommends AMQP for field and cloud gateways that forward messages on behalf of many devices, each with its own identity.
⚡ Which reliability mechanisms does AMQP offer?
Part of the reliability lives in the protocol, part in the broker. That distinction matters when you design a solution.
| Mechanism | Protocol or broker? | Function |
|---|---|---|
| Acknowledgements | Protocol | The consumer confirms processing; unacknowledged messages are redelivered |
| Publisher confirms | Broker (RabbitMQ extension to 0-9-1) | The broker confirms to the producer that a message has been stored safely |
| Persistent messages and durable queues | Both | Messages survive a broker restart |
| Transactions | Protocol, limited support | Perform several actions atomically |
| Dead-letter queues | Broker | Set aside unprocessable or expired messages for analysis |
| Quorum queues | Broker (RabbitMQ since 3.8) | Queue replicated across several nodes using the Raft algorithm |
RabbitMQ removed the old classic mirrored queues in version 4.0; for high availability, quorum queues on a cluster of three or five nodes are now the norm. An odd number of nodes is recommended: three nodes tolerate one failure and five tolerate two, because a majority (quorum) must remain available; a fourth node adds no extra fault tolerance.
📡 How does AMQP compare with MQTT and Kafka?
AMQP, MQTT and Apache Kafka are often mentioned in the same breath, but they solve different problems.
| Property | AMQP | MQTT | Apache Kafka |
|---|---|---|---|
| Core model | Queues and routing (0-9-1) or links (1.0) | Publish/subscribe on topics | Distributed, persistent log |
| Client footprint | Medium | Very small, suitable for embedded devices | Large |
| Routing | Rich: direct, topic, fanout, headers | Topic filters with + and # |
Topics and partitions |
| Delivery guarantee | Acknowledgements, at-least-once; exactly-once only in the 1.0 specification | QoS 0, 1 and 2 between client and broker | At-least-once, exactly-once within Kafka |
| Message retention | Until processed | Last retained message per topic, plus queued messages for offline sessions | Days to unlimited, replayable |
| Standard | AMQP 1.0: ISO/IEC 19464 | MQTT 3.1.1: ISO/IEC 20922 | None; its own protocol |
In practice they complement each other. A common chain is: PLC to edge gateway via OPC UA or Sparkplug B, gateway to the cloud via AMQP or MQTT, and in the data centre a Kafka cluster for long-term storage and analytics. A Unified Namespace usually runs on MQTT; AMQP is more common for the connection to business applications.
🏭 Where is AMQP used in industrial automation?
Within industrial automation, AMQP rarely sits at field level. The protocol is too heavy for sensors and not deterministic enough for real-time control. It plays its role higher up in the Purdue Model:
| Application | Role of AMQP |
|---|---|
| Historian and MES integration | Reliable transport of batch records, orders and production events |
| Edge to cloud | Edge Computing gateways send data via AMQP to Azure IoT Hub or Service Bus, with store-and-forward when the WAN link fails |
| Alarm distribution | Fanout of alarms to notification systems, dashboards and analytics |
| Microservices | Decoupled services around a broker, giving scalability and fault isolation |
| Building Automation | Central processing of energy and HVAC data from multiple buildings |
| OPC UA PubSub | Part 14 of OPC UA describes AMQP alongside MQTT as a broker transport, see OPC UA PubSub |
The benefit of a broker in this OT architecture is decoupling: a historian that is briefly offline does not miss messages, because the queue holds them. The architecture does become dependent on the broker itself, which therefore has to be redundant.
🔐 How do you secure an AMQP environment?
AMQP provides the building blocks for security and cybersecurity, but a broker’s default settings are not automatically secure. A compromised broker gives an attacker control over every message flow.
| Risk | Impact | Measure |
|---|---|---|
| Unencrypted traffic on port 5672 | Eavesdropping on process data and passwords | TLS only on port 5671, old TLS versions disabled |
| Default or shared accounts | Unauthorised access | SASL authentication with separate accounts or certificates per application |
| Overly broad permissions | Rogue publishers inject false data | RBAC per virtual host, exchange and queue (configure, write, read) |
| Reachable management interface | Takeover of the broker | Management UI (port 15672) only from a management segment, with MFA through a jump server |
| Queue flooding | Memory or disk full, broker stops | Limits on queue length and connections, monitoring of queue depth |
Since version 3.3, RabbitMQ only allows the default guest account from localhost, but that
account should be removed in production. For AMQP 1.0, RabbitMQ always requires SASL.
In line with IEC 62443, a broker belongs in its own zone, often the IDMZ between OT and IT, with network segmentation and an industrial firewall that only allows the required ports. Hardening, logging of connections and access failures, and security monitoring complete the picture. NIST SP 800-82 and ISO 27001 provide the wider framework. Organisations that fall under the Dutch Cybersecurity Act should include such a broker in their risk assessment as part of their critical chain.
🛠️ How do you set up AMQP step by step in an OT environment?
A practical approach for a first AMQP link between production and IT:
- Choose the version deliberately - AMQP 1.0 for Azure integrations and interoperability between vendors; 0-9-1 if you already have a RabbitMQ ecosystem with existing clients.
-
Design the routing - define a naming convention for routing keys or addresses, for
example
site.area.line.signal, and keep it aligned with the ISA-95 hierarchy you use elsewhere. - Place the broker in the right zone - not in the control network itself, but in a DMZ segment where OT publishes and IT consumes.
- Arrange availability - a three-node cluster with quorum queues, persistent messages and dead-letter queues for messages that cannot be processed.
- Secure from day one - TLS with certificates managed through certificate management, one account per application and least privilege.
- Monitor actively - queue depth, number of unacknowledged messages, the broker’s memory and disk alarms, and certificate expiry dates.
- Bring the broker under management - lifecycle management, patch management, configuration management of the definitions (exchanges, queues, users), a backup of those definitions and a disaster recovery plan.
A useful rule of thumb: a healthy queue is almost empty. A queue that grows steadily means consumers cannot keep up, which is an early warning before the broker reaches its memory limit.
❓ Frequently asked questions
Is AMQP the same as RabbitMQ?
No, AMQP is a protocol and RabbitMQ is a broker that implements it. RabbitMQ was built around AMQP 0-9-1 and has also supported AMQP 1.0 natively since version 4.0. Other products such as Azure Service Bus and ActiveMQ Artemis speak AMQP 1.0.
Which port does AMQP use?
AMQP uses TCP port 5672 by default for unencrypted traffic and port 5671 for AMQP over TLS. In environments where only HTTPS is allowed outbound, AMQP can run over WebSockets on port 443, as Azure supports. In OT networks, only the encrypted variant should be open.
Is AMQP 1.0 compatible with AMQP 0-9-1?
No, AMQP 1.0 and AMQP 0-9-1 are different protocols with different models. AMQP 0-9-1 defines exchanges and queues, whereas AMQP 1.0 only describes message transfer through connections, sessions and links. A client for one version cannot simply talk to a broker that only supports the other.
When should you choose AMQP instead of MQTT?
AMQP is the better choice when messages between business applications must arrive guaranteed and in order, when you need rich routing, or when a gateway bundles many devices over one connection. MQTT suits small devices, sensors and a Unified Namespace better because its client is lighter. Many architectures use both.
Is AMQP suitable for real-time control?
AMQP is not suitable for deterministic real-time process control. The broker architecture, buffering and TCP connections cause variable latency. For control, fieldbuses and industrial Ethernet such as PROFINET remain the right choice; AMQP belongs at the data integration level.
Is AMQP secure?
AMQP supports TLS encryption and SASL authentication, but it is only secure when both are enabled and configured properly. Default accounts, unencrypted traffic on port 5672 and an exposed management interface are the most common weak spots. An AMQP broker belongs in a segmented zone with least-privilege permissions per application.
📌 In summary
AMQP is the open messaging protocol for reliable, decoupled message exchange between industrial systems, business applications and the cloud. The distinction between AMQP 0-9-1 (RabbitMQ, exchanges and queues) and the ISO standard AMQP 1.0 (Azure, links and flow control) is essential for every design decision. Use AMQP at the integration level alongside MQTT, not for real-time control, and secure the broker with TLS, SASL, least privilege and its own zone in your OT/IT architecture.
