Ab sgcWebSockets 2024.2.0 wird AMQP 1.0.0 unterstützt.
AMQP (Advanced Message Queuing Protocol) 1.0.0 ist ein Messaging-Protokoll für zuverlässige, asynchrone Kommunikation zwischen verteilten Systemen. Es erleichtert den Austausch von Nachrichten zwischen Anwendungen oder Komponenten in entkoppelter Form und ermöglicht ihnen, ohne direkte Abhängigkeiten miteinander zu kommunizieren.
Insgesamt bietet AMQP 1.0.0 eine standardisierte und interoperable Möglichkeit für verschiedene Softwarekomponenten und Systeme, in lose gekoppelter Form zu kommunizieren, und eignet sich daher für verschiedene verteilte Anwendungen auf Unternehmensniveau.
AMQP-Funktionen
- Nachrichtenorientierte Kommunikation: AMQP 1.0.0 dreht sich um das Konzept von Nachrichten. Nachrichten können Daten, Anweisungen oder Befehle transportieren und sind die grundlegenden Kommunikationseinheiten.
- Message Broker: Das Protokoll arbeitet mit einem brokerbasierten Messaging-Modell. Broker, das können Server oder vermittelnde Einheiten sein, verwalten das Routing und die Zustellung von Nachrichten zwischen Producern und Consumern.
- Queues und Exchanges: Queues sind Speicherinstanzen innerhalb des Brokers, in denen Nachrichten zwischengespeichert werden. Exchanges definieren die Regeln für das Routing von Nachrichten von Producern an Queues anhand von Kriterien wie Nachrichteninhalt oder Routing-Schlüsseln.
- Adressen und Links: Adressen identifizieren Nachrichtenziele innerhalb der Messaging-Infrastruktur. Links sind Kommunikationskanäle zwischen einem Sender (Producer) und einem Empfänger (Consumer), die einer bestimmten Adresse zugeordnet sind.
- Sessions und Verbindungen: Sessions stellen einen logischen Kanal für die Kommunikation dar und ermöglichen mehrere Nachrichtenströme innerhalb einer einzigen Verbindung. Verbindungen verwalten die gesamte Kommunikationsverbindung zwischen Client-Anwendungen und dem Message-Broker.
- Sicherheit: AMQP 1.0.0 unterstützt verschiedene Sicherheitsmechanismen, einschließlich Authentifizierung und Autorisierung, um eine sichere Kommunikation zwischen Clients und Brokern zu gewährleisten.
- Transportunabhängig: Das Protokoll ist transportunabhängig konzipiert, d.h. es kann über verschiedene Netzwerktransporte wie TCP, TLS oder WebSockets betrieben werden und bietet so Flexibilität bei der Bereitstellung.
- Flusskontrolle: AMQP 1.0.0 enthält Mechanismen zur Flusskontrolle, mit denen Consumer ihre Fähigkeit anzeigen können, eingehende Nachrichten mit einer bestimmten Rate zu verarbeiten. Dies verhindert eine Überlastung der Consumer mit einer großen Anzahl von Nachrichten.
- Fehlerbehandlung: Das Protokoll spezifiziert Mechanismen zur Fehlerbehandlung, einschließlich Acknowledgement und Ablehnung von Nachrichten, um Robustheit und Zuverlässigkeit bei der Nachrichtenzustellung zu gewährleisten.
- SASL-Authentifizierung: Simple Authentication and Security Layer (SASL) wird zur Authentifizierung und Absicherung von Verbindungen zwischen Clients und Brokern verwendet.
Konfiguration
Der AMQP-1.0.0-Client hat die Eigenschaft AMQPOptions, mit der du die Verbindung konfigurieren kannst.
- ChannelMax: Der channel-max-Wert ist die höchste Kanalnummer, die auf der Verbindung verwendet werden kann. Dieser
Wert plus eins ist die maximale Anzahl von Sessions, die gleichzeitig auf der
Verbindung aktiv sein können. - ContainerId: (optional) ist der Name des Quell-Containers und identifiziert die Verbindung eindeutig im Server.
- CreditSize: Standardgröße des Credit-Flows.
- IdleTimeout: Das Timeout wird von einem lokalen Peer ausgelöst, wenn nach Überschreitung eines Schwellenwerts keine Frames
mehr empfangen werden. Das Idle-Timeout wird in Millisekunden gemessen und beginnt mit
dem Zeitpunkt, zu dem der letzte Frame empfangen wurde. - MaxFrameSize: die maximal akzeptierte Frame-Größe.
- MaxLinksPerSession: die maximale Anzahl von Links pro Session.
- WindowSize: die Standardgröße des Fensters.
Die AMQP-Authentifizierung muss in der Eigenschaft Authentication konfiguriert werden.
- AuthType: Authentifizierungstyp
- amqp1authNone: nicht konfiguriert.
- amqp1authSASLAnonymous: anonyme Authentifizierung
- amqp1authSASLPlain: Benutzer-/Passwort-Authentifizierung. Dieser Authentifizierungstyp erfordert das Ausfüllen folgender Eigenschaften:
- Username
- Password
- amqp1authSASLExternal: externe Authentifizierung
Verbindung
Die Verbindung beginnt damit, dass der Client (üblicherweise eine Messaging-Anwendung oder ein Dienst) eine TCP-Verbindung zum Server (dem Message-Broker) initiiert. Der Client verbindet sich mit dem Port des Servers, typischerweise 5672 für nicht-TLS-Verbindungen und 5671 für TLS-gesicherte Verbindungen. Sobald die TCP-Verbindung hergestellt ist, handeln Client und Server die zu verwendende AMQP-Protokollversion aus. AMQP 1.0.0 unterstützt verschiedene Versionen, und während der Aushandlung einigen sich beide Parteien auf die Verwendung von Version 1.0.0.
Nach der Protokollaushandlung muss sich der Client je nach Serverkonfiguration möglicherweise beim Server authentifizieren. Authentifizierungsmechanismen können SASL-Mechanismen (Simple Authentication and Security Layer) wie PLAIN, EXTERNAL oder andere vom Server unterstützte umfassen.
Beispiel: Verbindung zu einem AMQP-Server, der auf dem sicheren Port 5671 lauscht, mit SASL-Anmeldedaten
// Creating AMQP client oAMQP := TsgcWSPClient_AMQP1.Create(nil); // Setting AMQP authentication options oAMQP.AMQPOptions.Authentication.AuthType := amqp1authSASLPlain; oAMQP.AMQPOptions.Authentication.Username := 'sgc'; oAMQP.AMQPOptions.Authentication.Password := 'sgc'; // Creating WebSocket client oClient := TsgcWebSocketClient.Create(nil); // Setting WebSocket specifications oClient.Specifications.RFC6455 := False; // Setting WebSocket client properties oClient.Host := 'www.esegece.com'; oClient.Port := 5671; oClient.TLS := True; // Assigning WebSocket client to AMQP client oAMQP.Client := oClient; // Activating WebSocket client oClient.Active := True;
Sessions
Nach der Authentifizierung öffnet der Client eine AMQP-Session. Eine Session ist ein logischer Kontext für die Kommunikation zwischen Client und Server. Sessions werden verwendet, um zusammengehörige Messaging-Operationen zu gruppieren. Verwende die Methode CreateSession, um eine neue Session zu erstellen. Die Methode erlaubt es, den Session-Namen festzulegen oder leer zu lassen, sodass die Komponente automatisch einen zuweist.
Wenn die Session erfolgreich erstellt wurde, wird das Ereignis OnAMQPSessionOpen mit den Details der Session ausgelöst.
AMQP1.CreateSession('MySession');
procedure AMQP1AMQPSessionOpen(Sender: TObject; const aSession: TsgcAMQP1Session;
const aBegin: TsgcAMQP1FrameBegin);
begin
ShowMessage('#session-open: ' + aSession.Id);
end;
Links
Innerhalb einer Session erstellt der Client Links, um mit bestimmten Entitäten wie Queues, Topics oder anderen vom Server bereitgestellten Ressourcen zu kommunizieren. Links sind bidirektionale Kommunikationskanäle zum Senden und Empfangen von Nachrichten.
Die Komponente kann sowohl als Sender- als auch als Empfänger-Knoten arbeiten. Sie erlaubt das Erstellen einer beliebigen Anzahl von Links pro Session, bis zu dem in der Eigenschaft MaxLinksPerSession festgelegten Limit.
Sender-Links
Um einen neuen Sender-Link zu erstellen, verwende die Methode CreateSenderLink und übergib den Namen der Session und optional den Namen des Sender-Links. Wenn der Link erfolgreich erstellt wurde, wird das Ereignis OnAMQPLinkOpen ausgelöst.
AMQP1.CreateSenderLink('MySession', 'MySenderLink');
procedure procedure TfrmClientAMQP1.AMQP1AMQPLinkOpen(Sender: TObject;
const aSession: TsgcAMQP1Session; const aLink: TsgcAMQP1Link; const aAttach: TsgcAMQP1FrameAttach);
begin
ShowMessage('#link-open: ' + aLink.Name);
end;
Empfänger-Links
Um einen neuen Empfänger-Link zu erstellen, verwende die Methode CreateReceiverLink und übergib den Namen der Session und optional den Namen des Empfänger-Links. Wenn der Link erfolgreich erstellt wurde, wird das Ereignis OnAMQPLinkOpen ausgelöst.
AMQP1.CreateReceiverLink('MySession', 'MyReceiverLink');
procedure procedure TfrmClientAMQP1.AMQP1AMQPLinkOpen(Sender: TObject;
const aSession: TsgcAMQP1Session; const aLink: TsgcAMQP1Link; const aAttach: TsgcAMQP1FrameAttach);
begin
ShowMessage('#link-open: ' + aLink.Name);
end;
Nachrichten senden
Nachdem die Session aufgebaut und die Links erstellt sind, kann der Client mit Nachrichtenoperationen beginnen, wie z.B. dem Senden von Nachrichten an ein Ziel. Verwende die Methode SendMessage, um eine Nachricht über einen Sender-Link zu senden.
AMQP1.SendMessage('MySession', 'MySenderLink', 'My first AMQP Message');
Nachrichten lesen
Standardmäßig werden die Empfänger-Links im Automatikmodus erstellt, was bedeutet, dass jede neu eintreffende Nachricht an den Client ausgeliefert wird.
Wenn die Empfänger-Links im manuellen Modus erstellt wurden, verwende die synchrone Methode GetMessage, um eine Nachricht abzurufen und zu warten, bis eine neue Nachricht eintrifft.
Sowohl im automatischen als auch im manuellen Modus wird bei jeder neu eintreffenden Nachricht das Ereignis OnAMQPMessage ausgelöst.
procedure OnAMQPMessageEvent(Sender: TObject; const aSession:
TsgcAMQP1Session; const aLink: TsgcAMQP1ReceiverLink; const aMessage:
TsgcAMQP1Message; var DeliveryState: TsgcAMQP1MessageDeliveryState);
begin
ShowMessage(aMessage.ApplicationData.AMQPValue.Value);
end;
Dokumentation
AMQP1 Delphi Client
Erfahre mehr über den Delphi-/C++Builder-AMQP-1.0.0-Client https://www.esegece.com/help/sgcWebSockets/#t=Components%2FProtocols%2FSubprotocols%2FAMQP1%2FProtocol_AMQP1.htmDemo herunterladen
Lade die für Windows kompilierte AMQP-1.0.0-Client-Demo herunter, erstellt mit der sgcWebSockets-Bibliothek.
