170.3. 注記
170.3.1. ActiveMQ の使用
JMS コンポーネントは、Spring 2 の JmsTemplate
を再利用してメッセージを送信します。これは非 J2EE コンテナーでの使用には理想的ではなく、通常、パフォーマンスの低下 を避けるために JMS プロバイダーでのキャッシュが必要になります。
Message Broker として Apache ActiveMQ を使用する場合 (ActiveMQ が優れているため、これは適切な選択です)、次のいずれかを推奨します。
- ActiveMQ を効率的に使用するためにすでに最適化されている ActiveMQ コンポーネントを使用する
-
ActiveMQ で
PoolingConnectionFactory
を使用します。
170.3.2. トランザクションとキャッシュレベル
メッセージを消費してトランザクションを使用している場合 (transacted=true
)、キャッシュレベルのデフォルト設定がパフォーマンスに影響を与える可能性があります。
XA トランザクションを使用している場合は、XA トランザクションが正しく機能しなくなる可能性があるため、キャッシュできません。
XA を使用して いない 場合は、cacheLevelName=CACHE_CONSUMER
を設定するなど、キャッシュを使用してパフォーマンスを高速化することを検討する必要があります。
Camel 2.7.x では、cacheLevelName
のデフォルト設定は CACHE_CONSUMER
です。cacheLevelName=CACHE_NONE
を明示的に設定する必要があります。
Camel 2.8 以降では、cacheLevelName
のデフォルト設定は CACHE_AUTO
です。このデフォルトの自動モードはモードを検出し、それに応じてキャッシュレベルを設定します。
-
transacted=false
の場合はCACHE_CONSUMER
-
transacted=true
の場合はCACHE_NONE
したがって、デフォルト設定は保守的であると言えます。非 XA トランザクションを使用している場合は、cacheLevelName=CACHE_CONSUMER
の使用を検討してください。
170.3.3. 永続サブスクリプション
永続的なトピックサブスクリプションを使用する場合は、clientId
と durableSubscriptionName
の両方を指定する必要があります。clientId
の値は一意である必要があり、ネットワーク全体で単一の JMS 接続インスタンスによってのみ使用できます。この制限を回避するために、代わりに 仮想トピック を使用することをお勧めします。耐久性のあるメッセージングの詳細については、こちら をご覧ください。
170.3.4. メッセージヘッダーのマッピング
JMS 仕様では、メッセージヘッダーを使用する場合、ヘッダー名は有効な Java 識別子である必要があると規定されています。そのため、有効な Java 識別子になるようにヘッダーに名前を付けるようにしてください。これを行う利点の 1 つは、JMS セレクター内でヘッダーを使用できることです (その SQL92 構文では、ヘッダーの Java 識別子構文が義務付けられています)。
デフォルトでは、ヘッダー名をマッピングする単純な方法が使用されます。以下に示すように、ヘッダー名のドットとハイフンをすべて置き換え、ネットワーク経由で送信された JMS メッセージからヘッダー名が復元されたときに置き換えを元に戻す方法です。意味を確認するBean コンポーネントで呼び出すメソッド名が失われたり、ファイルコンポーネントのファイル名ヘッダーが失われたりすることはもうありません。
Camel でヘッダー名を受け入れるための現在のヘッダー名戦略は次のとおりです。
-
ドットは
DOT
に置き換えられ、Camel がメッセージを消費すると置換が逆になります -
ハイフンは
HYPHEN
に置き換えられ、Camel がメッセージを消費すると置換が逆になります