STOMP クライアントコンポーネント: sgcMQ | eSeGeCe

STOMP クライアント

TsgcWSPClient_STOMP は、STOMP 1.0、1.1、1.2 に対応した汎用クライアントです。STOMP はテキストフレームのプロトコルなので追跡しやすく、メッセージングのエンドポイントを備えたほぼすべてのブローカーで動作します。本コンポーネントは標準のフレームセットを網羅しており、RabbitMQ 用と ActiveMQ 用にブローカー固有の派生コンポーネントも用意されています。

TsgcWSPClient_STOMP

受け入れ可能なプロトコルバージョンを Versions で告知すると、CONNECT のやり取りでブローカーが 1 つを選びます。ネゴシエートされたバージョンは OnSTOMPConnected で受け取れます。

コンポーネントクラス

TsgcWSPClient_STOMP

準拠仕様

STOMP 1.0, 1.1 and 1.2

トランスポート

TCP (61613) or TLS

対応言語

Delphi、C++ Builder

トランスポートは素の TCP と TLS です。sgcMQ は素の TCP と TLS で接続します。STOMP over WebSocket が必要な場合は、WebSocket クライアントを提供する sgcWebSockets のパッケージが必要です。

ID を指定してサブスクライブし、送信する

STOMP では、サブスクリプションを自分で決めた ID で識別します。この ID は UnSubscribe に渡すものと同じで、受信する MESSAGE フレームすべてに含まれて返ってきます。

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}");

主なプロパティとメソッド

最もよく使うメンバーです。

送信

Send(destination, text, contentType, transaction, customHeaders) が SEND フレームを書き込みます。後ろの 3 引数は省略可能なので、単純な送信であればパラメーターは 2 つで済みます。

サブスクライブ

Subscribe(id, destination, ack, customHeaders) は、自分で決めた ID でサブスクリプションを登録し、UnSubscribe(id) がそれを解除します。ack モードの既定値は ackAuto です。

確認応答

ACK(id, transaction) がメッセージを確認し、NACK(id, transaction) が拒否します。いずれも MESSAGE フレームとともに届いたメッセージ ID を受け取ります。

トランザクション

BeginTransactionCommitTransactionAbortTransaction はトランザクション名を受け取ります。その名前を SendACK に渡すと、それらがトランザクションに含まれます。

メッセージイベント

OnSTOMPMessage は、本文、デスティネーション、メッセージ ID、サブスクリプション ID、ack モード、コンテンツタイプ、そして生のヘッダーブロックを渡します。フレームの情報が失われることはありません。

バージョンネゴシエーション

Versions.V1_0V1_1V1_2 がクライアントの告知内容を制御します。ブローカーが選んだバージョンは OnSTOMPConnected の第 1 引数で受け取れます。

レシートとエラー

OnSTOMPReceipt はブローカーがフレームを確認したときに、OnSTOMPError は拒否したときに発生します。どちらもレシート ID と生のヘッダーを伴います。

ハートビート

HeartBeat は、CONNECT でネゴシエートされる送信側と受信側の間隔を設定します。Ping で手動送信でき、やり取りは OnSTOMPPing が通知します。

接続のオプション

Options.VirtualHost は CONNECT の host ヘッダーになります。Options.DisconnectTimeout は、正常な Disconnect がブローカーのレシートを待つ時間を制限します。

さらに詳しく

オンラインヘルプ完全な API リファレンスと利用ガイドです。
RabbitMQ 用 STOMPRabbitMQ のデスティネーションヘルパーを備えた派生コンポーネントです。
ActiveMQ 用 STOMPApache ActiveMQ 向けに調整された派生コンポーネントです。
無料体験版をダウンロードSTOMP に対応したあらゆるブローカーに接続できます。
価格Single、Team、Site の各ライセンス。完全なソースコード付きです。
最もお得な選択: All-AccesseSeGeCe の全製品にプレミアムサポートが付いて、年間 €1,059 からご利用いただけます。
All-Access の価格を見る

はじめてみませんか

無料体験版をダウンロードして、Delphi や C++ Builder から最初の STOMP フレームを送信してみましょう。