Delphi AMQP-client | AMQP 1.0 & 0.9.1-componenten | eSeGeCe

Delphi AMQP-client — AMQP 1.0- en 0.9.1-componenten

Twee native AMQP-clientcomponenten voor Delphi en C++Builder: TsgcWSPClient_AMQP spreekt AMQP 0.9.1 tegen RabbitMQ met exchanges, queues, bindings en consumer-acknowledgments, en TsgcWSPClient_AMQP1 spreekt OASIS AMQP 1.0 tegen Azure Service Bus, Apache Qpid en elke conforme broker, over een WebSocket- of raw-TCP-carrier.

Beide AMQP-versies, een bibliotheek

AMQP 0.9.1 en AMQP 1.0 delen een naam maar zijn verschillende wire-protocollen. sgcWebSockets implementeert elk van beide native, dus je kiest het component dat bij je broker past.

Een Delphi AMQP-client verbindt je VCL- of FMX-applicatie met enterprise-message-brokers. AMQP 0.9.1 is de breed uitgerolde versie die RabbitMQ gebruikt: je declareert exchanges en queues, bindt ze met routing keys, publiceert met basic.publish en consumeert met basic.consume, met transacties en confirms erbovenop. AMQP 1.0 is de OASIS-standaard die Azure Service Bus en Apache Qpid gebruiken: een symmetrisch link-protocol gebouwd op sessions, sender links en receiver links, met Claims-Based-Security-token-helpers voor Azure Service Bus SAS- en OAuth-authenticatie.

Beide componenten koppelen aan een TsgcWebSocketClient via hun Client-property en draaien over een WebSocket- of raw-TCP-carrier, dus dezelfde code bereikt een broker op de standaard AMQP-poorten of tunnelt door poort 443 langs HTTP-only-infrastructuur.

AMQP 0.9.1

TsgcWSPClient_AMQP: exchanges, queues, bindings, transacties

AMQP 1.0

TsgcWSPClient_AMQP1: sessions, sender- en receiver-links, CBS-tokens

Transporten

WebSocket- of raw-TCP-carrier, TLS optioneel op beide

Platforms

Windows, macOS, Linux, iOS, Android. Delphi 7 t/m Delphi 13

Het volledige AMQP-client-oppervlak

Elke protocol-operatie is een methode, elke broker-notificatie een event.

Exchanges & queues (0.9.1)

DeclareExchange, DeclareQueue en BindQueue bouwen de RabbitMQ-routing-topologie vanuit code: direct-, fanout- en topic-routing met per-channel-scoping via OpenChannel.

Publish & consume (0.9.1)

PublishMessage verstuurt naar een exchange met een routing key; Consume abonneert een queue en deliveries komen binnen via OnAMQPBasicDeliver.

CreateSession opent een AMQP 1.0-sessie, daarna koppelen CreateSenderLink en CreateReceiverLink aan een node-adres. Binnenkomende transfers arriveren via OnAMQPMessage.

Azure Service Bus (1.0)

Claims-Based-Security-helpers omhullen de Azure Service Bus SAS- / OAuth-token-flow, dus authenticeren tegen een namespace is een property-setup in plaats van een handgebouwde CBS-exchange.

Delivery-feedback

OnAMQPMessageSent en OnAMQPMessageSentAck melden wanneer een transfer de client heeft verlaten en wanneer de broker hem heeft gesetteld.

SASL-authenticatie

Authenticatie-challenges komen naar boven via OnAMQPSASLAuthentication (1.0) en OnAMQPAuthentication / OnAMQPChallenge (0.9.1).

HeartBeat

De 0.9.1-client publiceert een HeartBeat-property zodat idle verbindingen in leven blijven over proxies en broker-timeouts heen.

Lifecycle-events

OnAMQPConnect, OnAMQPDisconnect, OnAMQPClose en OnAMQPException houden de applicatie op de hoogte van de protocolstatus.

Editie

Beide AMQP-clients zitten in elke editie van sgcWebSockets, van Standard t/m Enterprise en All-Access, en in de .NET-bibliotheek.

Publiceren en consumeren in een paar regels

Koppel het AMQP-component aan een TsgcWebSocketClient, verbind, declareer / attach en ga.

uses
  sgcWebSocket, sgcWebSocket_Protocol_AMQP_Client, sgcAMQP_Classes;

