第26章 JMS
プロデューサーとコンシューマーの両方がサポート対象
このコンポーネントを使用すると、JMS キューまたはトピックとの間でメッセージを送信(または消費)できます。宣言的トランザクションには Spring の JMS サポートを使用します。これには、送信に Spring の JmsTemplate
や、使用する MessageListenerContainer
が含まれます。
Maven ユーザーは、このコンポーネントの pom.xml
に以下の依存関係を追加する必要があります。
ActiveMQ
を使用します。Apache ActiveMQ を使用している場合は、ActiveMQ 用に最適化されているため、ActiveMQ コンポーネントを使用することが推奨されます。このページのすべてのオプションとサンプルも ActiveMQ コンポーネントに対して有効です。
トランザクション とキャッシュ
以下のトランザクション レベルと キャッシュレベルを参照してください。JMS でトランザクションを使用している場合は、パフォーマンスに影響を与える可能性があります。
JMS でのリクエスト/応答
リクエスト/応答:Camel にはパフォーマンスおよびクラスター環境に設定するオプションを多数提供するため、このページの Request-reply over JMS について、リクエスト/リプライに関する重要なメモについてさらに JMS を読み取ってください。
26.1. URI 形式 リンクのコピーリンクがクリップボードにコピーされました!
jms:[queue:|topic:]destinationName[?options]
jms:[queue:|topic:]destinationName[?options]
destinationName
は JMS キューまたはトピック名です。デフォルトでは、destinationName
はキュー名として解釈されます。たとえば、キューに接続するには、FOO.BAR
を次のように使用します。
jms:FOO.BAR
jms:FOO.BAR
必要に応じて、オプションの queue:
接頭辞を含めることができます。
jms:queue:FOO.BAR
jms:queue:FOO.BAR
トピックに接続するには、topic:
接頭辞を含める 必要があり ます。たとえば、Stocks.Prices
トピックに接続するには、以下を使用します。
jms:topic:Stocks.Prices
jms:topic:Stocks.Prices
以下の形式を使用して URI にクエリーオプションを追加します。
?option=value&option=value&…
26.1.1. ActiveMQ の使用 リンクのコピーリンクがクリップボードにコピーされました!
JMS コンポーネントは、メッセージ送信に Spring 2 の JmsTemplate
を再利用します。これは、J2EE 以外のコンテナーでの使用に理想的ではなく、パフォーマンスが低下 するのを防ぐために、通常 JMS プロバイダーでキャッシュを必要とします。
Apache ActiveMQ をメッセージブローカーとして使用する場合は、以下のいずれかを行うことが推奨されます。
- ActiveMQ を効率的に使用するように最適化されている ActiveMQ コンポーネントを使用する
-
ActiveMQ の
PoolingConnectionFactory
を使用します。
26.1.2. トランザクションおよびキャッシュレベル リンクのコピーリンクがクリップボードにコピーされました!
メッセージを使用し、トランザクション(transacted=true
)を使用している場合、キャッシュレベルのデフォルト設定はパフォーマンスに影響を与える可能性があります。
XA トランザクションを使用している場合は、XA トランザクションが適切に機能しなくなる可能性があるため、キャッシュできません。
XA を使用してい ない 場合は、cacheLevelName=CACHE_CONSUMER
の設定など、パフォーマンスの速度を上げるようにキャッシュを検討してください。
cacheLevelName
のデフォルト設定は CACHE_AUTO
です。このデフォルトは、モードを自動的に検出し、それに応じてキャッシュレベルを設定します。
-
transacted=false
の場合はCACHE_CONSUMER
-
transacted=true
の場合はCACHE_NONE
そのため、デフォルト設定が保存されているとすることができます。非 XA トランザクションを使用している場合は、cacheLevelName=CACHE_CONSUMER
の使用を検討してください。
26.1.3. 永続サブスクリプション リンクのコピーリンクがクリップボードにコピーされました!
永続トピックサブスクリプションを使用する場合は、clientId
と durableSubscriptionName
の両方を指定する必要があります。clientId
の値は一意でなければならず、ネットワーク全体の単一の JMS 接続インスタンスによってのみ使用できます。この制限を回避するために、代わり に仮想トピック を使用することが推奨されます。ここ での永続メッセージングに関する詳細な背景。
26.1.4. メッセージヘッダーのマッピング リンクのコピーリンクがクリップボードにコピーされました!
メッセージヘッダーを使用する場合、JMS 仕様ではヘッダー名が有効な Java 識別子である必要があります。そのため、ヘッダーに有効な Java 識別子に名前を付けてみてください。これを行う利点の 1 つは、JMS セレクター内でヘッダーを使用できることです(SQL92 構文でヘッダーの Java 識別子構文が義務付けられます)。
デフォルトでは、ヘッダー名をマッピングする簡単なストラテジーが使用されます。ストラテジーは、以下に示すようにヘッダー名のドットとハイフンを置き換え、ヘッダー名がネットワーク経由で送信される JMS メッセージから復元されるときに置換を元に戻すことです。意味を確認するBean コンポーネントで呼び出すメソッド名を失うことなく、File Component の filename ヘッダーを失うことはありません。
Camel でヘッダー名を受け入れる現在のヘッダー名ストラテジーは次のとおりです。
- ドットは 'DOT' に置き換えられ、Camel がメッセージを消費すると置換が逆になります。
- ハイフンは HYPHEN に置き換えられ、Camel が メッセージを消費すると代替が逆になります。
JMS エンドポイントで多くの異なるプロパティーを設定できます。これは、JMSConfiguration
オブジェクトのプロパティーにマッピングされます。
Spring JMS へのマッピング
これらのプロパティーの多くは、Camel がメッセージの送受信に使用する Spring JMS のプロパティーにマッピングします。そのため、関連する Spring ドキュメント を参照して、これらのプロパティーの詳細情報を取得できます。