Componente cliente STOMP: sgcMQ | eSeGeCe

Cliente STOMP

O TsgcWSPClient_STOMP é um cliente STOMP 1.0, 1.1 e 1.2 genérico. O STOMP é um protocolo de frames em texto, então é fácil de rastrear e funciona com quase qualquer broker que ofereça um endpoint de mensageria. Este componente cobre o conjunto de frames padrão, com descendentes específicos por broker disponíveis para RabbitMQ e ActiveMQ.

TsgcWSPClient_STOMP

Anuncie as versões do protocolo que você aceita através de Versions e o broker escolhe uma durante a troca CONNECT. A versão negociada chega em OnSTOMPConnected.

Classe do componente

TsgcWSPClient_STOMP

Especificação

STOMP 1.0, 1.1 e 1.2

Transporte

TCP (61613) ou TLS

Linguagens

Delphi, C++ Builder

Transporte: TCP puro e TLS. O sgcMQ se conecta sobre TCP puro e TLS. Se você precisar de STOMP sobre WebSocket, isso exige um pacote sgcWebSockets, que fornece o cliente WebSocket.

Assine com um id e depois envie

O STOMP identifica assinaturas por um id que você escolhe, que é o mesmo id que você passa para UnSubscribe e o que volta em cada frame MESSAGE recebido.

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

Principais propriedades & métodos

Os membros que você usa com mais frequência.

Envio

Send(destination, text, contentType, transaction, customHeaders) escreve um frame SEND. Os três últimos argumentos são opcionais, então um envio simples tem dois parâmetros.

Assinatura

Subscribe(id, destination, ack, customHeaders) registra uma assinatura sob um id de sua escolha, e UnSubscribe(id) a remove. O modo de confirmação é ackAuto por padrão.

Confirmação

ACK(id, transaction) confirma uma mensagem e NACK(id, transaction) a recusa. Ambos recebem o id de mensagem que chegou com o frame MESSAGE.

Transações

BeginTransaction, CommitTransaction e AbortTransaction recebem um nome de transação. Passe esse nome para Send e ACK para incluí-los na transação.

Evento de mensagem

OnSTOMPMessage entrega a você o corpo, o destino, o id da mensagem, o id da assinatura, o modo de confirmação, o tipo de conteúdo e o bloco de cabeçalhos bruto, então nada do frame se perde.

Negociação de versão

Versions.V1_0, V1_1 e V1_2 controlam o que o cliente anuncia. A versão escolhida pelo broker é o primeiro argumento de OnSTOMPConnected.

Recibos e erros

OnSTOMPReceipt dispara quando o broker confirma um frame, OnSTOMPError quando ele rejeita um, ambos com o id do recibo e os cabeçalhos brutos.

Heartbeat

HeartBeat configura os intervalos de saída e de entrada negociados no CONNECT. Ping envia um manualmente e OnSTOMPPing informa a troca.

Opções de conexão

Options.VirtualHost se torna o cabeçalho host no CONNECT, e Options.DisconnectTimeout limita quanto tempo um Disconnect gracioso espera pelo recibo do broker.

Continue explorando

Ajuda onlineReferência completa da API e guia de uso.
STOMP para RabbitMQO descendente com utilitários de destino do RabbitMQ.
STOMP para ActiveMQO descendente ajustado para o Apache ActiveMQ.
Baixar avaliação gratuitaConecte-se a qualquer broker compatível com STOMP.
PreçosLicenças Single, Team e Site com código-fonte completo.
Melhor custo-benefício: All-AccessTodos os produtos da eSeGeCe, com Suporte Premium incluído, a partir de €1,059/ano.
Ver preços do All-Access

Pronto para começar?

Baixe a versão de avaliação gratuita e envie seu primeiro frame STOMP a partir do Delphi ou do C++ Builder.