Client AMQP Delphi | Componenti AMQP 1.0 e 0.9.1 | eSeGeCe

Client AMQP Delphi — componenti AMQP 1.0 e 0.9.1

Due componenti client AMQP nativi per Delphi e C++Builder: TsgcWSPClient_AMQP parla AMQP 0.9.1 con RabbitMQ con exchange, code, binding e acknowledgment dei consumer, e TsgcWSPClient_AMQP1 parla OASIS AMQP 1.0 con Azure Service Bus, Apache Qpid e qualunque broker conforme, su un carrier WebSocket o raw-TCP.

Entrambe le versioni AMQP, una sola libreria

AMQP 0.9.1 e AMQP 1.0 condividono il nome ma sono wire protocol diversi. sgcWebSockets implementa ciascuno in modo nativo, così scegli il componente adatto al tuo broker.

Un client AMQP Delphi connette la tua applicazione VCL o FMX ai message broker enterprise. AMQP 0.9.1 è la versione ampiamente diffusa usata da RabbitMQ: dichiari exchange e code, li leghi con routing key, pubblichi con basic.publish e consumi con basic.consume, con transazioni e confirm in aggiunta. AMQP 1.0 è lo standard OASIS usato da Azure Service Bus e Apache Qpid: un protocollo di link simmetrico costruito su sessioni, sender link e receiver link, con helper per i token Claims-Based-Security per l'autenticazione SAS e OAuth di Azure Service Bus.

Entrambi i componenti si agganciano a un TsgcWebSocketClient tramite la proprietà Client e girano su un carrier WebSocket o raw-TCP, quindi lo stesso codice raggiunge un broker sulle porte AMQP standard oppure passa in tunnel dalla porta 443 superando le infrastrutture HTTP-only.

AMQP 0.9.1

TsgcWSPClient_AMQP: exchange, code, binding, transazioni

AMQP 1.0

TsgcWSPClient_AMQP1: sessioni, sender e receiver link, token CBS

Trasporti

Carrier WebSocket o raw-TCP, TLS opzionale su entrambi

Piattaforme

Windows, macOS, Linux, iOS, Android. Da Delphi 7 a Delphi 13

Tutta la superficie del client AMQP

Ogni operazione del protocollo è un metodo, ogni notifica del broker un evento.

Exchange & code (0.9.1)

DeclareExchange, DeclareQueue e BindQueue costruiscono da codice la topologia di routing di RabbitMQ: routing direct, fanout e topic con scoping per canale via OpenChannel.

Publish & consume (0.9.1)

PublishMessage invia a un exchange con una routing key; Consume sottoscrive una coda e le consegne arrivano tramite OnAMQPBasicDeliver.

CreateSession apre una sessione AMQP 1.0, poi CreateSenderLink e CreateReceiverLink si collegano a un indirizzo di nodo. I transfer in ingresso arrivano tramite OnAMQPMessage.

Azure Service Bus (1.0)

Gli helper Claims-Based-Security incapsulano il flusso di token SAS / OAuth di Azure Service Bus, così autenticarsi verso un namespace è una configurazione di proprietà invece di un CBS exchange costruito a mano.

Feedback di consegna

OnAMQPMessageSent e OnAMQPMessageSentAck segnalano quando un transfer ha lasciato il client e quando il broker lo ha regolato.

Autenticazione SASL

Le challenge di autenticazione emergono tramite OnAMQPSASLAuthentication (1.0) e OnAMQPAuthentication / OnAMQPChallenge (0.9.1).

HeartBeat

Il client 0.9.1 pubblica una proprietà HeartBeat, così le connessioni inattive restano vive attraverso proxy e timeout del broker.

Eventi del ciclo di vita

OnAMQPConnect, OnAMQPDisconnect, OnAMQPClose e OnAMQPException tengono l'applicazione informata sullo stato del protocollo.

Edizione

Entrambi i client AMQP sono inclusi in ogni edizione di sgcWebSockets, da Standard a Enterprise e All-Access, e nella libreria .NET.

Pubblica e consuma in poche righe

Abbina il componente AMQP a un TsgcWebSocketClient, connetti, poi dichiara / collega e via.

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 o AMQP 1.0

Scegli in base al broker, non al numero di versione. Se dall'altra parte c'è RabbitMQ, usa il componente AMQP 0.9.1: mappa uno-a-uno sul modello RabbitMQ di exchange, code e binding. Se dall'altra parte c'è Azure Service Bus, Apache Qpid o un altro broker che espone lo standard OASIS, usa il componente AMQP 1.0 e il suo modello a sessioni / link.

Entrambi arrivano nello stesso pacchetto, quindi gli ambienti misti non sono un problema: una stessa applicazione può tenere fianco a fianco una connessione 0.9.1 verso RabbitMQ e una connessione 1.0 verso Azure Service Bus, ciascuna sul proprio carrier TsgcWebSocketClient.

Altro su AMQP in sgcWebSockets

Pagina del protocollo AMQP 0.9.1

Riferimento completo per TsgcWSPClient_AMQP: proprietà, metodi, eventi e il progetto demo.

Pagina del protocollo AMQP 1.0

Riferimento completo per TsgcWSPClient_AMQP1: sessioni, link e autenticazione CBS.

Scelta del protocollo real-time

Quando scegliere AMQP rispetto a MQTT, WebSocket, SSE o push HTTP/2.

Blog: exchange e code

Il modello di routing AMQP 0.9.1 spiegato con codice Delphi.

Blog: pubblicare messaggi

Pattern di pubblicazione e opzioni di consegna dal client Delphi.

Blog: autenticazione CBS su Azure Service Bus

Token Claims-Based-Security verso Azure Service Bus su AMQP 1.0.

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

Connettiti al tuo broker oggi stesso

Scarica la trial. I progetti demo AMQP 0.9.1 e AMQP 1.0 compilano subito, senza modifiche.