Componente STOMP Client: sgcMQ | eSeGeCe

STOMP Client

TsgcWSPClient_STOMP è un client STOMP 1.0, 1.1 e 1.2 generico. STOMP è un protocollo a frame testuali, quindi è facile da tracciare e funziona con quasi qualsiasi broker che offra un endpoint di messaggistica. Questo componente copre l'insieme di frame standard, con discendenti specifici disponibili per RabbitMQ e ActiveMQ.

TsgcWSPClient_STOMP

Dichiara le versioni del protocollo che accetti tramite Versions e il broker ne sceglie una durante lo scambio CONNECT. La versione negoziata arriva in OnSTOMPConnected.

Classe del componente

TsgcWSPClient_STOMP

Specifica

STOMP 1.0, 1.1 e 1.2

Trasporto

TCP (61613) o TLS

Linguaggi

Delphi, C++ Builder

Trasporto: TCP semplice e TLS. sgcMQ si connette tramite TCP semplice e TLS. Se ti serve STOMP su WebSocket, è necessario un package sgcWebSockets, che fornisce il client WebSocket.

Sottoscrivi con un id, poi invia

STOMP identifica le sottoscrizioni con un id scelto da te, che è lo stesso id che passi a UnSubscribe e quello che torna indietro su ogni frame MESSAGE in entrata.

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

Proprietà e metodi principali

I membri che userai più spesso.

Invio

Send(destination, text, contentType, transaction, customHeaders) scrive un frame SEND. Gli ultimi tre argomenti sono facoltativi, quindi un invio semplice richiede due parametri.

Sottoscrizione

Subscribe(id, destination, ack, customHeaders) registra una sottoscrizione sotto un id scelto da te, e UnSubscribe(id) la rimuove. La modalità di ack vale ackAuto per impostazione predefinita.

Conferma

ACK(id, transaction) conferma un messaggio e NACK(id, transaction) lo rifiuta. Entrambi accettano l'id del messaggio arrivato con il frame MESSAGE.

Transazioni

BeginTransaction, CommitTransaction e AbortTransaction accettano il nome di una transazione. Passa quel nome a Send e ACK per farli rientrare nella transazione.

Evento del messaggio

OnSTOMPMessage ti consegna il corpo, la destinazione, l'id del messaggio, l'id della sottoscrizione, la modalità di ack, il content type e il blocco di header grezzi, così niente del frame va perso.

Negoziazione della versione

Versions.V1_0, V1_1 e V1_2 controllano cosa dichiara il client. La versione scelta dal broker è il primo argomento di OnSTOMPConnected.

Ricevute ed errori

OnSTOMPReceipt scatta quando il broker conferma un frame, OnSTOMPError quando ne rifiuta uno, entrambi con l'id della ricevuta e gli header grezzi.

Heart-beating

HeartBeat configura gli intervalli in uscita e in entrata negoziati sul CONNECT. Ping ne invia uno manualmente e OnSTOMPPing riporta lo scambio.

Opzioni di connessione

Options.VirtualHost diventa l'header host sul CONNECT, e Options.DisconnectTimeout limita quanto un Disconnect pulito attende la ricevuta del broker.

Continua a esplorare

Guida onlineRiferimento API completo e guida all'utilizzo.
STOMP per RabbitMQIl discendente con le funzioni di supporto per le destinazioni RabbitMQ.
STOMP per ActiveMQIl discendente ottimizzato per Apache ActiveMQ.
Scarica la versione di prova gratuitaConnettiti a qualsiasi broker che supporti STOMP.
PrezziLicenze Single, Team e Site con codice sorgente completo.
La scelta più conveniente: All-AccessTutti i prodotti eSeGeCe, con Supporto Premium incluso, a partire da €1,059/anno.
Vedi i prezzi All-Access

Pronto per iniziare?

Scarica la versione di prova gratuita e invia il tuo primo frame STOMP da Delphi o C++ Builder.