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

STOMP RabbitMQ クライアント

TsgcWSPClient_STOMP_RabbitMQ は、RabbitMQ のデスティネーション規約を組み込んだ STOMP クライアントです。RabbitMQ はデスティネーション文字列に意味を埋め込むため、/queue//topic//exchange//amq/queue//temp-queue/ はそれぞれ別の意味を持ちます。本コンポーネントはこれらを名前付きメソッドに置き換え、生の文字列解析の代わりに型付きのヘッダーレコードを提供します。

TsgcWSPClient_STOMP_RabbitMQ

汎用 STOMP クライアントの機能はすべてそのまま使えます。追加されるのは、デスティネーションのヘルパーと、型付きヘッダーオブジェクトを伴う RabbitMQ 名のイベントです。

コンポーネントクラス

TsgcWSPClient_STOMP_RabbitMQ

準拠仕様

STOMP 1.0, 1.1 and 1.2

トランスポート

TCP(61613)または TLS(61614)

対応言語

Delphi、C++ Builder

トランスポートは素の TCP と TLS です。sgcMQ は素の TCP と TLS で RabbitMQ の STOMP プラグインと通信します。RabbitMQ の Web-STOMP プラグインは WebSocket エンドポイントなので、接続するには WebSocket クライアントを提供する sgcWebSockets のパッケージが必要です。

キューをサブスクライブし、エクスチェンジにパブリッシュする

このサンプルは、RabbitMQ の STOMP プラグインをネイティブの TCP ポート 61613 で利用しています。暗号化した接続にするには、キャリア側で TLS を有効にしてポート 61614 を使ってください。

uses
  sgcTCP_Client_WS, sgcWebSocket_Classes, sgcWebSocket_Protocols,
  sgcWebSocket_Protocol_STOMP_Broker_Client,
  sgcWebSocket_Protocol_STOMP_RabbitMQ_Client;

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

  STOMP := TsgcWSPClient_STOMP_RabbitMQ.Create(nil);
  STOMP.Client := TCPClient;
  STOMP.Authentication.Enabled  := True;
  STOMP.Authentication.UserName := 'guest';
  STOMP.Authentication.Password := 'guest';

  STOMP.OnRabbitMQConnected := RabbitMQConnected;
  STOMP.OnRabbitMQMessage   := RabbitMQMessage;

  TCPClient.Active := True;
end;

procedure TForm1.RabbitMQConnected(Connection: TsgcWSConnection;
  Headers: TsgcWSRabbitMQSTOMPHeadersConnected);
begin
  // /queue/orders, durable
  STOMP.SubscribeQueue('orders');

  // /exchange/orders with routing pattern 'create'
  STOMP.SubscribeExchange('orders', 'create');
  STOMP.PublishExchange('orders', 'create', '{"id":42}');
end;

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

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

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

STOMP->OnRabbitMQConnected = RabbitMQConnected;
STOMP->OnRabbitMQMessage   = RabbitMQMessage;

TCPClient->Active = true;

// In the OnRabbitMQConnected handler:
STOMP->SubscribeQueue("orders");
STOMP->SubscribeExchange("orders", "create");
STOMP->PublishExchange("orders", "create", "{\"id\":42}");

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

各ヘルパーは素の名前を受け取り、RabbitMQ のデスティネーション文字列はコンポーネントが組み立てます。

キュー

SubscribeQueuePublishQueueUnSubscribeQueue は RabbitMQ の /queue/ デスティネーションを扱い、durable、auto-delete、exclusive の各フラグを引数で指定できます。

トピック

SubscribeTopicPublishTopicUnSubscribeTopic/topic/ デスティネーションを使い、RabbitMQ の amq.topic エクスチェンジ経由でルーティングされます。

エクスチェンジ

SubscribeExchange(name, pattern)PublishExchange(name, routingKey, text)/exchange/ デスティネーションを指定します。バインディングのパターンで受信内容を選択します。

外部で宣言されたキュー

SubscribeQueueOutsidePublishQueueOutside/amq/queue/ に対応します。別の場所で宣言済みで、クライアントが再宣言してはならないキュー向けです。

一時キュー

SubscribeTemporaryQueue(queue, replyTo)PublishTemporaryQueue は、短命な返信先デスティネーションを使う RabbitMQ の /temp-queue/ リクエスト/レスポンスパターンを実装します。

汎用のデスティネーション

SubscribeExPublishExUnSubscribeEx は生のデスティネーション文字列を受け取ります。名前付きヘルパーでカバーできない場合に使います。

型付きヘッダー

OnRabbitMQMessageTsgcWSRabbitMQSTOMPHeadersMessage と対応するサブスクリプション項目を渡します。デスティネーション、メッセージ ID、ack モードが部分文字列ではなくプロパティとして扱えます。

カスタムヘッダー

各パブリッシュヘルパーは追加ヘッダーの TStrings を受け取ります。メッセージの優先度、有効期限、永続化といった RabbitMQ の拡張はここで設定します。

接続

ClientAuthenticationHeartBeatVersionsOptions は、汎用 STOMP クライアントとまったく同じように動作します。

さらに詳しく

オンラインヘルプ完全な API リファレンスと利用ガイドです。
汎用 STOMP クライアント標準のフレームセットを備えた基底コンポーネントです。
AMQP 0.9.1 クライアントSTOMP が必須でない場合に使える、RabbitMQ のネイティブプロトコルです。
無料体験版をダウンロードローカルの RabbitMQ コンテナに対して実行できます。
価格Single、Team、Site の各ライセンス。完全なソースコード付きです。
最もお得な選択: All-AccesseSeGeCe の全製品にプレミアムサポートが付いて、年間 €1,059 からご利用いただけます。
All-Access の価格を見る

はじめてみませんか

無料体験版をダウンロードして、Delphi や C++ Builder から STOMP 経由で RabbitMQ と通信してみましょう。