Composant client STOMP : sgcMQ | eSeGeCe

Client STOMP

TsgcWSPClient_STOMP est un client STOMP 1.0, 1.1 et 1.2 générique. STOMP est un protocole à trames textuelles, il est donc facile à tracer et fonctionne avec presque tout broker offrant un endpoint de messagerie. Ce composant couvre le jeu de trames standard, avec des descendants spécifiques disponibles pour RabbitMQ et ActiveMQ.

TsgcWSPClient_STOMP

Annonce les versions du protocole que tu acceptes via Versions et le broker en choisit une pendant l'échange CONNECT. La version négociée arrive dans OnSTOMPConnected.

Classe du composant

TsgcWSPClient_STOMP

Spécification

STOMP 1.0, 1.1 et 1.2

Transport

TCP (61613) ou TLS

Langages

Delphi, C++ Builder

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

S'abonner avec un identifiant, puis envoyer

STOMP identifie les abonnements par un identifiant que tu choisis, celui-là même que tu passes à UnSubscribe et qui revient sur chaque trame MESSAGE entrante.

uses
  sgcTCP_Client_WS, sgcWebSocket_Classes, sgcWebSocket_Protocols,
  sgcWebSocket_Protocol_STOMP_Client;

var
  TCPClient: TsgcTCPClient;
  STOMP: TsgcWSPClient_STOMP;
begin
  TCPClient := TsgcTCPClient.Create(nil);
  TCPClient.Host := 'broker.example.com';
  TCPClient.Port := 61613;

  STOMP := TsgcWSPClient_STOMP.Create(nil);
  STOMP.Client := TCPClient;
  STOMP.Versions.V1_2 := True;
  STOMP.Options.VirtualHost := '/';
  STOMP.Authentication.Enabled  := True;
  STOMP.Authentication.UserName := 'guest';
  STOMP.Authentication.Password := 'guest';
  STOMP.HeartBeat.Enabled := True;

  STOMP.OnSTOMPConnected := STOMPConnected;
  STOMP.OnSTOMPMessage   := STOMPMessage;

  TCPClient.Active := True;
end;

procedure TForm1.STOMPConnected(Connection: TsgcWSConnection;
  Version, Server, Session, HeartBeat, RawHeaders: string);
begin
  STOMP.Subscribe('sub-0', '/queue/orders');
  STOMP.Send('/queue/orders', '{"orderId":12345}');
end;

procedure TForm1.STOMPMessage(Connection: TsgcWSConnection;
  MessageText, Destination, MessageId, Subscription, ACK, ContentType,
  RawHeaders: string);
begin
  Memo1.Lines.Add(Destination + ': ' + MessageText);
  STOMP.ACK(MessageId);
end;
// include: sgcTCP_Client_WS.hpp, sgcWebSocket_Protocols.hpp,
// sgcWebSocket_Protocol_STOMP_Client.hpp

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

TsgcWSPClient_STOMP *STOMP = new TsgcWSPClient_STOMP(this);
STOMP->Client = TCPClient;
STOMP->Versions->V1_2 = true;
STOMP->Authentication->Enabled  = true;
STOMP->Authentication->UserName = "guest";
STOMP->Authentication->Password = "guest";

STOMP->OnSTOMPConnected = STOMPConnected;
STOMP->OnSTOMPMessage   = STOMPMessage;

TCPClient->Active = true;

// In the OnSTOMPConnected handler:
STOMP->Subscribe("sub-0", "/queue/orders");
STOMP->Send("/queue/orders", "{\"orderId\":12345}");

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

Les membres que tu utilises le plus souvent.

Envoi

Send(destination, text, contentType, transaction, customHeaders) écrit une trame SEND. Les trois derniers arguments sont facultatifs, un envoi simple tient donc en deux paramètres.

Abonnement

Subscribe(id, destination, ack, customHeaders) enregistre un abonnement sous un identifiant de ton choix, et UnSubscribe(id) le retire. Le mode d'acquittement vaut ackAuto par défaut.

Acquittement

ACK(id, transaction) confirme un message et NACK(id, transaction) le refuse. Les deux prennent l'identifiant de message arrivé avec la trame MESSAGE.

Transactions

BeginTransaction, CommitTransaction et AbortTransaction prennent un nom de transaction. Passe ce nom à Send et ACK pour les inscrire dans la transaction.

Événement de message

OnSTOMPMessage te remet le corps, la destination, l'identifiant de message, l'identifiant d'abonnement, le mode d'acquittement, le type de contenu et le bloc d'en-têtes brut, rien de la trame n'est perdu.

Négociation de version

Versions.V1_0, V1_1 et V1_2 contrôlent ce que le client annonce. La version retenue par le broker est le premier argument d'OnSTOMPConnected.

Accusés de réception et erreurs

OnSTOMPReceipt se déclenche quand le broker confirme une trame, OnSTOMPError quand il en rejette une, tous deux avec l'identifiant d'accusé et les en-têtes bruts.

Heart-beating

HeartBeat configure les intervalles sortant et entrant négociés au CONNECT. Ping en envoie un manuellement et OnSTOMPPing rend compte de l'échange.

Options de connexion

Options.VirtualHost devient l'en-tête host du CONNECT, et Options.DisconnectTimeout borne le temps qu'un Disconnect propre attend l'accusé du broker.

Pour aller plus loin

Aide en ligneRéférence complète de l'API et guide d'utilisation.
STOMP pour RabbitMQLe descendant avec les utilitaires de destination RabbitMQ.
STOMP pour ActiveMQLe descendant réglé pour Apache ActiveMQ.
Télécharger l'essai gratuitConnecte-toi à n'importe quel broker compatible STOMP.
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 envoie ta première trame STOMP depuis Delphi ou C++ Builder.