Componente cliente AMQP 0.9.1: sgcMQ | eSeGeCe

Cliente AMQP 0.9.1

O TsgcWSPClient_AMQP fala AMQP 0.9.1, o protocolo em torno do qual o RabbitMQ foi projetado. Ele expõe o modelo como ele realmente é: você abre um canal, declara um exchange e uma fila, faz o binding entre eles com uma chave de roteamento e então publica e consome. Nada fica escondido atrás de uma fachada simplificada, então o broker se comporta exatamente como a documentação dele diz que vai se comportar.

TsgcWSPClient_AMQP

Os canais recebem um nome em texto escolhido por você, então 'ch1' identifica o mesmo canal em todas as chamadas, em vez de um id numérico que você precisa controlar.

Classe do componente

TsgcWSPClient_AMQP

Especificação

AMQP 0-9-1

Transporte

TCP (5672) ou TLS (5671)

Linguagens

Delphi, C++ Builder

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

Declare uma topologia e depois publique e consuma

Faça as declarações dentro de OnAMQPConnect, assim que o handshake terminar. As entregas então chegam em OnAMQPBasicDeliver.

uses
  sgcTCP_Client_WS, sgcWebSocket_Protocols,
  sgcWebSocket_Protocol_AMQP_Client, sgcAMQP_Classes;

var
  TCPClient: TsgcTCPClient;
  AMQP: TsgcWSPClient_AMQP;
begin
  TCPClient := TsgcTCPClient.Create(nil);
  TCPClient.Host := 'broker.example.com';
  TCPClient.Port := 5672;

  AMQP := TsgcWSPClient_AMQP.Create(nil);
  AMQP.Client := TCPClient;
  AMQP.AMQPOptions.VirtualHost := '/';
  AMQP.HeartBeat.Enabled  := True;
  AMQP.HeartBeat.Interval := 30;

  AMQP.OnAMQPConnect      := AMQPConnect;
  AMQP.OnAMQPBasicDeliver := AMQPBasicDeliver;

  TCPClient.Active := True;
end;

procedure TForm1.AMQPConnect(Sender: TObject);
begin
  AMQP.OpenChannel('ch1');
  AMQP.DeclareExchange('ch1', 'orders', 'direct');
  AMQP.DeclareQueue('ch1', 'orders_in');
  AMQP.BindQueue('ch1', 'orders_in', 'orders', 'create');
  AMQP.Consume('ch1', 'orders_in');

  // Publish to the exchange with a routing key
  AMQP.PublishMessage('ch1', 'orders', 'create', '{"id":42}');
end;
#include "sgcTCP_Client_WS.hpp"
#include "sgcWebSocket_Protocols.hpp"
#include "sgcWebSocket_Protocol_AMQP_Client.hpp"

TsgcTCPClient *TCPClient = new TsgcTCPClient(this);
TCPClient->Host = "broker.example.com";
TCPClient->Port = 5672;

TsgcWSPClient_AMQP *AMQP = new TsgcWSPClient_AMQP(this);
AMQP->Client = TCPClient;
AMQP->OnAMQPConnect = AMQPConnect;
AMQP->OnAMQPBasicDeliver = AMQPBasicDeliver;

TCPClient->Active = true;

// In the OnAMQPConnect handler:
AMQP->OpenChannel("ch1");
AMQP->DeclareExchange("ch1", "orders", "direct");
AMQP->DeclareQueue("ch1", "orders_in");
AMQP->BindQueue("ch1", "orders_in", "orders", "create");
AMQP->Consume("ch1", "orders_in");
AMQP->PublishMessage("ch1", "orders", "create", "{\"id\":42}");

Principais propriedades e métodos

Quase todo método tem um irmão bloqueante ...Ex que espera a resposta do broker e a retorna, que é o que você quer em uma rotina de configuração linear.

Canais

OpenChannel e CloseChannel multiplexam várias conversas lógicas sobre uma única conexão TCP. EnableChannel e DisableChannel aplicam o controle de fluxo do canal.

Exchanges

DeclareExchange(channel, name, type) cria um exchange do tipo direct, fanout, topic ou headers. DeleteExchange o remove.

Filas

DeclareQueue, BindQueue, UnBindQueue, PurgeQueue e DeleteQueue cobrem todo o ciclo de vida da fila, cada um com uma variante ...Ex que retorna a resposta do broker.

Consumo

Consume(channel, queue) inicia uma assinatura e CancelConsume a encerra. As entregas chegam em OnAMQPBasicDeliver, com OnAMQPBasicGetOk e OnAMQPBasicGetEmpty para buscas de uma única mensagem.

Publicação

PublishMessage(channel, exchange, routingKey, body) tem sobrecargas para texto, streams e um objeto de mensagem completo com cabeçalhos e propriedades. Mensagens não roteáveis voltam em OnAMQPBasicReturn.

Confirmação

AckMessage confirma uma delivery tag, RejectMessage a recusa com requeue opcional e Recover pede ao broker que reentregue tudo o que ainda não foi confirmado.

Transações

SelectTransaction coloca um canal em modo transacional e depois CommitTransaction ou RollbackTransaction o encerra. OnAMQPTransactionOk confirma cada etapa.

Ajuste da conexão

AMQPOptions carrega VirtualHost, MaxChannels, MaxFrameSize e Locale, todos negociados com o broker durante o handshake inicial.

Prefetch

SetQoS(channel, prefetchSize, prefetchCount, global) limita quantas mensagens não confirmadas o broker pode empurrar para um consumidor, de modo que um manipulador lento não seja inundado.

Vitalidade

HeartBeat mantém vivas as conexões ociosas através de proxies e além dos timeouts do broker, com OnAMQPHeartBeat disparado a cada troca.

Continue explorando

Ajuda onlineReferência completa da API e guia de uso.
Cliente AMQP 1.0O outro AMQP, um protocolo diferente com seu próprio componente.
Baixar avaliação gratuitaExecute o cliente contra um contêiner 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 publique no seu primeiro exchange a partir do Delphi ou do C++ Builder.