Componente STOMP Client: sgcMQ | eSeGeCe

STOMP Client

TsgcWSPClient_STOMP es un cliente STOMP genérico para las versiones 1.0, 1.1 y 1.2. STOMP es un protocolo de tramas de texto, así que resulta fácil de depurar y funciona contra casi cualquier broker que ofrezca un endpoint de mensajería. Este componente cubre el conjunto estándar de tramas, y dispones de descendientes específicos para RabbitMQ y ActiveMQ.

TsgcWSPClient_STOMP

Anuncia las versiones del protocolo que aceptas mediante Versions y el broker elige una durante el intercambio CONNECT. La versión negociada te llega en OnSTOMPConnected.

Clase del componente

TsgcWSPClient_STOMP

Especificación

STOMP 1.0, 1.1 y 1.2

Transporte

TCP (61613) o TLS

Lenguajes

Delphi, C++ Builder

Transporte: TCP plano y TLS. sgcMQ se conecta por TCP plano y TLS. Si necesitas STOMP sobre WebSocket, eso requiere un paquete sgcWebSockets, que es el que aporta el cliente WebSocket.

Suscríbete con un id y luego envía

STOMP identifica las suscripciones mediante un id que eliges tú, el mismo id que pasas a UnSubscribe y el que vuelve en cada trama 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}");

Propiedades y métodos principales

Los miembros que vas a usar con más frecuencia.

Envío

Send(destination, text, contentType, transaction, customHeaders) escribe una trama SEND. Los tres últimos argumentos son opcionales, así que un envío sencillo son dos parámetros.

Suscripción

Subscribe(id, destination, ack, customHeaders) registra una suscripción con el id que tú elijas, y UnSubscribe(id) la elimina. El modo de acuse por defecto es ackAuto.

Acuse de recibo

ACK(id, transaction) confirma un mensaje y NACK(id, transaction) lo rechaza. Ambos reciben el id de mensaje que llegó con la trama MESSAGE.

Transacciones

BeginTransaction, CommitTransaction y AbortTransaction reciben un nombre de transacción. Pasa ese nombre a Send y a ACK para incorporarlos a la transacción.

Evento de mensaje

OnSTOMPMessage te entrega el cuerpo, el destino, el id de mensaje, el id de suscripción, el modo de acuse, el tipo de contenido y el bloque de cabeceras en bruto, así que no se pierde nada de la trama.

Negociación de versión

Versions.V1_0, V1_1 y V1_2 controlan lo que anuncia el cliente. La versión que eligió el broker es el primer argumento de OnSTOMPConnected.

Acuses y errores

OnSTOMPReceipt se dispara cuando el broker confirma una trama y OnSTOMPError cuando la rechaza, ambos con el id del acuse y las cabeceras en bruto.

Heart-beating

HeartBeat configura los intervalos de salida y de entrada negociados en el CONNECT. Ping envía uno manualmente y OnSTOMPPing informa del intercambio.

Opciones de conexión

Options.VirtualHost se convierte en la cabecera host del CONNECT, y Options.DisconnectTimeout limita cuánto espera un Disconnect ordenado al acuse del broker.

Sigue explorando

Ayuda en líneaReferencia completa de la API y guía de uso.
STOMP para RabbitMQEl descendiente con ayudas para los destinos de RabbitMQ.
STOMP para ActiveMQEl descendiente ajustado para Apache ActiveMQ.
Descargar prueba gratuitaConecta con cualquier broker compatible con STOMP.
PreciosLicencias Single, Team y Site con código fuente completo.
La mejor opción: All-AccessTodos los productos de eSeGeCe, con Premium Support incluido, desde €1,059 al año.
Ver precios de All-Access

¿Listo para empezar?

Descarga la prueba gratuita y envía tu primera trama STOMP desde Delphi o C++ Builder.