Composant client AMQP 1.0 : sgcMQ | eSeGeCe

Client AMQP 1.0

TsgcWSPClient_AMQP1 implémente OASIS AMQP 1.0, également publié sous la référence ISO/IEC 19464. Malgré le nom commun, c'est un protocole différent d'AMQP 0.9.1, avec un autre modèle d'objets : un conteneur ouvre des sessions, les sessions portent des liens émetteurs et récepteurs, et les liens transportent les messages sous contrôle de flux par crédits. C'est le protocole que parlent Azure Service Bus et Event Hubs.

TsgcWSPClient_AMQP1

Les sessions et les liens sont désignés par le nom que tu leur donnes, si bien que 'session1' et 'sender1' identifient les mêmes objets dans tous les appels ultérieurs.

Classe du composant

TsgcWSPClient_AMQP1

Spécification

OASIS AMQP 1.0 (ISO/IEC 19464)

Transport

TCP (5672) ou TLS (5671)

Langages

Delphi, C++ Builder

Transport : TCP simple et TLS. sgcMQ se connecte en TCP simple et en TLS. Si tu as besoin d'AMQP sur WebSocket, cela nécessite un package sgcWebSockets, qui fournit le client WebSocket.

Ouvrir une session, attacher des liens, envoyer

Un lien émetteur pointe vers un nœud cible sur le broker, un lien récepteur vers un nœud source. Une fois un récepteur attaché, les livraisons arrivent sur OnAMQPMessage.

uses
  sgcTCP_Client_WS, sgcWebSocket_Protocols,
  sgcWebSocket_Protocol_AMQP1_Client, sgcAMQP1_Classes, sgcAMQP1_Frames;

var
  TCPClient: TsgcTCPClient;
  AMQP1: TsgcWSPClient_AMQP1;
begin
  TCPClient := TsgcTCPClient.Create(nil);
  TCPClient.Host := 'broker.example.com';
  TCPClient.Port := 5672;

  AMQP1 := TsgcWSPClient_AMQP1.Create(nil);
  AMQP1.Client := TCPClient;
  AMQP1.AMQPOptions.ContainerId := 'delphi-app';
  AMQP1.AMQPOptions.Authentication.AuthType := amqp1authSASLPlain;
  AMQP1.AMQPOptions.Authentication.Username := 'guest';
  AMQP1.AMQPOptions.Authentication.Password := 'guest';

  AMQP1.OnAMQPConnect := AMQPConnect;
  AMQP1.OnAMQPMessage := AMQPMessage;

  TCPClient.Active := True;
end;

procedure TForm1.AMQPConnect(Sender: TObject;
  const aOpen: TsgcAMQP1FrameOpen);
begin
  AMQP1.CreateSession('session1');

  // Sender link: name, then the target node address
  AMQP1.CreateSenderLink('session1', 'sender1', '/queue/orders');

  // Receiver link: deliveries arrive on OnAMQPMessage
  AMQP1.CreateReceiverLink('session1', 'receiver1', '/queue/orders');

  AMQP1.SendMessage('session1', 'sender1', '{"id":42}');
end;
#include "sgcTCP_Client_WS.hpp"
#include "sgcWebSocket_Protocols.hpp"
#include "sgcWebSocket_Protocol_AMQP1_Client.hpp"

TsgcTCPClient *TCPClient = new TsgcTCPClient(this);
TCPClient->Host = "broker.example.com";
TCPClient->Port = 5672;

TsgcWSPClient_AMQP1 *AMQP1 = new TsgcWSPClient_AMQP1(this);
AMQP1->Client = TCPClient;
AMQP1->AMQPOptions->ContainerId = "cbuilder-app";
AMQP1->OnAMQPConnect = AMQPConnect;
AMQP1->OnAMQPMessage = AMQPMessage;

TCPClient->Active = true;

// In the OnAMQPConnect handler. SendMessage is SendMessage_ in C++ Builder.
AMQP1->CreateSession("session1");
AMQP1->CreateSenderLink("session1", "sender1", "/queue/orders");
AMQP1->CreateReceiverLink("session1", "receiver1", "/queue/orders");
AMQP1->SendMessage_("session1", "sender1", "{\"id\":42}");

Propriétés et méthodes clés

Les membres que tu utilises le plus souvent.

Sessions

CreateSession renvoie un TsgcAMQP1Session et CloseSession le démonte. Une session est l'unité d'ordonnancement et de fenêtrage entre les deux conteneurs.

Liens

CreateSenderLink s'attache à un nœud cible, CreateReceiverLink à un nœud source, et CloseLink détache l'un ou l'autre. Une session peut porter plusieurs liens, jusqu'à MaxLinksPerSession.

Envoi

SendMessage(session, link, text) transfère un message, avec une surcharge acceptant un TsgcAMQP1Message complet quand tu as besoin de propriétés applicatives, d'un identifiant ou d'annotations.

Réception

Un lien récepteur attaché pousse les livraisons vers OnAMQPMessage. GetMessage en récupère un de façon synchrone avec un délai d'attente, quand un style bloquant convient mieux.

Retour de livraison

OnAMQPMessageSent se déclenche quand le transfert quitte le client, OnAMQPMessageSentAck quand le broker le règle. Les deux sont séparés à dessein.

Authentification

AMQPOptions.Authentication.AuthType choisit amqp1authSASLPlain, amqp1authSASLAnonymous, amqp1authSASLExternal ou aucune. OnAMQPSASLAuthentication rend compte de la négociation.

Utilitaires Azure

CreateCBSLink et PutCBSToken implémentent Claims-Based Security. CreateAzureCbsSasToken construit un jeton SAS Service Bus, CreateAzureCbsJWT un jeton bearer OAuth.

Contrôle de flux

AMQPOptions.CreditSize et WindowSize régissent ce qu'un récepteur accepte avant d'émettre plus de crédit. MaxFrameSize et ChannelMax sont négociés à l'ouverture.

Inspection des trames

OnAMQPBeforeReadFrame et OnAMQPBeforeWriteFrame te remettent chaque trame brute avec un indicateur Handled, ce qui est précieux quand un broker se comporte de façon inattendue.

Pour aller plus loin

Aide en ligneRéférence complète de l'API et guide d'utilisation.
Client AMQP 0.9.1L'autre AMQP, avec exchanges, files d'attente et liaisons.
Télécharger l'essai gratuitFais tourner le client contre Azure Service Bus, Artemis ou Qpid.
TarifsLicences Single, Team et Site avec le code source complet.
Meilleur rapport qualité-prix : All-AccessTous les produits eSeGeCe, Support Premium inclus, à partir de €1,059/an.
Voir les tarifs All-Access

Prêt à te lancer ?

Télécharge l'essai gratuit et attache ton premier lien AMQP 1.0 depuis Delphi ou C++ Builder.