Componente cliente AMQP 1.0: sgcMQ | eSeGeCe

Cliente AMQP 1.0

O TsgcWSPClient_AMQP1 implementa o OASIS AMQP 1.0, também publicado como ISO/IEC 19464. Apesar do nome em comum, este é um protocolo diferente do AMQP 0.9.1, com outro modelo de objetos: um container abre sessões, as sessões carregam links de envio e de recebimento, e os links movem mensagens sob controle de fluxo baseado em crédito. É o protocolo que o Azure Service Bus e o Event Hubs falam.

TsgcWSPClient_AMQP1

As sessões e os links são endereçados pelo nome que você dá a eles, então 'session1' e 'sender1' identificam os mesmos objetos em todas as chamadas seguintes.

Classe do componente

TsgcWSPClient_AMQP1

Especificação

OASIS AMQP 1.0 (ISO/IEC 19464)

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.

Um link de envio aponta para um nó de destino no broker, e um link de recebimento para um nó de origem. Assim que um receptor está anexado, as entregas chegam em OnAMQPMessage.

uses
  sgcTCP_Client_WS, sgcWebSocket_Protocols,
  sgcWebSocket_Protocol_AMQP1_Client, sgcAMQP1_Classes, sgcAMQP1_Frames;

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

  AMQP1 := TsgcWSPClient_AMQP1.Create(nil);
  AMQP1.Client := TCPClient;
  AMQP1.AMQPOptions.ContainerId := 'delphi-app';
  AMQP1.AMQPOptions.Authentication.AuthType := amqp1authSASLPlain;
  AMQP1.AMQPOptions.Authentication.Username := 'guest';
  AMQP1.AMQPOptions.Authentication.Password := 'guest';

  AMQP1.OnAMQPConnect := AMQPConnect;
  AMQP1.OnAMQPMessage := AMQPMessage;

  TCPClient.Active := True;
end;

procedure TForm1.AMQPConnect(Sender: TObject;
  const aOpen: TsgcAMQP1FrameOpen);
begin
  AMQP1.CreateSession('session1');

  // Sender link: name, then the target node address
  AMQP1.CreateSenderLink('session1', 'sender1', '/queue/orders');

  // Receiver link: deliveries arrive on OnAMQPMessage
  AMQP1.CreateReceiverLink('session1', 'receiver1', '/queue/orders');

  AMQP1.SendMessage('session1', 'sender1', '{"id":42}');
end;
#include "sgcTCP_Client_WS.hpp"
#include "sgcWebSocket_Protocols.hpp"
#include "sgcWebSocket_Protocol_AMQP1_Client.hpp"

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

TsgcWSPClient_AMQP1 *AMQP1 = new TsgcWSPClient_AMQP1(this);
AMQP1->Client = TCPClient;
AMQP1->AMQPOptions->ContainerId = "cbuilder-app";
AMQP1->OnAMQPConnect = AMQPConnect;
AMQP1->OnAMQPMessage = AMQPMessage;

TCPClient->Active = true;

// In the OnAMQPConnect handler. SendMessage is SendMessage_ in C++ Builder.
AMQP1->CreateSession("session1");
AMQP1->CreateSenderLink("session1", "sender1", "/queue/orders");
AMQP1->CreateReceiverLink("session1", "receiver1", "/queue/orders");
AMQP1->SendMessage_("session1", "sender1", "{\"id\":42}");

Principais propriedades e métodos

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

Sessões

CreateSession retorna um TsgcAMQP1Session e CloseSession o encerra. A sessão é a unidade de ordenação e de janelamento entre os dois containers.

CreateSenderLink se anexa a um nó de destino, CreateReceiverLink a um nó de origem, e CloseLink desanexa qualquer um dos dois. Uma sessão pode manter vários links, até MaxLinksPerSession.

Envio

SendMessage(session, link, text) transfere uma mensagem, com uma sobrecarga que recebe um TsgcAMQP1Message completo quando você precisa de propriedades de aplicação, de um id ou de anotações.

Recebimento

Um link de recebimento anexado empurra as entregas para OnAMQPMessage. GetMessage busca uma de forma síncrona, com timeout, quando um estilo bloqueante for mais adequado.

Retorno de entrega

OnAMQPMessageSent dispara quando a transferência sai do cliente, e OnAMQPMessageSentAck quando o broker a liquida. Os dois são separados de propósito.

Autenticação

AMQPOptions.Authentication.AuthType seleciona amqp1authSASLPlain, amqp1authSASLAnonymous, amqp1authSASLExternal ou nenhum. OnAMQPSASLAuthentication informa a negociação.

Auxiliares do Azure

CreateCBSLink e PutCBSToken implementam o Claims-Based Security. CreateAzureCbsSasToken monta um token SAS do Service Bus, e CreateAzureCbsJWT um bearer token OAuth.

Controle de fluxo

AMQPOptions.CreditSize e WindowSize determinam quanto um receptor aceita antes de emitir mais crédito. MaxFrameSize e ChannelMax são negociados na abertura.

Inspeção de frames

OnAMQPBeforeReadFrame e OnAMQPBeforeWriteFrame entregam a você cada frame bruto com um sinalizador Handled, o que é valiosíssimo quando um broker se comporta de forma inesperada.

Continue explorando

Ajuda onlineReferência completa da API e guia de uso.
Cliente AMQP 0.9.1O outro AMQP, com exchanges, filas e bindings.
Baixar avaliação gratuitaExecute o cliente contra o Azure Service Bus, o Artemis ou o Qpid.
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 anexe seu primeiro link AMQP 1.0 a partir do Delphi ou do C++ Builder.