AMQP 1.0-Client-Komponente: sgcMQ | eSeGeCe

AMQP 1.0-Client

TsgcWSPClient_AMQP1 implementiert OASIS AMQP 1.0, das auch als ISO/IEC 19464 veröffentlicht ist. Trotz des gemeinsamen Namens ist das ein anderes Protokoll als AMQP 0.9.1, mit einem anderen Objektmodell: Ein Container öffnet Sessions, Sessions tragen Sender- und Receiver-Links, und Links bewegen Nachrichten unter kreditbasierter Flusssteuerung. Es ist das Protokoll, das Azure Service Bus und Event Hubs sprechen.

TsgcWSPClient_AMQP1

Sessions und Links werden über den Namen angesprochen, den du ihnen gibst, sodass 'session1' und 'sender1' in jedem späteren Aufruf dieselben Objekte bezeichnen.

Komponentenklasse

TsgcWSPClient_AMQP1

Spezifikation

OASIS AMQP 1.0 (ISO/IEC 19464)

Transport

TCP (5672) oder TLS (5671)

Sprachen

Delphi, C++ Builder

Transport: reines TCP und TLS. sgcMQ verbindet sich über reines TCP und TLS. Wenn du AMQP über WebSocket brauchst, benötigst du dafür ein sgcWebSockets Paket, das den WebSocket-Client bereitstellt.

Ein Sender-Link zeigt auf einen Zielknoten am Broker, ein Receiver-Link auf einen Quellknoten. Sobald ein Receiver angehängt ist, treffen Zustellungen auf OnAMQPMessage ein.

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}");

Wichtige Eigenschaften & Methoden

Die Member, zu denen du am häufigsten greifst.

Sessions

CreateSession gibt eine TsgcAMQP1Session zurück, CloseSession baut sie wieder ab. Eine Session ist die Einheit für Reihenfolge und Fenstersteuerung zwischen den beiden Containern.

CreateSenderLink hängt sich an einen Zielknoten, CreateReceiverLink an einen Quellknoten, und CloseLink löst beide wieder. Eine Session kann mehrere Links halten, bis zu MaxLinksPerSession.

Senden

SendMessage(session, link, text) überträgt eine Nachricht, mit einer Überladung für eine vollständige TsgcAMQP1Message, wenn du Application Properties, eine ID oder Annotations brauchst.

Empfangen

Ein angehängter Receiver-Link schiebt Zustellungen an OnAMQPMessage. GetMessage holt eine Nachricht synchron mit einem Timeout, wenn dir ein blockierender Stil besser passt.

Zustellrückmeldung

OnAMQPMessageSent feuert, wenn die Übertragung den Client verlässt, OnAMQPMessageSentAck, wenn der Broker sie abschließt. Die Trennung ist Absicht.

Authentifizierung

AMQPOptions.Authentication.AuthType wählt amqp1authSASLPlain, amqp1authSASLAnonymous, amqp1authSASLExternal oder gar nichts. OnAMQPSASLAuthentication meldet den Verlauf der Aushandlung.

Azure-Helfer

CreateCBSLink und PutCBSToken setzen Claims-Based Security um. CreateAzureCbsSasToken baut ein SAS-Token für Service Bus, CreateAzureCbsJWT ein OAuth-Bearer-Token.

Flusssteuerung

AMQPOptions.CreditSize und WindowSize bestimmen, wie viel ein Receiver annimmt, bevor er weiteren Kredit ausgibt. MaxFrameSize und ChannelMax werden beim Öffnen ausgehandelt.

Frame-Inspektion

OnAMQPBeforeReadFrame und OnAMQPBeforeWriteFrame reichen dir jeden Roh-Frame mit einem Handled-Flag, was unbezahlbar ist, wenn sich ein Broker unerwartet verhält.

Weiter entdecken

Online-HilfeVollständige API-Referenz und Anwendungsleitfaden.
AMQP 0.9.1-ClientDas andere AMQP, mit Exchanges, Queues und Bindings.
Kostenlose Testversion herunterladenTeste den Client gegen Azure Service Bus, Artemis oder Qpid.
PreiseSingle-, Team- und Site-Lizenzen mit vollständigem Quellcode.
Bestes Preis-Leistungs-Verhältnis: All-AccessAlle eSeGeCe-Produkte, inklusive Premium-Support, ab €1,059 pro Jahr.
All-Access-Preise ansehen

Bereit loszulegen?

Lade die kostenlose Testversion herunter und hänge deinen ersten AMQP 1.0-Link aus Delphi oder C++ Builder an.