AMQP 1.0.0 Delphi Client

· Komponenten

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

Konfiguration

Der AMQP-1.0.0-Client hat die Eigenschaft AMQPOptions, mit der du die Verbindung konfigurieren kannst.

Die AMQP-Authentifizierung muss in der Eigenschaft Authentication konfiguriert werden.

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; 

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.htm

Demo herunterladen

Lade die für Windows kompilierte AMQP-1.0.0-Client-Demo herunter, erstellt mit der sgcWebSockets-Bibliothek.