Componente STOMP RabbitMQ Client: sgcMQ | eSeGeCe

STOMP RabbitMQ Client

TsgcWSPClient_STOMP_RabbitMQ es el cliente STOMP con las convenciones de destino de RabbitMQ ya incorporadas. RabbitMQ codifica su semántica en la cadena de destino, así que /queue/, /topic/, /exchange/, /amq/queue/ y /temp-queue/ significan cosas distintas. Este componente las convierte en métodos con nombre propio, y unos registros de cabecera tipados sustituyen al análisis de cadenas en bruto.

TsgcWSPClient_STOMP_RabbitMQ

Todo lo del cliente STOMP genérico sigue disponible. Lo que se añade son las ayudas de destino y los eventos con nombre de RabbitMQ, que traen objetos de cabecera tipados.

Clase del componente

TsgcWSPClient_STOMP_RabbitMQ

Especificación

STOMP 1.0, 1.1 y 1.2

Transporte

TCP (61613) o TLS (61614)

Lenguajes

Delphi, C++ Builder

Transporte: TCP plano y TLS. sgcMQ habla con el plugin STOMP de RabbitMQ por TCP plano y TLS. El plugin Web-STOMP de RabbitMQ es un endpoint WebSocket, así que llegar hasta él requiere un paquete sgcWebSockets, que es el que aporta el cliente WebSocket.

Suscríbete a una cola, publica en un exchange

Este ejemplo usa el plugin STOMP de RabbitMQ en su puerto TCP nativo, el 61613. Para un enlace cifrado, activa TLS en el transporte y usa el puerto 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}");

Propiedades y métodos principales

Cada ayuda recibe el nombre a secas, y el componente construye por ti la cadena de destino de RabbitMQ.

Colas

SubscribeQueue, PublishQueue y UnSubscribeQueue trabajan con los destinos /queue/ de RabbitMQ, con los indicadores durable, auto-delete y exclusive como argumentos.

Temas

SubscribeTopic, PublishTopic y UnSubscribeTopic usan el destino /topic/, que enruta a través del exchange amq.topic de RabbitMQ.

Exchanges

SubscribeExchange(name, pattern) y PublishExchange(name, routingKey, text) se dirigen a destinos /exchange/, donde un patrón de binding selecciona lo que recibes.

Colas externas

SubscribeQueueOutside y PublishQueueOutside se corresponden con /amq/queue/, para colas que se declararon en otro sitio y que el cliente no debe volver a declarar.

Colas temporales

SubscribeTemporaryQueue(queue, replyTo) y PublishTemporaryQueue implementan el patrón petición/respuesta /temp-queue/ de RabbitMQ con un destino de respuesta de vida corta.

Destinos genéricos

SubscribeEx, PublishEx y UnSubscribeEx reciben la cadena de destino en bruto cuando necesitas algo que las ayudas con nombre no cubren.

Cabeceras tipadas

OnRabbitMQMessage te entrega un TsgcWSRabbitMQSTOMPHeadersMessage y el elemento de suscripción correspondiente, así que el destino, el id de mensaje y el modo de acuse son propiedades y no subcadenas.

Cabeceras personalizadas

Todas las ayudas de publicación aceptan un TStrings de cabeceras adicionales, que es como se configuran las extensiones de RabbitMQ como la prioridad, la caducidad o la persistencia de los mensajes.

Conexión

Client, Authentication, HeartBeat, Versions y Options se comportan exactamente igual que en el cliente STOMP genérico.

Sigue explorando

Ayuda en líneaReferencia completa de la API y guía de uso.
Cliente STOMP genéricoEl componente base con el conjunto estándar de tramas.
AMQP 0.9.1 ClientEl protocolo nativo de RabbitMQ, si STOMP no es un requisito.
Descargar prueba gratuitaPruébalo contra un contenedor local de RabbitMQ.
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 habla con RabbitMQ por STOMP desde Delphi o C++ Builder.