Componente AMQP 1.0 Client: sgcMQ | eSeGeCe

AMQP 1.0 Client

TsgcWSPClient_AMQP1 implementa OASIS AMQP 1.0, publicado también como ISO/IEC 19464. Pese a compartir nombre, es un protocolo distinto de AMQP 0.9.1, con otro modelo de objetos: un contenedor abre sesiones, las sesiones llevan enlaces emisores y receptores, y los enlaces mueven mensajes bajo un control de flujo por créditos. Es el protocolo que hablan Azure Service Bus y Event Hubs.

TsgcWSPClient_AMQP1

Las sesiones y los enlaces se direccionan con el nombre que tú les das, así que 'session1' y 'sender1' identifican los mismos objetos en todas las llamadas posteriores.

Clase del componente

TsgcWSPClient_AMQP1

Especificación

OASIS AMQP 1.0 (ISO/IEC 19464)

Transporte

TCP (5672) o TLS (5671)

Lenguajes

Delphi, C++ Builder

Transporte: TCP plano y TLS. sgcMQ se conecta por TCP plano y TLS. Si necesitas AMQP sobre WebSocket, eso requiere un paquete sgcWebSockets, que es el que aporta el cliente WebSocket.

Abre una sesión, engancha enlaces, envía

Un enlace emisor apunta a un nodo de destino del broker, y un enlace receptor a un nodo de origen. Una vez enganchado el receptor, las entregas llegan a 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}");

Propiedades y métodos principales

Los miembros que vas a usar con más frecuencia.

Sesiones

CreateSession devuelve un TsgcAMQP1Session y CloseSession lo desmonta. Una sesión es la unidad de ordenación y de ventana entre los dos contenedores.

Enlaces

CreateSenderLink se engancha a un nodo de destino, CreateReceiverLink a uno de origen, y CloseLink desengancha cualquiera de los dos. Una sesión puede sostener varios enlaces hasta MaxLinksPerSession.

Envío

SendMessage(session, link, text) transfiere un mensaje, con una sobrecarga que recibe un TsgcAMQP1Message completo cuando necesitas propiedades de aplicación, un id o anotaciones.

Recepción

Un enlace receptor enganchado empuja las entregas a OnAMQPMessage. GetMessage recoge una de forma síncrona con un tiempo de espera, cuando te conviene más un estilo bloqueante.

Confirmación de entrega

OnAMQPMessageSent se dispara cuando la transferencia sale del cliente, y OnAMQPMessageSentAck cuando el broker la liquida. Están separados a propósito.

Autenticación

AMQPOptions.Authentication.AuthType selecciona amqp1authSASLPlain, amqp1authSASLAnonymous, amqp1authSASLExternal o ninguno. OnAMQPSASLAuthentication informa de la negociación.

Ayudas para Azure

CreateCBSLink y PutCBSToken implementan Claims-Based Security. CreateAzureCbsSasToken construye un token SAS de Service Bus, y CreateAzureCbsJWT un bearer token de OAuth.

Control de flujo

AMQPOptions.CreditSize y WindowSize rigen cuánto acepta un receptor antes de emitir más crédito. MaxFrameSize y ChannelMax se negocian en la apertura.

Inspección de tramas

OnAMQPBeforeReadFrame y OnAMQPBeforeWriteFrame te entregan cada trama en bruto con un indicador Handled, algo valiosísimo cuando un broker se comporta de forma inesperada.

Sigue explorando

Ayuda en líneaReferencia completa de la API y guía de uso.
AMQP 0.9.1 ClientEl otro AMQP, con exchanges, colas y bindings.
Descargar prueba gratuitaPrueba el cliente contra Azure Service Bus, Artemis o Qpid.
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 engancha tu primer enlace AMQP 1.0 desde Delphi o C++ Builder.