検索

169.12. JMS での request-reply

download PDF

Camel は JMS 経由での Request Reply をサポートします。そこでは、JMS キューへメッセージを送信するときに、エクスチェンジの MEP は InOut である必要があります。

Camel は、パフォーマンスやクラスター環境に影響する JMS 上でリクエストや応答を設定する数多くのオプションを提供しています。以下の表は、オプションの概要を示しています。

オプションパフォーマンスCluster説明

temporary

高速

対応

一時キューはリプライキューとして使用され、Camel によって自動作成されます。これを使用するには、reclaimTo キュー名を指定し ません。また、任意で replyToType=Temporary を設定して、一時キューが使用されていることを示唆することができます。

共有

slow

対応

共有永続キューはリプライキューとして使用されます。キューは事前に作成する必要がありますが、一部のブローカーは Apache ActiveMQ などの場で作成できます。これを使用するには、replyTo キュー名を指定する必要があります。また、任意で replyToType=Shared を設定して、共有キューが使用中の状態にすることができます。共有キューは、この Camel アプリケーションを同時に実行している複数のノードを持つクラスター環境で使用できます。すべてで同じ共有応答キューを使用します。これは、JMS メッセージセレクターが想定されるリプライメッセージを関連付けるために使用されるため可能です。ただし、これはパフォーマンスに影響します。JMS メッセージセレクターは低速であるため、Temporary キューまたは 排他的 キューとして高速ではありません。パフォーマンスを向上させるには、以下の手順でこれを調整してください。

排他的

高速

No(*Yes)

排他的永続キューはリプライキューとして使用されます。キューは事前に作成する必要がありますが、一部のブローカーは Apache ActiveMQ などの場で作成できます。これを使用するには、replyTo キュー名を指定する必要があります。さらに、ReplyToType=Exclusive を設定して、replyToType=Exclusive が設定されている場合は、Shared がデフォルトで排他的キューを使用するように指示 する 必要 があります。排他的応答キューを使用する場合、JMS メッセージセレクターは使用され ない ため、他のアプリケーションもこのキューを使用しないでください。排他的キューは、この Camel アプリケーションを実行している複数のノードが同時に使用することが できません。応答キューが要求メッセージを送信した同じノードに戻らなくても制御されません。共有キューが JMS メッセージセレクターを使用してこれを確認するのは、共有キューが JMS メッセージセレクターを使用してこれを確認するためです。ノードごとに一意の名前で各排他的リプライキューを設定する場合 、これをクラスター環境で実行できます。その結果、リプライメッセージは指定のノードのそのキューに返信され、応答メッセージが待機します。

concurrentConsumers

高速

対応

Camel 2.10.3: 使用中の同時メッセージリスナーを使用して、リプライメッセージを同時に処理できます。concurrentConsumers オプションおよび maxConcurrentConsumers オプションを使用して範囲を指定できます。注記 : 共有 応答キューを使用している と同時リスナーと機能できないので、このオプションを注意して使用してください。

maxConcurrentConsumers

高速

対応

Camel 2.10.3: 使用中の同時メッセージリスナーを使用して、リプライメッセージを同時に処理できます。concurrentConsumers オプションおよび maxConcurrentConsumers オプションを使用して範囲を指定できます。注記 : 共有 応答キューを使用している と同時リスナーと機能できないので、このオプションを注意して使用してください。

JmsProducerInOut を検出し、使用されるリプライ宛先を持つ JMSReplyTo ヘッダーを提供します。デフォルトでは、Camel は一時キューを使用しますが、エンドポイントで replyTo オプションを使用して、固定応答キューを指定できます(固定応答キューの詳細は以下を参照してください)。

Camel はリプライキューをリッスンするコンシューマーを自動的に設定するため、何もする必要はあり ません
このコンシューマーは、返信をリッスンする Spring DefaultMessageListenerContainer です。ただし、同時コンシューマーは 1 に固定されています。
つまり、返信を処理する 1 つのスレッドしかないため、返信は順番に処理されます。応答の処理速度が速い場合は、同時実行を使用する必要があります。ただし、concurrentConsumer オプション は使用しません。以下のルートのように、代わりに Camel DSL からの スレッド を使用する必要があります。

スレッドを使用する代わりに、Camel 2.10.3 以上を使用する場合は concurrentConsumers オプションを使用します。詳細は以下を参照してください。

from(xxx)
.inOut().to("activemq:queue:foo")
.threads(5)
.to(yyy)
.to(zzz);

このルートでは、5 つのスレッドを持つスレッドプールを使用して返信を非同期でルーティングするよう Camel に指示します。

Camel 2.10.3 以降では、concurrentConsumers オプションおよび maxConcurrentConsumers オプションを使用して、同時スレッドを使用するようにリスナーを設定できるようになりました。これにより、以下のように Camel で簡単に設定することができます。

from(xxx)
.inOut().to("activemq:queue:foo?concurrentConsumers=5")
.to(yyy)
.to(zzz);

169.12.1. JMS でのリクエスト応答キューと共有された応答キューの使用

以下の例のように Request Reply over JMS の実行時に固定応答キューを使用する場合は、注意が必要です。

from(xxx)
.inOut().to("activemq:queue:foo?replyTo=bar")
.to(yyy)

この例では、「bar」という名前の固定応答キューが使用されます。デフォルトでは、Camel は固定応答キューの使用時にキューが共有されているため、JMSSelector を使用して、予想される応答メッセージのみを選択します( JMSCorrelationIDに基づいています)。特別な固定応答キューについては、次のセクションを参照してください。つまり、一時キューとして高速ではありません。receiveTimeout オプションを使用して、Camel がリプライメッセージにプルする頻度を高めることができます。デフォルトでは 1000 ミリ秒です。したがって、より速くするには、以下のように 1 秒あたり 4 回プルするように 250 ミリ秒に設定します。

from(xxx)
.inOut().to("activemq:queue:foo?replyTo=bar&receiveTimeout=250")
.to(yyy)

これにより、Camel がメッセージブローカーにプルリクエストを送信するため、より多くのネットワークトラフィックが必要になります。
通常、可能な場合は一時キューを使用することが推奨されます。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

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

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

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

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

会社概要

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

© 2024 Red Hat, Inc.