MQTT vs. AMQP — Geräte-Protokoll oder Backend-Messaging?
MQTT und AMQP sind beides Messaging-Protokolle mit Broker, zielen aber auf verschiedene Enden der Datenkette: MQTT ist radikal schlank für Geräte am Netzrand gebaut, AMQP für zuverlässiges Messaging zwischen Backend-Diensten. Verwirrung stiftet zusätzlich, dass «AMQP» zwei inkompatible Versionen meint — 0-9-1 (das klassische RabbitMQ-Protokoll) und das davon völlig verschiedene AMQP 1.0.
MQTT
MQTT ist eine schlanke, gemeinsame Sprache, mit der Geräte im Internet der Dinge (IoT) Daten austauschen.
AMQP
Broker-basiertes Messaging-Protokoll für zuverlässige, entkoppelte Nachrichtenzustellung zwischen Systemen.
MQTT
- Standard
- Offener Standard der Standardisierungsorganisation OASIS; Versionen 3.1.1 (2014) und 5.0 (2019), 3.1.1 auch als ISO-Norm (ISO/IEC 20922)
- Transport
- TCP/IP (die zuverlässige Basisverbindung des Internets); für Browser-Anwendungen zusätzlich über WebSocket (eine Dauerverbindung im Webbrowser)
- Standard-Ports
- 1883 (unverschlüsselt), 8883 (verschlüsselt mit TLS); via WebSocket üblich 80/443
- Einordnung
- Anwendungsebene: MQTT setzt auf bestehende Internetverbindungen auf (Fachjargon: OSI-Schicht 7)
- Topologie
- Sternförmig: alle Clients verbinden sich mit einem zentralen Broker
- QoS-Stufen
- 0 (höchstens einmal), 1 (mindestens einmal), 2 (genau einmal)
AMQP
- Voller Name
- Advanced Message Queuing Protocol
- Kategorie
- Broker-basiertes Messaging-Protokoll (Nachrichtenwarteschlangen)
- Zwei Varianten
- AMQP 0-9-1 (Broker-Modell mit Exchanges, geprägt von RabbitMQ) und AMQP 1.0 (OASIS-/ISO-Standard, reines Wire-Protokoll)
- Standard
- AMQP 1.0 ist OASIS-Standard (2012) und ISO/IEC 19464 (2014)
- Transport
- TCP; Standard-Port 5672, verschlüsselt (TLS) 5671
- Kernmodell (0-9-1)
- Producer → Exchange → (Bindings/Routing-Key) → Queues → Consumer
// Wofür sie gemacht sind
MQTT: gut geeignet für
- Viele Geräte, kleine Nachrichten: Ein Broker verteilt mühelos Messwerte von Tausenden Sensoren gleichzeitig.
- Schmale Bandbreite: Der Verwaltungsanteil pro Nachricht (Overhead) ist extrem klein, eine komplette Datennachricht kommt mit wenigen Bytes plus Topic-Name aus, ein Bruchteil eines HTTP-Requests.
- Instabile Verbindungen: Quittungsmechanismen (QoS) und die Abschiedsnachricht Last Will fangen Verbindungsabbrüche sauber ab.
- Entkopplung: Sender und Empfänger kennen sich nicht, dadurch lassen sich neue Abonnenten jederzeit ergänzen, ohne die Sender anzufassen.
- Firewall-freundlich: Der Client (so heisst jedes angeschlossene Gerät oder Programm) baut die Verbindung immer selbst nach aussen zum Broker auf. Auf der Geräteseite muss keine Tür in der Firewall (ein sogenannter Port) von aussen geöffnet werden; erreichbar sein muss nur der Broker.
MQTT: weniger geeignet für
- Harte Echtzeit im Maschinentakt: Wenn jede Millisekunde zählt, etwa bei der Steuerung von Maschinenachsen, sind spezialisierte Maschinen-Netzwerke die richtige Wahl (Fachbegriffe: Feldbusse oder Industrial Ethernet, etwa PROFINET und EtherCAT).
- Grosse Dateien: MQTT ist für kurze Meldungen gebaut, für Firmware-Updates, Bilder oder Videos eignet sich ein Dateitransfer über HTTP oder ein spezialisiertes Protokoll besser.
- Klassisches Frage-Antwort-Muster: Wer gezielt eine Antwort auf eine Anfrage braucht, etwa eine App, die auf Knopfdruck Daten abruft, fährt mit HTTP, der gewohnten Web-Technik, meist einfacher.
- Direktverbindungen ohne Infrastruktur: MQTT braucht immer einen Broker, für eine simple Punkt-zu-Punkt-Verbindung zwischen zwei Geräten ist das zu viel des Guten.
AMQP: gut geeignet für
- Für zuverlässige Zustellung, weil Empfangsbestätigungen (ACK), persistente Queues und Publisher Confirms sicherstellen, dass keine Nachricht verloren geht – auch nicht bei einem Broker-Neustart.
- Für komplexe Verteilregeln, weil Exchanges mit den Typen direct, topic, fanout und headers eine Nachricht flexibel an eine oder viele Queues leiten können.
- Für die Entkopplung von Systemen, weil Absender und Empfänger nie gleichzeitig verfügbar sein müssen – die Queue puffert dazwischen.
- Für faire Lastverteilung, weil sich mehrere Arbeitsprozesse eine Queue teilen können und Prefetch dafür sorgt, dass niemand überlastet wird (Competing Consumers).
- Für den Umgang mit Fehlern, weil nicht verarbeitbare Nachrichten über Dead-Letter-Queues (Fehler-Warteschlangen) aussortiert und später gezielt untersucht werden können.
AMQP: weniger geeignet für
- Für stromsparende IoT-Sensoren mit wackliger Funkverbindung, weil AMQP verhältnismässig schwergewichtig ist; besser passt hier MQTT, das für schmale Bandbreite und Batteriebetrieb entworfen wurde.
- Für sehr hohe Durchsätze mit langer Aufbewahrung und erneutem Abspielen von Ereignis-Strömen (Event-Log), weil klassische AMQP-Queues Nachrichten nach der Verarbeitung entfernen; besser passt hier Apache Kafka.
- Für einfache Punkt-zu-Punkt-Aufrufe, bei denen sofort eine Antwort erwartet wird, weil ein Broker dazwischen unnötige Komplexität bringt; besser passt hier ein direkter HTTP-/REST-Aufruf oder gRPC.
- Für Umgebungen ohne Betriebsressourcen, weil ein Broker eine eigene Komponente ist, die betrieben, überwacht und aktuell gehalten werden muss.
// Wann was?
Nimm MQTT, wenn …
- Nimm MQTT für die Geräteseite: 2-Byte-Minimal-Header, einfache Client-Implementierung und geringe Anforderungen laufen auch auf einem Mikrocontroller mit wenigen KB RAM.
- Nimm MQTT bei instabilen Verbindungen: Keep-Alive, persistente Sessions, Retained Messages und Last Will sind genau für abbruchanfällige Feldgeräte entworfen.
- Nimm MQTT, wenn die Cloud es vorgibt: AWS IoT Core, Azure IoT Hub und praktisch jede IoT-Plattform nehmen Gerätedaten primär per MQTT entgegen.
- Nimm MQTT, wenn einfache Topic-Abos reichen: Wildcards wie sensors/+/temp decken die meisten Verteil-Muster ab, ohne Routing-Konfiguration im Broker.
Nimm AMQP, wenn …
- Nimm AMQP im Backend, wenn du flexibles Routing brauchst: Exchanges, Bindings und Routing-Keys (AMQP 0-9-1/RabbitMQ) verteilen Nachrichten regelbasiert auf Work-Queues.
- Nimm AMQP, wenn Zustellgarantien fein steuerbar sein müssen: per-Message-Acknowledgements, Nack mit Requeue, Dead-Letter-Queues und Publisher Confirms.
- Nimm AMQP für Lastverteilung auf Worker: mehrere Konsumenten teilen sich eine Queue mit fairer Verteilung — ein Muster, das klassisches MQTT nicht kennt (erst MQTT 5 bringt mit Shared Subscriptions etwas Vergleichbares).
- Nimm AMQP 1.0, wenn du an Azure Service Bus, Event Hubs oder ActiveMQ Artemis anbindest — dort ist es das native Protokoll, und RabbitMQ unterstützt es seit Version 4.0 ebenfalls nativ.
Die Frage ist meist keine Entweder-oder-Frage, sondern eine Frage des Ortes: MQTT vom Gerät zum Broker, AMQP zwischen den Diensten dahinter. Broker wie RabbitMQ sprechen beides und übersetzen dazwischen — Geräte publizieren per MQTT, Worker konsumieren per AMQP aus Queues. Wichtig ist nur, AMQP 0-9-1 und 1.0 nicht zu verwechseln: gleicher Name, komplett verschiedene Protokolle.
// Häufige Fragen
Sind AMQP 0-9-1 und AMQP 1.0 kompatibel?
Nein. AMQP 1.0 (standardisiert als ISO/IEC 19464) ist ein komplett anderes Protokoll als 0-9-1 — anderes Datenmodell, keine Exchanges und Bindings auf Protokollebene. RabbitMQ hat mit 0-9-1 angefangen und unterstützt 1.0 seit Version 4.0 als gleichwertiges Kernprotokoll; Azure Service Bus und ActiveMQ Artemis sprechen von Haus aus 1.0. Prüfe bei Client-Bibliotheken immer, welche Version sie implementieren.
Kann RabbitMQ auch MQTT?
Ja, über das mitgelieferte MQTT-Plugin nimmt RabbitMQ Verbindungen von MQTT-Clients entgegen (inklusive MQTT 5 seit RabbitMQ 3.13) und leitet die Nachrichten intern in sein Exchange/Queue-Modell. So können Geräte per MQTT publizieren und Backend-Dienste per AMQP konsumieren — mit einem einzigen Broker. Für sehr grosse Geräteflotten lohnt sich der Vergleich mit spezialisierten MQTT-Brokern wie EMQX oder HiveMQ, die auf Millionen paralleler Verbindungen ausgelegt sind.
