Componente cliente STOMP RabbitMQ: sgcMQ | eSeGeCe

Cliente STOMP RabbitMQ

O TsgcWSPClient_STOMP_RabbitMQ é o cliente STOMP com as convenções de destino do RabbitMQ já embutidas. O RabbitMQ codifica sua semântica na string de destino, então /queue/, /topic/, /exchange/, /amq/queue/ e /temp-queue/ significam coisas diferentes. Este componente transforma isso em métodos nomeados, e registros de cabeçalho tipados substituem a análise de strings brutas.

TsgcWSPClient_STOMP_RabbitMQ

Tudo o que existe no cliente STOMP genérico continua disponível. As adições são os utilitários de destino e os eventos com nomes do RabbitMQ, com objetos de cabeçalho tipados.

Classe do componente

TsgcWSPClient_STOMP_RabbitMQ

Especificação

STOMP 1.0, 1.1 e 1.2

Transporte

TCP (61613) ou TLS (61614)

Linguagens

Delphi, C++ Builder

Transporte: TCP puro e TLS. O sgcMQ conversa com o plugin STOMP do RabbitMQ sobre TCP puro e TLS. O plugin Web-STOMP do RabbitMQ é um endpoint WebSocket, então alcançá-lo exige um pacote sgcWebSockets, que fornece o cliente WebSocket.

Assine uma fila e publique em um exchange

Este exemplo usa o plugin STOMP do RabbitMQ na sua porta TCP nativa, a 61613. Para um link criptografado, ative o TLS no transporte e use a porta 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}");

Principais propriedades & métodos

Cada utilitário recebe o nome simples, e o componente monta a string de destino do RabbitMQ para você.

Filas

SubscribeQueue, PublishQueue e UnSubscribeQueue trabalham com os destinos /queue/ do RabbitMQ, com flags de durabilidade, exclusão automática e exclusividade como argumentos.

Tópicos

SubscribeTopic, PublishTopic e UnSubscribeTopic usam o destino /topic/, que roteia através do exchange amq.topic do RabbitMQ.

Exchanges

SubscribeExchange(name, pattern) e PublishExchange(name, routingKey, text) endereçam destinos /exchange/, onde um padrão de binding seleciona o que você recebe.

Filas externas

SubscribeQueueOutside e PublishQueueOutside mapeiam para /amq/queue/, para filas que foram declaradas em outro lugar e não devem ser redeclaradas pelo cliente.

Filas temporárias

SubscribeTemporaryQueue(queue, replyTo) e PublishTemporaryQueue implementam o padrão de requisição/resposta /temp-queue/ do RabbitMQ com um destino de resposta de vida curta.

Destinos genéricos

SubscribeEx, PublishEx e UnSubscribeEx recebem a string de destino bruta quando você precisa de algo que os utilitários nomeados não cobrem.

Cabeçalhos tipados

OnRabbitMQMessage entrega um TsgcWSRabbitMQSTOMPHeadersMessage e o item de assinatura correspondente, então o destino, o id da mensagem e o modo de confirmação são propriedades, e não substrings.

Cabeçalhos personalizados

Cada utilitário de publicação aceita um TStrings de cabeçalhos extras, que é como você define extensões do RabbitMQ como prioridade, expiração ou persistência da mensagem.

Conexão

Client, Authentication, HeartBeat, Versions e Options se comportam exatamente como no cliente STOMP genérico.

Continue explorando

Ajuda onlineReferência completa da API e guia de uso.
Cliente STOMP genéricoO componente base com o conjunto de frames padrão.
Cliente AMQP 0.9.1O protocolo nativo do RabbitMQ, se o STOMP não for um requisito.
Baixar avaliação gratuitaExecute contra um container RabbitMQ local.
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 converse com o RabbitMQ via STOMP a partir do Delphi ou do C++ Builder.