AMQP 1.0

Veröffentlicht am:

Die wichtigsten Befehle zum Merken

  • python3 -m pip show python-qpid-proton — die Protokollbibliothek prüfen.
  • python3 - — das kleine Sende- und Empfangsbeispiel ausführen.

Befehle und Optionen

Befehl oder Syntax Bedeutung
python3 -m pip show python-qpid-proton Installiertes Paket anzeigen, nichts installieren.
python3 - <<'PYTHON' Ein wörtliches Python-Skript aus dem folgenden Block lesen.
amqp://localhost:5672 Den vorhandenen lokalen Klartext-Testbroker erreichen.
timeout=5 Die jeweilige blockierende Operation auf fünf Sekunden begrenzen.
credit=1 Anfangs eine eingehende Zustellung erlauben.

create_sender und create_receiver öffnen Links zur Testadresse. send, receive und accept übertragen und bestätigen. finally schließt eine aufgebaute Verbindung auch nach einem Skriptfehler.

Die entscheidenden Konzepte

1. AMQP definiert Kommunikation zwischen Gegenstellen

AMQP 1.0 beschreibt den Austausch von Nachrichten und Zustellzustand. Ein Broker kann zwischen Produzenten und Verbrauchern routen oder speichern. Das Protokoll ist aber kein bestimmtes Brokerprodukt.

AMQP 1.0 und AMQP 0-9-1 sind verschiedene Drahtprotokolle. Ein AMQP-Dienst braucht die zum Client passende Version und Konfiguration. Derselbe übliche Port reicht nicht.

Eine Verbindung kann Sitzungen und gerichtete Links enthalten. Sender-Links übertragen an ein Ziel; Empfänger-Links empfangen von einer Quelle. Das Adressmodell des Brokers ordnet Adressen etwa Queues zu.

Der Empfänger gewährt Credit und begrenzt damit neue Zustellungen auf diesem Link. Das ist Nachrichtenflusskontrolle, keine Bytegrenze, Speicherzusage oder Garantie schneller Verarbeitung.

3. Settlement übermittelt Zustellverantwortung

Zustellergebnisse und Settlement teilen mit, wie eine Übertragung behandelt wurde und wann Gegenstellen ihre Verfolgung beenden können. Akzeptanz gilt für diesen Protokollabschnitt.

Brokerannahme beweist keine abgeschlossene Arbeit eines nachgelagerten Verbrauchers. Bestätigung vor Verarbeitung kann bei Absturz Arbeit verlieren; Verarbeitung vor Bestätigung kann bei erneuter Zustellung Arbeit wiederholen. Anwendungen brauchen bewusste Reihenfolge und Duplikatbehandlung.

4. Zuverlässigkeit umfasst mehr als das Drahtprotokoll

Dauerhafte Speicherung, Queue-Regeln, Bestätigungen, Wiederholungen und Anwendungstransaktionen bestimmen gemeinsam die Ausfallgarantien. Ein persistenter Broker mit nichtpersistenter Nachricht garantiert keinen dauerhaften Gesamtablauf.

Selbst starke Zustellsemantik definiert nicht automatisch die Korrektheit einer Zahlung oder Datenbankänderung. Nachrichtenidentität und idempotente Verarbeitung helfen bei Wiederholungen. Ein erfolgreicher Sendeaufruf beweist keine exakt einmalige fachliche Wirkung.

Ein kleines Beispiel

Optional: Verwende ausschließlich die beschriebene leere eigene Queue. Broker und Queue müssen existieren. Anonymer Klartextzugang gilt hier nur für den lokalen Testaufbau.

python3 -m pip show python-qpid-proton
python3 - <<'PYTHON'
from proton import Message
from proton.utils import BlockingConnection

connection = BlockingConnection("amqp://localhost:5672", timeout=5)
try:
    receiver = connection.create_receiver("lab-amqp", credit=1)
    sender = connection.create_sender("lab-amqp")
    sender.send(Message(body="hello-amqp"), timeout=5)
    message = receiver.receive(timeout=5)
    print(message.body)
    receiver.accept()
finally:
    connection.close()
PYTHON

Der Empfänger sollte hello-amqp ausgeben und die Zustellung bestätigen. Das zeigt einen Queue-Durchlauf, keine Absturzwiederherstellung oder dauerhafte Speicherung. Ein Timeout kann verschiedene Ursachen wie Routing, Credit oder Brokerregeln haben.

Bei Erfolg wird die Nachricht konsumiert. Gelingt nur das Senden, kann sie verbleiben oder erneut zugestellt werden. Nutze vor Wiederholung den Labor-Reset und leere keine gemeinsame Queue. Das Skript installiert und stoppt keinen Broker.

Merke dir: AMQP koordiniert Übertragung und Verantwortung. Wann die beabsichtigte Arbeit abgeschlossen ist, definiert weiterhin die Anwendung.