169.12.2. JMS でのリクエスト応答キューと排他的な応答キューの使用
Camel 2.9 で利用可能
前述の例では、Camel は「bar」という名前の固定応答キューが共有されているため、JMSSelector を使用して、想定するリプライメッセージのみを消費します。ただし、JMS 選択速度は遅いため、これを行う欠点があります。また、リプライキューのコンシューマーは、新しい JMS セレクター ID で更新するために遅くなります。実際、receiveTimeout オプションがタイムアウトした場合にのみ更新されます。デフォルトは 1 秒です。そのため、応答メッセージの検出に約 1 秒の時間がかかる可能性があります。一方、固定応答キューが Camel 応答コンシューマーに排他的である場合、JMS セレクターの使用を回避できるため、より高性能になります。実際、一時キューを使用するのと同じ高速です。Camel 2.9 以降では、ReplyToType オプションが導入されました。これは、以下の例のように応答キューが排他 的であることを Camel に伝えるように設定できるようになりました。
from(xxx)
.inOut().to("activemq:queue:foo?replyTo=bar&replyToType=Exclusive")
.to(yyy)
キューは、各エンドポイントおよびすべてのエンドポイントに対して排他的である必要があることに注意してください。そのため、2 つのルートがある場合、それぞれのルートには次の例に示すように一意の応答キューが必要です。
from(xxx)
.inOut().to("activemq:queue:foo?replyTo=bar&replyToType=Exclusive")
.to(yyy)
from(aaa)
.inOut().to("activemq:queue:order?replyTo=order.reply&replyToType=Exclusive")
.to(bbb)
クラスター環境で実行する場合も同様です。次に、クラスターの各ノードは一意の応答キュー名を使用する必要があります。そうしないと、クラスターの各ノードは別のノードの応答として意図されたメッセージを取得する可能性があります。クラスター環境では、代わりに共有応答キューを使用することが推奨されます。