var
  WSClient: TsgcWebSocketClient;
  AMQP: TsgcWSPClient_AMQP;
begin
  WSClient := TsgcWebSocketClient.Create(nil);
  WSClient.Host := 'broker.example.com';
  WSClient.Port := 15674;
  WSClient.Options.Parameters := '/ws';

  AMQP := TsgcWSPClient_AMQP.Create(nil);
  AMQP.Client := WSClient;

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

  WSClient.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 a message
  AMQP.PublishMessage('ch1', 'orders', 'create', '{"id":42}');
end;
uses
  sgcWebSocket, sgcWebSocket_Protocol_AMQP1_Client, sgcAMQP1_Classes;

var
  WSClient: TsgcWebSocketClient;
  AMQP1: TsgcWSPClient_AMQP1;
  oSession: TsgcAMQP1Session;
  oSender:  TsgcAMQP1SenderLink;
begin
  WSClient := TsgcWebSocketClient.Create(nil);
  WSClient.Host := 'broker.example.com';
  WSClient.Port := 5673;

  AMQP1 := TsgcWSPClient_AMQP1.Create(nil);
  AMQP1.Client := WSClient;

  AMQP1.OnAMQPConnect      := AMQPConnect;
  AMQP1.OnAMQPMessage      := AMQPMessage;
  AMQP1.OnAMQPSessionOpen  := AMQPSessionOpen;
  AMQP1.OnAMQPLinkOpen     := AMQPLinkOpen;

  WSClient.Active := True;

  oSession := AMQP1.CreateSession;
  oSender  := AMQP1.CreateSenderLink(oSession, '/queue/orders');
  // Receivers handle pushed deliveries through OnAMQPMessage
  AMQP1.CreateReceiverLink(oSession, '/queue/orders');
end;
#include "sgcWebSocket.hpp"
#include "sgcWebSocket_Protocol_AMQP_Client.hpp"

TsgcWebSocketClient* WSClient = new TsgcWebSocketClient(NULL);
WSClient->Host = "broker.example.com";
WSClient->Port = 15674;
WSClient->Options->Parameters = "/ws";

TsgcWSPClient_AMQP* AMQP = new TsgcWSPClient_AMQP(NULL);
AMQP->Client = WSClient;
AMQP->OnAMQPConnect = AMQPConnect;
AMQP->OnAMQPBasicDeliver = AMQPBasicDeliver;

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

AMQP 0.9.1 of AMQP 1.0

Kies op broker, niet op versienummer. Is de andere kant RabbitMQ, gebruik dan het AMQP 0.9.1-component: het mapt een-op-een op het RabbitMQ-model van exchanges, queues en bindings. Is de andere kant Azure Service Bus, Apache Qpid of een andere broker die de OASIS-standaard adverteert, gebruik dan het AMQP 1.0-component en zijn session- / link-model.

Beide zitten in hetzelfde package, dus gemengde omgevingen zijn prima: een applicatie kan een 0.9.1-verbinding naar RabbitMQ en een 1.0-verbinding naar Azure Service Bus naast elkaar houden, elk op zijn eigen TsgcWebSocketClient-carrier.

Meer over AMQP in sgcWebSockets

AMQP 0.9.1-protocol-pagina

Volledige referentie voor TsgcWSPClient_AMQP: properties, methodes, events en het demo-project.

AMQP 1.0-protocol-pagina

Volledige referentie voor TsgcWSPClient_AMQP1: sessions, links en CBS-authenticatie.

Real-time-picker

Wanneer voor AMQP kiezen boven MQTT, WebSocket, SSE of HTTP/2-push.

Blog: Exchanges en queues

Het AMQP 0.9.1-routing-model uitgelegd met Delphi-code.

Blog: Berichten publiceren

Publish-patronen en delivery-opties vanuit de Delphi-client.

Blog: Azure Service Bus CBS-auth

Claims-Based-Security-tokens tegen Azure Service Bus over AMQP 1.0.

Best value: All-AccessEvery eSeGeCe product, Premium Support included, from €1,059/year.
See All-Access pricing

Verbind vandaag nog met je broker

Download de proefversie. De AMQP 0.9.1- en AMQP 1.0-demo-projecten compileren out of the box.