Client Delphi AMQP 1.0.0

· Composants

À partir de sgcWebSockets 2024.2.0, AMQP 1.0.0 est pris en charge.

AMQP (Advanced Message Queuing Protocol) 1.0.0 est un protocole de messagerie conçu pour une communication fiable, asynchrone entre systèmes distribués. Il facilite l'échange de messages entre applications ou composants de manière découplée, leur permettant de communiquer sans dépendances directes. 

Dans l'ensemble, AMQP 1.0.0 fournit une manière standardisée et interopérable pour différents composants et systèmes logiciels de communiquer de façon faiblement couplée, ce qui le rend adapté à diverses applications distribuées et de niveau entreprise. 

Fonctionnalités d'AMQP

Configuration

Le client AMQP 1.0.0 dispose de la propriété AMQPOptions où tu peux configurer la connexion.

L'authentification AMQP doit être configurée dans la propriété Authentication.

Connexion

 La connexion démarre quand le client (généralement une application ou un service de messagerie) initie une connexion TCP vers le serveur (le broker de messages). Le client se connecte au port du serveur, typiquement 5672 pour des connexions non-TLS et 5671 pour des connexions sécurisées TLS. Une fois la connexion TCP établie, client et serveur négocient la version du protocole AMQP qu'ils utiliseront. AMQP 1.0.0 prend en charge plusieurs versions, et lors de la négociation, les deux parties se mettent d'accord sur la version 1.0.0.

Après la négociation du protocole, le client peut avoir besoin de s'authentifier auprès du serveur, selon la configuration de ce dernier. Les mécanismes d'authentification peuvent inclure des mécanismes SASL (Simple Authentication and Security Layer) comme PLAIN, EXTERNAL ou d'autres pris en charge par le serveur.

Exemple : se connecter à un serveur AMQP qui écoute sur le port sécurisé 5671 et en utilisant des identifiants SASL

// Création du client AMQP
oAMQP := TsgcWSPClient_AMQP1.Create(nil);
// Définition des options d'authentification AMQP
oAMQP.AMQPOptions.Authentication.AuthType := amqp1authSASLPlain;
oAMQP.AMQPOptions.Authentication.Username := 'sgc';
oAMQP.AMQPOptions.Authentication.Password := 'sgc';
// Création du client WebSocket
oClient := TsgcWebSocketClient.Create(nil);
// Définition des spécifications WebSocket
oClient.Specifications.RFC6455 := False;
// Définition des propriétés du client WebSocket
oClient.Host := 'www.esegece.com';
oClient.Port := 5671;
oClient.TLS := True;
// Assignation du client WebSocket au client AMQP
oAMQP.Client := oClient;
// Activation du client WebSocket
oClient.Active := True; 

Sessions

Une fois authentifié, le client ouvre une session AMQP. Une session est un contexte logique de communication entre le client et le serveur. Les sessions servent à regrouper des opérations de messagerie liées. Utilise la méthode CreateSession pour créer une nouvelle session ; la méthode permet de définir le nom de la session ou de le laisser vide et le composant en attribuera un automatiquement.

Si la session a été créée avec succès, l'événement OnAMQPSessionOpen se déclenchera avec les détails de la session. 

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

Liens

Au sein d'une session, le client crée des liens pour communiquer avec des entités spécifiques comme des files, des topics ou d'autres ressources fournies par le serveur. Les liens sont des canaux de communication bidirectionnels utilisés pour envoyer et recevoir des messages.

Le composant peut fonctionner comme nœud expéditeur et récepteur. Il permet de créer un nombre quelconque de liens par session, jusqu'à la limite définie dans la propriété MaxLinksPerSession

Liens expéditeur

Pour créer un nouveau lien expéditeur, utilise la méthode CreateSenderLink et passe le nom de la session et optionnellement le nom du lien expéditeur. Si le lien est créé avec succès, l'événement OnAMQPLinkOpen est levé.

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; 

Liens récepteur

Pour créer un nouveau lien récepteur, utilise la méthode CreateReceiverLink et passe le nom de la session et optionnellement le nom du lien récepteur. Si le lien est créé avec succès, l'événement OnAMQPLinkOpen est levé. 

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; 

Envoyer des messages

Avec la session établie et les liens créés, le client peut commencer à effectuer des opérations sur les messages comme envoyer des messages vers une destination. Utilise la méthode SendMessage pour envoyer un message via un lien expéditeur. 

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

Lire les messages

Par défaut, les liens récepteur sont créés en mode automatique, ce qui signifie qu'à chaque arrivée d'un nouveau message, celui-ci sera livré au client.

Si les liens récepteur ont été créés en mode manuel, utilise la méthode synchrone GetMessage pour récupérer et attendre l'arrivée d'un nouveau message.

En mode automatique et manuel, à chaque arrivée d'un nouveau message, l'événement OnAMQPMessage est déclenché. 

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

Documentation

Client Delphi AMQP1

En savoir plus sur le client Delphi / C++ Builder AMQP 1.0.0 https://www.esegece.com/help/sgcWebSockets/#t=Components%2FProtocols%2FSubprotocols%2FAMQP1%2FProtocol_AMQP1.htm

Télécharger la démo

Télécharge la démo du client AMQP 1.0.0 compilée pour Windows avec la bibliothèque sgcWebSockets.