AMQP

Problem

Ein C#-Checkout-Service sendet Aufträge über einen Message Broker an einen Java-Warehouse-Service. Beide müssen sich mit dem Broker darüber einigen, wie Nachrichten codiert werden und wie der Empfang bestätigt wird. Wenn eine Verbindung unterbrochen wird, bevor die Bestätigung eintrifft, muss der Absender wissen, ob er es erneut versuchen soll. Wenn das Lager langsamer wird, muss es eine Möglichkeit haben, eingehende Nachrichten zu begrenzen. Ein gemeinsames Protokoll gibt jedem Teilnehmer konsistente Regeln für diese Situationen.

Lösung — AMQP

AMQP steht für Advanced Message Queuing Protocol. AMQP 1.0 definiert binäre Nachrichtenformate und -austausche zum Übertragen von Nachrichten, zum Melden von Lieferergebnissen und zum Steuern des Nachrichtenflusses, typischerweise über TCP.
Checkout → Broker → Lager
Jeder Empfänger kann die Annahme einer Nachricht bestätigen. Nimmt der Broker eine Bestellung an, bestätigt er diese Übergabe; der Lagerdienst bestätigt seinen Empfang separat. Empfänger teilen außerdem mit, wie viele Nachrichten sie annehmen können. So können langsamere Empfänger den Zufluss begrenzen. Kompatible Bibliotheken handhaben diesen Austausch über Programmiersprachen hinweg. Broker-Persistenzeinstellungen und Anwendungs-Retry-Logik bestimmen immer noch die Wiederherstellung; wenn eine Bestätigung verloren geht, kann ein Wiederholungsversuch ein Duplikat erzeugen, so dass das Lager die Bestell-ID verwenden kann, um eine zweimalige Verarbeitung zu vermeiden.
Kerngedanke: AMQP bietet ein standardisiertes Protokoll für interoperable nachrichtenorientierte Systeme.