AMQP 1.0.0 Delphi-client

· Componenten

Vanaf sgcWebSockets 2024.2.0 wordt AMQP 1.0.0 ondersteund.

AMQP (Advanced Message Queuing Protocol) 1.0.0 is een berichtenprotocol dat is ontworpen voor betrouwbare, asynchrone communicatie tussen gedistribueerde systemen. Het maakt de uitwisseling van berichten tussen toepassingen of componenten op een ontkoppelde manier mogelijk, zodat ze kunnen communiceren zonder directe afhankelijkheden. 

Over het geheel genomen biedt AMQP 1.0.0 een gestandaardiseerde en interoperabele manier voor verschillende softwarecomponenten en systemen om losjes gekoppeld te communiceren, wat het geschikt maakt voor diverse gedistribueerde en enterprise-toepassingen. 

AMQP-functies

Configuratie

De AMQP 1.0.0-client heeft de eigenschap AMQPOptions waarmee je de verbinding kunt configureren.

De AMQP-authenticatie moet worden geconfigureerd in de Authenticatie-eigenschap.

Verbinding

 De verbinding begint met de client (meestal een berichtentoepassing of -service) die een TCP-verbinding opzet naar de server (de message broker). De client maakt verbinding met de poort van de server, doorgaans 5672 voor niet-TLS-verbindingen en 5671 voor TLS-beveiligde verbindingen. Zodra de TCP-verbinding tot stand is gebracht, onderhandelen client en server over de AMQP-protocolversie die ze zullen gebruiken. AMQP 1.0.0 ondersteunt verschillende versies, en tijdens de onderhandeling komen beide partijen overeen versie 1.0.0 te gebruiken.

Na de protocolonderhandeling moet de client zich mogelijk authenticeren bij de server, afhankelijk van de serverconfiguratie. Authenticatiemechanismen kunnen SASL-mechanismen (Simple Authenticatie and Security Layer) zoals PLAIN, EXTERNAL of andere door de server ondersteunde mechanismen omvatten.

Voorbeeld: verbinden met een AMQP-server die luistert op de beveiligde poort 5671 en SASL-credentials gebruikt

// 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; 

Sessies

Zodra de client is geauthenticeerd, opent deze een AMQP-sessie. Een sessie is een logische context voor communicatie tussen de client en server. Sessies worden gebruikt om gerelateerde messaging-bewerkingen te groeperen. Gebruik de methode CreateSession om een nieuwe sessie aan te maken; je kunt daarbij een sessienaam opgeven of leeg laten — dan kent de component er automatisch een toe.

Als de sessie succesvol is aangemaakt, wordt de gebeurtenis OnAMQPSessionOpen aangeroepen met de details van de sessie. 

AMQP1.CreateSession('MySession');
procedure AMQP1AMQPSessionOpen(Sender: TObject; const aSession: TsgcAMQP1Session; 
  const aBegin: TsgcAMQP1FrameBegin);
begin
  ShowMessage('#session-open: ' + aSession.Id);
end; 

Binnen een sessie maakt de client links aan om te communiceren met specifieke entiteiten zoals queues, topics of andere door de server geleverde resources. Links zijn bidirectionele communicatiekanalen voor het versturen en ontvangen van berichten.

De component kan fungeren als sender- en receiver-node. Maakt het mogelijk om een willekeurig aantal links per sessie aan te maken, tot aan de limiet die is ingesteld in de eigenschap MaxLinksPerSession

Sender Links

Om een nieuwe sender link aan te maken, gebruik je de methode CreateSenderLink en geef je de naam van de sessie en optioneel de naam van de sender link door. Als de link succesvol is aangemaakt, wordt de gebeurtenis OnAMQPLinkOpen aangeroepen.

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; 

Receiver Links

Om een nieuwe receiver link aan te maken, gebruik je de methode CreateReceiverLink en geef je de naam van de sessie en optioneel de naam van de receiver link door. Als de link succesvol is aangemaakt, wordt de gebeurtenis OnAMQPLinkOpen aangeroepen. 

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; 

Berichten versturen

Met de sessie opgezet en links aangemaakt, kan de client beginnen met berichtbewerkingen zoals het versturen van berichten naar een bestemming. Gebruik de methode SendMessage om een bericht te versturen via een sender link. 

AMQP1.SendMessage('MySession', 'MySenderLink', 'My first AMQP Message'); 

Berichten lezen

Standaard worden Receiver Links aangemaakt in Automatic-modus, wat betekent dat elk nieuw binnenkomend bericht aan de client wordt bezorgd.

Als de Receiver Links zijn aangemaakt in manual-modus, gebruik je de synchrone methode GetMessage om op te halen en te wachten tot een nieuw bericht arriveert.

In zowel Automatic- als Manual-modus wordt elke keer dat een nieuw bericht arriveert de gebeurtenis OnAMQPMessage aangeroepen. 

procedure OnAMQPMessageEvent(Sender: TObject; const aSession:
    TsgcAMQP1Session; const aLink: TsgcAMQP1ReceiverLink; const aMessage:
    TsgcAMQP1Message; var DeliveryState: TsgcAMQP1MessageDeliveryState);
begin
  ShowMessage(aMessage.ApplicationData.AMQPValue.Value);
end; 

Documentatie

AMQP1 Delphi-client

Lees meer over de Delphi / CBuilder AMQP 1.0.0-client https://www.esegece.com/help/sgcWebSockets/#t=Components%2FProtocols%2FSubprotocols%2FAMQP1%2FProtocol_AMQP1.htm

Demo downloaden

Download de AMQP 1.0.0-client-demo gecompileerd voor Windows met behulp van de sgcWebSockets-bibliotheek.