179.10. Camel を使用したメッセージの送受信と JMSReplyTo について

JMS コンポーネントは複雑で、場合によってはその動作に細心の注意を払う必要があります。したがって、これは探すべき領域/落とし穴のいくつかの簡単な要約です.

Camel が JMSProducer を使用してメッセージを送信すると、次の条件がチェックされます。

  • メッセージ交換パターン、
  • JMSReplyTo がエンドポイントまたはメッセージヘッダーで設定されたかどうか、
  • 次のいずれかのオプションが JMS エンドポイントに設定されているかどうか: disableReplyTopreserveMessageQosexplicitQosEnabled

これらすべてを理解し、ユースケースをサポートするように設定するには、少し複雑になる可能性があります。

179.10.1. JmsProducer

JmsProducer は、設定に応じて次のように動作します。

交換パターンその他のオプション説明

InOut

-

Camel は応答を期待し、一時的な JMSReplyTo を設定し、メッセージを送信した後、一時キューで応答メッセージのリッスンを開始します。

InOut

JMSReplyTo が設定されている

Camel は応答を期待し、メッセージの送信後、指定された JMSReplyTo キューで応答メッセージのリッスンを開始します。

InOnly

-

Camel はメッセージを送信しますが、返信は期待 しません

InOnly

JMSReplyTo が設定されている

デフォルトでは、Camel は JMSReplyTo 宛先を破棄し、メッセージを送信する前に JMSReplyTo ヘッダーをクリアします。その後、Camel はメッセージを送信し、応答を期待 しません。Camel はこれを WARN レベルでログに記録します (Camel 2.6 以降では DEBUG レベルに変更されました。preserveMessageQuo=true を使用して、Camel に JMSReplyTo を保持するように指示できます。すべての状況で、JmsProducer は応答を期待 しない ため、メッセージの送信後に続行します。

179.10.2. JmsConsumer

JmsConsumer は、設定に応じて次のように動作します。

交換パターンその他のオプション説明

InOut

-

Camel は応答を JMSReplyTo キューに送り返します。

InOnly

-

パターンが InOnly であるため、Camel は返信を返しません。

-

disableReplyTo=true

このオプションは、返信を抑制します。

そのため、取引所に設定されているメッセージ交換パターンに注意してください。

ルートの途中で JMS 宛先にメッセージを送信する場合は、使用する交換パターンを指定できます。詳細については、Request Reply を参照してください。
これは、InOnly メッセージを JMS トピックに送信する場合に便利です。

from("activemq:queue:in")
   .to("bean:validateOrder")
   .to(ExchangePattern.InOnly, "activemq:topic:order")
   .to("bean:handleOrder");