28.13. JMS を介したリクエスト/リプライ
Camel は JMS 経由の Request Reply をサポートしています。本質的に、メッセージを JMS キューに送信する場合、Exchange の MEP は InOut である必要があります。
Camel は、パフォーマンスとクラスター化された環境に影響を与える JMS を介した要求/応答を設定するための多くのオプションを提供します。次の表は、オプションをまとめたものです。
| オプション | パフォーマンス | Cluster | 説明 |
|---|---|---|---|
|
| 高速 | はい |
一時キューは応答キューとして使用され、Camel によって自動作成されます。これを使用するには、replyTo キュー名を指定 しないでください。オプションで、 |
|
| Slow | はい |
共有永続キューが応答キューとして使用されます。キューは事前に作成する必要がありますが、Apache ActiveMQ などの一部のブローカーはオンザフライで作成できます。これを使用するには、replyTo キュー名を指定する必要があります。オプションで、 |
|
| 高速 | No (*Yes) |
応答キューとして専用の永続キューが使用されます。キューは事前に作成する必要がありますが、Apache ActiveMQ などの一部のブローカーはオンザフライで作成できます。これを使用するには、replyTo キュー名を指定する必要があります。また、 |
|
| 高速 | はい |
使用中の同時メッセージリスナーを使用して、応答メッセージを同時に処理できます。範囲は、 |
|
| 高速 | はい |
使用中の同時メッセージリスナーを使用して、応答メッセージを同時に処理できます。範囲は、 |
JmsProducer は InOut を検出し、使用する返信先を含む JMSReplyTo ヘッダーを提供します。デフォルトでは、Camel は一時キューを使用しますが、エンドポイントで replyTo オプションを使用して、固定応答キューを指定できます (固定応答キューについては以下を参照してください)。
Camel は応答キューをリッスンするコンシューマーを自動的にセットアップするので、何もする必要 はありません。
このコンシューマーは、返信をリッスンする Spring DefaultMessageListenerContainer です。ただし、同時コンシューマーは 1 つに固定されています。
つまり、返信を処理するスレッドは 1 つしかないため、返信は順番に処理されます。concurrentConsumers および maxConcurrentConsumers オプションを使用して、同時スレッドを使用するようにリスナーを設定できます。これにより、以下に示すように Camel でこれを簡単に設定できます。
from(xxx)
.inOut().to("activemq:queue:foo?concurrentConsumers=5")
.to(yyy)
.to(zzz);
このルートでは、5 つのスレッドを持つスレッドプールを使用して応答を非同期にルーティングするように Camel に指示します。