AMQP 1.0-clientcomponent: sgcMQ | eSeGeCe

AMQP 1.0-client

TsgcWSPClient_AMQP1 implementeert OASIS AMQP 1.0, ook gepubliceerd als ISO/IEC 19464. Ondanks de gedeelde naam is dit een ander protocol dan AMQP 0.9.1, met een ander objectmodel: een container opent sessies, sessies dragen sender- en receiver-links, en links verplaatsen berichten onder credit-gebaseerde flow control. Het is het protocol dat Azure Service Bus en Event Hubs spreken.

TsgcWSPClient_AMQP1

Sessies en links spreek je aan met de naam die je ze geeft, dus 'session1' en 'sender1' verwijzen bij elke latere aanroep naar dezelfde objecten.

Componentklasse

TsgcWSPClient_AMQP1

Specificatie

OASIS AMQP 1.0 (ISO/IEC 19464)

Transport

TCP (5672) of TLS (5671)

Talen

Delphi, C++ Builder

Transport: gewoon TCP en TLS. sgcMQ verbindt via gewoon TCP en TLS. Heb je AMQP over WebSocket nodig, dan is daarvoor een sgcWebSockets-pakket vereist, dat de WebSocket-client levert.

Een sender-link wijst naar een target node op de broker, een receiver-link naar een source node. Zodra een receiver is gekoppeld, komen afleveringen binnen op 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}");

Belangrijkste eigenschappen & methoden

De leden die je het vaakst gebruikt.

Sessies

CreateSession geeft een TsgcAMQP1Session terug en CloseSession breekt hem af. Een sessie is de eenheid van volgorde en windowing tussen de twee containers.

CreateSenderLink koppelt aan een target node, CreateReceiverLink aan een source node, en CloseLink ontkoppelt beide. Een sessie kan meerdere links bevatten, tot MaxLinksPerSession.

Versturen

SendMessage(session, link, text) draagt een bericht over, met een overload die een volledig TsgcAMQP1Message aanneemt wanneer je application properties, een id of annotaties nodig hebt.

Ontvangen

Een gekoppelde receiver-link duwt afleveringen naar OnAMQPMessage. GetMessage haalt er synchroon één op met een time-out wanneer een blokkerende stijl beter past.

Terugkoppeling over aflevering

OnAMQPMessageSent vuurt af zodra de overdracht de client verlaat, OnAMQPMessageSentAck zodra de broker hem afhandelt. Die twee zijn met opzet gescheiden.

Authenticatie

AMQPOptions.Authentication.AuthType kiest amqp1authSASLPlain, amqp1authSASLAnonymous, amqp1authSASLExternal of geen. OnAMQPSASLAuthentication rapporteert de onderhandeling.

Azure-helpers

CreateCBSLink en PutCBSToken implementeren Claims-Based Security. CreateAzureCbsSasToken bouwt een Service Bus SAS-token, CreateAzureCbsJWT een OAuth-bearertoken.

Flow control

AMQPOptions.CreditSize en WindowSize bepalen hoeveel een receiver accepteert voordat hij meer credit uitgeeft. MaxFrameSize en ChannelMax worden bij het openen onderhandeld.

Frames inspecteren

OnAMQPBeforeReadFrame en OnAMQPBeforeWriteFrame geven je elk ruw frame met een Handled-vlag, wat onmisbaar is wanneer een broker zich onverwacht gedraagt.

Blijf ontdekken

Online helpVolledige API-referentie en gebruikershandleiding.
AMQP 0.9.1-clientDe andere AMQP, met exchanges, wachtrijen en bindings.
Download de gratis proefversieDraai de client tegen Azure Service Bus, Artemis of Qpid.
PrijzenSingle-, Team- en Site-licenties met volledige broncode.
De beste deal: All-AccessElk eSeGeCe-product, inclusief Premium-ondersteuning, vanaf €1,059 per jaar.
Bekijk de All-Access-prijzen

Klaar om aan de slag te gaan?

Download de gratis proefversie en koppel vanuit Delphi of C++ Builder je eerste AMQP 1.0-link.