STOMP-clientcomponent: sgcMQ | eSeGeCe

STOMP-client

TsgcWSPClient_STOMP is een generieke STOMP 1.0-, 1.1- en 1.2-client. STOMP werkt met tekstframes, dus het is makkelijk te volgen en het werkt met vrijwel elke broker die een messaging-endpoint aanbiedt. Dit component dekt de standaardset frames, met broker-specifieke afstammelingen voor RabbitMQ en ActiveMQ.

TsgcWSPClient_STOMP

Geef via Versions aan welke protocolversies je accepteert, dan kiest de broker er tijdens de CONNECT-uitwisseling een. De onderhandelde versie komt binnen in OnSTOMPConnected.

Componentklasse

TsgcWSPClient_STOMP

Specificatie

STOMP 1.0, 1.1 en 1.2

Transport

TCP (61613) of TLS

Talen

Delphi, C++ Builder

Transport: gewoon TCP en TLS. sgcMQ verbindt via gewoon TCP en TLS. Heb je STOMP over WebSocket nodig, dan is daarvoor een sgcWebSockets-pakket vereist, dat de WebSocket-client levert.

Abonneer met een id en verstuur daarna

STOMP identificeert abonnementen met een id die jij kiest, dezelfde id die je aan UnSubscribe doorgeeft en die terugkomt op elk binnenkomend MESSAGE-frame.

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}");

Belangrijkste eigenschappen & methoden

De leden die je het vaakst gebruikt.

Versturen

Send(destination, text, contentType, transaction, customHeaders) schrijft een SEND-frame. De laatste drie argumenten zijn optioneel, dus een eenvoudige verzending heeft twee parameters.

Abonneren

Subscribe(id, destination, ack, customHeaders) registreert een abonnement onder een id die jij kiest, en UnSubscribe(id) verwijdert het. De ack-modus is standaard ackAuto.

Bevestigen

ACK(id, transaction) bevestigt een bericht en NACK(id, transaction) weigert het. Beide nemen de message id die met het MESSAGE-frame binnenkwam.

Transacties

BeginTransaction, CommitTransaction en AbortTransaction nemen een transactienaam. Geef die naam door aan Send en ACK om ze in de transactie op te nemen.

Berichtgebeurtenis

OnSTOMPMessage geeft je de body, de bestemming, de message id, de subscription id, de ack-modus, het content type en het ruwe headerblok, zodat er niets van het frame verloren gaat.

Versieonderhandeling

Versions.V1_0, V1_1 en V1_2 bepalen wat de client aanbiedt. De versie die de broker koos, is het eerste argument van OnSTOMPConnected.

Receipts en fouten

OnSTOMPReceipt vuurt af wanneer de broker een frame bevestigt, OnSTOMPError wanneer hij er een afwijst, beide met de receipt id en de ruwe headers.

Heartbeats

HeartBeat configureert de uitgaande en inkomende intervallen die bij CONNECT worden onderhandeld. Ping verstuurt er handmatig een en OnSTOMPPing meldt de uitwisseling.

Verbindingsopties

Options.VirtualHost wordt de host-header bij CONNECT, en Options.DisconnectTimeout begrenst hoelang een nette Disconnect op de receipt van de broker wacht.

Blijf ontdekken

Online helpVolledige API-referentie en gebruikershandleiding.
STOMP voor RabbitMQDe afstammeling met helpers voor RabbitMQ-bestemmingen.
STOMP voor ActiveMQDe afstammeling die op Apache ActiveMQ is afgestemd.
Download de gratis proefversieVerbind met elke broker die STOMP ondersteunt.
PrijzenSingle-, Team- en Site-licenties met volledige broncode.
De beste deal: All-AccessElk eSeGeCe-product, inclusief Premium-ondersteuning, vanaf €1,059 per jaar.
Bekijk de All-Access-prijzen

Klaar om aan de slag te gaan?

Download de gratis proefversie en verstuur vanuit Delphi of C++ Builder je eerste STOMP-frame.