STOMP-ActiveMQ-Client-Komponente: sgcMQ | eSeGeCe

STOMP-ActiveMQ-Client

TsgcWSPClient_STOMP_ActiveMQ ist der auf Apache ActiveMQ abgestimmte STOMP-Client. Er ergänzt Queue- und Topic-Helfer über der Zielnamensgebung von ActiveMQ, typisierte Header-Objekte bei jedem Ereignis und eine Eigenschaft ActiveMQ_Options für die brokerspezifischen Einstellungen, die dauerhafte Abonnements brauchen.

TsgcWSPClient_STOMP_ActiveMQ

Alles aus dem generischen STOMP-Client gilt weiterhin. Neu hinzu kommen die Ziel-Helfer, die ActiveMQ-benannten Ereignisse und die Broker-Optionen.

Komponentenklasse

TsgcWSPClient_STOMP_ActiveMQ

Spezifikation

STOMP 1.0, 1.1 und 1.2

Transport

TCP (61613) oder TLS (61612)

Sprachen

Delphi, C++ Builder

Transport: reines TCP und TLS. sgcMQ spricht mit ActiveMQ über reines TCP und TLS. Der STOMP-über-WebSocket-Connector von ActiveMQ ist ein WebSocket-Endpunkt, um ihn zu erreichen, benötigst du also ein sgcWebSockets Paket, das den WebSocket-Client bereitstellt.

Eine Queue abonnieren und darauf veröffentlichen

Dieses Beispiel nutzt den nativen STOMP-Port von ActiveMQ, 61613. Für eine verschlüsselte Verbindung schaltest du TLS am Träger ein und nutzt den stomp+ssl-Connector des Brokers auf Port 61612.

uses
  sgcTCP_Client_WS, sgcWebSocket_Classes, sgcWebSocket_Protocols,
  sgcWebSocket_Protocol_STOMP_Broker_Client,
  sgcWebSocket_Protocol_STOMP_ActiveMQ_Client;

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

  STOMP := TsgcWSPClient_STOMP_ActiveMQ.Create(nil);
  STOMP.Client := TCPClient;
  STOMP.ActiveMQ_Options.ClientId := 'delphi-consumer-1';
  STOMP.Authentication.Enabled  := True;
  STOMP.Authentication.UserName := 'admin';
  STOMP.Authentication.Password := 'admin';

  STOMP.OnActiveMQConnected := ActiveMQConnected;
  STOMP.OnActiveMQMessage   := ActiveMQMessage;

  TCPClient.Active := True;
end;

procedure TForm1.ActiveMQConnected(Connection: TsgcWSConnection;
  Headers: TsgcWSActiveMQSTOMPHeadersConnected);
begin
  STOMP.SubscribeQueue('orders');
  STOMP.PublishQueue('orders', '{"id":42}');
end;

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

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

TsgcWSPClient_STOMP_ActiveMQ *STOMP =
  new TsgcWSPClient_STOMP_ActiveMQ(this);
STOMP->Client = TCPClient;
STOMP->ActiveMQ_Options->ClientId = "cbuilder-consumer-1";
STOMP->Authentication->Enabled  = true;
STOMP->Authentication->UserName = "admin";
STOMP->Authentication->Password = "admin";

STOMP->OnActiveMQConnected = ActiveMQConnected;
STOMP->OnActiveMQMessage   = ActiveMQMessage;

TCPClient->Active = true;

// In the OnActiveMQConnected handler:
STOMP->SubscribeQueue("orders");
STOMP->PublishQueue("orders", "{\"id\":42}");

Wichtige Eigenschaften & Methoden

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

Queues

SubscribeQueue, PublishQueue und UnSubscribeQueue nehmen den reinen Queue-Namen entgegen und bauen daraus das /queue/-Ziel, mit Argumenten für Dauerhaftigkeit, Exklusivität und Ack-Modus.

Topics

SubscribeTopic, PublishTopic und UnSubscribeTopic tun dasselbe für /topic/-Ziele, und genau dort sind dauerhafte Abonnements am wichtigsten.

Generische Ziele

SubscribeEx, PublishEx und UnSubscribeEx nehmen eine rohe Zielangabe als String entgegen, für alles, was die benannten Helfer nicht abdecken.

Broker-Optionen

ActiveMQ_Options trägt die ActiveMQ-spezifischen Einstellungen, darunter die ClientId, an der der Broker einen wiederkehrenden dauerhaften Abonnenten erkennt.

Dauerhafte Abonnements

Die Subscribe-Helfer nehmen ein Durable-Flag entgegen, ein Topic-Abonnent kann sich also trennen und später die Nachrichten abholen, die der Broker für ihn zurückgehalten hat.

Typisierte Header

OnActiveMQMessage liefert ein TsgcWSActiveMQSTOMPHeadersMessage plus den passenden Abonnementeintrag, damit Ziel, Nachrichten-ID und Ack-Modus als Eigenschaften vorliegen.

Bestätigung

Übergib beim Abonnieren einen Ack-Modus und rufe dann ACK oder NACK mit der Nachrichten-ID auf. In ackAuto gilt eine Nachricht für den Broker als zugestellt, sobald sie gesendet wurde.

Nachrichtenoptionen

Jeder Publish-Helfer akzeptiert einen Content-Type, einen optionalen Transaktionsnamen und ein Nachrichtenoptionen-Objekt für ActiveMQ-Header wie Priorität, Persistenz und Ablaufzeit.

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 1.0-ClientActiveMQ Artemis spricht auch AMQP 1.0.
Kostenlose Testversion herunterladenTeste gegen einen lokalen ActiveMQ-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 sprich aus Delphi oder C++ Builder über STOMP mit ActiveMQ.