Klient AMQP dla Delphi | Komponenty AMQP 1.0 i 0.9.1 | eSeGeCe

Klient AMQP dla Delphi — Komponenty AMQP 1.0 i 0.9.1

Dwa natywne komponenty klienta AMQP dla Delphi i C++Builder: TsgcWSPClient_AMQP mówi AMQP 0.9.1 do RabbitMQ z exchange, kolejkami, bindingami i potwierdzeniami konsumenta, a TsgcWSPClient_AMQP1 mówi OASIS AMQP 1.0 do Azure Service Bus, Apache Qpid i każdego zgodnego brokera, przez nośnik WebSocket lub raw-TCP.

Obie wersje AMQP, jedna biblioteka

AMQP 0.9.1 i AMQP 1.0 dzielą nazwę, ale to różne protokoły wire. sgcWebSockets implementuje każdy z nich natywnie, więc wybierasz komponent pasujący do Twojego brokera.

Klient AMQP dla Delphi łączy Twoją aplikację VCL lub FMX z korporacyjnymi brokerami komunikatów. AMQP 0.9.1 to szeroko wdrożona wersja używana przez RabbitMQ: deklarujesz exchange i kolejki, wiążesz je routing keys, publikujesz przez basic.publish i konsumujesz przez basic.consume, z transakcjami i confirms na wierzchu. AMQP 1.0 to standard OASIS używany przez Azure Service Bus i Apache Qpid: symetryczny protokół linków zbudowany na sesjach, sender links i receiver links, z pomocnikami tokenów Claims-Based-Security dla uwierzytelniania SAS i OAuth w Azure Service Bus.

Oba komponenty podłączają się do TsgcWebSocketClient przez właściwość Client i działają nad nośnikiem WebSocket lub raw-TCP, więc ten sam kod dociera do brokera na standardowych portach AMQP lub tuneluje przez port 443 obok infrastruktury tylko-HTTP.

AMQP 0.9.1

TsgcWSPClient_AMQP: exchange, kolejki, bindingi, transakcje

AMQP 1.0

TsgcWSPClient_AMQP1: sesje, sender i receiver links, tokeny CBS

Transporty

Nośnik WebSocket lub raw-TCP, TLS opcjonalny w obu

Platformy

Windows, macOS, Linux, iOS, Android. Delphi 7 do Delphi 13

Pełna powierzchnia klienta AMQP

Każda operacja protokołu to metoda, każde powiadomienie brokera to zdarzenie.

Exchange i kolejki (0.9.1)

DeclareExchange, DeclareQueue i BindQueue budują topologię routingu RabbitMQ z kodu: routing direct, fanout i topic z zakresem per kanał przez OpenChannel.

Publikacja i konsumpcja (0.9.1)

PublishMessage wysyła do exchange z routing key; Consume subskrybuje kolejkę, a dostawy przychodzą przez OnAMQPBasicDeliver.

Sesje i linki (1.0)

CreateSession otwiera sesję AMQP 1.0, potem CreateSenderLink i CreateReceiverLink podłączają się do adresu węzła. Przychodzące transfery docierają przez OnAMQPMessage.

Azure Service Bus (1.0)

Pomocnicy Claims-Based-Security opakowują przepływ tokenów SAS / OAuth Azure Service Bus, więc uwierzytelnienie wobec namespace to konfiguracja właściwości, a nie ręcznie budowana wymiana CBS.

Informacja zwrotna o dostarczeniu

OnAMQPMessageSent i OnAMQPMessageSentAck raportują, kiedy transfer opuścił klienta i kiedy broker go rozliczył.

Uwierzytelnianie SASL

Wyzwania uwierzytelniania pojawiają się przez OnAMQPSASLAuthentication (1.0) oraz OnAMQPAuthentication / OnAMQPChallenge (0.9.1).

HeartBeat

Klient 0.9.1 udostępnia właściwość HeartBeat, dzięki czemu bezczynne połączenia pozostają żywe przez proxy i timeouty brokera.

Zdarzenia cyklu życia

OnAMQPConnect, OnAMQPDisconnect, OnAMQPClose i OnAMQPException informują aplikację o stanie protokołu.

Edycja

Oba klienty AMQP są zawarte w każdej edycji sgcWebSockets, od Standard przez Enterprise po All-Access, a także w bibliotece .NET.

Publikuj i konsumuj w kilku liniach

Sparuj komponent AMQP z TsgcWebSocketClient, połącz się, potem deklaruj / podłącz i działaj.

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

Wybieraj według brokera, nie według numeru wersji. Jeśli po drugiej stronie jest RabbitMQ, użyj komponentu AMQP 0.9.1: mapuje się jeden do jednego na model RabbitMQ z exchange, kolejkami i bindingami. Jeśli po drugiej stronie jest Azure Service Bus, Apache Qpid lub inny broker ogłaszający standard OASIS, użyj komponentu AMQP 1.0 i jego modelu sesji / linków.

Oba dostarczane są w tym samym pakiecie, więc środowiska mieszane nie stanowią problemu: jedna aplikacja może utrzymywać połączenie 0.9.1 do RabbitMQ i połączenie 1.0 do Azure Service Bus obok siebie, każde na własnym nośniku TsgcWebSocketClient.

Więcej o AMQP w sgcWebSockets

Strona protokołu AMQP 0.9.1

Pełna referencja dla TsgcWSPClient_AMQP: właściwości, metody, zdarzenia i projekt demo.

Strona protokołu AMQP 1.0

Pełna referencja dla TsgcWSPClient_AMQP1: sesje, linki i uwierzytelnianie CBS.

Wybór czasu rzeczywistego

Kiedy wybrać AMQP zamiast MQTT, WebSocket, SSE lub HTTP/2 push.

Blog: Exchange i kolejki

Model routingu AMQP 0.9.1 wyjaśniony z kodem Delphi.

Blog: Publikowanie wiadomości

Wzorce publikacji i opcje dostarczania z klienta Delphi.

Blog: Azure Service Bus CBS auth

Tokeny Claims-Based-Security wobec Azure Service Bus nad AMQP 1.0.

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

Połącz się ze swoim brokerem już dziś

Pobierz wersję próbną. Projekty demo AMQP 0.9.1 i AMQP 1.0 kompilują się od razu po instalacji.