Composant client STOMP RabbitMQ : sgcMQ | eSeGeCe

Client STOMP RabbitMQ

TsgcWSPClient_STOMP_RabbitMQ est le client STOMP avec les conventions de destination de RabbitMQ intégrées. RabbitMQ encode sa sémantique dans la chaîne de destination, si bien que /queue/, /topic/, /exchange/, /amq/queue/ et /temp-queue/ signifient chacun autre chose. Ce composant les transforme en méthodes nommées, et des enregistrements d'en-têtes typés remplacent l'analyse de chaînes brutes.

TsgcWSPClient_STOMP_RabbitMQ

Tout ce que propose le client STOMP générique reste disponible. Les ajouts sont les utilitaires de destination et les événements nommés d'après RabbitMQ, avec des objets d'en-têtes typés.

Classe du composant

TsgcWSPClient_STOMP_RabbitMQ

Spécification

STOMP 1.0, 1.1 et 1.2

Transport

TCP (61613) ou TLS (61614)

Langages

Delphi, C++ Builder

Transport : TCP simple et TLS. sgcMQ dialogue avec le plugin STOMP de RabbitMQ en TCP simple et en TLS. Le plugin Web-STOMP de RabbitMQ est un endpoint WebSocket, l'atteindre nécessite donc un package sgcWebSockets, qui fournit le client WebSocket.

S'abonner à une file, publier vers un exchange

Cet exemple utilise le plugin STOMP de RabbitMQ sur son port TCP natif, 61613. Pour une liaison chiffrée, active TLS sur le support de transport et utilise le port 61614.

uses
  sgcTCP_Client_WS, sgcWebSocket_Classes, sgcWebSocket_Protocols,
  sgcWebSocket_Protocol_STOMP_Broker_Client,
  sgcWebSocket_Protocol_STOMP_RabbitMQ_Client;

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

  STOMP := TsgcWSPClient_STOMP_RabbitMQ.Create(nil);
  STOMP.Client := TCPClient;
  STOMP.Authentication.Enabled  := True;
  STOMP.Authentication.UserName := 'guest';
  STOMP.Authentication.Password := 'guest';

  STOMP.OnRabbitMQConnected := RabbitMQConnected;
  STOMP.OnRabbitMQMessage   := RabbitMQMessage;

  TCPClient.Active := True;
end;

procedure TForm1.RabbitMQConnected(Connection: TsgcWSConnection;
  Headers: TsgcWSRabbitMQSTOMPHeadersConnected);
begin
  // /queue/orders, durable
  STOMP.SubscribeQueue('orders');

  // /exchange/orders with routing pattern 'create'
  STOMP.SubscribeExchange('orders', 'create');
  STOMP.PublishExchange('orders', 'create', '{"id":42}');
end;

procedure TForm1.RabbitMQMessage(Connection: TsgcWSConnection;
  MessageText: string; Headers: TsgcWSRabbitMQSTOMPHeadersMessage;
  Subscription: TsgcWSBrokerSTOMPSubscriptionItem);
begin
  Memo1.Lines.Add(Headers.Destination + ': ' + MessageText);
end;
// include: sgcTCP_Client_WS.hpp, sgcWebSocket_Protocols.hpp,
// sgcWebSocket_Protocol_STOMP_RabbitMQ_Client.hpp

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

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

STOMP->OnRabbitMQConnected = RabbitMQConnected;
STOMP->OnRabbitMQMessage   = RabbitMQMessage;

TCPClient->Active = true;

// In the OnRabbitMQConnected handler:
STOMP->SubscribeQueue("orders");
STOMP->SubscribeExchange("orders", "create");
STOMP->PublishExchange("orders", "create", "{\"id\":42}");

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

Chaque utilitaire prend le nom simple, et le composant construit la chaîne de destination RabbitMQ à ta place.

Files d'attente

SubscribeQueue, PublishQueue et UnSubscribeQueue travaillent avec les destinations /queue/ de RabbitMQ, avec les indicateurs durable, auto-delete et exclusive en arguments.

Topics

SubscribeTopic, PublishTopic et UnSubscribeTopic utilisent la destination /topic/, qui achemine via l'exchange amq.topic de RabbitMQ.

Exchanges

SubscribeExchange(name, pattern) et PublishExchange(name, routingKey, text) adressent les destinations /exchange/, où un motif de liaison sélectionne ce que tu reçois.

Files externes

SubscribeQueueOutside et PublishQueueOutside correspondent à /amq/queue/, pour des files déclarées ailleurs et que le client ne doit pas redéclarer.

Files temporaires

SubscribeTemporaryQueue(queue, replyTo) et PublishTemporaryQueue implémentent le motif requête/réponse /temp-queue/ de RabbitMQ, avec une destination de réponse éphémère.

Destinations génériques

SubscribeEx, PublishEx et UnSubscribeEx prennent la chaîne de destination brute quand tu as besoin de quelque chose que les utilitaires nommés ne couvrent pas.

En-têtes typés

OnRabbitMQMessage délivre un TsgcWSRabbitMQSTOMPHeadersMessage et l'élément d'abonnement correspondant, si bien que la destination, l'identifiant de message et le mode d'acquittement sont des propriétés plutôt que des sous-chaînes.

En-têtes personnalisés

Chaque utilitaire de publication accepte un TStrings d'en-têtes supplémentaires, c'est ainsi que tu règles les extensions RabbitMQ comme la priorité, l'expiration ou la persistance d'un message.

Connexion

Client, Authentication, HeartBeat, Versions et Options se comportent exactement comme sur le client STOMP générique.

Pour aller plus loin

Aide en ligneRéférence complète de l'API et guide d'utilisation.
Client STOMP génériqueLe composant de base avec le jeu de trames standard.
Client AMQP 0.9.1Le protocole natif de RabbitMQ, si STOMP n'est pas une obligation.
Télécharger l'essai gratuitFais tourner le client contre un conteneur RabbitMQ local.
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 dialogue avec RabbitMQ en STOMP depuis Delphi ou C++ Builder.