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 を受け取ります。

トランザクション

BeginTransaction、CommitTransaction、AbortTransaction はトランザクション名を受け取ります。その名前を Send や ACK に渡すと、それらがトランザクションに含まれます。

メッセージイベント

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

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

Versions.V1_0、V1_1、V1_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 フレームを送信してみましょう。