À 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
- Communication orientée messages : AMQP 1.0.0 est centré autour du concept de message. Les messages peuvent transporter des données, des instructions ou des commandes et sont les unités fondamentales de la communication.
- Brokers de messages : le protocole fonctionne sur un modèle de messagerie avec broker. Les brokers, qui peuvent être des serveurs ou des entités intermédiaires, gèrent le routage et la livraison des messages entre producteurs et consommateurs.
- Files et exchanges : les files sont des entités de stockage dans le broker où les messages sont temporairement stockés. Les exchanges définissent les règles de routage des messages depuis les producteurs vers les files en fonction de critères comme le contenu du message ou les routing keys.
- Adresses et liens : les adresses identifient les destinations de messages dans l'infrastructure de messagerie. Les liens sont des canaux de communication entre un expéditeur (producteur) et un récepteur (consommateur) associés à une adresse spécifique.
- Sessions et connexions : les sessions représentent un canal logique de communication, permettant plusieurs flux de messages au sein d'une même connexion. Les connexions gèrent le lien de communication global entre les applications clientes et le broker de messages.
- Sécurité : AMQP 1.0.0 prend en charge divers mécanismes de sécurité, dont l'authentification et l'autorisation, pour garantir une communication sécurisée entre clients et brokers.
- Indépendant du transport : le protocole est conçu pour être indépendant du transport, ce qui signifie qu'il peut fonctionner sur différents transports réseau comme TCP, TLS ou WebSockets, offrant de la flexibilité au déploiement.
- Contrôle de flux : AMQP 1.0.0 inclut des mécanismes de contrôle de flux, permettant aux consommateurs d'indiquer leur capacité à traiter les messages entrants à un certain rythme. Cela évite de submerger les consommateurs avec un grand nombre de messages.
- Gestion des erreurs : le protocole spécifie des mécanismes de gestion d'erreurs, dont l'acquittement et le rejet de messages, garantissant la robustesse et la fiabilité de la livraison.
- Authentification SASL : Simple Authentication and Security Layer (SASL) est utilisé pour authentifier et sécuriser les connexions entre clients et brokers.
Configuration
Le client AMQP 1.0.0 dispose de la propriété AMQPOptions où tu peux configurer la connexion.
- ChannelMax : la valeur channel-max est le numéro de canal le plus élevé pouvant être utilisé sur la connexion. Cette
valeur plus un est le nombre maximum de sessions pouvant être simultanément actives sur la
connexion. - ContainerId : (optionnel) nom du container source, identifie de manière unique la connexion côté serveur.
- CreditSize : taille par défaut du flux de crédit.
- IdleTimeout : le timeout est déclenché par un peer local quand aucune trame
n'est reçue après dépassement d'une valeur seuil. L'idle timeout est mesuré en millisecondes et démarre à partir
de la réception de la dernière trame. - MaxFrameSize : taille de trame maximale acceptée.
- MaxLinksPerSession : nombre maximum de liens par session.
- WindowSize : taille de fenêtre par défaut.
L'authentification AMQP doit être configurée dans la propriété Authentication.
- AuthType : type d'authentification
- amqp1authNone : non configurée.
- amqp1authSASLAnonymous : authentification anonyme
- amqp1authSASLPlain : authentification par utilisateur/mot de passe. Ce type d'authentification nécessite de renseigner les propriétés suivantes :
- Username
- Password
- amqp1authSASLExternal : authentification externe
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.htmTé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.
