STOMP-RabbitMQ-Client-Komponente: sgcMQ | eSeGeCe

STOMP-RabbitMQ-Client

TsgcWSPClient_STOMP_RabbitMQ ist der STOMP-Client mit eingebauten Ziel-Konventionen von RabbitMQ. RabbitMQ kodiert seine Semantik in der Zielangabe, deshalb bedeuten /queue/, /topic/, /exchange/, /amq/queue/ und /temp-queue/ jeweils etwas anderes. Diese Komponente macht daraus benannte Methoden, und typisierte Header-Records ersetzen das Zerlegen roher Strings.

TsgcWSPClient_STOMP_RabbitMQ

Alles aus dem generischen STOMP-Client steht weiterhin zur Verfügung. Neu hinzu kommen die Ziel-Helfer und die RabbitMQ-benannten Ereignisse mit typisierten Header-Objekten.

Komponentenklasse

TsgcWSPClient_STOMP_RabbitMQ

Spezifikation

STOMP 1.0, 1.1 und 1.2

Transport

TCP (61613) oder TLS (61614)

Sprachen

Delphi, C++ Builder

Transport: reines TCP und TLS. sgcMQ spricht mit dem STOMP-Plugin von RabbitMQ über reines TCP und TLS. Das Web-STOMP-Plugin von RabbitMQ ist ein WebSocket-Endpunkt, um es zu erreichen, benötigst du also ein sgcWebSockets Paket, das den WebSocket-Client bereitstellt.

Eine Queue abonnieren, in einen Exchange veröffentlichen

Dieses Beispiel nutzt das STOMP-Plugin von RabbitMQ auf seinem nativen TCP-Port, 61613. Für eine verschlüsselte Verbindung schaltest du TLS am Träger ein und nutzt Port 61614.

uses
  sgcTCP_Client_WS, sgcWebSocket_Classes, sgcWebSocket_Protocols,
  sgcWebSocket_Protocol_STOMP_Broker_Client,
  sgcWebSocket_Protocol_STOMP_RabbitMQ_Client;

var
  TCPClient: TsgcTCPClient;
  STOMP: TsgcWSPClient_STOMP_RabbitMQ;
begin
  TCPClient := TsgcTCPClient.Create(nil);
  TCPClient.Host := 'rabbit.example.com';
  TCPClient.Port := 61613;

  STOMP := TsgcWSPClient_STOMP_RabbitMQ.Create(nil);
  STOMP.Client := TCPClient;
  STOMP.Authentication.Enabled  := True;
  STOMP.Authentication.UserName := 'guest';
  STOMP.Authentication.Password := 'guest';

  STOMP.OnRabbitMQConnected := RabbitMQConnected;
  STOMP.OnRabbitMQMessage   := RabbitMQMessage;

  TCPClient.Active := True;
end;

procedure TForm1.RabbitMQConnected(Connection: TsgcWSConnection;
  Headers: TsgcWSRabbitMQSTOMPHeadersConnected);
begin
  // /queue/orders, durable
  STOMP.SubscribeQueue('orders');

  // /exchange/orders with routing pattern 'create'
  STOMP.SubscribeExchange('orders', 'create');
  STOMP.PublishExchange('orders', 'create', '{"id":42}');
end;

procedure TForm1.RabbitMQMessage(Connection: TsgcWSConnection;
  MessageText: string; Headers: TsgcWSRabbitMQSTOMPHeadersMessage;
  Subscription: TsgcWSBrokerSTOMPSubscriptionItem);
begin
  Memo1.Lines.Add(Headers.Destination + ': ' + MessageText);
end;
// include: sgcTCP_Client_WS.hpp, sgcWebSocket_Protocols.hpp,
// sgcWebSocket_Protocol_STOMP_RabbitMQ_Client.hpp

TsgcTCPClient *TCPClient = new TsgcTCPClient(this);
TCPClient->Host = "rabbit.example.com";
TCPClient->Port = 61613;

TsgcWSPClient_STOMP_RabbitMQ *STOMP =
  new TsgcWSPClient_STOMP_RabbitMQ(this);
STOMP->Client = TCPClient;
STOMP->Authentication->Enabled  = true;
STOMP->Authentication->UserName = "guest";
STOMP->Authentication->Password = "guest";

STOMP->OnRabbitMQConnected = RabbitMQConnected;
STOMP->OnRabbitMQMessage   = RabbitMQMessage;

TCPClient->Active = true;

// In the OnRabbitMQConnected handler:
STOMP->SubscribeQueue("orders");
STOMP->SubscribeExchange("orders", "create");
STOMP->PublishExchange("orders", "create", "{\"id\":42}");

Wichtige Eigenschaften & Methoden

Jeder Helfer nimmt den reinen Namen entgegen, und die Komponente baut die RabbitMQ-Zielangabe für dich zusammen.

Queues

SubscribeQueue, PublishQueue und UnSubscribeQueue arbeiten mit den /queue/-Zielen von RabbitMQ, mit Flags für Dauerhaftigkeit, automatisches Löschen und Exklusivität als Argumente.

Topics

SubscribeTopic, PublishTopic und UnSubscribeTopic nutzen das /topic/-Ziel, das über den amq.topic-Exchange von RabbitMQ geroutet wird.

Exchanges

SubscribeExchange(name, pattern) und PublishExchange(name, routingKey, text) sprechen /exchange/-Ziele an, wobei ein Binding-Muster auswählt, was du empfängst.

Externe Queues

SubscribeQueueOutside und PublishQueueOutside bilden /amq/queue/ ab, für Queues, die anderswo deklariert wurden und vom Client nicht erneut deklariert werden dürfen.

Temporäre Queues

SubscribeTemporaryQueue(queue, replyTo) und PublishTemporaryQueue setzen das /temp-queue/-Request/Reply-Muster von RabbitMQ mit einem kurzlebigen Antwortziel um.

Generische Ziele

SubscribeEx, PublishEx und UnSubscribeEx nehmen die rohe Zielangabe entgegen, wenn du etwas brauchst, das die benannten Helfer nicht abdecken.

Typisierte Header

OnRabbitMQMessage liefert ein TsgcWSRabbitMQSTOMPHeadersMessage und den passenden Abonnementeintrag, sodass Ziel, Nachrichten-ID und Ack-Modus Eigenschaften sind statt Teilstrings.

Eigene Header

Jeder Publish-Helfer akzeptiert ein TStrings mit zusätzlichen Headern, und genau so setzt du RabbitMQ-Erweiterungen wie Nachrichtenpriorität, Ablaufzeit oder Persistenz.

Verbindung

Client, Authentication, HeartBeat, Versions und Options verhalten sich genau wie beim generischen STOMP-Client.

Weiter entdecken

Online-HilfeVollständige API-Referenz und Anwendungsleitfaden.
Generischer STOMP-ClientDie Basiskomponente mit dem Standard-Frame-Satz.
AMQP 0.9.1-ClientDas native Protokoll von RabbitMQ, wenn STOMP keine Vorgabe ist.
Kostenlose Testversion herunterladenTeste gegen einen lokalen RabbitMQ-Container.
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 sprich aus Delphi oder C++ Builder über STOMP mit RabbitMQ.