31.13. JMS を介したリクエスト/リプライ
				Camel は JMS 経由の Request Reply をサポートしています。本質的に、メッセージを JMS キューに送信する場合、Exchange の MEP は InOut である必要があります。
			
Camel は、パフォーマンスとクラスター化された環境に影響を与える JMS を介した要求/応答を設定するための多くのオプションを提供します。次の表は、オプションをまとめたものです。
| オプション | パフォーマンス | クラスター | 説明 | 
|---|---|---|---|
|   
								  |   高速  |   はい  |   
								一時キューは応答キューとして使用され、Camel によって自動作成されます。これを使用するには、replyTo キュー名を指定 しないでください。オプションで、  | 
|   
								  |   Slow  |   はい  |   
								共有永続キューが応答キューとして使用されます。キューは事前に作成する必要がありますが、Apache ActiveMQ などの一部のブローカーはオンザフライで作成できます。これを使用するには、replyTo キュー名を指定する必要があります。オプションで、  | 
|   
								  |   高速  |   No (*Yes)  |   
								応答キューとして専用の永続キューが使用されます。キューは事前に作成する必要がありますが、Apache ActiveMQ などの一部のブローカーはオンザフライで作成できます。これを使用するには、replyTo キュー名を指定する必要があります。また、  | 
|   
								  |   高速  |   はい  |   
								使用中の同時メッセージリスナーを使用して、応答メッセージを同時に処理できます。範囲は、  | 
|   
								  |   高速  |   はい  |   
								使用中の同時メッセージリスナーを使用して、応答メッセージを同時に処理できます。範囲は、  | 
				JmsProducer は InOut を検出し、使用する返信先を含む JMSReplyTo ヘッダーを提供します。デフォルトでは、Camel は一時キューを使用しますが、エンドポイントで replyTo オプションを使用して、固定応答キューを指定できます (固定応答キューは以下を参照してください)。
			
				Camel は応答キューをリッスンする consumer を自動的にセットアップするので、何もする必要は ありません。 
この consumer は、返信をリッスンする Spring DefaultMessageListenerContainer です。ただし、concurrent consumer は 1 つに固定されています。
つまり、返信を処理するスレッドは 1 つしかないため、返信は順番に処理されます。concurrentConsumers および maxConcurrentConsumers オプションを使用して、同時スレッドを使用するようにリスナーを設定できます。これにより、以下に示すように Camel でこれを簡単に設定できます。
			
from(xxx)
.inOut().to("activemq:queue:foo?concurrentConsumers=5")
.to(yyy)
.to(zzz);
from(xxx)
.inOut().to("activemq:queue:foo?concurrentConsumers=5")
.to(yyy)
.to(zzz);
このルートでは、5 つのスレッドを持つスレッドプールを使用して応答を非同期にルーティングするように Camel に指示します。
31.13.2. JMS を介したリクエストとリプライ、および専用の固定リプライキューを使用 リンクのコピーリンクがクリップボードにコピーされました!
					前の例では、Camel は "bar" という名前の固定応答キューが共有されていると予想し、JMSSelector を使用して、期待する応答メッセージのみを消費します。ただし、JMS セレクターは低速であるため、これを行うには欠点があります。また、応答キューの consumer は、新しい JMS セレクター ID での更新が遅くなります。実際には、receiveTimeout オプションがタイムアウトしたときにのみ更新されます。デフォルトでは 1 秒です。したがって、理論的には、応答メッセージが検出されるまでに約 1 秒かかる可能性があります。一方、固定リプライキューが Camel reply consumer 専用である場合は、JMS セレクターの使用を避けることができるため、パフォーマンスが向上します。実際、一時キューを使用するのと同じくらい高速です。Exclusive に設定できる ReplyToType オプションがあります。
以下の例に示すように、応答キューが排他的であることを Camel に伝えます。
				
from(xxx)
.inOut().to("activemq:queue:foo?replyTo=bar&replyToType=Exclusive")
.to(yyy)
from(xxx)
.inOut().to("activemq:queue:foo?replyTo=bar&replyToType=Exclusive")
.to(yyy)
キューはすべてのエンドポイントに対して排他的でなければならないことに注意してください。したがって、ルートが 2 つある場合は、次の例に示すように、それぞれに一意の応答キューが必要です。
クラスター環境で実行する場合も同様です。次に、クラスター内の各ノードは一意の応答キュー名を使用する必要があります。そうしないと、クラスター内の各ノードが、別のノードでの応答として意図されたメッセージを取得する可能性があります。クラスター化された環境では、代わりに共有応答キューを使用することを推奨します。