3.5. ネットワーク接続による STOMP の使用


STOMP は、STOMP クライアントが STOMP Broker と通信できるようにするテキスト指向のワイヤプロトコルです。ブローカーは STOMP 1.0、1.1、および 1.2 をサポートします。STOMP クライアントは複数の言語やプラットフォームで利用できます。これにより、相互運用性の選択肢があります。

手順

  1. <broker_instance_dir>/etc/broker.xml 設定ファイルを開きます。
  2. 既存の acceptor を設定するか、新しいアクセプターを作成し、以下のように STOMP の値を持つ protocols パラメーターを追加します。
<acceptors>
  <acceptor name="stomp-acceptor">tcp://localhost:61613?protocols=STOMP</acceptor>
  ...
</acceptors>

上記の例では、ブローカーはポート 61613 の STOMP 接続を受け入れます。

STOMP を使用してブローカーを設定する方法の例は、STOMP の例 を参照してください。

3.5.1. STOMP の制限

STOMP を使用する場合、以下の制限が適用されます。

  1. 現在、ブローカーは仮想ホストをサポートしません。つまり、host フレームの CONNECT ヘッダーは無視されます。
  2. メッセージの完了通知はトランザクションではありません。ACK フレームはトランザクションの一部にできず、transaction ヘッダーが設定されている場合は無視されます。

3.5.2. STOMP メッセージの ID の提供

JMS コンシューマーまたは QueueBrowser を介して STOMP メッセージを受信する場合、メッセージには JMSMessageID などの JMS プロパティーは含まれません。ただし、ブローカーパラメーターを使用して、各受信 STOMP メッセージにメッセージ ID を設定できます。

手順

  1. <broker_instance_dir>/etc/broker.xml 設定ファイルを開きます。
  2. 以下の例のように、STOMP 接続に使用される acceptorstompEnableMessageId パラメーターを true に設定します。
<acceptors>
  <acceptor name="stomp-acceptor">tcp://localhost:61613?protocols=STOMP;stompEnableMessageId=true</acceptor>
  ...
</acceptors>

stompEnableMessageId パラメーターを使用することで、このアクセプターを使用して送信される各 stomp メッセージには追加のプロパティーが追加されます。次の例に示すように、プロパティーキーは amq-message-id で、値は "STOMP" という接頭辞が付いた内部メッセージ ID の文字列表現です。

amq-message-id : STOMP12345

設定で stompEnableMessageId が指定されていない場合、デフォルト値は false になります。

3.5.3. 接続時間のライブの設定

STOMP クライアントは、接続を閉じる前に DISCONNECT フレームを送信する必要があります。これにより、ブローカーはセッションやコンシューマーなどのサーバー側のリソースを閉じることができます。ただし、STOMP クライアントが DISCONNECT フレームを送信せずに終了する場合、または失敗すると、ブローカーにはクライアントが有効であるかどうかを即座に認識することができません。そのため、STOMP の接続は "Time to Live" (TTL) が 1 分となるように設定されています。複数の 1 分間の間アイドル状態であった場合、ブローカーは STOMP クライアントへの接続を停止します。

手順

  1. <broker_instance_dir>/etc/broker.xml 設定ファイルを開きます。
  2. 以下の例のように、STOMP 接続に使用される acceptor の URI に connectionTTL パラメーターを追加します。
<acceptors>
  <acceptor name="stomp-acceptor">tcp://localhost:61613?protocols=STOMP;connectionTTL=20000</acceptor>
  ...
</acceptors>

上記の例では、stomp -acceptor を使用するすべての stomp 接続では、その TTL を 20 秒に設定します。

注記

STOMP プロトコルのバージョン 1.0 にはハートビートフレームが含まれていません。そのため、ユーザーは、データが connection-ttl 内に送信されることを確認するか、ブローカーがクライアントが停止されサーバー側のリソースをクリーンアップすることを想定します。バージョン 1.1 では、c he-beats を使用して stomp 接続のライフサイクルを維持することができます。

ブローカーのデフォルト時間の上書き

前述のように、STOMP 接続のデフォルトの TTL は 1 分です。この値は、connection-ttl-override 属性をブローカー設定に追加することで上書きできます。

手順

  1. <broker_instance_dir>/etc/broker.xml 設定ファイルを開きます。
  2. connection-ttl-override 属性を追加し、新しいデフォルトの値をミリ秒単位で指定します。以下のように、<core> スタンザに属します。
<configuration ...>
  ...
  <core ...>
    ...
    <connection-ttl-override>30000</connection-ttl-override>
    ...
  </core>
<configuration>

上記の例では、STOMP 接続のデフォルトの Time to Live(TTL) は 30 秒 (30000 ミリ秒) に設定されます。

3.5.4. JMS からの STOMP メッセージの送受信

STOMP は主にテキスト指向のプロトコルです。JMS と相互運用を容易にするため、STOMP 実装は content-length ヘッダーの有無を確認し、STOMP メッセージを JMS にマップする方法を決定します。

表3.3 STOMP メッセージの JMS へのマッピング
STOMP のメッセージのマッピング先メッセージ

JMS TextMessage

content-length ヘッダーを含めないでください

JMS BytesMessage

content-length ヘッダーを含めます

JMS メッセージを STOMP にマップする場合も、同じロジックが適用されます。STOMP クライアントは、content-length ヘッダーが存在することを確認して、メッセージボディーのタイプ (文字列またはバイト) を判別できます。

メッセージヘッダーの詳細は、STOMP 仕様を参照してください。

3.5.5. STOMP 宛先の AMQ Broker アドレスおよびキューへのマッピング

メッセージを送信してサブスクライブする場合、STOMP クライアントには通常、destination ヘッダーが含まれます。宛先名は文字列の値で、ブローカーの宛先にマッピングされます。AMQ Broker では、これらの宛先は アドレス および キュー にマッピングされます。宛先フレームの詳細は、STOMP 仕様を参照してください。

たとえば、以下のメッセージ (ヘッダーおよびボディー) を送信する STOMP クライアントの例を考えます。

SEND
destination:/my/stomp/queue

hello queue a
^@

この場合、ブローカーは /my/stomp/queue アドレスに関連付けられたキューへメッセージを転送します。

たとえば、STOMP クライアントが (SEND フレームを使用して) メッセージを送信する場合、指定された宛先がアドレスにマッピングされます。

これは、クライアントが SUBSCRIBE または UNSUBSCRIBE フレームを送信する場合と同じように機能しますが、この場合は AMQ Broker は destination をキューにマッピングします。

SUBSCRIBE
destination: /other/stomp/queue
ack: client

^@

上記の例では、ブローカーは destination をキュー /other/stomp/queue にマップします。

STOMP 宛先と JMS 宛先のマッピング

JMS 宛先は、ブローカーアドレスおよびキューにマッピングされます。STOMP を使用してメッセージを JMS 宛先に送信する場合、STOMP 宛先は同じ規則に従う必要があります。

  • JMS Queue を送受信するには、jms.queue. でキュー名を追加します。たとえば、JMS キューの orders にメッセージを送信するには、STOMP クライアントはフレームを送信する必要があります。

    SEND
    destination:jms.queue.orders
    hello queue orders
    ^@
  • jms.topic. でトピック名を追加し、JMS Topic を送信またはサブスクライブします。たとえば、stocks JMS Topic をサブスクライブするには、STOMP クライアントは以下のようなフレームを送信する必要があります。

    SUBSCRIBE
    destination:jms.topic.stocks
    ^@
Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.