STOMP-Client-Komponente: sgcMQ | eSeGeCe

STOMP-Client

TsgcWSPClient_STOMP ist ein generischer Client für STOMP 1.0, 1.1 und 1.2. STOMP ist ein Protokoll aus Text-Frames, es lässt sich also leicht mitverfolgen und funktioniert mit fast jedem Broker, der einen Messaging-Endpunkt anbietet. Diese Komponente deckt den Standard-Frame-Satz ab, für RabbitMQ und ActiveMQ gibt es zusätzlich brokerspezifische Nachfahren.

TsgcWSPClient_STOMP

Über Versions gibst du an, welche Protokollversionen du akzeptierst, und der Broker wählt beim CONNECT-Austausch eine davon aus. Die ausgehandelte Version kommt in OnSTOMPConnected an.

Komponentenklasse

TsgcWSPClient_STOMP

Spezifikation

STOMP 1.0, 1.1 und 1.2

Transport

TCP (61613) oder TLS

Sprachen

Delphi, C++ Builder

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

Mit einer ID abonnieren, dann senden

STOMP identifiziert Abonnements über eine ID, die du selbst wählst. Es ist dieselbe ID, die du an UnSubscribe übergibst, und die bei jedem eingehenden MESSAGE-Frame zurückkommt.

uses
  sgcTCP_Client_WS, sgcWebSocket_Classes, sgcWebSocket_Protocols,
  sgcWebSocket_Protocol_STOMP_Client;

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

  STOMP := TsgcWSPClient_STOMP.Create(nil);
  STOMP.Client := TCPClient;
  STOMP.Versions.V1_2 := True;
  STOMP.Options.VirtualHost := '/';
  STOMP.Authentication.Enabled  := True;
  STOMP.Authentication.UserName := 'guest';
  STOMP.Authentication.Password := 'guest';
  STOMP.HeartBeat.Enabled := True;

  STOMP.OnSTOMPConnected := STOMPConnected;
  STOMP.OnSTOMPMessage   := STOMPMessage;

  TCPClient.Active := True;
end;

procedure TForm1.STOMPConnected(Connection: TsgcWSConnection;
  Version, Server, Session, HeartBeat, RawHeaders: string);
begin
  STOMP.Subscribe('sub-0', '/queue/orders');
  STOMP.Send('/queue/orders', '{"orderId":12345}');
end;

procedure TForm1.STOMPMessage(Connection: TsgcWSConnection;
  MessageText, Destination, MessageId, Subscription, ACK, ContentType,
  RawHeaders: string);
begin
  Memo1.Lines.Add(Destination + ': ' + MessageText);
  STOMP.ACK(MessageId);
end;
// include: sgcTCP_Client_WS.hpp, sgcWebSocket_Protocols.hpp,
// sgcWebSocket_Protocol_STOMP_Client.hpp

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

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

STOMP->OnSTOMPConnected = STOMPConnected;
STOMP->OnSTOMPMessage   = STOMPMessage;

TCPClient->Active = true;

// In the OnSTOMPConnected handler:
STOMP->Subscribe("sub-0", "/queue/orders");
STOMP->Send("/queue/orders", "{\"orderId\":12345}");

Wichtige Eigenschaften & Methoden

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

Senden

Send(destination, text, contentType, transaction, customHeaders) schreibt einen SEND-Frame. Die letzten drei Argumente sind optional, ein einfaches Senden kommt also mit zwei Parametern aus.

Abonnieren

Subscribe(id, destination, ack, customHeaders) meldet ein Abonnement unter einer ID deiner Wahl an, und UnSubscribe(id) hebt es wieder auf. Der Ack-Modus ist standardmäßig ackAuto.

Bestätigen

ACK(id, transaction) bestätigt eine Nachricht und NACK(id, transaction) weist sie zurück. Beide erwarten die Nachrichten-ID, die mit dem MESSAGE-Frame eingetroffen ist.

Transaktionen

BeginTransaction, CommitTransaction und AbortTransaction nehmen einen Transaktionsnamen entgegen. Übergib denselben Namen an Send und ACK, um sie in die Transaktion aufzunehmen.

Nachrichtenereignis

OnSTOMPMessage reicht dir Body, Ziel, Nachrichten-ID, Abonnement-ID, Ack-Modus, Content-Type und den rohen Header-Block, sodass nichts aus dem Frame verloren geht.

Versionsaushandlung

Versions.V1_0, V1_1 und V1_2 steuern, was der Client anbietet. Die Version, die der Broker gewählt hat, ist das erste Argument von OnSTOMPConnected.

Receipts und Fehler

OnSTOMPReceipt feuert, wenn der Broker einen Frame bestätigt, OnSTOMPError, wenn er ihn zurückweist, beide mit der Receipt-ID und den rohen Headern.

Heart-Beating

HeartBeat konfiguriert die aus- und eingehenden Intervalle, die beim CONNECT ausgehandelt werden. Ping sendet manuell eines, und OnSTOMPPing meldet den Austausch.

Verbindungsoptionen

Options.VirtualHost wird zum host-Header beim CONNECT, und Options.DisconnectTimeout begrenzt, wie lange ein sauberes Disconnect auf das Receipt des Brokers wartet.

Weiter entdecken

Online-HilfeVollständige API-Referenz und Anwendungsleitfaden.
STOMP für RabbitMQDer Nachfahre mit Helfern für RabbitMQ-Ziele.
STOMP für ActiveMQDer auf Apache ActiveMQ abgestimmte Nachfahre.
Kostenlose Testversion herunterladenVerbinde dich mit jedem STOMP-fähigen Broker.
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 sende deinen ersten STOMP-Frame aus Delphi oder C++ Builder.