Eine Message Queue (Nachrichtenwarteschlange) ist ein Zwischenspeicher, in den ein System Nachrichten ablegt und aus dem ein anderes System sie später abholt, sodass beide Seiten Daten austauschen können, ohne gleichzeitig verfügbar oder aufeinander abgestimmt zu sein.
Auch genannt: Nachrichtenwarteschlange, Queue, Message Queuing
Eine Message Queue funktioniert wie ein Briefkasten: Die Absenderin wirft ihren Brief ein und geht weiter, der Empfänger leert den Kasten, wenn er Zeit hat. Beide müssen sich nicht gleichzeitig am selben Ort aufhalten. Übertragen auf Software heißt das: Ein System muss nicht warten, bis das andere antwortet.
Ein sendendes System, der Produzent, legt eine Nachricht in die Warteschlange, zum Beispiel „Bestellung 4711 ist eingegangen“. Ein empfangendes System, der Konsument, holt Nachrichten ab und verarbeitet sie. Die Queue speichert die Nachricht, bis sie erfolgreich verarbeitet wurde, und stellt in der Regel sicher, dass sie nicht verloren geht. In vielen Umsetzungen werden Nachrichten in der Reihenfolge ihres Eintreffens ausgeliefert, und mehrere Konsumenten können sich die Arbeit teilen. Ein vermittelnder Dienst, oft Message Broker genannt, verwaltet die Warteschlangen. Diese Entkopplung in Zeit und Verfügbarkeit ist ein zentrales Muster verteilter Systeme.
Ein Onlineshop nimmt am Tag der Rabattaktion tausende Bestellungen pro Minute an. Statt jede Bestellung sofort komplett zu verarbeiten, legt der Shop sie in eine Queue. Das Lagersystem arbeitet die Nachrichten nacheinander ab, so schnell es kann. Fällt es kurz aus, bleiben die Bestellungen in der Warteschlange erhalten und werden nach dem Neustart verarbeitet.
Message Queues werden eingesetzt, um Systeme voneinander zu entkoppeln, Lastspitzen abzufedern und zeitaufwendige Aufgaben im Hintergrund zu erledigen, etwa den Versand von E-Mails oder die Verarbeitung hochgeladener Dateien. Sie sind ein häufiges Bauteil in der Systemintegration, wenn mehrere Anwendungen zuverlässig Ereignisse austauschen müssen, ohne dass der Ausfall eines Teils alles blockiert.
Asynchrone Kommunikation bringt eigene Herausforderungen mit sich: Die Antwort liegt nicht sofort vor, und Nachrichten können mehrfach ausgeliefert oder in unerwarteter Reihenfolge verarbeitet werden, sodass Empfänger damit umgehen können müssen. Eine Queue ist zudem kein dauerhaftes Archiv oder keine Datenbank, sondern ein Transportweg. Und sie löst keine fachlichen Probleme: Wenn Nachrichten nicht verarbeitet werden können, sammeln sie sich an, weshalb Überwachung und Fehlerbehandlung nötig sind.
Nicht zu verwechseln mit einem Webhook, bei dem ein System ein anderes bei einem Ereignis direkt per Web-Aufruf benachrichtigt, ohne Zwischenspeicher. Ebenso zu unterscheiden von einer Application Programming Interface, die einen Schnittstellenvertrag beschreibt, und vom Workflow, der die fachliche Ablaufsteuerung darstellt, während die Queue lediglich den Nachrichtentransport übernimmt.