STOMP クライアント
TsgcWSPClient_STOMP は、STOMP 1.0、1.1、1.2 に対応した汎用クライアントです。STOMP はテキストフレームのプロトコルなので追跡しやすく、メッセージングのエンドポイントを備えたほぼすべてのブローカーで動作します。本コンポーネントは標準のフレームセットを網羅しており、RabbitMQ 用と ActiveMQ 用にブローカー固有の派生コンポーネントも用意されています。
TsgcWSPClient_STOMP は、STOMP 1.0、1.1、1.2 に対応した汎用クライアントです。STOMP はテキストフレームのプロトコルなので追跡しやすく、メッセージングのエンドポイントを備えたほぼすべてのブローカーで動作します。本コンポーネントは標準のフレームセットを網羅しており、RabbitMQ 用と ActiveMQ 用にブローカー固有の派生コンポーネントも用意されています。
受け入れ可能なプロトコルバージョンを 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 のパッケージが必要です。
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 がブローカーのレシートを待つ時間を制限します。