Camel Spring Boot リファレンス
Camel Spring Boot リファレンス
概要
はじめに
多様性を受け入れるオープンソースの強化
Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。この取り組みは膨大な作業を要するため、今後の複数のリリースで段階的に用語の置き換えを実施して参ります。詳細は、Red Hat CTO である Chris Wright のメッセージ をご覧ください。
第1章 AMQP
Camel 1.2 以降
producer と consumer の両方がサポート対象
AMQP コンポーネントは、Qpid プロジェクトの JMS クライアント API を使用して AMQP 1.0 プロトコル をサポートします。
Maven ユーザーは、このコンポーネントの pom.xml
に以下の依存関係を追加する必要があります。
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-amqp</artifactId> <version>${camel.version}</version> <!-- use the same version as your Camel core version --> </dependency>
1.1. URI 形式
amqp:[queue:|topic:]destinationName[?options]
1.2. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
1.2.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
1.2.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
1.3. コンポーネントオプション
AMQP コンポーネントは、以下に示す 100 のオプションをサポートしています。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
clientId (共通) | 使用する JMS クライアント ID を設定します。この値を指定する場合は、一意である必要があり、単一の JMS 接続インスタンスでのみ使用できることに注意してください。通常、永続的なトピックサブスクリプションの場合にのみ必要です。Apache ActiveMQ を使用している場合は、代わりに仮想トピックを使用することをお勧めします。 | String | |
connectionFactory (共通) | 使用する接続ファクトリー。コンポーネントまたはエンドポイントで接続ファクトリーを設定する必要があります。 | ConnectionFactory | |
disableReplyTo (共通) | Camel がメッセージの JMSReplyTo ヘッダーを無視するかどうかを指定します。true の場合、Camel は JMSReplyTo ヘッダーで指定された宛先に返信を送り返しません。Camel にルートから消費させたいが、コード内の別のコンポーネントが応答メッセージを処理するため、Camel に自動的に応答メッセージを送り返したくない場合は、このオプションを使用できます。Camel を異なるメッセージブローカー間のプロキシーとして使用し、あるシステムから別のシステムにメッセージをルーティングする場合にも、このオプションを使用できます。 | false | boolean |
durableSubscriptionName (共通) | 永続トピックサブスクリプションを指定するための永続サブスクライバー名。clientId オプションも設定する必要があります。 | String | |
includeAmqpAnnotations (共通) | AMQP から Camel メッセージへのマッピング時に AMQP アノテーションを含めるかどうか。これを true に設定すると、JMS_AMQP_MA_ 接頭辞を含む AMQP メッセージアノテーションがメッセージヘッダーにマップされます。Apache Qpid JMS API の制限により、現在、配信アノテーションは無視されます。 | false | boolean |
jmsMessageType (共通) | JMS メッセージの送信に特定の javax.jms.Message 実装を強制的に使用できるようにします。可能な値は、Bytes、Map、Object、Stream、Text です。デフォルトでは、Camel は In body タイプから使用する JMS メッセージタイプを決定します。このオプションで指定できます。 列挙値:
| JmsMessageType | |
replyTo (共通) | 明示的な ReplyTo 宛先を提供します (consumer の Message.getJMSReplyTo() の着信値をオーバーライドします)。 | String | |
testConnectionOnStartup (共通) | 起動時に接続をテストするかどうかを指定します。これにより、Camel の起動時に、すべての JMS consumerが JMS ブローカーへの有効な接続を持つことが保証されます。接続を許可できない場合、Camel は起動時に例外を出力します。これにより、接続に失敗した状態で Camel が開始されなくなります。JMS producer もテストされています。 | false | boolean |
acknowledgementModeName (consumer) | JMS 確認応答名。SESSION_TRANSACTED、CLIENT_ACKNOWLEDGE、AUTO_ACKNOWLEDGE、DUPS_OK_ACKNOWLEDGE のいずれかです。 列挙値:
| AUTO_ACKNOWLEDGE | String |
artemisConsumerPriority (consumer) | consumer の優先度を使用すると、優先度の高い consumer がアクティブなときにメッセージを受信できるようになります。通常、キューに接続されているアクティブな consumer は、ラウンドロビン方式でキューからメッセージを受け取ります。consumer の優先度が使用されているとき、同じ優先度の高いアクティブなconsumer が複数存在する場合は、メッセージがラウンドロビンで配信されます。メッセージは、優先度の高い consumer がメッセージを消費するために利用できるクレジットを持っていない場合、またはそれらの優先度の高い consumer がメッセージの受け入れを拒否した場合にのみ、優先度の低い consumer に送信されます (たとえば、consumer に関連するセレクターの基準を満たさないため)。 | int | |
asyncConsumer (consumer) | JmsConsumer が Exchange を非同期的に処理するかどうか。有効にすると、JmsConsumer は JMS キューから次のメッセージを取得できますが、前のメッセージは (非同期ルーティングエンジンによって) 非同期に処理されます。これは、メッセージが 100% 厳密に順序どおりに処理されない可能性があることを意味します。無効になっている場合 (デフォルト)、JmsConsumer が JMS キューから次のメッセージを取得する前に Exchange が完全に処理されます。transactioned が有効になっている場合、トランザクションは同期的に実行する必要があるため、asyncConsumer=true は非同期的に実行されないことに注意してください (Camel 3.0 は非同期トランザクションをサポートする場合があります)。 | false | boolean |
autoStartup (consumer) | consumer コンテナーを自動起動するかどうかを指定します。 | true | boolean |
cacheLevel (consumer) | 基礎となる JMS リソースの ID によってキャッシュレベルを設定します。詳細は、cacheLevelName オプションを参照してください。 | int | |
cacheLevelName (consumer) | 基礎となる JMS リソースのキャッシュレベルを名前で設定します。可能な値は、CACHE_AUTO、CACHE_CONNECTION、CACHE_CONSUMER、CACHE_NONE、および CACHE_SESSION です。デフォルト設定は CACHE_AUTO です。詳細は、Spring のドキュメントとトランザクションキャッシュレベルを参照してください。 列挙値:
| CACHE_AUTO | String |
concurrentConsumers (consumer) | JMS から消費する場合の同時 consumer のデフォルト数を指定します (JMS を介した要求/応答ではありません)。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。JMS を介して要求/応答を行う場合は、オプション replyToConcurrentConsumers を使用して、応答メッセージリスナーの同時 consumer の数を制御します。 | 1 | int |
maxConcurrentConsumers (consumer) | JMS から消費する場合の同時 consumer の最大数を指定します (JMS を介した要求/応答ではありません)。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。JMS を介して要求/応答を行う場合は、オプション replyToMaxConcurrentConsumers を使用して、応答メッセージリスナーの同時 consumer の数を制御します。 | int | |
replyToDeliveryPersistent (consumer) | 返信に対してデフォルトで永続的な配信を使用するかどうかを指定します。 | true | boolean |
selector (consumer) | 使用する JMS セレクターを設定します。 | String | |
subscriptionDurable (consumer) | サブスクリプションを永続化するかどうかを設定します。使用する永続サブスクリプション名は、subscriptionName プロパティーで指定できます。デフォルトは false です。通常、subscriptionName 値と組み合わせて永続的なサブスクリプションを登録するには、これを true に設定します (メッセージリスナークラス名がサブスクリプション名として十分でない場合)。トピック (pub-sub ドメイン) をリッスンする場合にのみ意味があるため、このメソッドは pubSubDomain フラグも切り替えます。 | false | boolean |
subscriptionName (consumer) | 作成するサブスクリプションの名前を設定します。共有または永続的なサブスクリプションを持つトピック (pub-sub ドメイン) の場合に適用されます。サブスクリプション名は、このクライアントの JMS クライアント ID 内で一意である必要があります。デフォルトは、指定されたメッセージリスナーのクラス名です。注: 共有サブスクリプション (JMS 2.0 が必要) を除き、サブスクリプションごとに 1 つの同時 consumer (このメッセージリスナコンテナーのデフォルト) のみが許可されます。 | String | |
subscriptionShared (consumer) | サブスクリプションを共有するかどうかを設定します。使用する共有サブスクリプション名は、subscriptionName プロパティーで指定できます。デフォルトは false です。通常は subscriptionName 値と組み合わせて共有サブスクリプションを登録するには、これを true に設定します (メッセージリスナークラス名がサブスクリプション名として十分でない場合)。共有サブスクリプションも永続的である可能性があるため、このフラグを subscriptionDurable と組み合わせることもできます (多くの場合は組み合わせます)。トピック (pub-sub ドメイン) をリッスンする場合にのみ意味があるため、このメソッドは pubSubDomain フラグも切り替えます。JMS 2.0 互換のメッセージブローカーが必要です。 | false | boolean |
acceptMessagesWhileStopping (consumer (上級)) | consumer が停止中にメッセージを受け入れるかどうかを指定します。実行時に JMS ルートを開始および停止するが、キューにメッセージが入れられている場合は、このオプションを有効にすることを検討してください。このオプションが false の場合は、JMS ルートを停止すると、メッセージが拒否される可能性があり、JMS ブローカは再配信を試行する必要がありますが、これも拒否される可能性があり、最終的にメッセージはJMS ブローカー上のデッドレターキューに移動される可能性があります。これを回避するには、このオプションを有効にすることをお勧めします。 | false | boolean |
allowReplyManagerQuickStop (consumer (上級)) | JmsConfiguration#isAcceptMessagesWhileStopping が有効で、org.apache.camel.CamelContext が現在停止している場合に、要求/応答メッセージングのリプライマネージャーで使用される DefaultMessageListenerContainer が、DefaultMessageListenerContainer.runningAllowed フラグを迅速に停止できるようにするかどうか。このクイック停止機能は、通常の JMS consumer ではデフォルトで有効になっていますが、応答マネージャーを有効にするには、このフラグを有効にする必要があります。 | false | boolean |
consumerType (consumer (上級)) | 使用する consumer タイプ。Simple、Default、または Custom のいずれかです。consumer タイプによって、使用する Spring JMS リスナーが決まります。デフォルトは org.springframework.jms.listener.DefaultMessageListenerContainer を使用し、Simple は org.springframework.jms.listener.SimpleMessageListenerContainer を使用します。Custom を指定した場合は、messageListenerContainerFactory オプションで定義された MessageListenerContainerFactory によって、使用する org.springframework.jms.listener.AbstractMessageListenerContainer が決まります。 列挙値:
| デフォルト | ConsumerType |
defaultTaskExecutorType (consumer (上級)) | consumer エンドポイントとプロデューサエンドポイントの ReplyTo consumer の両方に対して、DefaultMessageListenerContainer で使用するデフォルトの TaskExecutor タイプを指定します。可能な値: SimpleAsync (Spring の SimpleAsyncTaskExecutor を使用) または ThreadPool (Spring の ThreadPoolTaskExecutor を最適な値で使用 - キャッシュされたスレッドプールのようなもの)。設定されていない場合は、デフォルトで以前の動作になり、consumer エンドポイントにはキャッシュされたスレッドプールが使用され、応答 consumer には SimpleAsync が使用されます。ThreadPool の使用は、同時 consumer が動的に増減するエラスティック設定でスレッドのゴミを減らすために推奨されます。 列挙値:
| DefaultTaskExecutorType | |
eagerLoadingOfProperties (consumer (上級)) | メッセージが読み込まれるとすぐに JMS プロパティーとペイロードの熱心な読み込みを有効にします。これは、JMS プロパティーが必要ない場合があるため一般的に非効率的ですが、基盤となる JMS プロバイダーと JMS プロパティーの使用に関する問題を早期に発見できる場合があります。オプション eagerPoisonBody も参照してください。 | false | boolean |
eagerPoisonBody (consumer (上級)) | eagerLoadingOfProperties が有効であり、JMS メッセージペイロード (JMS 本文または JMS プロパティー) が有害 (読み取り/マッピングできない) である場合は、代わりにこのテキストをメッセージボディーとして設定し、メッセージを処理できるようにします (有害の原因は、Exchange では例外としてすでに保存されています)。これは、eagerPoisonBody=false を設定することでオフにすることができます。オプション eagerLoadingOfProperties も参照してください。 | $\{exception.message} による JMS メッセージへの影響 | String |
exposeListenerSession (consumer (上級)) | メッセージを消費するときにリスナーセッションを公開するかどうかを指定します。 | false | boolean |
replyToConsumerType (consumer (上級)) | 応答 consumer の consumer タイプ (要求/応答を行う場合)。Simple、Default、または Custom のいずれかになります。consumer タイプによって、使用する Spring JMS リスナーが決まります。デフォルトは org.springframework.jms.listener.DefaultMessageListenerContainer を使用し、Simple は org.springframework.jms.listener.SimpleMessageListenerContainer を使用します。Custom を指定した場合は、messageListenerContainerFactory オプションで定義された MessageListenerContainerFactory によって、使用する org.springframework.jms.listener.AbstractMessageListenerContainer が決まります。 列挙値:
| デフォルト | ConsumerType |
replyToSameDestinationAllowed (consumer (上級)) | JMS consumer が、consumer が使用しているのと同じ宛先に応答メッセージを送信できるかどうか。これにより、同じメッセージを消費してそれ自体に送り返すことで、無限ループが回避されます。 | false | boolean |
taskExecutor (consumer (上級)) | メッセージを消費するためのカスタムタスクエグゼキュータを指定できます。 | TaskExecutor | |
deliveryDelay (producer) | JMS の送信呼び出しに使用する配信遅延を設定します。このオプションには、JMS 2.0 準拠のブローカーが必要です。 | -1 | long |
deliveryMode (producer) | 使用する配信モードを指定します。可能な値は、javax.jms.DeliveryMode で定義された値です。NON_PERSISTENT = 1 および PERSISTENT = 2。 列挙値:
| Integer | |
deliveryPersistent (producer) | デフォルトで永続配信を使用するかどうかを指定します。 | true | boolean |
explicitQosEnabled (producer) | メッセージの送信時に、deliveryMode、priority、または timeToLive のサービス品質を使用する必要があるかどうかを設定します。このオプションは、Spring の JmsTemplate に基づいています。deliveryMode、priority、および timeToLive オプションは、現在のエンドポイントに適用されます。これは、メッセージの粒度で動作し、Camel In メッセージヘッダーから排他的に QoS プロパティーを読み取る preserveMessageQos オプションとは対照的です。 | false | Boolean |
formatDateHeadersToIso8601 (producer) | JMS 日付プロパティーを ISO 8601 標準に従ってフォーマットするかどうかを設定します。 | false | boolean |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
preserveMessageQos (producer) | JMS エンドポイントの QoS 設定ではなく、メッセージで指定された QoS 設定を使用してメッセージを送信する場合は、true に設定します。次の 3 つのヘッダーは、JMSPriority、JMSDeliveryMode、および JMSExpiration と見なされます。それらのすべてまたは一部のみを指定できます。指定されていない場合、Camel は代わりにエンドポイントからの値を使用するようにフォールバックします。したがって、このオプションを使用すると、ヘッダーはエンドポイントからの値をオーバーライドします。対照的に、explicitQosEnabled オプションは、エンドポイントに設定されたオプションのみを使用し、メッセージヘッダーの値は使用しません。 | false | boolean |
priority (producer) | 1 より大きい値は、送信時のメッセージの優先度を指定します (1 が最低の優先度で、9 が最高の優先度です)。このオプションを有効にするには、explicitQosEnabled オプションも有効にする必要があります。 列挙値:
| 4 | int |
replyToConcurrentConsumers (producer) | JMS を介して要求/応答を行うときの同時 consumer のデフォルト数を指定します。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。 | 1 | int |
replyToMaxConcurrentConsumers (producer) | JMS を介した要求/応答を使用する場合の同時 consumer の最大数を指定します。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。 | int | |
replyToOnTimeoutMaxConcurrentConsumers (producer) | JMS 経由の要求/応答を使用するときにタイムアウトが発生したときに、ルーティングを継続するための同時 consumer の最大数を指定します。 | 1 | int |
replyToOverride (producer) | JMS メッセージで明示的な ReplyTo 宛先を提供します。これは、replyTo の設定をオーバーライドします。メッセージをリモート Queue に転送し、ReplyTo 宛先から応答メッセージを受け取る場合に便利です。 | String | |
replyToType (producer) | JMS を介して要求/応答を行うときに、replyTo キューに使用する戦略の種類を明示的に指定できます。可能な値は、Temporary、Shared、または Exclusive です。デフォルトでは、Camel は一時キューを使用します。ただし、replyTo が設定されている場合は、デフォルトで Shared が使用されます。このオプションを使用すると、共有キューの代わりに専用キューを使用できます。詳細については、Camel JMS のドキュメントを参照してください。特に、クラスター化された環境で実行する場合の影響に関する注意事項と、共有応答キューは代替の一時および排他的キューよりもパフォーマンスが低いという事実を参照してください。 列挙値:
| ReplyToType | |
requestTimeout (producer) | InOut Exchange パターン使用時の応答待ちタイムアウト (ミリ秒単位)。デフォルトは 20 秒です。ヘッダー CamelJmsRequestTimeout を含めて、このエンドポイントで設定されたタイムアウト値をオーバーライドし、メッセージごとに個別のタイムアウト値を持つことができます。requestTimeoutCheckerInterval オプションも参照してください。 | 20000 | long |
timeToLive (producer) | メッセージの送信時に、メッセージの有効期限をミリ秒単位で指定します。 | -1 | long |
allowAdditionalHeaders (producer (上級)) | このオプションは、JMS 仕様に従って無効な値を持つ可能性がある追加のヘッダーを許可するために使用されます。たとえば、WMQ などの一部のメッセージシステムは、バイト配列またはその他の無効な型の値を含む接頭辞 JMS_IBM_MQMD_ を使用するヘッダー名でこれを行います。コンマで区切られた複数のヘッダー名を指定し、ワイルドカードマッチングの接尾辞として使用できます。 | String | |
allowNullBody (producer (上級)) | ボディーのないメッセージの送信を許可するかどうか。このオプションが false でメッセージボディーが null の場合は、JMSException が出力されます。 | true | boolean |
alwaysCopyMessage (producer (上級)) | true の場合、メッセージが producer に渡されて送信されると、Camel は常にメッセージの JMS メッセージコピーを作成します。replyToDestinationSelectorName が設定されている場合など、状況によってはメッセージをコピーする必要があります (ちなみに、replyToDestinationSelectorName が設定されている場合、Camel は alwaysCopyMessage オプションを true に設定します)。 | false | boolean |
correlationProperty (producer (上級)) | InOut 交換パターンを使用する場合、JMSCorrelationID JMS プロパティーの代わりにこの JMS プロパティーを使用してメッセージを関連付けます。設定されたメッセージがこのプロパティーの値のみに関連付けられる場合、JMSCorrelationID プロパティーは無視され、Camel によって設定されません。 | String | |
disableTimeToLive (producer (上級)) | このオプションを使用して、有効期限を強制的に無効にします。たとえば、JMS を介して要求/応答を行う場合、Camel はデフォルトで、送信されるメッセージの存続時間として requestTimeout 値を使用します。問題は、送信側システムと受信側システムのクロックを同期させる必要があるため、同期していることです。これをアーカイブするのは必ずしも簡単ではありません。したがって、disableTimeToLive=true を使用して、送信されたメッセージに有効期限の値を設定しないようにすることができます。その後、メッセージは受信側システムで期限切れになりません。詳細については、以下の生存時間についてのセクションを参照してください。 | false | boolean |
forceSendOriginalMessage (producer (上級)) | mapJmsMessage=false を使用すると、ルート中にヘッダーに触れると (get または set)、Camel は新しい JMS メッセージを作成して新しい JMS 宛先に送信します。Camel が受信した元の JMS メッセージを強制的に送信するには、このオプションを true に設定します。 | false | boolean |
includeSentJMSMessageID (producer (上級)) | InOnly を使用して JMS 宛先に送信する場合にのみ適用されます (例: ファイアアンドフォーゲット)。このオプションを有効にすると、メッセージが JMS 宛先に送信されたときに JMS クライアントによって使用された実際の JMSMessageID で Camel Exchange が強化されます。 | false | boolean |
replyToCacheLevelName (producer (上級)) | JMS を介して要求/応答を行うときに、応答 consumer のキャッシュレベルを名前で設定します。このオプションは、固定応答キュー (一時的ではない) を使用する場合にのみ適用されます。Camel はデフォルトで次を使用します: 排他的または replyToSelectorName と共有の CACHE_CONSUMER。そして、replyToSelectorName なしで共有するための CACHE_SESSION。IBM WebSphere などの一部の JMS ブローカーは、replyToCacheLevelName=CACHE_NONE を機能させるために設定する必要がある場合があります。注: 一時キューを使用する場合、CACHE_NONE は許可されず、CACHE_CONSUMER や CACHE_SESSION などのより高い値を使用する必要があります。 列挙値:
| String | |
replyToDestinationSelectorName (producer (上級)) | 使用する固定名を使用して JMS セレクターを設定し、共有キューを使用している場合 (つまり、一時的な応答キューを使用していない場合) に、他の応答から自分の応答を除外できるようにします。 | String | |
streamMessageTypeEnabled (producer (上級)) | StreamMessage タイプを有効にするかどうかを設定します。ファイル、InputStream などのストリーミングの種類のメッセージペイロードは、BytesMessage または StreamMessage として送信されます。このオプションは、どの種類が使用されるかを制御します。デフォルトでは、BytesMessage が使用され、メッセージペイロード全体がメモリーに読み込まれます。このオプションを有効にすると、メッセージペイロードがチャンク単位でメモリーに読み込まれ、データがなくなるまで各チャンクが StreamMessage に書き込まれます。 | false | boolean |
allowAutoWiredConnectionFactory (上級) | 接続ファクトリーが設定されていない場合に、レジストリーから ConnectionFactory を自動検出するかどうか。ConnectionFactory のインスタンスが 1 つだけ見つかった場合は、それが使用されます。これはデフォルトで有効になっています。 | true | boolean |
allowAutoWiredDestinationResolver (上級) | 宛先リゾルバーが設定されていない場合に、レジストリーから DestinationResolver を自動検出するかどうか。DestinationResolver のインスタンスが 1 つだけ見つかった場合は、それが使用されます。これはデフォルトで有効になっています。 | true | boolean |
allowSerializedHeaders (上級) | シリアル化されたヘッダーを含めるかどうかを制御します。transferExchange が true の場合にのみ適用されます。これには、オブジェクトがシリアライズ可能である必要があります。Camel はシリアル化できないオブジェクトを除外し、WARN レベルでログに記録します。 | false | boolean |
artemisStreamingEnabled (上級) | Apache Artemis ストリーミングモード用に最適化するかどうか。これにより、JMS StreamMessage タイプで Artemis を使用する場合のメモリーオーバーヘッドを削減できます。このオプションは、Apache Artemis が使用されている場合にのみ有効にする必要があります。 | false | boolean |
asyncStartListener (上級) | ルートの開始時に JmsConsumer メッセージリスナーを非同期で開始するかどうか。たとえば、JmsConsumer がリモート JMS ブローカーへの接続を取得できない場合は、再試行中やフェイルオーバー中にブロックされる可能性があります。これにより、ルートの開始時に Camel がブロックされます。このオプションを true に設定すると、ルートの起動を許可します。一方、JmsConsumer は非同期モードで専用のスレッドを使用して JMS ブローカーに接続します。このオプションを使用する場合は、接続を確立できない場合は例外が WARN レベルでログに記録され、consumer はメッセージを受信できず、ルートを再起動して再試行できます。 | false | boolean |
asyncStopListener (上級) | ルートを停止するときに、JmsConsumer メッセージリスナーを非同期的に停止するかどうか。 | false | boolean |
autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
configuration (上級) | 共有 JMS 設定を使用するには。 | JmsConfiguration | |
destinationResolver (上級) | 独自のリゾルバーを使用できるようにするプラグ可能な org.springframework.jms.support.destination.DestinationResolver (たとえば、JNDI レジストリーで実際の宛先を検索するため)。 | DestinationResolver | |
errorHandler (上級) | Message の処理中にキャッチされない例外が出力された場合に呼び出される org.springframework.util.ErrorHandler を指定します。デフォルトでは、errorHandler が設定されていない場合、これらの例外は WARN レベルでログに記録されます。errorHandlerLoggingLevel および errorHandlerLogStackTrace オプションを使用して、ログレベルとスタックトレースをログに記録するかどうかを設定できます。これにより、カスタム errorHandler をコーディングするよりも設定がはるかに簡単になります。 | ErrorHandler | |
exceptionListener (上級) | 基礎となる JMS 例外の通知を受ける JMS 例外リスナーを指定します。 | ExceptionListener | |
idleConsumerLimit (上級) | 常にアイドル状態にできる consumer の数の制限を指定します。 | 1 | int |
idleTaskExecutionLimit (上級) | 実行中にメッセージを受信していない、受信タスクのアイドル実行の制限を指定します。この制限に達すると、タスクはシャットダウンし、他の実行中のタスクに受信を任せます (動的スケジューリングの場合。maxConcurrentConsumers 設定を参照してください)。Spring から入手できる追加のドキュメントがあります。 | 1 | int |
includeAllJMSXProperties (上級) | JMS から Camel Message へのマッピング時に JMSXxxx プロパティーをすべて含めるかどうか。これを true に設定すると、JMSXAppID や JMSXUserID などのプロパティーが含まれます。注記: カスタムの headerFilterStrategy を使用している場合、このオプションは適用されません。 | false | boolean |
jmsKeyFormatStrategy (上級) | JMS 仕様に準拠できるように、JMS キーをエンコードおよびデコードするためのプラグ可能な戦略。Camel は、追加設定なしで、default と passthrough の 2 つの実装を提供します。デフォルトのストラテジーでは、ドットとハイフン(. および -)を安全にマーシャリングします。パススルー戦略では、キーはそのまま残ります。JMS ヘッダーキーに不正な文字が含まれているかどうかは問題にならない JMS ブローカーに使用できます。org.apache.camel.component.jms.JmsKeyFormatStrategy の独自の実装を提供し、# 表記を使用して参照できます。 列挙値:
| JmsKeyFormatStrategy | |
mapJmsMessage (上級) | Camel が受信した JMS メッセージを適切なペイロードタイプ (javax.jms.TextMessage を文字列など) に自動マップするかどうかを指定します。 | true | boolean |
maxMessagesPerTask (上級) | タスクあたりのメッセージ数。-1 は無制限です。同時 consumer の範囲 (例: min max) を使用する場合、このオプションを使用して値を 100 などに設定し、必要な作業が少ない場合に consumer が縮小する速度を制御できます。 | -1 | int |
messageConverter (上級) | カスタム Spring org.springframework.jms.support.converter.MessageConverter を使用して、javax.jms.Message との間でどのようにマッピングするかを制御できるようにします。 | MessageConverter | |
messageCreatedStrategy (上級) | Camel が JMS メッセージを送信しているときに、Camel が javax.jms.Message オブジェクトの新しいインスタンスを作成するときに呼び出される、指定された MessageCreatedStrategy を使用します。 | MessageCreatedStrategy | |
messageIdEnabled (上級) | 送信時に、メッセージ ID を追加するかどうかを指定します。これは、JMS ブローカーへの単なるヒントです。JMS プロバイダーがこのヒントを受け入れる場合、これらのメッセージのメッセージ ID を null に設定する必要があります。プロバイダーがヒントを無視する場合、メッセージ ID は通常の一意の値に設定する必要があります。 | true | boolean |
messageListenerContainerFactory (上級) | メッセージを消費するために使用する org.springframework.jms.listener.AbstractMessageListenerContainer を決定するために使用される MessageListenerContainerFactory のレジストリー ID。これを設定すると、consumerType が自動的に Custom に設定されます。 | MessageListenerContainerFactory | |
messageTimestampEnabled (上級) | メッセージの送信時にデフォルトでタイムスタンプを有効にするかどうかを指定します。これは、JMS ブローカーへの単なるヒントです。JMS プロバイダーがこのヒントを受け入れる場合、これらのメッセージのタイムスタンプをゼロに設定する必要があります。プロバイダーがヒントを無視する場合は、タイムスタンプを通常の値に設定する必要があります。 | true | boolean |
pubSubNoLocal (上級) | 独自の接続によってパブリッシュされたメッセージの配信を禁止するかどうかを指定します。 | false | boolean |
queueBrowseStrategy (上級) | キューを参照するときにカスタム QueueBrowseStrategy を使用するには。 | QueueBrowseStrategy | |
receiveTimeout (上級) | メッセージ受信のタイムアウト (ミリ秒単位)。 | 1000 | long |
recoveryInterval (上級) | リカバリーの試行の間隔を指定します。つまり、接続が更新されるタイミング(ミリ秒単位)を指定します。デフォルトは 5000 ミリ秒、つまり 5 秒です。 | 5000 | long |
requestTimeoutCheckerInterval (上級) | JMS を介してリクエスト/リプライを行うときに、Camel がタイムアウトになった Exchange をチェックする頻度を設定します。デフォルトでは、Camel は 1 秒に 1 回確認します。ただし、タイムアウトが発生したときに迅速に対応する必要がある場合は、この間隔を短くして、より頻繁にチェックすることができます。タイムアウトは、オプション requestTimeout によって決定されます。 | 1000 | long |
synchronous (上級) | 同期処理を厳密に使用するかどうかを設定します。 | false | boolean |
transferException (上級) | 有効で、Request Reply メッセージング (InOut) を使用していて、Exchange が consumer 側で失敗した場合、原因となった例外が javax.jms.ObjectMessage として応答で返されます。クライアントが Camel の場合、返された Exception は再出力されます。これにより、Camel JMS をルーティングのブリッジとして使用できます。たとえば、永続的なキューを使用して堅牢なルーティングを有効にできます。transferExchange も有効にしている場合は、このオプションが優先されることに注意してください。キャッチされた例外はシリアライズ可能である必要があります。consumer 側の元の Exception は、producer に返されるときに org.apache.camel.RuntimeCamelException などの外部例外にラップできます。データは Java オブジェクトのシリアライゼーションを使用しており、受信側がクラスレベルでデータをデシリアライズできる必要があるため、これは注意して使用してください。 | false | boolean |
transferExchange (上級) | 本文とヘッダーだけでなく、電信送金で交換を転送できます。次のフィールドが転送されます: In body、Out body、Fault body、In ヘッダー、Out ヘッダー、Fault ヘッダー、交換プロパティー、交換例外。これには、オブジェクトがシリアライズ可能である必要があります。Camel はシリアル化できないオブジェクトを除外し、WARN レベルでログに記録します。プロデューサ側と consumer 側の両方でこのオプションを有効にする必要があるため、Camel はペイロードが Exchange であり、通常のペイロードではないことを認識します。データは Java オブジェクトのシリアライゼーションを使用しており、レシーバーがクラスレベルでデータをデシリアライズできる必要があるため、これは注意して使用してください。これにより、互換性のある Camel バージョンを使用する必要がある producer と consumer の間の強い結合が強制されます。 | false | boolean |
useMessageIDAsCorrelationID (上級) | InOut メッセージの JMSCorrelationID として JMSMessageID を常に使用するかどうかを指定します。 | false | boolean |
waitForProvisionCorrelationToBeUpdatedCounter (上級) | JMS を介して要求/応答を行う場合、およびオプション useMessageIDAsCorrelationID が有効な場合に、暫定相関 ID が実際の相関 ID に更新されるのを待機する回数。 | 50 | int |
waitForProvisionCorrelationToBeUpdatedThreadSleepingTime (上級) | 暫定相関 ID が更新されるのを待機するたびにスリープする間隔 (ミリ単位)。 | 100 | long |
headerFilterStrategy (filter) | カスタムの org.apache.camel.spi.HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルターします。 | HeaderFilterStrategy | |
errorHandlerLoggingLevel (logging) | キャッチされていない例外をログに記録するためのデフォルトの errorHandler ログレベルを設定できます。 列挙値:
| WARN | LoggingLevel |
errorHandlerLogStackTrace (logging) | デフォルトの errorHandler でスタックトレースをログに記録するかどうかを制御できます。 | true | boolean |
password (security) | ConnectionFactory で使用するパスワード。また、ConnectionFactory でユーザー名およびパスワードを直接設定することもできます。 | String | |
username (security) | ConnectionFactory で使用するユーザー名。また、ConnectionFactory でユーザー名およびパスワードを直接設定することもできます。 | String | |
取引済み (取引) | トランザクションモードを使用するかどうかを指定します。 | false | boolean |
transactedInOut (トランザクション) | InOut 操作 (リクエストリプライ) がデフォルトでトランザクションモードを使用するかどうかを指定します。このフラグが true に設定されている場合、Spring JmsTemplate は sessionTransacted を true に設定し、acknowledgeMode は InOut 操作に使用される JmsTemplate でトランザクションされます。Spring JMS からの注意: JTA トランザクション内では、createQueue、createTopic メソッドに渡されるパラメーターは考慮されません。Java EE トランザクションコンテキストに応じて、コンテナーはこれらの値を独自に決定します。同様に、この場合、Spring JMS は既存の JMS セッションで動作するため、これらのパラメーターはローカルで管理されるトランザクション内でも考慮されません。このフラグを true に設定すると、管理対象トランザクションの外部で実行されている場合は短いローカル JMS トランザクションが使用され、管理対象トランザクション (XA トランザクション以外) が存在する場合は同期されたローカル JMS トランザクションが使用されます。これには、ローカル JMS トランザクションがメイントランザクション (ネイティブ JDBC トランザクションの場合もある) と一緒に管理され、JMS トランザクションがメイントランザクションの直後にコミットされるという効果があります。 | false | boolean |
lazyCreateTransactionManager (transaction (上級)) | true の場合、オプション transacted=true のときに transactionManager が挿入されていない場合、Camel は JmsTransactionManager を作成します。 | true | boolean |
transactionManager (トランザクション (上級)) | 使用する Spring トランザクションマネージャー。 | PlatformTransactionManager | |
transactionName (トランザクション (上級)) | 使用するトランザクションの名前。 | String | |
transactionTimeout (トランザクション (上級)) | トランザクションモードを使用している場合の、トランザクションのタイムアウト値 (秒単位)。 | -1 | int |
1.4. エンドポイントオプション
AMQP エンドポイントは、URI 構文を使用して設定されます。
amqp:destinationType:destinationName
パスおよびクエリーパラメーターを使用します。
1.4.1. パスパラメーター (2 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
destinationType (共通) | 使用する宛先の種類。 列挙値:
| queue | String |
destinationName (共通) | 必須 宛先として使用するキューまたはトピックの名前。 | String |
1.4.2. クエリーパラメーター(96 パラメーター):
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
clientId (共通) | 使用する JMS クライアント ID を設定します。この値を指定する場合は、一意である必要があり、単一の JMS 接続インスタンスでのみ使用できることに注意してください。通常、永続的なトピックサブスクリプションの場合にのみ必要です。Apache ActiveMQ を使用している場合は、代わりに仮想トピックを使用することをお勧めします。 | String | |
connectionFactory (共通) | 使用する接続ファクトリー。コンポーネントまたはエンドポイントで接続ファクトリーを設定する必要があります。 | ConnectionFactory | |
disableReplyTo (共通) | Camel がメッセージの JMSReplyTo ヘッダーを無視するかどうかを指定します。true の場合、Camel は JMSReplyTo ヘッダーで指定された宛先に返信を送り返しません。Camel にルートから消費させたいが、コード内の別のコンポーネントが応答メッセージを処理するため、Camel に自動的に応答メッセージを送り返したくない場合は、このオプションを使用できます。Camel を異なるメッセージブローカー間のプロキシーとして使用し、あるシステムから別のシステムにメッセージをルーティングする場合にも、このオプションを使用できます。 | false | boolean |
durableSubscriptionName (共通) | 永続トピックサブスクリプションを指定するための永続サブスクライバー名。clientId オプションも設定する必要があります。 | String | |
jmsMessageType (共通) | JMS メッセージの送信に特定の javax.jms.Message 実装を強制的に使用できるようにします。可能な値は、Bytes、Map、Object、Stream、Text です。デフォルトでは、Camel は In body タイプから使用する JMS メッセージタイプを決定します。このオプションで指定できます。 列挙値:
| JmsMessageType | |
replyTo (共通) | 明示的な ReplyTo 宛先を提供します (consumer の Message.getJMSReplyTo() の着信値をオーバーライドします)。 | String | |
testConnectionOnStartup (共通) | 起動時に接続をテストするかどうかを指定します。これにより、Camel の起動時に、すべての JMS consumerが JMS ブローカーへの有効な接続を持つことが保証されます。接続を許可できない場合、Camel は起動時に例外を出力します。これにより、接続に失敗した状態で Camel が開始されなくなります。JMS producer もテストされています。 | false | boolean |
acknowledgementModeName (consumer) | JMS 確認応答名。SESSION_TRANSACTED、CLIENT_ACKNOWLEDGE、AUTO_ACKNOWLEDGE、DUPS_OK_ACKNOWLEDGE のいずれかです。 列挙値:
| AUTO_ACKNOWLEDGE | String |
artemisConsumerPriority (consumer) | consumer の優先度を使用すると、優先度の高い consumer がアクティブなときにメッセージを受信できるようになります。通常、キューに接続されているアクティブな consumer は、ラウンドロビン方式でキューからメッセージを受け取ります。consumer の優先度が使用されているとき、同じ優先度の高いアクティブなconsumer が複数存在する場合は、メッセージがラウンドロビンで配信されます。メッセージは、優先度の高い consumer がメッセージを消費するために利用できるクレジットを持っていない場合、またはそれらの優先度の高い consumer がメッセージの受け入れを拒否した場合にのみ、優先度の低い consumer に送信されます (たとえば、consumer に関連するセレクターの基準を満たさないため)。 | int | |
asyncConsumer (consumer) | JmsConsumer が Exchange を非同期的に処理するかどうか。有効にすると、JmsConsumer は JMS キューから次のメッセージを取得できますが、前のメッセージは (非同期ルーティングエンジンによって) 非同期に処理されます。これは、メッセージが 100% 厳密に順序どおりに処理されない可能性があることを意味します。無効になっている場合 (デフォルト)、JmsConsumer が JMS キューから次のメッセージを取得する前に Exchange が完全に処理されます。transactioned が有効になっている場合、トランザクションは同期的に実行する必要があるため、asyncConsumer=true は非同期的に実行されないことに注意してください (Camel 3.0 は非同期トランザクションをサポートする場合があります)。 | false | boolean |
autoStartup (consumer) | consumer コンテナーを自動起動するかどうかを指定します。 | true | boolean |
cacheLevel (consumer) | 基礎となる JMS リソースの ID によってキャッシュレベルを設定します。詳細は、cacheLevelName オプションを参照してください。 | int | |
cacheLevelName (consumer) | 基礎となる JMS リソースのキャッシュレベルを名前で設定します。可能な値は、CACHE_AUTO、CACHE_CONNECTION、CACHE_CONSUMER、CACHE_NONE、および CACHE_SESSION です。デフォルト設定は CACHE_AUTO です。詳細は、Spring のドキュメントとトランザクションキャッシュレベルを参照してください。 列挙値:
| CACHE_AUTO | String |
concurrentConsumers (consumer) | JMS から消費する場合の同時 consumer のデフォルト数を指定します (JMS を介した要求/応答ではありません)。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。JMS を介して要求/応答を行う場合は、オプション replyToConcurrentConsumers を使用して、応答メッセージリスナーの同時 consumer の数を制御します。 | 1 | int |
maxConcurrentConsumers (consumer) | JMS から消費する場合の同時 consumer の最大数を指定します (JMS を介した要求/応答ではありません)。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。JMS を介して要求/応答を行う場合は、オプション replyToMaxConcurrentConsumers を使用して、応答メッセージリスナーの同時 consumer の数を制御します。 | int | |
replyToDeliveryPersistent (consumer) | 返信に対してデフォルトで永続的な配信を使用するかどうかを指定します。 | true | boolean |
selector (consumer) | 使用する JMS セレクターを設定します。 | String | |
subscriptionDurable (consumer) | サブスクリプションを永続化するかどうかを設定します。使用する永続サブスクリプション名は、subscriptionName プロパティーで指定できます。デフォルトは false です。通常、subscriptionName 値と組み合わせて永続的なサブスクリプションを登録するには、これを true に設定します (メッセージリスナークラス名がサブスクリプション名として十分でない場合)。トピック (pub-sub ドメイン) をリッスンする場合にのみ意味があるため、このメソッドは pubSubDomain フラグも切り替えます。 | false | boolean |
subscriptionName (consumer) | 作成するサブスクリプションの名前を設定します。共有または永続的なサブスクリプションを持つトピック (pub-sub ドメイン) の場合に適用されます。サブスクリプション名は、このクライアントの JMS クライアント ID 内で一意である必要があります。デフォルトは、指定されたメッセージリスナーのクラス名です。注: 共有サブスクリプション (JMS 2.0 が必要) を除き、サブスクリプションごとに 1 つの同時 consumer (このメッセージリスナコンテナーのデフォルト) のみが許可されます。 | String | |
subscriptionShared (consumer) | サブスクリプションを共有するかどうかを設定します。使用する共有サブスクリプション名は、subscriptionName プロパティーで指定できます。デフォルトは false です。通常は subscriptionName 値と組み合わせて共有サブスクリプションを登録するには、これを true に設定します (メッセージリスナークラス名がサブスクリプション名として十分でない場合)。共有サブスクリプションも永続的である可能性があるため、このフラグを subscriptionDurable と組み合わせることもできます (多くの場合は組み合わせます)。トピック (pub-sub ドメイン) をリッスンする場合にのみ意味があるため、このメソッドは pubSubDomain フラグも切り替えます。JMS 2.0 互換のメッセージブローカーが必要です。 | false | boolean |
acceptMessagesWhileStopping (consumer (上級)) | consumer が停止中にメッセージを受け入れるかどうかを指定します。実行時に JMS ルートを開始および停止するが、キューにメッセージが入れられている場合は、このオプションを有効にすることを検討してください。このオプションが false の場合は、JMS ルートを停止すると、メッセージが拒否される可能性があり、JMS ブローカは再配信を試行する必要がありますが、これも拒否される可能性があり、最終的にメッセージはJMS ブローカー上のデッドレターキューに移動される可能性があります。これを回避するには、このオプションを有効にすることをお勧めします。 | false | boolean |
allowReplyManagerQuickStop (consumer (上級)) | JmsConfiguration#isAcceptMessagesWhileStopping が有効で、org.apache.camel.CamelContext が現在停止している場合に、要求/応答メッセージングのリプライマネージャーで使用される DefaultMessageListenerContainer が、DefaultMessageListenerContainer.runningAllowed フラグを迅速に停止できるようにするかどうか。このクイック停止機能は、通常の JMS consumer ではデフォルトで有効になっていますが、応答マネージャーを有効にするには、このフラグを有効にする必要があります。 | false | boolean |
consumerType (consumer (上級)) | 使用する consumer タイプ。Simple、Default、または Custom のいずれかです。consumer タイプによって、使用する Spring JMS リスナーが決まります。デフォルトは org.springframework.jms.listener.DefaultMessageListenerContainer を使用し、Simple は org.springframework.jms.listener.SimpleMessageListenerContainer を使用します。Custom を指定した場合は、messageListenerContainerFactory オプションで定義された MessageListenerContainerFactory によって、使用する org.springframework.jms.listener.AbstractMessageListenerContainer が決まります。 列挙値:
| デフォルト | ConsumerType |
defaultTaskExecutorType (consumer (上級)) | consumer エンドポイントとプロデューサエンドポイントの ReplyTo consumer の両方に対して、DefaultMessageListenerContainer で使用するデフォルトの TaskExecutor タイプを指定します。可能な値: SimpleAsync (Spring の SimpleAsyncTaskExecutor を使用) または ThreadPool (Spring の ThreadPoolTaskExecutor を最適な値で使用 - キャッシュされたスレッドプールのようなもの)。設定されていない場合は、デフォルトで以前の動作になり、consumer エンドポイントにはキャッシュされたスレッドプールが使用され、応答 consumer には SimpleAsync が使用されます。ThreadPool の使用は、同時 consumer が動的に増減するエラスティック設定でスレッドのゴミを減らすために推奨されます。 列挙値:
| DefaultTaskExecutorType | |
eagerLoadingOfProperties (consumer (上級)) | メッセージが読み込まれるとすぐに JMS プロパティーとペイロードの熱心な読み込みを有効にします。これは、JMS プロパティーが必要ない場合があるため一般的に非効率的ですが、基盤となる JMS プロバイダーと JMS プロパティーの使用に関する問題を早期に発見できる場合があります。オプション eagerPoisonBody も参照してください。 | false | boolean |
eagerPoisonBody (consumer (上級)) | eagerLoadingOfProperties が有効であり、JMS メッセージペイロード (JMS 本文または JMS プロパティー) が有害 (読み取り/マッピングできない) である場合は、代わりにこのテキストをメッセージボディーとして設定し、メッセージを処理できるようにします (有害の原因は、Exchange では例外としてすでに保存されています)。これは、eagerPoisonBody=false を設定することでオフにすることができます。オプション eagerLoadingOfProperties も参照してください。 | $\{exception.message} による JMS メッセージへの影響 | String |
exceptionHandler (consumer (上級)) | consumer によるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、consumer は例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
exchangePattern (consumer (上級)) | consumer がエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
exposeListenerSession (consumer (上級)) | メッセージを消費するときにリスナーセッションを公開するかどうかを指定します。 | false | boolean |
replyToConsumerType (consumer (上級)) | 応答 consumer の consumer タイプ (要求/応答を行う場合)。Simple、Default、または Custom のいずれかになります。consumer タイプによって、使用する Spring JMS リスナーが決まります。デフォルトは org.springframework.jms.listener.DefaultMessageListenerContainer を使用し、Simple は org.springframework.jms.listener.SimpleMessageListenerContainer を使用します。Custom を指定した場合は、messageListenerContainerFactory オプションで定義された MessageListenerContainerFactory によって、使用する org.springframework.jms.listener.AbstractMessageListenerContainer が決まります。 列挙値:
| デフォルト | ConsumerType |
replyToSameDestinationAllowed (consumer (上級)) | JMS consumer が、consumer が使用しているのと同じ宛先に応答メッセージを送信できるかどうか。これにより、同じメッセージを消費してそれ自体に送り返すことで、無限ループが回避されます。 | false | boolean |
taskExecutor (consumer (上級)) | メッセージを消費するためのカスタムタスクエグゼキュータを指定できます。 | TaskExecutor | |
deliveryDelay (producer) | JMS の送信呼び出しに使用する配信遅延を設定します。このオプションには、JMS 2.0 準拠のブローカーが必要です。 | -1 | long |
deliveryMode (producer) | 使用する配信モードを指定します。可能な値は、javax.jms.DeliveryMode で定義された値です。NON_PERSISTENT = 1 および PERSISTENT = 2。 列挙値:
| Integer | |
deliveryPersistent (producer) | デフォルトで永続配信を使用するかどうかを指定します。 | true | boolean |
explicitQosEnabled (producer) | メッセージの送信時に、deliveryMode、priority、または timeToLive のサービス品質を使用する必要があるかどうかを設定します。このオプションは、Spring の JmsTemplate に基づいています。deliveryMode、priority、および timeToLive オプションは、現在のエンドポイントに適用されます。これは、メッセージの粒度で動作し、Camel In メッセージヘッダーから排他的に QoS プロパティーを読み取る preserveMessageQos オプションとは対照的です。 | false | Boolean |
formatDateHeadersToIso8601 (producer) | JMS 日付プロパティーを ISO 8601 標準に従ってフォーマットするかどうかを設定します。 | false | boolean |
preserveMessageQos (producer) | JMS エンドポイントの QoS 設定ではなく、メッセージで指定された QoS 設定を使用してメッセージを送信する場合は、true に設定します。次の 3 つのヘッダーは、JMSPriority、JMSDeliveryMode、および JMSExpiration と見なされます。それらのすべてまたは一部のみを指定できます。指定されていない場合、Camel は代わりにエンドポイントからの値を使用するようにフォールバックします。したがって、このオプションを使用すると、ヘッダーはエンドポイントからの値をオーバーライドします。対照的に、explicitQosEnabled オプションは、エンドポイントに設定されたオプションのみを使用し、メッセージヘッダーの値は使用しません。 | false | boolean |
priority (producer) | 1 より大きい値は、送信時のメッセージの優先度を指定します (1 が最低の優先度で、9 が最高の優先度です)。このオプションを有効にするには、explicitQosEnabled オプションも有効にする必要があります。 列挙値:
| 4 | int |
replyToConcurrentConsumers (producer) | JMS を介して要求/応答を行うときの同時 consumer のデフォルト数を指定します。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。 | 1 | int |
replyToMaxConcurrentConsumers (producer) | JMS を介した要求/応答を使用する場合の同時 consumer の最大数を指定します。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。 | int | |
replyToOnTimeoutMaxConcurrentConsumers (producer) | JMS 経由の要求/応答を使用するときにタイムアウトが発生したときに、ルーティングを継続するための同時 consumer の最大数を指定します。 | 1 | int |
replyToOverride (producer) | JMS メッセージで明示的な ReplyTo 宛先を提供します。これは、replyTo の設定をオーバーライドします。メッセージをリモート Queue に転送し、ReplyTo 宛先から応答メッセージを受け取る場合に便利です。 | String | |
replyToType (producer) | JMS を介して要求/応答を行うときに、replyTo キューに使用する戦略の種類を明示的に指定できます。可能な値は、Temporary、Shared、または Exclusive です。デフォルトでは、Camel は一時キューを使用します。ただし、replyTo が設定されている場合は、デフォルトで Shared が使用されます。このオプションを使用すると、共有キューの代わりに専用キューを使用できます。詳細については、Camel JMS のドキュメントを参照してください。特に、クラスター化された環境で実行する場合の影響に関する注意事項と、共有応答キューは代替の一時および排他的キューよりもパフォーマンスが低いという事実を参照してください。 列挙値:
| ReplyToType | |
requestTimeout (producer) | InOut Exchange パターン使用時の応答待ちタイムアウト (ミリ秒単位)。デフォルトは 20 秒です。ヘッダー CamelJmsRequestTimeout を含めて、このエンドポイントで設定されたタイムアウト値をオーバーライドし、メッセージごとに個別のタイムアウト値を持つことができます。requestTimeoutCheckerInterval オプションも参照してください。 | 20000 | long |
timeToLive (producer) | メッセージの送信時に、メッセージの有効期限をミリ秒単位で指定します。 | -1 | long |
allowAdditionalHeaders (producer (上級)) | このオプションは、JMS 仕様に従って無効な値を持つ可能性がある追加のヘッダーを許可するために使用されます。たとえば、WMQ などの一部のメッセージシステムは、バイト配列またはその他の無効な型の値を含む接頭辞 JMS_IBM_MQMD_ を使用するヘッダー名でこれを行います。コンマで区切られた複数のヘッダー名を指定し、ワイルドカードマッチングの接尾辞として使用できます。 | String | |
allowNullBody (producer (上級)) | ボディーのないメッセージの送信を許可するかどうか。このオプションが false でメッセージボディーが null の場合は、JMSException が出力されます。 | true | boolean |
alwaysCopyMessage (producer (上級)) | true の場合、メッセージが producer に渡されて送信されると、Camel は常にメッセージの JMS メッセージコピーを作成します。replyToDestinationSelectorName が設定されている場合など、状況によってはメッセージをコピーする必要があります (ちなみに、replyToDestinationSelectorName が設定されている場合、Camel は alwaysCopyMessage オプションを true に設定します)。 | false | boolean |
correlationProperty (producer (上級)) | InOut 交換パターンを使用する場合、JMSCorrelationID JMS プロパティーの代わりにこの JMS プロパティーを使用してメッセージを関連付けます。設定されたメッセージがこのプロパティーの値のみに関連付けられる場合、JMSCorrelationID プロパティーは無視され、Camel によって設定されません。 | String | |
disableTimeToLive (producer (上級)) | このオプションを使用して、有効期限を強制的に無効にします。たとえば、JMS を介して要求/応答を行う場合、Camel はデフォルトで、送信されるメッセージの存続時間として requestTimeout 値を使用します。問題は、送信側システムと受信側システムのクロックを同期させる必要があるため、同期していることです。これをアーカイブするのは必ずしも簡単ではありません。したがって、disableTimeToLive=true を使用して、送信されたメッセージに有効期限の値を設定しないようにすることができます。その後、メッセージは受信側システムで期限切れになりません。詳細については、以下の生存時間についてのセクションを参照してください。 | false | boolean |
forceSendOriginalMessage (producer (上級)) | mapJmsMessage=false を使用すると、ルート中にヘッダーに触れると (get または set)、Camel は新しい JMS メッセージを作成して新しい JMS 宛先に送信します。Camel が受信した元の JMS メッセージを強制的に送信するには、このオプションを true に設定します。 | false | boolean |
includeSentJMSMessageID (producer (上級)) | InOnly を使用して JMS 宛先に送信する場合にのみ適用されます (例: ファイアアンドフォーゲット)。このオプションを有効にすると、メッセージが JMS 宛先に送信されたときに JMS クライアントによって使用された実際の JMSMessageID で Camel Exchange が強化されます。 | false | boolean |
lazyStartProducer (producer (上級)) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
replyToCacheLevelName (producer (上級)) | JMS を介して要求/応答を行うときに、応答 consumer のキャッシュレベルを名前で設定します。このオプションは、固定応答キュー (一時的ではない) を使用する場合にのみ適用されます。Camel はデフォルトで次を使用します: 排他的または replyToSelectorName と共有の CACHE_CONSUMER。そして、replyToSelectorName なしで共有するための CACHE_SESSION。IBM WebSphere などの一部の JMS ブローカーは、replyToCacheLevelName=CACHE_NONE を機能させるために設定する必要がある場合があります。注: 一時キューを使用する場合、CACHE_NONE は許可されず、CACHE_CONSUMER や CACHE_SESSION などのより高い値を使用する必要があります。 列挙値:
| String | |
replyToDestinationSelectorName (producer (上級)) | 使用する固定名を使用して JMS セレクターを設定し、共有キューを使用している場合 (つまり、一時的な応答キューを使用していない場合) に、他の応答から自分の応答を除外できるようにします。 | String | |
streamMessageTypeEnabled (producer (上級)) | StreamMessage タイプを有効にするかどうかを設定します。ファイル、InputStream などのストリーミングの種類のメッセージペイロードは、BytesMessage または StreamMessage として送信されます。このオプションは、どの種類が使用されるかを制御します。デフォルトでは、BytesMessage が使用され、メッセージペイロード全体がメモリーに読み込まれます。このオプションを有効にすると、メッセージペイロードがチャンク単位でメモリーに読み込まれ、データがなくなるまで各チャンクが StreamMessage に書き込まれます。 | false | boolean |
allowSerializedHeaders (上級) | シリアル化されたヘッダーを含めるかどうかを制御します。transferExchange が true の場合にのみ適用されます。これには、オブジェクトがシリアライズ可能である必要があります。Camel はシリアル化できないオブジェクトを除外し、WARN レベルでログに記録します。 | false | boolean |
artemisStreamingEnabled (上級) | Apache Artemis ストリーミングモード用に最適化するかどうか。これにより、JMS StreamMessage タイプで Artemis を使用する場合のメモリーオーバーヘッドを削減できます。このオプションは、Apache Artemis が使用されている場合にのみ有効にする必要があります。 | false | boolean |
asyncStartListener (上級) | ルートの開始時に JmsConsumer メッセージリスナーを非同期で開始するかどうか。たとえば、JmsConsumer がリモート JMS ブローカーへの接続を取得できない場合は、再試行中やフェイルオーバー中にブロックされる可能性があります。これにより、ルートの開始時に Camel がブロックされます。このオプションを true に設定すると、ルートの起動を許可します。一方、JmsConsumer は非同期モードで専用のスレッドを使用して JMS ブローカーに接続します。このオプションを使用する場合は、接続を確立できない場合は例外が WARN レベルでログに記録され、consumer はメッセージを受信できず、ルートを再起動して再試行できます。 | false | boolean |
asyncStopListener (上級) | ルートを停止するときに、JmsConsumer メッセージリスナーを非同期的に停止するかどうか。 | false | boolean |
destinationResolver (上級) | 独自のリゾルバーを使用できるようにするプラグ可能な org.springframework.jms.support.destination.DestinationResolver (たとえば、JNDI レジストリーで実際の宛先を検索するため)。 | DestinationResolver | |
errorHandler (上級) | Message の処理中にキャッチされない例外が出力された場合に呼び出される org.springframework.util.ErrorHandler を指定します。デフォルトでは、errorHandler が設定されていない場合、これらの例外は WARN レベルでログに記録されます。errorHandlerLoggingLevel および errorHandlerLogStackTrace オプションを使用して、ログレベルとスタックトレースをログに記録するかどうかを設定できます。これにより、カスタム errorHandler をコーディングするよりも設定がはるかに簡単になります。 | ErrorHandler | |
exceptionListener (上級) | 基礎となる JMS 例外の通知を受ける JMS 例外リスナーを指定します。 | ExceptionListener | |
headerFilterStrategy (上級) | カスタムの HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルタリングします。 | HeaderFilterStrategy | |
idleConsumerLimit (上級) | 常にアイドル状態にできる consumer の数の制限を指定します。 | 1 | int |
idleTaskExecutionLimit (上級) | 実行中にメッセージを受信していない、受信タスクのアイドル実行の制限を指定します。この制限に達すると、タスクはシャットダウンし、他の実行中のタスクに受信を任せます (動的スケジューリングの場合。maxConcurrentConsumers 設定を参照してください)。Spring から入手できる追加のドキュメントがあります。 | 1 | int |
includeAllJMSXProperties (上級) | JMS から Camel Message へのマッピング時に JMSXxxx プロパティーをすべて含めるかどうか。これを true に設定すると、JMSXAppID や JMSXUserID などのプロパティーが含まれます。注記: カスタムの headerFilterStrategy を使用している場合、このオプションは適用されません。 | false | boolean |
jmsKeyFormatStrategy (上級) | JMS 仕様に準拠できるように、JMS キーをエンコードおよびデコードするためのプラグ可能な戦略。Camel は、追加設定なしで、default と passthrough の 2 つの実装を提供します。デフォルトのストラテジーでは、ドットとハイフン(. および -)を安全にマーシャリングします。パススルー戦略では、キーはそのまま残ります。JMS ヘッダーキーに不正な文字が含まれているかどうかは問題にならない JMS ブローカーに使用できます。org.apache.camel.component.jms.JmsKeyFormatStrategy の独自の実装を提供し、# 表記を使用して参照できます。 列挙値:
| JmsKeyFormatStrategy | |
mapJmsMessage (上級) | Camel が受信した JMS メッセージを適切なペイロードタイプ (javax.jms.TextMessage を文字列など) に自動マップするかどうかを指定します。 | true | boolean |
maxMessagesPerTask (上級) | タスクあたりのメッセージ数。-1 は無制限です。同時 consumer の範囲 (例: min max) を使用する場合、このオプションを使用して値を 100 などに設定し、必要な作業が少ない場合に consumer が縮小する速度を制御できます。 | -1 | int |
messageConverter (上級) | カスタム Spring org.springframework.jms.support.converter.MessageConverter を使用して、javax.jms.Message との間でどのようにマッピングするかを制御できるようにします。 | MessageConverter | |
messageCreatedStrategy (上級) | Camel が JMS メッセージを送信しているときに、Camel が javax.jms.Message オブジェクトの新しいインスタンスを作成するときに呼び出される、指定された MessageCreatedStrategy を使用します。 | MessageCreatedStrategy | |
messageIdEnabled (上級) | 送信時に、メッセージ ID を追加するかどうかを指定します。これは、JMS ブローカーへの単なるヒントです。JMS プロバイダーがこのヒントを受け入れる場合、これらのメッセージのメッセージ ID を null に設定する必要があります。プロバイダーがヒントを無視する場合、メッセージ ID は通常の一意の値に設定する必要があります。 | true | boolean |
messageListenerContainerFactory (上級) | メッセージを消費するために使用する org.springframework.jms.listener.AbstractMessageListenerContainer を決定するために使用される MessageListenerContainerFactory のレジストリー ID。これを設定すると、consumerType が自動的に Custom に設定されます。 | MessageListenerContainerFactory | |
messageTimestampEnabled (上級) | メッセージの送信時にデフォルトでタイムスタンプを有効にするかどうかを指定します。これは、JMS ブローカーへの単なるヒントです。JMS プロバイダーがこのヒントを受け入れる場合、これらのメッセージのタイムスタンプをゼロに設定する必要があります。プロバイダーがヒントを無視する場合は、タイムスタンプを通常の値に設定する必要があります。 | true | boolean |
pubSubNoLocal (上級) | 独自の接続によってパブリッシュされたメッセージの配信を禁止するかどうかを指定します。 | false | boolean |
receiveTimeout (上級) | メッセージ受信のタイムアウト (ミリ秒単位)。 | 1000 | long |
recoveryInterval (上級) | リカバリーの試行の間隔を指定します。つまり、接続が更新されるタイミング(ミリ秒単位)を指定します。デフォルトは 5000 ミリ秒、つまり 5 秒です。 | 5000 | long |
requestTimeoutCheckerInterval (上級) | JMS を介してリクエスト/リプライを行うときに、Camel がタイムアウトになった Exchange をチェックする頻度を設定します。デフォルトでは、Camel は 1 秒に 1 回確認します。ただし、タイムアウトが発生したときに迅速に対応する必要がある場合は、この間隔を短くして、より頻繁にチェックすることができます。タイムアウトは、オプション requestTimeout によって決定されます。 | 1000 | long |
synchronous (上級) | 同期処理を厳密に使用するかどうかを設定します。 | false | boolean |
transferException (上級) | 有効で、Request Reply メッセージング (InOut) を使用していて、Exchange が consumer 側で失敗した場合、原因となった例外が javax.jms.ObjectMessage として応答で返されます。クライアントが Camel の場合、返された Exception は再出力されます。これにより、Camel JMS をルーティングのブリッジとして使用できます。たとえば、永続的なキューを使用して堅牢なルーティングを有効にできます。transferExchange も有効にしている場合は、このオプションが優先されることに注意してください。キャッチされた例外はシリアライズ可能である必要があります。consumer 側の元の Exception は、producer に返されるときに org.apache.camel.RuntimeCamelException などの外部例外にラップできます。データは Java オブジェクトのシリアライゼーションを使用しており、受信側がクラスレベルでデータをデシリアライズできる必要があるため、これは注意して使用してください。 | false | boolean |
transferExchange (上級) | 本文とヘッダーだけでなく、電信送金で交換を転送できます。次のフィールドが転送されます: In body、Out body、Fault body、In ヘッダー、Out ヘッダー、Fault ヘッダー、交換プロパティー、交換例外。これには、オブジェクトがシリアライズ可能である必要があります。Camel はシリアル化できないオブジェクトを除外し、WARN レベルでログに記録します。プロデューサ側と consumer 側の両方でこのオプションを有効にする必要があるため、Camel はペイロードが Exchange であり、通常のペイロードではないことを認識します。データは Java オブジェクトのシリアライゼーションを使用しており、レシーバーがクラスレベルでデータをデシリアライズできる必要があるため、これは注意して使用してください。これにより、互換性のある Camel バージョンを使用する必要がある producer と consumer の間の強い結合が強制されます。 | false | boolean |
useMessageIDAsCorrelationID (上級) | InOut メッセージの JMSCorrelationID として JMSMessageID を常に使用するかどうかを指定します。 | false | boolean |
waitForProvisionCorrelationToBeUpdatedCounter (上級) | JMS を介して要求/応答を行う場合、およびオプション useMessageIDAsCorrelationID が有効な場合に、暫定相関 ID が実際の相関 ID に更新されるのを待機する回数。 | 50 | int |
waitForProvisionCorrelationToBeUpdatedThreadSleepingTime (上級) | 暫定相関 ID が更新されるのを待機するたびにスリープする間隔 (ミリ単位)。 | 100 | long |
errorHandlerLoggingLevel (logging) | キャッチされていない例外をログに記録するためのデフォルトの errorHandler ログレベルを設定できます。 列挙値:
| WARN | LoggingLevel |
errorHandlerLogStackTrace (logging) | デフォルトの errorHandler でスタックトレースをログに記録するかどうかを制御できます。 | true | boolean |
password (security) | ConnectionFactory で使用するパスワード。また、ConnectionFactory でユーザー名およびパスワードを直接設定することもできます。 | String | |
username (security) | ConnectionFactory で使用するユーザー名。また、ConnectionFactory でユーザー名およびパスワードを直接設定することもできます。 | String | |
取引済み (取引) | トランザクションモードを使用するかどうかを指定します。 | false | boolean |
transactedInOut (トランザクション) | InOut 操作 (リクエストリプライ) がデフォルトでトランザクションモードを使用するかどうかを指定します。このフラグが true に設定されている場合、Spring JmsTemplate は sessionTransacted を true に設定し、acknowledgeMode は InOut 操作に使用される JmsTemplate でトランザクションされます。Spring JMS からの注意: JTA トランザクション内では、createQueue、createTopic メソッドに渡されるパラメーターは考慮されません。Java EE トランザクションコンテキストに応じて、コンテナーはこれらの値を独自に決定します。同様に、この場合、Spring JMS は既存の JMS セッションで動作するため、これらのパラメーターはローカルで管理されるトランザクション内でも考慮されません。このフラグを true に設定すると、管理対象トランザクションの外部で実行されている場合は短いローカル JMS トランザクションが使用され、管理対象トランザクション (XA トランザクション以外) が存在する場合は同期されたローカル JMS トランザクションが使用されます。これには、ローカル JMS トランザクションがメイントランザクション (ネイティブ JDBC トランザクションの場合もある) と一緒に管理され、JMS トランザクションがメイントランザクションの直後にコミットされるという効果があります。 | false | boolean |
lazyCreateTransactionManager (transaction (上級)) | true の場合、オプション transacted=true のときに transactionManager が挿入されていない場合、Camel は JmsTransactionManager を作成します。 | true | boolean |
transactionManager (トランザクション (上級)) | 使用する Spring トランザクションマネージャー。 | PlatformTransactionManager | |
transactionName (トランザクション (上級)) | 使用するトランザクションの名前。 | String | |
transactionTimeout (トランザクション (上級)) | トランザクションモードを使用している場合の、トランザクションのタイムアウト値 (秒単位)。 | -1 | int |
1.5. 用途
AMQP コンポーネントは JMS コンポーネントから継承されるため、前者の使用法は後者とほぼ同じです。
AMQP コンポーネントの使用
// Consuming from AMQP queue from("amqp:queue:incoming"). to(...); // Sending message to the AMQP topic from(...). to("amqp:topic:notify");
1.6. AMQP コンポーネントの設定
AMQP 1.0 コンポーネントの作成
AMQPComponent amqp = AMQPComponent.amqpComponent("amqp://localhost:5672"); AMQPComponent authorizedAmqp = AMQPComponent.amqpComponent("amqp://localhost:5672", "user", "password");
AMQP コンポーネントを自動的に設定するために、org.apache.camel.component.amqp.AMQPConnectionDetails
のインスタンスをレジストリーに追加することもできます。たとえば、Spring Boot の場合、Bean を定義するだけです。
AMQP 接続の詳細の自動設定
@Bean AMQPConnectionDetails amqpConnection() { return new AMQPConnectionDetails("amqp://localhost:5672"); } @Bean AMQPConnectionDetails securedAmqpConnection() { return new AMQPConnectionDetails("amqp://localhost:5672", "username", "password"); }
同様に、Camel-CDI を使用する場合は、CDI producer メソッドも使用できます。
CDI の AMQP 接続の詳細の自動設定
@Produces AMQPConnectionDetails amqpConnection() { return new AMQPConnectionDetails("amqp://localhost:5672"); }
また、AMQP 接続の詳細を読み取るために信頼することもできます。ファクトリーメソッド AMQPConnectionDetails.discoverAMQP()
は、以下のスニペットで示されているように、Kubernetes に似た規則で Camel プロパティーを読み取ろうとします。
AMQP 接続の詳細の自動設定
export AMQP_SERVICE_HOST = "mybroker.com" export AMQP_SERVICE_PORT = "6666" export AMQP_SERVICE_USERNAME = "username" export AMQP_SERVICE_PASSWORD = "password" ... @Bean AMQPConnectionDetails amqpConnection() { return AMQPConnectionDetails.discoverAMQP(); }
AMQP 固有のオプションを有効にする
たとえば、amqp.traceFrames
を有効にする必要がある場合は、次の例のように、オプションを URI に追加することで有効にできます。
AMQPComponent amqp = AMQPComponent.amqpComponent("amqp://localhost:5672?amqp.traceFrames=true");
QPID JMS クライアント設定 を参照してください。
1.7. トピックの使用
camel-amqp
でトピックを使用するには、以下に示すように、topic://
をトピック 接頭辞として使用するようにコンポーネントを設定する必要があります。
<bean id="amqp" class="org.apache.camel.component.amqp.AmqpComponent"> <property name="connectionFactory"> <bean class="org.apache.qpid.jms.JmsConnectionFactory" factory-method="createFromURL"> <property name="remoteURI" value="amqp://localhost:5672" /> <property name="topicPrefix" value="topic://" /> <!-- only necessary when connecting to ActiveMQ over AMQP 1.0 --> </bean> </property> </bean>
AMQPComponent#amqpComponent ()
メソッドと AMQPConnectionDetails
の両方がトピック接頭辞を使用してコンポーネントを事前設定するため、明示的に設定する必要がないことに注意してください。
1.8. Spring Boot Auto-Configuration
Spring Boot で amqp を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-amqp-starter</artifactId> </dependency>
コンポーネントは、以下に記載される 101 のオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.component.amqp.accept-messages-while-stopping | consumer が停止中にメッセージを受け入れるかどうかを指定します。実行時に JMS ルートを開始および停止するが、キューにメッセージが入れられている場合は、このオプションを有効にすることを検討してください。このオプションが false の場合は、JMS ルートを停止すると、メッセージが拒否される可能性があり、JMS ブローカは再配信を試行する必要がありますが、これも拒否される可能性があり、最終的にメッセージはJMS ブローカー上のデッドレターキューに移動される可能性があります。これを回避するには、このオプションを有効にすることをお勧めします。 | false | Boolean |
camel.component.amqp.acknowledgement-mode-name | JMS 確認応答名。SESSION_TRANSACTED、CLIENT_ACKNOWLEDGE、AUTO_ACKNOWLEDGE、DUPS_OK_ACKNOWLEDGE のいずれかです。 | AUTO_ACKNOWLEDGE | String |
camel.component.amqp.allow-additional-headers | このオプションは、JMS 仕様に従って無効な値を持つ可能性がある追加のヘッダーを許可するために使用されます。たとえば、WMQ などの一部のメッセージシステムは、バイト配列またはその他の無効な型の値を含む接頭辞 JMS_IBM_MQMD_ を使用するヘッダー名でこれを行います。コンマで区切られた複数のヘッダー名を指定し、ワイルドカードマッチングの接尾辞として使用できます。 | String | |
camel.component.amqp.allow-auto-wired-connection-factory | 接続ファクトリーが設定されていない場合に、レジストリーから ConnectionFactory を自動検出するかどうか。ConnectionFactory のインスタンスが 1 つだけ見つかった場合は、それが使用されます。これはデフォルトで有効になっています。 | true | Boolean |
camel.component.amqp.allow-auto-wired-destination-resolver | 宛先リゾルバーが設定されていない場合に、レジストリーから DestinationResolver を自動検出するかどうか。DestinationResolver のインスタンスが 1 つだけ見つかった場合は、それが使用されます。これはデフォルトで有効になっています。 | true | Boolean |
camel.component.amqp.allow-null-body | ボディーのないメッセージの送信を許可するかどうか。このオプションが false でメッセージボディーが null の場合は、JMSException が出力されます。 | true | Boolean |
camel.component.amqp.allow-reply-manager-quick-stop | JmsConfiguration#isAcceptMessagesWhileStopping が有効で、org.apache.camel.CamelContext が現在停止している場合に、要求/応答メッセージングのリプライマネージャーで使用される DefaultMessageListenerContainer が、DefaultMessageListenerContainer.runningAllowed フラグを迅速に停止できるようにするかどうか。このクイック停止機能は、通常の JMS consumer ではデフォルトで有効になっていますが、応答マネージャーを有効にするには、このフラグを有効にする必要があります。 | false | Boolean |
camel.component.amqp.allow-serialized-headers | シリアル化されたヘッダーを含めるかどうかを制御します。transferExchange が true の場合にのみ適用されます。これには、オブジェクトがシリアライズ可能である必要があります。Camel はシリアル化できないオブジェクトを除外し、WARN レベルでログに記録します。 | false | Boolean |
camel.component.amqp.always-copy-message | true の場合、メッセージが producer に渡されて送信されると、Camel は常にメッセージの JMS メッセージコピーを作成します。replyToDestinationSelectorName が設定されている場合など、状況によってはメッセージをコピーする必要があります (ちなみに、replyToDestinationSelectorName が設定されている場合、Camel は alwaysCopyMessage オプションを true に設定します)。 | false | Boolean |
camel.component.amqp.artemis-consumer-priority | consumer の優先度を使用すると、優先度の高い consumer がアクティブなときにメッセージを受信できるようになります。通常、キューに接続されているアクティブな consumer は、ラウンドロビン方式でキューからメッセージを受け取ります。consumer の優先度が使用されているとき、同じ優先度の高いアクティブなconsumer が複数存在する場合は、メッセージがラウンドロビンで配信されます。メッセージは、優先度の高い consumer がメッセージを消費するために利用できるクレジットを持っていない場合、またはそれらの優先度の高い consumer がメッセージの受け入れを拒否した場合にのみ、優先度の低い consumer に送信されます (たとえば、consumer に関連するセレクターの基準を満たさないため)。 | Integer | |
camel.component.amqp.artemis-streaming-enabled | Apache Artemis ストリーミングモード用に最適化するかどうか。これにより、JMS StreamMessage タイプで Artemis を使用する場合のメモリーオーバーヘッドを削減できます。このオプションは、Apache Artemis が使用されている場合にのみ有効にする必要があります。 | false | Boolean |
camel.component.amqp.async-consumer | JmsConsumer が Exchange を非同期的に処理するかどうか。有効にすると、JmsConsumer は JMS キューから次のメッセージを取得できますが、前のメッセージは (非同期ルーティングエンジンによって) 非同期に処理されます。これは、メッセージが 100% 厳密に順序どおりに処理されない可能性があることを意味します。無効になっている場合 (デフォルト)、JmsConsumer が JMS キューから次のメッセージを取得する前に Exchange が完全に処理されます。transactioned が有効になっている場合、トランザクションは同期的に実行する必要があるため、asyncConsumer=true は非同期的に実行されないことに注意してください (Camel 3.0 は非同期トランザクションをサポートする場合があります)。 | false | Boolean |
camel.component.amqp.async-start-listener | ルートの開始時に JmsConsumer メッセージリスナーを非同期で開始するかどうか。たとえば、JmsConsumer がリモート JMS ブローカーへの接続を取得できない場合は、再試行中やフェイルオーバー中にブロックされる可能性があります。これにより、ルートの開始時に Camel がブロックされます。このオプションを true に設定すると、ルートの起動を許可します。一方、JmsConsumer は非同期モードで専用のスレッドを使用して JMS ブローカーに接続します。このオプションを使用する場合は、接続を確立できない場合は例外が WARN レベルでログに記録され、consumer はメッセージを受信できず、ルートを再起動して再試行できます。 | false | Boolean |
camel.component.amqp.async-stop-listener | ルートを停止するときに、JmsConsumer メッセージリスナーを非同期的に停止するかどうか。 | false | Boolean |
camel.component.amqp.auto-startup | consumer コンテナーを自動起動するかどうかを指定します。 | true | Boolean |
camel.component.amqp.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.amqp.cache-level | 基礎となる JMS リソースの ID によってキャッシュレベルを設定します。詳細は、cacheLevelName オプションを参照してください。 | Integer | |
camel.component.amqp.cache-level-name | 基礎となる JMS リソースのキャッシュレベルを名前で設定します。可能な値は、CACHE_AUTO、CACHE_CONNECTION、CACHE_CONSUMER、CACHE_NONE、および CACHE_SESSION です。デフォルト設定は CACHE_AUTO です。詳細は、Spring のドキュメントとトランザクションキャッシュレベルを参照してください。 | CACHE_AUTO | String |
camel.component.amqp.client-id | 使用する JMS クライアント ID を設定します。この値を指定する場合は、一意である必要があり、単一の JMS 接続インスタンスでのみ使用できることに注意してください。通常、永続的なトピックサブスクリプションの場合にのみ必要です。Apache ActiveMQ を使用している場合は、代わりに仮想トピックを使用することをお勧めします。 | String | |
camel.component.amqp.concurrent-consumers | JMS から消費する場合の同時 consumer のデフォルト数を指定します (JMS を介した要求/応答ではありません)。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。JMS を介して要求/応答を行う場合は、オプション replyToConcurrentConsumers を使用して、応答メッセージリスナーの同時 consumer の数を制御します。 | 1 | Integer |
camel.component.amqp.configuration | 共有 JMS 設定を使用するには。オプションは org.apache.camel.component.jms.JmsConfiguration タイプです。 | JmsConfiguration | |
camel.component.amqp.connection-factory | 使用する接続ファクトリー。コンポーネントまたはエンドポイントで接続ファクトリーを設定する必要があります。オプションは javax.jms.ConnectionFactory タイプです。 | ConnectionFactory | |
camel.component.amqp.consumer-type | 使用する consumer タイプ。Simple、Default、または Custom のいずれかです。consumer タイプによって、使用する Spring JMS リスナーが決まります。デフォルトは org.springframework.jms.listener.DefaultMessageListenerContainer を使用し、Simple は org.springframework.jms.listener.SimpleMessageListenerContainer を使用します。Custom を指定した場合は、messageListenerContainerFactory オプションで定義された MessageListenerContainerFactory によって、使用する org.springframework.jms.listener.AbstractMessageListenerContainer が決まります。 | ConsumerType | |
camel.component.amqp.correlation-property | InOut 交換パターンを使用する場合、JMSCorrelationID JMS プロパティーの代わりにこの JMS プロパティーを使用してメッセージを関連付けます。設定されたメッセージがこのプロパティーの値のみに関連付けられる場合、JMSCorrelationID プロパティーは無視され、Camel によって設定されません。 | String | |
camel.component.amqp.default-task-executor-type | consumer エンドポイントとプロデューサエンドポイントの ReplyTo consumer の両方に対して、DefaultMessageListenerContainer で使用するデフォルトの TaskExecutor タイプを指定します。可能な値: SimpleAsync (Spring の SimpleAsyncTaskExecutor を使用) または ThreadPool (Spring の ThreadPoolTaskExecutor を最適な値で使用 - キャッシュされたスレッドプールのようなもの)。設定されていない場合は、デフォルトで以前の動作になり、consumer エンドポイントにはキャッシュされたスレッドプールが使用され、応答 consumer には SimpleAsync が使用されます。ThreadPool の使用は、同時 consumer が動的に増減するエラスティック設定でスレッドのゴミを減らすために推奨されます。 | DefaultTaskExecutorType | |
camel.component.amqp.delivery-delay | JMS の送信呼び出しに使用する配信遅延を設定します。このオプションには、JMS 2.0 準拠のブローカーが必要です。 | -1 | Long |
camel.component.amqp.delivery-mode | 使用する配信モードを指定します。可能な値は、javax.jms.DeliveryMode で定義された値です。NON_PERSISTENT = 1 および PERSISTENT = 2。 | Integer | |
camel.component.amqp.delivery-persistent | デフォルトで永続配信を使用するかどうかを指定します。 | true | Boolean |
camel.component.amqp.destination-resolver | 独自のリゾルバーを使用できるようにするプラグ可能な org.springframework.jms.support.destination.DestinationResolver (たとえば、JNDI レジストリーで実際の宛先を検索するため)。オプションは org.springframework.jms.support.destination.DestinationResolver 型です。 | DestinationResolver | |
camel.component.amqp.disable-reply-to | Camel がメッセージの JMSReplyTo ヘッダーを無視するかどうかを指定します。true の場合、Camel は JMSReplyTo ヘッダーで指定された宛先に返信を送り返しません。Camel にルートから消費させたいが、コード内の別のコンポーネントが応答メッセージを処理するため、Camel に自動的に応答メッセージを送り返したくない場合は、このオプションを使用できます。Camel を異なるメッセージブローカー間のプロキシーとして使用し、あるシステムから別のシステムにメッセージをルーティングする場合にも、このオプションを使用できます。 | false | Boolean |
camel.component.amqp.disable-time-to-live | このオプションを使用して、有効期限を強制的に無効にします。たとえば、JMS を介して要求/応答を行う場合、Camel はデフォルトで、送信されるメッセージの存続時間として requestTimeout 値を使用します。問題は、送信側システムと受信側システムのクロックを同期させる必要があるため、同期していることです。これをアーカイブするのは必ずしも簡単ではありません。したがって、disableTimeToLive=true を使用して、送信されたメッセージに有効期限の値を設定しないようにすることができます。その後、メッセージは受信側システムで期限切れになりません。詳細については、以下の生存時間についてのセクションを参照してください。 | false | Boolean |
camel.component.amqp.durable-subscription-name | 永続トピックサブスクリプションを指定するための永続サブスクライバー名。clientId オプションも設定する必要があります。 | String | |
camel.component.amqp.eager-loading-of-properties | メッセージが読み込まれるとすぐに JMS プロパティーとペイロードの熱心な読み込みを有効にします。これは、JMS プロパティーが必要ない場合があるため一般的に非効率的ですが、基盤となる JMS プロバイダーと JMS プロパティーの使用に関する問題を早期に発見できる場合があります。オプション eagerPoisonBody も参照してください。 | false | Boolean |
camel.component.amqp.eager-poison-body | eagerLoadingOfProperties が有効であり、JMS メッセージペイロード (JMS 本文または JMS プロパティー) が有害 (読み取り/マッピングできない) である場合は、代わりにこのテキストをメッセージボディーとして設定し、メッセージを処理できるようにします (有害の原因は、Exchange では例外としてすでに保存されています)。これは、eagerPoisonBody=false を設定することでオフにすることができます。オプション eagerLoadingOfProperties も参照してください。 | $\{exception.message} による JMS メッセージへの影響 | String |
camel.component.amqp.enabled | amqp コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.amqp.error-handler | Message の処理中にキャッチされない例外が出力された場合に呼び出される org.springframework.util.ErrorHandler を指定します。デフォルトでは、errorHandler が設定されていない場合、これらの例外は WARN レベルでログに記録されます。errorHandlerLoggingLevel および errorHandlerLogStackTrace オプションを使用して、ログレベルとスタックトレースをログに記録するかどうかを設定できます。これにより、カスタム errorHandler をコーディングするよりも設定がはるかに簡単になります。オプションは org.springframework.util.ErrorHandler 型です。 | ErrorHandler | |
camel.component.amqp.error-handler-log-stack-trace | デフォルトの errorHandler でスタックトレースをログに記録するかどうかを制御できます。 | true | Boolean |
camel.component.amqp.error-handler-logging-level | キャッチされていない例外をログに記録するためのデフォルトの errorHandler ログレベルを設定できます。 | LoggingLevel | |
camel.component.amqp.exception-listener | 基礎となる JMS 例外の通知を受ける JMS 例外リスナーを指定します。オプションは javax.jms.ExceptionListener 型です。 | ExceptionListener | |
camel.component.amqp.explicit-qos-enabled | メッセージの送信時に、deliveryMode、priority、または timeToLive のサービス品質を使用する必要があるかどうかを設定します。このオプションは、Spring の JmsTemplate に基づいています。deliveryMode、priority、および timeToLive オプションは、現在のエンドポイントに適用されます。これは、メッセージの粒度で動作し、Camel In メッセージヘッダーから排他的に QoS プロパティーを読み取る preserveMessageQos オプションとは対照的です。 | false | Boolean |
camel.component.amqp.expose-listener-session | メッセージを消費するときにリスナーセッションを公開するかどうかを指定します。 | false | Boolean |
camel.component.amqp.force-send-original-message | mapJmsMessage=false を使用すると、ルート中にヘッダーに触れると (get または set)、Camel は新しい JMS メッセージを作成して新しい JMS 宛先に送信します。Camel が受信した元の JMS メッセージを強制的に送信するには、このオプションを true に設定します。 | false | Boolean |
camel.component.amqp.format-date-headers-to-iso8601 | JMS 日付プロパティーを ISO 8601 標準に従ってフォーマットするかどうかを設定します。 | false | Boolean |
camel.component.amqp.header-filter-strategy | カスタムの org.apache.camel.spi.HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルターします。このオプションは org.apache.camel.spi.HeaderFilterStrategy タイプです。 | HeaderFilterStrategy | |
camel.component.amqp.idle-consumer-limit | 常にアイドル状態にできる consumer の数の制限を指定します。 | 1 | Integer |
camel.component.amqp.idle-task-execution-limit | 実行中にメッセージを受信していない、受信タスクのアイドル実行の制限を指定します。この制限に達すると、タスクはシャットダウンし、他の実行中のタスクに受信を任せます (動的スケジューリングの場合。maxConcurrentConsumers 設定を参照してください)。Spring から入手できる追加のドキュメントがあります。 | 1 | Integer |
camel.component.amqp.include-all-jmsx-properties | JMS から Camel Message へのマッピング時に JMSXxxx プロパティーをすべて含めるかどうか。これを true に設定すると、JMSXAppID や JMSXUserID などのプロパティーが含まれます。注記: カスタムの headerFilterStrategy を使用している場合、このオプションは適用されません。 | false | Boolean |
camel.component.amqp.include-amqp-annotations | AMQP から Camel メッセージへのマッピング時に AMQP アノテーションを含めるかどうか。これを true に設定すると、JMS_AMQP_MA_ 接頭辞を含む AMQP メッセージアノテーションがメッセージヘッダーにマップされます。Apache Qpid JMS API の制限により、現在、配信アノテーションは無視されます。 | false | Boolean |
camel.component.amqp.include-sent-jms-message-id | InOnly を使用して JMS 宛先に送信する場合にのみ適用されます (例: ファイアアンドフォーゲット)。このオプションを有効にすると、メッセージが JMS 宛先に送信されたときに JMS クライアントによって使用された実際の JMSMessageID で Camel Exchange が強化されます。 | false | Boolean |
camel.component.amqp.jms-key-format-strategy | JMS 仕様に準拠できるように、JMS キーをエンコードおよびデコードするためのプラグ可能な戦略。Camel は、追加設定なしで、default と passthrough の 2 つの実装を提供します。デフォルトのストラテジーでは、ドットとハイフン(. および -)を安全にマーシャリングします。パススルー戦略では、キーはそのまま残ります。JMS ヘッダーキーに不正な文字が含まれているかどうかは問題にならない JMS ブローカーに使用できます。org.apache.camel.component.jms.JmsKeyFormatStrategy の独自の実装を提供し、# 表記を使用して参照できます。 | JmsKeyFormatStrategy | |
camel.component.amqp.jms-message-type | JMS メッセージの送信に特定の javax.jms.Message 実装を強制的に使用できるようにします。可能な値は、Bytes、Map、Object、Stream、Text です。デフォルトでは、Camel は In body タイプから使用する JMS メッセージタイプを決定します。このオプションで指定できます。 | JmsMessageType | |
camel.component.amqp.lazy-create-transaction-manager | true の場合、オプション transacted=true のときに transactionManager が挿入されていない場合、Camel は JmsTransactionManager を作成します。 | true | Boolean |
camel.component.amqp.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
camel.component.amqp.map-jms-message | Camel が受信した JMS メッセージを適切なペイロードタイプ (javax.jms.TextMessage を文字列など) に自動マップするかどうかを指定します。 | true | Boolean |
camel.component.amqp.max-concurrent-consumers | JMS から消費する場合の同時 consumer の最大数を指定します (JMS を介した要求/応答ではありません)。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。JMS を介して要求/応答を行う場合は、オプション replyToMaxConcurrentConsumers を使用して、応答メッセージリスナーの同時 consumer の数を制御します。 | Integer | |
camel.component.amqp.max-messages-per-task | タスクあたりのメッセージ数。-1 は無制限です。同時 consumer の範囲 (例: min max) を使用する場合、このオプションを使用して値を 100 などに設定し、必要な作業が少ない場合に consumer が縮小する速度を制御できます。 | -1 | Integer |
camel.component.amqp.message-converter | カスタム Spring org.springframework.jms.support.converter.MessageConverter を使用して、javax.jms.Message との間でどのようにマッピングするかを制御できるようにします。オプションは org.springframework.jms.support.converter.MessageConverter 型です。 | MessageConverter | |
camel.component.amqp.message-created-strategy | Camel が JMS メッセージを送信しているときに、Camel が javax.jms.Message オブジェクトの新しいインスタンスを作成するときに呼び出される、指定された MessageCreatedStrategy を使用します。オプションは org.apache.camel.component.jms.MessageCreatedStrategy タイプです。 | MessageCreatedStrategy | |
camel.component.amqp.message-id-enabled | 送信時に、メッセージ ID を追加するかどうかを指定します。これは、JMS ブローカーへの単なるヒントです。JMS プロバイダーがこのヒントを受け入れる場合、これらのメッセージのメッセージ ID を null に設定する必要があります。プロバイダーがヒントを無視する場合、メッセージ ID は通常の一意の値に設定する必要があります。 | true | Boolean |
camel.component.amqp.message-listener-container-factory | メッセージを消費するために使用する org.springframework.jms.listener.AbstractMessageListenerContainer を決定するために使用される MessageListenerContainerFactory のレジストリー ID。これを設定すると、consumerType が自動的に Custom に設定されます。オプションは org.apache.camel.component.jms.MessageListenerContainerFactory タイプです。 | MessageListenerContainerFactory | |
camel.component.amqp.message-timestamp-enabled | メッセージの送信時にデフォルトでタイムスタンプを有効にするかどうかを指定します。これは、JMS ブローカーへの単なるヒントです。JMS プロバイダーがこのヒントを受け入れる場合、これらのメッセージのタイムスタンプをゼロに設定する必要があります。プロバイダーがヒントを無視する場合は、タイムスタンプを通常の値に設定する必要があります。 | true | Boolean |
camel.component.amqp.password | ConnectionFactory で使用するパスワード。また、ConnectionFactory でユーザー名およびパスワードを直接設定することもできます。 | String | |
camel.component.amqp.preserve-message-qos | JMS エンドポイントの QoS 設定ではなく、メッセージで指定された QoS 設定を使用してメッセージを送信する場合は、true に設定します。次の 3 つのヘッダーは、JMSPriority、JMSDeliveryMode、および JMSExpiration と見なされます。それらのすべてまたは一部のみを指定できます。指定されていない場合、Camel は代わりにエンドポイントからの値を使用するようにフォールバックします。したがって、このオプションを使用すると、ヘッダーはエンドポイントからの値をオーバーライドします。対照的に、explicitQosEnabled オプションは、エンドポイントに設定されたオプションのみを使用し、メッセージヘッダーの値は使用しません。 | false | Boolean |
camel.component.amqp.priority | 1 より大きい値は、送信時のメッセージの優先度を指定します (1 が最低の優先度で、9 が最高の優先度です)。このオプションを有効にするには、explicitQosEnabled オプションも有効にする必要があります。 | 4 | Integer |
camel.component.amqp.pub-sub-no-local | 独自の接続によってパブリッシュされたメッセージの配信を禁止するかどうかを指定します。 | false | Boolean |
camel.component.amqp.queue-browse-strategy | キューを参照するときにカスタム QueueBrowseStrategy を使用するには。オプションは org.apache.camel.component.jms.QueueBrowseStrategy タイプです。 | QueueBrowseStrategy | |
camel.component.amqp.receive-timeout | メッセージ受信のタイムアウト (ミリ秒単位)。オプションはロング型です。 | 1000 | Long |
camel.component.amqp.recovery-interval | リカバリーの試行の間隔を指定します。つまり、接続が更新されるタイミング(ミリ秒単位)を指定します。デフォルトは 5000 ミリ秒、つまり 5 秒です。オプションはロング型です。 | 5000 | Long |
camel.component.amqp.reply-to | 明示的な ReplyTo 宛先を提供します (consumer の Message.getJMSReplyTo() の着信値をオーバーライドします)。 | String | |
camel.component.amqp.reply-to-cache-level-name | JMS を介して要求/応答を行うときに、応答 consumer のキャッシュレベルを名前で設定します。このオプションは、固定応答キュー (一時的ではない) を使用する場合にのみ適用されます。Camel はデフォルトで次を使用します: 排他的または replyToSelectorName と共有の CACHE_CONSUMER。そして、replyToSelectorName なしで共有するための CACHE_SESSION。IBM WebSphere などの一部の JMS ブローカーは、replyToCacheLevelName=CACHE_NONE を機能させるために設定する必要がある場合があります。注: 一時キューを使用する場合、CACHE_NONE は許可されず、CACHE_CONSUMER や CACHE_SESSION などのより高い値を使用する必要があります。 | String | |
camel.component.amqp.reply-to-concurrent-consumers | JMS を介して要求/応答を行うときの同時 consumer のデフォルト数を指定します。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。 | 1 | Integer |
camel.component.amqp.reply-to-consumer-type | 応答 consumer の consumer タイプ (要求/応答を行う場合)。Simple、Default、または Custom のいずれかになります。consumer タイプによって、使用する Spring JMS リスナーが決まります。デフォルトは org.springframework.jms.listener.DefaultMessageListenerContainer を使用し、Simple は org.springframework.jms.listener.SimpleMessageListenerContainer を使用します。Custom を指定した場合は、messageListenerContainerFactory オプションで定義された MessageListenerContainerFactory によって、使用する org.springframework.jms.listener.AbstractMessageListenerContainer が決まります。 | ConsumerType | |
camel.component.amqp.reply-to-delivery-persistent | 返信に対してデフォルトで永続的な配信を使用するかどうかを指定します。 | true | Boolean |
camel.component.amqp.reply-to-destination-selector-name | 使用する固定名を使用して JMS セレクターを設定し、共有キューを使用している場合 (つまり、一時的な応答キューを使用していない場合) に、他の応答から自分の応答を除外できるようにします。 | String | |
camel.component.amqp.reply-to-max-concurrent-consumers | JMS を介した要求/応答を使用する場合の同時 consumer の最大数を指定します。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。 | Integer | |
camel.component.amqp.reply-to-on-timeout-max-concurrent-consumers | JMS 経由の要求/応答を使用するときにタイムアウトが発生したときに、ルーティングを継続するための同時 consumer の最大数を指定します。 | 1 | Integer |
camel.component.amqp.reply-to-override | JMS メッセージで明示的な ReplyTo 宛先を提供します。これは、replyTo の設定をオーバーライドします。メッセージをリモート Queue に転送し、ReplyTo 宛先から応答メッセージを受け取る場合に便利です。 | String | |
camel.component.amqp.reply-to-same-destination-allowed | JMS consumer が、consumer が使用しているのと同じ宛先に応答メッセージを送信できるかどうか。これにより、同じメッセージを消費してそれ自体に送り返すことで、無限ループが回避されます。 | false | Boolean |
camel.component.amqp.reply-to-type | JMS を介して要求/応答を行うときに、replyTo キューに使用する戦略の種類を明示的に指定できます。可能な値は、Temporary、Shared、または Exclusive です。デフォルトでは、Camel は一時キューを使用します。ただし、replyTo が設定されている場合は、デフォルトで Shared が使用されます。このオプションを使用すると、共有キューの代わりに専用キューを使用できます。詳細については、Camel JMS のドキュメントを参照してください。特に、クラスター化された環境で実行する場合の影響に関する注意事項と、共有応答キューは代替の一時および排他的キューよりもパフォーマンスが低いという事実を参照してください。 | ReplyToType | |
camel.component.amqp.request-timeout | InOut Exchange パターン使用時の応答待ちタイムアウト (ミリ秒単位)。デフォルトは 20 秒です。ヘッダー CamelJmsRequestTimeout を含めて、このエンドポイントで設定されたタイムアウト値をオーバーライドし、メッセージごとに個別のタイムアウト値を持つことができます。requestTimeoutCheckerInterval オプションも参照してください。オプションはロング型です。 | 20000 | Long |
camel.component.amqp.request-timeout-checker-interval | JMS を介してリクエスト/リプライを行うときに、Camel がタイムアウトになった Exchange をチェックする頻度を設定します。デフォルトでは、Camel は 1 秒に 1 回確認します。ただし、タイムアウトが発生したときに迅速に対応する必要がある場合は、この間隔を短くして、より頻繁にチェックすることができます。タイムアウトは、オプション requestTimeout によって決定されます。オプションはロング型です。 | 1000 | Long |
camel.component.amqp.selector | 使用する JMS セレクターを設定します。 | String | |
camel.component.amqp.stream-message-type-enabled | StreamMessage タイプを有効にするかどうかを設定します。ファイル、InputStream などのストリーミングの種類のメッセージペイロードは、BytesMessage または StreamMessage として送信されます。このオプションは、どの種類が使用されるかを制御します。デフォルトでは、BytesMessage が使用され、メッセージペイロード全体がメモリーに読み込まれます。このオプションを有効にすると、メッセージペイロードがチャンク単位でメモリーに読み込まれ、データがなくなるまで各チャンクが StreamMessage に書き込まれます。 | false | Boolean |
camel.component.amqp.subscription-durable | サブスクリプションを永続化するかどうかを設定します。使用する永続サブスクリプション名は、subscriptionName プロパティーで指定できます。デフォルトは false です。通常、subscriptionName 値と組み合わせて永続的なサブスクリプションを登録するには、これを true に設定します (メッセージリスナークラス名がサブスクリプション名として十分でない場合)。トピック (pub-sub ドメイン) をリッスンする場合にのみ意味があるため、このメソッドは pubSubDomain フラグも切り替えます。 | false | Boolean |
camel.component.amqp.subscription-name | 作成するサブスクリプションの名前を設定します。共有または永続的なサブスクリプションを持つトピック (pub-sub ドメイン) の場合に適用されます。サブスクリプション名は、このクライアントの JMS クライアント ID 内で一意である必要があります。デフォルトは、指定されたメッセージリスナーのクラス名です。注: 共有サブスクリプション (JMS 2.0 が必要) を除き、サブスクリプションごとに 1 つの同時 consumer (このメッセージリスナコンテナーのデフォルト) のみが許可されます。 | String | |
camel.component.amqp.subscription-shared | サブスクリプションを共有するかどうかを設定します。使用する共有サブスクリプション名は、subscriptionName プロパティーで指定できます。デフォルトは false です。通常は subscriptionName 値と組み合わせて共有サブスクリプションを登録するには、これを true に設定します (メッセージリスナークラス名がサブスクリプション名として十分でない場合)。共有サブスクリプションも永続的である可能性があるため、このフラグを subscriptionDurable と組み合わせることもできます (多くの場合は組み合わせます)。トピック (pub-sub ドメイン) をリッスンする場合にのみ意味があるため、このメソッドは pubSubDomain フラグも切り替えます。JMS 2.0 互換のメッセージブローカーが必要です。 | false | Boolean |
camel.component.amqp.synchronous | 同期処理を厳密に使用するかどうかを設定します。 | false | Boolean |
camel.component.amqp.task-executor | メッセージを消費するためのカスタムタスクエグゼキュータを指定できます。オプションは org.springframework.core.task.TaskExecutor 型です。 | TaskExecutor | |
camel.component.amqp.test-connection-on-startup | 起動時に接続をテストするかどうかを指定します。これにより、Camel の起動時に、すべての JMS consumerが JMS ブローカーへの有効な接続を持つことが保証されます。接続を許可できない場合、Camel は起動時に例外を出力します。これにより、接続に失敗した状態で Camel が開始されなくなります。JMS producer もテストされています。 | false | Boolean |
camel.component.amqp.time-to-live | メッセージの送信時に、メッセージの有効期限をミリ秒単位で指定します。 | -1 | Long |
camel.component.amqp.transacted | トランザクションモードを使用するかどうかを指定します。 | false | Boolean |
camel.component.amqp.transacted-in-out | InOut 操作 (リクエストリプライ) がデフォルトでトランザクションモードを使用するかどうかを指定します。このフラグが true に設定されている場合、Spring JmsTemplate は sessionTransacted を true に設定し、acknowledgeMode は InOut 操作に使用される JmsTemplate でトランザクションされます。Spring JMS からの注意: JTA トランザクション内では、createQueue、createTopic メソッドに渡されるパラメーターは考慮されません。Java EE トランザクションコンテキストに応じて、コンテナーはこれらの値を独自に決定します。同様に、この場合、Spring JMS は既存の JMS セッションで動作するため、これらのパラメーターはローカルで管理されるトランザクション内でも考慮されません。このフラグを true に設定すると、管理対象トランザクションの外部で実行されている場合は短いローカル JMS トランザクションが使用され、管理対象トランザクション (XA トランザクション以外) が存在する場合は同期されたローカル JMS トランザクションが使用されます。これには、ローカル JMS トランザクションがメイントランザクション (ネイティブ JDBC トランザクションの場合もある) と一緒に管理され、JMS トランザクションがメイントランザクションの直後にコミットされるという効果があります。 | false | Boolean |
camel.component.amqp.transaction-manager | 使用する Spring トランザクションマネージャー。オプションは org.springframework.transaction.PlatformTransactionManager 型です。 | PlatformTransactionManager | |
camel.component.amqp.transaction-name | 使用するトランザクションの名前。 | String | |
camel.component.amqp.transaction-timeout | トランザクションモードを使用している場合の、トランザクションのタイムアウト値 (秒単位)。 | -1 | Integer |
camel.component.amqp.transfer-exception | 有効で、Request Reply メッセージング (InOut) を使用していて、Exchange が consumer 側で失敗した場合、原因となった例外が javax.jms.ObjectMessage として応答で返されます。クライアントが Camel の場合、返された Exception は再出力されます。これにより、Camel JMS をルーティングのブリッジとして使用できます。たとえば、永続的なキューを使用して堅牢なルーティングを有効にできます。transferExchange も有効にしている場合は、このオプションが優先されることに注意してください。キャッチされた例外はシリアライズ可能である必要があります。consumer 側の元の Exception は、producer に返されるときに org.apache.camel.RuntimeCamelException などの外部例外にラップできます。データは Java オブジェクトのシリアライゼーションを使用しており、受信側がクラスレベルでデータをデシリアライズできる必要があるため、これは注意して使用してください。 | false | Boolean |
camel.component.amqp.transfer-exchange | 本文とヘッダーだけでなく、電信送金で交換を転送できます。次のフィールドが転送されます: In body、Out body、Fault body、In ヘッダー、Out ヘッダー、Fault ヘッダー、交換プロパティー、交換例外。これには、オブジェクトがシリアライズ可能である必要があります。Camel はシリアル化できないオブジェクトを除外し、WARN レベルでログに記録します。プロデューサ側と consumer 側の両方でこのオプションを有効にする必要があるため、Camel はペイロードが Exchange であり、通常のペイロードではないことを認識します。データは Java オブジェクトのシリアライゼーションを使用しており、レシーバーがクラスレベルでデータをデシリアライズできる必要があるため、これは注意して使用してください。これにより、互換性のある Camel バージョンを使用する必要がある producer と consumer の間の強い結合が強制されます。 | false | Boolean |
camel.component.amqp.use-message-id-as-correlation-id | InOut メッセージの JMSCorrelationID として JMSMessageID を常に使用するかどうかを指定します。 | false | Boolean |
camel.component.amqp.username | ConnectionFactory で使用するユーザー名。また、ConnectionFactory でユーザー名およびパスワードを直接設定することもできます。 | String | |
camel.component.amqp.wait-for-provision-correlation-to-be-updated-counter | JMS を介して要求/応答を行う場合、およびオプション useMessageIDAsCorrelationID が有効な場合に、暫定相関 ID が実際の相関 ID に更新されるのを待機する回数。 | 50 | Integer |
camel.component.amqp.wait-for-provision-correlation-to-be-updated-thread-sleeping-time | 暫定相関 ID が更新されるのを待機するたびにスリープする間隔 (ミリ単位)。オプションはロング型です。 | 100 | Long |
第2章 AWS CloudWatch
producer のみサポート対象
AWS2 Cloudwatch コンポーネントを使用すると、メッセージを Amazon CloudWatch メトリクスに送信できます。Amazon API の実装は AWS SDK によって提供されます。
前提条件
有効な Amazon Web Services 開発者アカウントを持っていて、Amazon CloudWatch を使用するためにサインアップしている必要がある。詳細は、Amazon CloudWatch を参照してください。
2.1. URI 形式
aws2-cw://namespace[?options]
メトリクスが存在しない場合は作成されます。URI には、?options=value&option2=value&…
という形式でクエリーオプションを追加できます。
2.2. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
2.2.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
2.2.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
2.3. コンポーネントオプション
AWS CloudWatch コンポーネントは、以下に示す 18 のオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
amazonCwClient (producer) | Autowired: AmazonCloudWatch をクライアントとして使用します。 | CloudWatchClient | |
configuration (producer) | コンポーネントの設定。 | Cw2Configuration | |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
name (producer) | メトリクス名。 | String | |
overrideEndpoint (producer) | エンドポイントをオーバーライドする必要性を設定します。このオプションは uriEndpointOverride オプションと併用する必要があります。 | false | boolean |
proxyHost (producer) | CW クライアントをインスタンス化する際にプロキシーホストを定義します。 | String | |
proxyPort (producer) | CW クライアントをインスタンス化する際にプロキシーポートを定義します。 | Integer | |
proxyProtocol (producer) | CW クライアントをインスタンス化する際にプロキシープロトコルを定義します。 列挙値:
| HTTPS | Protocol |
region (producer) | CW クライアントが機能する必要があるリージョン。このパラメーターを使用する場合、設定には小文字のリージョン名を指定します (例 ap-east-1)。名前 Region.EU_WEST_1.id() を使用する必要があります。 | String | |
timestamp (producer) | メトリクスのタイムスタンプ。 | Instant | |
trustAllCertificates (producer) | エンドポイントをオーバーライドするときにすべての証明書を信頼する場合。 | false | boolean |
unit (producer) | メトリクスユニット。 | String | |
uriEndpointOverride (producer) | オーバーライドする URI エンドポイントを設定します。このオプションは overrideEndpoint オプションと組み合わせて使用する必要があります。 | String | |
useDefaultCredentialsProvider (producer) | デフォルトのクレデンシャルプロバイダー経由でクレデンシャルをロードすること、または静的クレデンシャルが渡されることを S3 クライアントは想定すべきかどうかを設定します。 | false | boolean |
value (producer) | メトリクス値。 | double | |
autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
accessKey (security) | Amazon AWS Access Key。 | String | |
secretKey (security) | Amazon AWS Secret Key。 | String |
2.4. エンドポイントオプション
AWS CloudWatch エンドポイントは、URI 構文を使用して設定されます。
aws2-cw:namespace
パスおよびクエリーパラメーターを使用します。
2.4.1. パスパラメーター(1 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
namespace (producer) | 必須。メトリクス namespace。 | String |
2.4.2. クエリーパラメーター(16 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
amazonCwClient (producer) | Autowired: AmazonCloudWatch をクライアントとして使用します。 | CloudWatchClient | |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
name (producer) | メトリクス名。 | String | |
overrideEndpoint (producer) | エンドポイントをオーバーライドする必要性を設定します。このオプションは uriEndpointOverride オプションと併用する必要があります。 | false | boolean |
proxyHost (producer) | CW クライアントをインスタンス化する際にプロキシーホストを定義します。 | String | |
proxyPort (producer) | CW クライアントをインスタンス化する際にプロキシーポートを定義します。 | Integer | |
proxyProtocol (producer) | CW クライアントをインスタンス化する際にプロキシープロトコルを定義します。 列挙値:
| HTTPS | Protocol |
region (producer) | CW クライアントが機能する必要があるリージョン。このパラメーターを使用する場合、設定には小文字のリージョン名を指定します (例 ap-east-1)。名前 Region.EU_WEST_1.id() を使用する必要があります。 | String | |
timestamp (producer) | メトリクスのタイムスタンプ。 | Instant | |
trustAllCertificates (producer) | エンドポイントをオーバーライドするときにすべての証明書を信頼する場合。 | false | boolean |
unit (producer) | メトリクスユニット。 | String | |
uriEndpointOverride (producer) | オーバーライドする URI エンドポイントを設定します。このオプションは overrideEndpoint オプションと組み合わせて使用する必要があります。 | String | |
useDefaultCredentialsProvider (producer) | デフォルトのクレデンシャルプロバイダー経由でクレデンシャルをロードすること、または静的クレデンシャルが渡されることを S3 クライアントは想定すべきかどうかを設定します。 | false | boolean |
value (producer) | メトリクス値。 | double | |
accessKey (security) | Amazon AWS Access Key。 | String | |
secretKey (security) | Amazon AWS Secret Key。 | String |
必要な CW コンポーネントオプション
Amazon の CloudWatch にアクセスするには、レジストリーに amazonCwClient を指定するか、accessKey と secretKey を指定する必要があります。
2.5. 用途
2.5.1. 静的認証情報とデフォルトの認証情報プロバイダーの比較
useDefaultCredentialsProvider オプションを指定し、これを true に設定することにより、明示的な静的認証情報の使用を回避することが可能です。
- Java システムプロパティー - aws.accessKeyId および aws.secretKey
- 環境変数: AWS_ACCESS_KEY_ID および AWS_SECRET_ACCESS_KEY。
- AWS STS の Web ID トークン。
- 共有認証情報および設定ファイル。
- Amazon ECS コンテナー認証情報 - 環境変数 AWS_CONTAINER_CREDENTIALS_RELATIVE_URI が設定されている場合は、Amazon ECS からロードされます。
- Amazon EC2 インスタンスプロファイルの認証情報。
これに関する詳細情報は、AWS 認証情報のドキュメント を参照してください。
2.5.2. CW producer によって評価されるメッセージヘッダー
ヘッダー | タイプ | 説明 |
---|---|---|
|
| Amazon CW メトリクス名。 |
|
| Amazon CW メトリクス値。 |
|
| Amazon CW メトリクスユニット。 |
|
| Amazon CW メトリクス namespace。 |
|
| Amazon CW メトリクスのタイムスタンプ。 |
|
| Amazon CW メトリクスディメンション名。 |
|
| Amazon CW メトリクスディメンション値。 |
|
| ディメンション名とディメンション値のマップ。 |
2.5.3. 高度な CloudWatchClient 設定
CloudWatchClient
インスタンス設定をさらに制御する必要がある場合は、独自のインスタンスを作成し、URI から参照できます。
from("direct:start") .to("aws2-cw://namespace?amazonCwClient=#client");
#client
は、レジストリー内の CloudWatchClient
を参照します。
2.6. Dependencies
Maven ユーザーは、以下の依存関係を pom.xml に追加する必要があります。
pom.xml
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-aws2-cw</artifactId> <version>${camel-version}</version> </dependency>
{camel-version
} は Camel の実際のバージョンに置き換える必要があります。
2.7. 例
2.7.1. producer の例
from("direct:start") .to("aws2-cw://http://camel.apache.org/aws-cw");
次に、以下のようなものを送信します。
exchange.getIn().setHeader(Cw2Constants.METRIC_NAME, "ExchangesCompleted"); exchange.getIn().setHeader(Cw2Constants.METRIC_VALUE, "2.0"); exchange.getIn().setHeader(Cw2Constants.METRIC_UNIT, "Count");
2.8. Spring Boot Auto-Configuration
Spring Boot で aws2-cw を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-aws2-cw-starter</artifactId> </dependency>
コンポーネントは、以下に記載される 19 のオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.component.aws2-cw.access-key | Amazon AWS Access Key。 | String | |
camel.component.aws2-cw.amazon-cw-client | AmazonCloudWatch をクライアントとして使用します。このオプションは software.amazon.awssdk.services.cloudwatch.CloudWatchClient タイプです。 | CloudWatchClient | |
camel.component.aws2-cw.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.aws2-cw.configuration | コンポーネントの設定。このオプションは org.apache.camel.component.aws2.cw.Cw2Configuration タイプです。 | Cw2Configuration | |
camel.component.aws2-cw.enabled | aws2-cw コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.aws2-cw.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
camel.component.aws2-cw.name | メトリクス名。 | String | |
camel.component.aws2-cw.override-endpoint | エンドポイントをオーバーライドする必要性を設定します。このオプションは uriEndpointOverride オプションと併用する必要があります。 | false | Boolean |
camel.component.aws2-cw.proxy-host | CW クライアントをインスタンス化する際にプロキシーホストを定義します。 | String | |
camel.component.aws2-cw.proxy-port | CW クライアントをインスタンス化する際にプロキシーポートを定義します。 | Integer | |
camel.component.aws2-cw.proxy-protocol | CW クライアントをインスタンス化する際にプロキシープロトコルを定義します。 | Protocol | |
camel.component.aws2-cw.region | CW クライアントが機能する必要があるリージョン。このパラメーターを使用する場合、設定には小文字のリージョン名を指定します (例 ap-east-1)。名前 Region.EU_WEST_1.id() を使用する必要があります。 | String | |
camel.component.aws2-cw.secret-key | Amazon AWS Secret Key。 | String | |
camel.component.aws2-cw.timestamp | メトリクスのタイムスタンプ。オプションは java.time.Instant タイプです。 | Instant | |
camel.component.aws2-cw.trust-all-certificates | エンドポイントをオーバーライドするときにすべての証明書を信頼する場合。 | false | Boolean |
camel.component.aws2-cw.unit | メトリクスユニット。 | String | |
camel.component.aws2-cw.uri-endpoint-override | オーバーライドする URI エンドポイントを設定します。このオプションは overrideEndpoint オプションと組み合わせて使用する必要があります。 | String | |
camel.component.aws2-cw.use-default-credentials-provider | デフォルトのクレデンシャルプロバイダー経由でクレデンシャルをロードすること、または静的クレデンシャルが渡されることを S3 クライアントは想定すべきかどうかを設定します。 | false | Boolean |
camel.component.aws2-cw.value | メトリクス値。 | double |
第3章 AWS DynamoDB
producer のみサポート対象
AWS2 DynamoDB コンポーネントは、サービスとの間でのデータの保存および取得をサポートしています。
前提条件
有効な Amazon Web Services 開発者アカウントを持っていて、Amazon DynamoDB を使用するためにサインアップしている必要がある。詳細は、Amazon DynamoDB を参照してください。
3.1. URI 形式
aws2-ddb://domainName[?options]
URI には、?options=value&option2=value&…
という形式でクエリーオプションを追加できます。
3.2. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
3.2.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
3.2.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
3.3. コンポーネントオプション
AWS DynamoDB コンポーネントは 22 のオプションをサポートします。これは以下に記載されています。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
amazonDDBClient (producer) | Autowired: AmazonDynamoDB をクライアントとして使用します。 | DynamoDbClient | |
configuration (producer) | コンポーネントの設定。 | Ddb2Configuration | |
consistentRead (producer) | データの読み取り時に強力な整合性を適用するべきかどうかを決定します。 | false | boolean |
enabledInitialDescribeTable (producer) | DDB エンドポイントの最初の Describe テーブル操作を行うべきかどうかを設定します。 | true | boolean |
keyAttributeName (producer) | テーブルの作成時の属性名。 | String | |
keyAttributeType (producer) | テーブル作成時の属性タイプ。 | String | |
keyScalarType (producer) | キースケーラータイプ。S (String)、N (Number)、および B (Bytes) にすることができます。 | String | |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
operation (producer) | 実行する操作。 列挙値:
| PutItem | Ddb2Operations |
overrideEndpoint (producer) | エンドポイントをオーバーライドする必要性を設定します。このオプションは uriEndpointOverride オプションと併用する必要があります。 | false | boolean |
proxyHost (producer) | DDB クライアントをインスタンス化する際にプロキシーホストを定義します。 | String | |
proxyPort (producer) | DynamoDB クライアントが機能する必要があるリージョン。このパラメーターを使用する場合、設定には小文字のリージョン名を指定します (例 ap-east-1)。名前 Region.EU_WEST_1.id() を使用する必要があります。 | Integer | |
proxyProtocol (producer) | DDB クライアントをインスタンス化する際にプロキシープロトコルを定義します。 列挙値:
| HTTPS | Protocol |
readCapacity (producer) | テーブルからリソースを読み取るために予約するプロビジョニングされたスループット。 | Long | |
region (producer) | DDB クライアントが機能する必要があるリージョン。 | String | |
trustAllCertificates (producer) | エンドポイントをオーバーライドするときにすべての証明書を信頼する場合。 | false | boolean |
uriEndpointOverride (producer) | オーバーライドする URI エンドポイントを設定します。このオプションは overrideEndpoint オプションと組み合わせて使用する必要があります。 | String | |
useDefaultCredentialsProvider (producer) | デフォルトのクレデンシャルプロバイダー経由でクレデンシャルをロードすること、または静的クレデンシャルが渡されることを S3 クライアントは想定すべきかどうかを設定します。 | false | boolean |
writeCapacity (producer) | テーブルにリソースを書き込むために予約するプロビジョニングされたスループット。 | Long | |
autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
accessKey (security) | Amazon AWS Access Key。 | String | |
secretKey (security) | Amazon AWS Secret Key。 | String |
3.4. エンドポイントオプション
AWS DynamoDB エンドポイントは、URI 構文を使用して設定します。
aws2-ddb:tableName
パスおよびクエリーパラメーターを使用します。
3.4.1. パスパラメーター(1 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
tableName (producer) | 必須。現在作業中のテーブルの名前。 | String |
3.4.2. クエリーパラメーター(20 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
amazonDDBClient (producer) | Autowired: AmazonDynamoDB をクライアントとして使用します。 | DynamoDbClient | |
consistentRead (producer) | データの読み取り時に強力な整合性を適用するべきかどうかを決定します。 | false | boolean |
enabledInitialDescribeTable (producer) | DDB エンドポイントの最初の Describe テーブル操作を行うべきかどうかを設定します。 | true | boolean |
keyAttributeName (producer) | テーブルの作成時の属性名。 | String | |
keyAttributeType (producer) | テーブル作成時の属性タイプ。 | String | |
keyScalarType (producer) | キースケーラータイプ。S (String)、N (Number)、および B (Bytes) にすることができます。 | String | |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
operation (producer) | 実行する操作。 列挙値:
| PutItem | Ddb2Operations |
overrideEndpoint (producer) | エンドポイントをオーバーライドする必要性を設定します。このオプションは uriEndpointOverride オプションと併用する必要があります。 | false | boolean |
proxyHost (producer) | DDB クライアントをインスタンス化する際にプロキシーホストを定義します。 | String | |
proxyPort (producer) | DynamoDB クライアントが機能する必要があるリージョン。このパラメーターを使用する場合、設定には小文字のリージョン名を指定します (例 ap-east-1)。名前 Region.EU_WEST_1.id() を使用する必要があります。 | Integer | |
proxyProtocol (producer) | DDB クライアントをインスタンス化する際にプロキシープロトコルを定義します。 列挙値:
| HTTPS | Protocol |
readCapacity (producer) | テーブルからリソースを読み取るために予約するプロビジョニングされたスループット。 | Long | |
region (producer) | DDB クライアントが機能する必要があるリージョン。 | String | |
trustAllCertificates (producer) | エンドポイントをオーバーライドするときにすべての証明書を信頼する場合。 | false | boolean |
uriEndpointOverride (producer) | オーバーライドする URI エンドポイントを設定します。このオプションは overrideEndpoint オプションと組み合わせて使用する必要があります。 | String | |
useDefaultCredentialsProvider (producer) | デフォルトのクレデンシャルプロバイダー経由でクレデンシャルをロードすること、または静的クレデンシャルが渡されることを S3 クライアントは想定すべきかどうかを設定します。 | false | boolean |
writeCapacity (producer) | テーブルにリソースを書き込むために予約するプロビジョニングされたスループット。 | Long | |
accessKey (security) | Amazon AWS Access Key。 | String | |
secretKey (security) | Amazon AWS Secret Key。 | String |
必要な DDB コンポーネントオプション
Amazon の DynamoDB にアクセスするには、レジストリーに amazonDDBClient を指定するか、accessKey と secretKey を指定する必要があります。
3.5. 用途
3.5.1. 静的認証情報とデフォルトの認証情報プロバイダーの比較
useDefaultCredentialsProvider オプションを指定し、これを true に設定することにより、明示的な静的認証情報の使用を回避することが可能です。
- Java システムプロパティー - aws.accessKeyId および aws.secretKey
- 環境変数: AWS_ACCESS_KEY_ID および AWS_SECRET_ACCESS_KEY。
- AWS STS の Web ID トークン。
- 共有認証情報および設定ファイル。
- Amazon ECS コンテナー認証情報 - 環境変数 AWS_CONTAINER_CREDENTIALS_RELATIVE_URI が設定されている場合は、Amazon ECS からロードされます。
- Amazon EC2 インスタンスプロファイルの認証情報。
これに関する詳細情報は、AWS 認証情報のドキュメント を参照してください。
3.5.2. DDB producer によって評価されるメッセージヘッダー
ヘッダー | タイプ | 説明 |
---|---|---|
|
| プライマリーキーによって取得するテーブル名と対応する項目のマップ。 |
|
| この操作のテーブル名。 |
|
| テーブル内の各項目を一意に識別するプライマリーキー。 |
|
| 変更前または変更後の属性の名前および値のペアを取得する場合は、このパラメーターを使用します (NONE、ALL_OLD、UPDATED_OLD、ALL_NEW、UPDATED_NEW)。 |
|
| 条件変更の属性を指定します。 |
|
| 属性名が指定されていない場合、すべての属性が返されます。 |
|
| true に設定すると、一貫性のある読み取りが発行されます。それ以外の場合は、最終的に一貫性が使用されます。 |
|
| 設定されている場合、クエリー操作のセカンダリーインデックスとして使用されます。 |
|
| アイテムの属性のマップ。アイテムを定義するプライマリーキー値を含める必要があります。 |
|
| true に設定すると、Amazon DynamoDB は、一致する項目とその属性のリストではなく、クエリーパラメーターに一致する項目の総数を返します。 |
|
| このヘッダーはクエリーの選択基準を指定し、2 つの古いヘッダー CamelAwsDdbHashKeyValue および CamelAwsDdbScanRangeKeyCondition をマージします。 |
|
| 以前のクエリーを続行するアイテムのプライマリーキー。 |
|
| 複合プライマリーキーのハッシュコンポーネントの値。 |
|
| 返すアイテムの最大数。 |
|
| クエリーに使用する属性値および比較 Operator のコンテナー。 |
|
| インデックスの順方向または逆方向のトラバーサルを指定します。 |
|
| スキャン結果を評価し、目的の値のみを返します。 |
|
| 更新の新しい値とアクションへの属性名のマップ。 |
3.5.3. BatchGetItems 操作中に設定されたメッセージヘッダー
ヘッダー | タイプ | 説明 |
---|---|---|
|
| テーブル名およびテーブルの各項目属性。 |
|
| テーブルのマップと、現在の応答で処理されなかった対応するキーが含まれます。 |
3.5.4. DeleteItem 操作時に設定されたメッセージヘッダー
ヘッダー | タイプ | 説明 |
---|---|---|
|
| 操作によって返される属性の一覧。 |
3.5.5. DeleteTable 操作時に設定されたメッセージヘッダー
ヘッダー | タイプ | 説明 |
---|---|---|
| ||
| このテーブルの ProvisionedThroughput プロパティーの値 | |
|
| このテーブルの DateTime の作成。 |
|
| このテーブルのアイテム数。 |
|
| このテーブルのプライマリーキーを識別する KeySchema。Camel 2.16.0 以降、このヘッダーのタイプは List<KeySchemaElement> であり、KeySchema ではありません。 |
|
| テーブル名。 |
|
| テーブルサイズ(バイト単位)。 |
|
| テーブルのステータス: CREATING、UPDATING、DELETING、ACTIVE |
3.5.6. DescribeTable 操作中に設定されたメッセージヘッダー
ヘッダー | タイプ | 説明 |
---|---|---|
| \{{ProvisionedThroughputDescription}} | このテーブルの ProvisionedThroughput プロパティーの値 |
|
| このテーブルの DateTime の作成。 |
|
| このテーブルのアイテム数。 |
| \{{KeySchema}} | このテーブルのプライマリーキーを識別する KeySchema。 |
|
| テーブル名。 |
|
| テーブルサイズ(バイト単位)。 |
|
| テーブルのステータス: CREATING、UPDATING、DELETING、ACTIVE |
|
| このテーブルの ReadCapacityUnits プロパティー。 |
|
| このテーブルの WriteCapacityUnits プロパティー。 |
3.5.7. GetItem 操作時に設定されたメッセージヘッダー
ヘッダー | タイプ | 説明 |
---|---|---|
|
| 操作によって返される属性の一覧。 |
3.5.8. PutItem 操作中に設定されたメッセージヘッダー
ヘッダー | タイプ | 説明 |
---|---|---|
|
| 操作によって返される属性の一覧。 |
3.5.9. Query 操作時に設定されたメッセージヘッダー
ヘッダー | タイプ | 説明 |
---|---|---|
|
| 操作によって返される属性の一覧。 |
|
| 前の結果セットを含む、クエリー操作が停止した項目のプライマリーキー。 |
|
| 操作中に消費された、テーブルのプロビジョニングされたスループットのキャパシティーユニットの数。 |
|
| 応答のアイテム数。 |
3.5.10. Scan 操作時に設定されたメッセージヘッダー
ヘッダー | タイプ | 説明 |
---|---|---|
|
| 操作によって返される属性の一覧。 |
|
| 前の結果セットを含む、クエリー操作が停止した項目のプライマリーキー。 |
|
| 操作中に消費された、テーブルのプロビジョニングされたスループットのキャパシティーユニットの数。 |
|
| 応答のアイテム数。 |
|
| フィルターが適用される前の完全なスキャン内のアイテムの数。 |
3.5.11. UpdateItem 操作時に設定されたメッセージヘッダー
ヘッダー | タイプ | 説明 |
---|---|---|
|
| 操作によって返される属性の一覧。 |
3.5.12. 高度な AmazonDynamoDB 設定
AmazonDynamoDB
インスタンス設定をさらに制御する必要がある場合は、独自のインスタンスを作成し、URI から参照できます。
from("direct:start") .to("aws2-ddb://domainName?amazonDDBClient=#client");
#client
は、レジストリー内の DynamoDbClient
を参照します。
3.6. サポートされる producer 操作
- BatchGetItems
- DeleteItem
- DeleteTable
- DescribeTable
- GetItem
- PutItem
- クエリー
- スキャン
- UpdateItem
- UpdateTable
3.7. 例
3.7.1. producer の例
- PutItem: このオペレーションは DynamoDB にエントリーを作成します
from("direct:start") .setHeader(Ddb2Constants.OPERATION, Ddb2Operations.PutItem) .setHeader(Ddb2Constants.CONSISTENT_READ, "true") .setHeader(Ddb2Constants.RETURN_VALUES, "ALL_OLD") .setHeader(Ddb2Constants.ITEM, attributeMap) .setHeader(Ddb2Constants.ATTRIBUTE_NAMES, attributeMap.keySet()); .to("aws2-ddb://" + tableName + "?keyAttributeName=" + attributeName + "&keyAttributeType=" + KeyType.HASH + "&keyScalarType=" + ScalarAttributeType.S + "&readCapacity=1&writeCapacity=1");
Maven ユーザーは、以下の依存関係を pom.xml に追加する必要があります。
pom.xml
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-aws2-ddb</artifactId> <version>${camel-version}</version> </dependency>
3.18.3
は Camel の実際のバージョンに置き換える必要があります。
3.8. Spring Boot 自動設定
Spring Boot で aws2-ddb を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-aws2-ddb-starter</artifactId> </dependency>
コンポーネントは、以下に記載される 40 のオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.component.aws2-ddb.access-key | Amazon AWS Access Key。 | String | |
camel.component.aws2-ddb.amazon-d-d-b-client | AmazonDynamoDB をクライアントとして使用します。このオプションは software.amazon.awssdk.services.dynamodb.DynamoDbClient タイプです。 | DynamoDbClient | |
camel.component.aws2-ddb.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.aws2-ddb.configuration | コンポーネントの設定。このオプションは apache.camel.component.aws2.ddb.Ddb2Configuration タイプです。 | Ddb2Configuration | |
camel.component.aws2-ddb.consistent-read | データの読み取り時に強力な整合性を適用するべきかどうかを決定します。 | false | Boolean |
camel.component.aws2-ddb.enabled | aws2-cw コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.aws2-ddb.enabled-initial-describe-table | DDB エンドポイントの最初の Describe テーブル操作を行うべきかどうかを設定します。 | true | Boolean |
camel.component.aws2-ddb.key-attribute-name | テーブルの作成時の属性名。 | String | |
camel.component.aws2-ddb.key-attribute-type | テーブル作成時の属性タイプ。 | String | |
camel.component.aws2-ddb.key-scalar-type | キースケーラータイプ。S (String)、N (Number)、および B (Bytes) にすることができます。 | String | |
camel.component.aws2-ddb.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
camel.component.aws2-ddb.operation | 実行する操作。 | Ddb2Operations | |
camel.component.aws2-ddb.override-endpoint | エンドポイントをオーバーライドする必要性を設定します。このオプションは uriEndpointOverride オプションと併用する必要があります。 | false | Boolean |
camel.component.aws2-ddb.proxy-host | DDB クライアントをインスタンス化する際にプロキシーホストを定義します。 | String | |
camel.component.aws2-ddb.proxy-port | DynamoDB クライアントが機能する必要があるリージョン。このパラメーターを使用する場合、設定には小文字のリージョン名を指定します (例 ap-east-1)。名前 Region.EU_WEST_1.id() を使用する必要があります。 | Integer | |
camel.component.aws2-ddb.proxy-protocol | DDB クライアントをインスタンス化する際にプロキシープロトコルを定義します。 | Protocol | |
camel.component.aws2-ddb.read-capacity | テーブルからリソースを読み取るために予約するプロビジョニングされたスループット。 | Long | |
camel.component.aws2-ddb.region | DDB クライアントが機能する必要があるリージョン。 | String | |
camel.component.aws2-ddb.secret-key | Amazon AWS Secret Key。 | String | |
camel.component.aws2-ddb.trust-all-certificates | エンドポイントをオーバーライドするときにすべての証明書を信頼する場合。 | false | Boolean |
camel.component.aws2-ddb.uri-endpoint-override | オーバーライドする URI エンドポイントを設定します。このオプションは overrideEndpoint オプションと組み合わせて使用する必要があります。 | String | |
camel.component.aws2-ddb.use-default-credentials-provider | デフォルトのクレデンシャルプロバイダー経由でクレデンシャルをロードすること、または静的クレデンシャルが渡されることを S3 クライアントは想定すべきかどうかを設定します。 | false | Boolean |
camel.component.aws2-ddb.write-capacity | テーブルにリソースを書き込むために予約するプロビジョニングされたスループット。 | Long | |
camel.component.aws2-ddbstream.access-key | Amazon AWS Access Key。 | String | |
camel.component.aws2-ddbstream.amazon-dynamo-db-streams-client | このエンドポイントに対するすべての要求に使用する Amazon DynamoDB クライアント。このオプションは software.amazon.awssdk.services.dynamodb.streams.DynamoDbStreamsClient タイプです。 | DynamoDbStreamsClient | |
camel.component.aws2-ddbstream.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.aws2-ddbstream.bridge-error-handler | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | Boolean |
camel.component.aws2-ddbstream.configuration | コンポーネントの設定。このオプションは org.apache.camel.component.aws2.ddbstream.Ddb2StreamConfiguration タイプです。 | Ddb2StreamConfiguration | |
camel.component.aws2-ddbstream.enabled | aws2-ddbstream コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.aws2-ddbstream.max-results-per-request | 各ポーリングでフェッチされる最大レコード数。 | Integer | |
camel.component.aws2-ddbstream.override-endpoint | エンドポイントをオーバーライドする必要性を設定します。このオプションは uriEndpointOverride オプションと併用する必要があります。 | false | Boolean |
camel.component.aws2-ddbstream.proxy-host | DDBStreams クライアントをインスタンス化する際にプロキシーホストを定義します。 | String | |
camel.component.aws2-ddbstream.proxy-port | DDBStreams クライアントをインスタンス化する際にプロキシーホストを定義します。 | Integer | |
camel.component.aws2-ddbstream.proxy-protocol | DDBStreams クライアントをインスタンス化する際にプロキシーホストを定義します。 | Protocol | |
camel.component.aws2-ddbstream.region | DDBStreams クライアントが機能する必要があるリージョン。 | String | |
camel.component.aws2-ddbstream.secret-key | Amazon AWS Secret Key。 | String | |
camel.component.aws2-ddbstream.stream-iterator-type | DynamoDB ストリーム内でレコードの取得を開始する場所を定義します。FROM_START を使用すると、ストリームがリアルタイムに追いつく前に大幅な遅延が発生する可能性があることに注意してください。 | Ddb2StreamConfiguration$StreamIteratorType | |
camel.component.aws2-ddbstream.trust-all-certificates | エンドポイントをオーバーライドするときにすべての証明書を信頼する場合。 | false | Boolean |
camel.component.aws2-ddbstream.uri-endpoint-override | オーバーライドする URI エンドポイントを設定します。このオプションは overrideEndpoint オプションと組み合わせて使用する必要があります。 | String | |
camel.component.aws2-ddbstream.use-default-credentials-provider | デフォルトのクレデンシャルプロバイダー経由でクレデンシャルをロードすること、または静的クレデンシャルが渡されることを DynamoDB Streams クライアントは想定すべきかどうかを設定します。 | false | Boolean |
第4章 AWS キネシス
producer と consumer の両方がサポート対象
AWS2 Kinesis コンポーネントは、Amazon Kinesis (バッチはサポートされていません) サービスとのメッセージの送受信をサポートしています。
前提条件
有効な Amazon Web Services 開発者アカウントを持っていて、Amazon Kinesis を使用するためにサインアップしている必要がある。詳細については、AWS Kinesis を参照してください。
4.1. URI 形式
aws2-kinesis://stream-name[?options]
ストリームは、使用する前に作成する必要があります。URI には、?options=value&option2=value&…
という形式でクエリーオプションを追加できます。
4.2. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
4.2.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
4.2.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
4.3. コンポーネントオプション
AWS DynamoDB コンポーネントは 22 のオプションをサポートします。これは以下に記載されています。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
amazonKinesisClient (共通) | Autowired このエンドポイントに対するすべての要求に使用する Amazon Kinesis クライアント。 | KinesisClient | |
cborEnabled (共通) | このオプションは、実行中に CBOR_ENABLED プロパティーを設定します。 | true | boolean |
configuration (共通) | コンポーネントの設定。 | Kinesis2Configuration | |
overrideEndpoint (共通) | エンドポイントをオーバーライドする必要性を設定します。このオプションは uriEndpointOverride オプションと併用する必要があります。 | false | boolean |
proxyHost (共通) | Kinesis クライアントをインスタンス化する際にプロキシーホストを定義します。 | String | |
proxyPort (共通) | Kinesis クライアントをインスタンス化する際にプロキシーポートを定義します。 | Integer | |
proxyProtocol (共通) | Kinesis クライアントをインスタンス化する際にプロキシープロトコルを定義します。 列挙値:
| HTTPS | Protocol |
region (共通) | Kinesis Firehose クライアントが機能する必要があるリージョン。このパラメーターを使用する場合、設定には小文字のリージョン名を指定します (例 ap-east-1)。名前 Region.EU_WEST_1.id() を使用する必要があります。 | String | |
trustAllCertificates (共通) | エンドポイントをオーバーライドするときにすべての証明書を信頼する場合。 | false | boolean |
uriEndpointOverride (共通) | オーバーライドする URI エンドポイントを設定します。このオプションは overrideEndpoint オプションと組み合わせて使用する必要があります。 | String | |
useDefaultCredentialsProvider (共通) | デフォルトのクレデンシャルプロバイダー経由でクレデンシャルをロードすること、または静的クレデンシャルが渡されることを Kinesis クライアントは想定すべきかどうかを設定します。 | false | boolean |
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
iteratorType (consumer) | Kinesis ストリーム内でレコードの取得を開始する場所を定義します。 列挙値:
| TRIM_HORIZON | ShardIteratorType |
maxResultsPerRequest (consumer) | 各ポーリングでフェッチされる最大レコード数。 | 1 | int |
resumeStrategy (consumer) | AWS Kinesis の再開戦略を定義します。デフォルトの戦略は、指定されている場合は、sequenceNumber を読み取ります。 | KinesisUserConfigurationResumeStrategy | KinesisResumeStrategy |
sequenceNumber (consumer) | ポーリングを開始するシーケンス番号。iteratorType が AFTER_SEQUENCE_NUMBER または AT_SEQUENCE_NUMBER に設定されている場合に必要です。 | String | |
shardClosed (consumer) | シャード (shard) が閉じられた場合の動作を定義します。使用できる値は ignore、silent、および fail です。ignore の場合、メッセージはログに記録され、consumer は最初から再起動します。silent の場合は、ログには記録されず、consumer は最初から起動します。fail の場合は、ReachedClosedStateException が発生します。 列挙値:
| ignore | Kinesis2ShardClosedStrategyEnum |
shardId (consumer) | Kinesis ストリームでどの shardId からレコードを取得するかを定義します。 | String | |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
accessKey (security) | Amazon AWS Access Key。 | String | |
secretKey (security) | Amazon AWS Secret Key。 | String |
4.4. エンドポイントオプション
AWS Kinesis エンドポイントは、URI 構文を使用して設定します。
aws2-kinesis:streamName
パスおよびクエリーパラメーターを使用します。
4.4.1. パスパラメーター(1 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
streamName (共通) | 必須 ストリームの名前。 | String |
4.4.2. クエリーパラメーター (38 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
amazonKinesisClient (共通) | Autowired このエンドポイントに対するすべての要求に使用する Amazon Kinesis クライアント。 | KinesisClient | |
cborEnabled (共通) | このオプションは、実行中に CBOR_ENABLED プロパティーを設定します。 | true | boolean |
overrideEndpoint (共通) | エンドポイントをオーバーライドする必要性を設定します。このオプションは uriEndpointOverride オプションと併用する必要があります。 | false | boolean |
proxyHost (共通) | Kinesis クライアントをインスタンス化する際にプロキシーホストを定義します。 | String | |
proxyPort (共通) | Kinesis クライアントをインスタンス化する際にプロキシーポートを定義します。 | Integer | |
proxyProtocol (共通) | Kinesis クライアントをインスタンス化する際にプロキシープロトコルを定義します。 列挙値:
| HTTPS | Protocol |
region (共通) | Kinesis Firehose クライアントが機能する必要があるリージョン。このパラメーターを使用する場合、設定には小文字のリージョン名を指定します (例 ap-east-1)。名前 Region.EU_WEST_1.id() を使用する必要があります。 | String | |
trustAllCertificates (共通) | エンドポイントをオーバーライドするときにすべての証明書を信頼する場合。 | false | boolean |
uriEndpointOverride (共通) | オーバーライドする URI エンドポイントを設定します。このオプションは overrideEndpoint オプションと組み合わせて使用する必要があります。 | String | |
useDefaultCredentialsProvider (共通) | デフォルトのクレデンシャルプロバイダー経由でクレデンシャルをロードすること、または静的クレデンシャルが渡されることを Kinesis クライアントは想定すべきかどうかを設定します。 | false | boolean |
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
iteratorType (consumer) | Kinesis ストリーム内でレコードの取得を開始する場所を定義します。 列挙値:
| TRIM_HORIZON | ShardIteratorType |
maxResultsPerRequest (consumer) | 各ポーリングでフェッチされる最大レコード数。 | 1 | int |
resumeStrategy (consumer) | AWS Kinesis の再開戦略を定義します。デフォルトの戦略は、指定されている場合は、sequenceNumber を読み取ります。 | KinesisUserConfigurationResumeStrategy | KinesisResumeStrategy |
sendEmptyMessageWhenIdle (consumer) | ポーリング consumer がファイルをポーリングしなかった場合、このオプションを有効にして、代わりに空のメッセージ (ボディーなし) を送信できます。 | false | boolean |
sequenceNumber (consumer) | ポーリングを開始するシーケンス番号。iteratorType が AFTER_SEQUENCE_NUMBER または AT_SEQUENCE_NUMBER に設定されている場合に必要です。 | String | |
shardClosed (consumer) | シャード (shard) が閉じられた場合の動作を定義します。使用できる値は ignore、silent、および fail です。ignore の場合、メッセージはログに記録され、consumer は最初から再起動します。silent の場合は、ログには記録されず、consumer は最初から起動します。fail の場合は、ReachedClosedStateException が発生します。 列挙値:
| ignore | Kinesis2ShardClosedStrategyEnum |
shardId (consumer) | Kinesis ストリームでどの shardId からレコードを取得するかを定義します。 | String | |
exceptionHandler (consumer (上級)) | consumer によるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、consumer は例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
exchangePattern (consumer (上級)) | consumer がエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
pollStrategy (consumer (上級)) | プラグ可能な org.apache.camel.PollingConsumerPollingStrategy を使用すると、エクスチェンジが作成され、Camel でルーティングされる前に、通常はポーリング操作中に発生するエラー処理を制御するカスタム実装が提供できます。 | PollingConsumerPollStrategy | |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
backoffErrorThreshold (scheduler) | backoffMultipler が開始する前に発生する必要がある後続のエラーポーリング (エラーによって失敗した) の数。 | int | |
backoffIdleThreshold (scheduler) | backoffMultipler が開始する前に発生する必要がある後続のアイドルポーリングの数。 | int | |
backoffMultiplier (scheduler) | 後続のアイドル状態/エラーが連続して発生した場合に、スケジュールされたポーリング consumer のバックオフを許可します。乗数は、実際に次の試行が行われる前にスキップされるポーリングの数です。このオプションが使用されている場合は、backoffIdleThreshold や backoffErrorThreshold も設定する必要があります。 | int | |
delay (scheduler) | 次のポーリングまでの時間 (ミリ秒単位)。 | 500 | long |
greedy (scheduler) | greedy が有効で、以前の実行が 1 つ以上のメッセージをポーリングした場合、ScheduledPollConsumer は即座に再度実行されます。 | false | boolean |
initialDelay (scheduler) | 最初のポーリングが開始されるまでの時間 (ミリ秒単位)。 | 1000 | long |
repeatCount (スケジューラー) | 実行の最大数を指定します。そのため、これを 1 に設定するとスケジューラーは 1 度だけ実行されます。これを 5 に設定した場合、5 回だけ実行されます。0 または負の値を設定すると、無制限に実行されます。 | 0 | long |
runLoggingLevel (scheduler) | consumer はポーリング時に開始/完了のログ行を記録します。このオプションを使用すると、ログレベルを設定できます。 列挙値:
| TRACE | LoggingLevel |
scheduledExecutorService (scheduler) | consumer に使用するカスタム/共有スレッドプールを設定できます。デフォルトでは、各 consumer に独自の単一スレッドのスレッドプールがあります。 | ScheduledExecutorService | |
scheduler (スケジューラー) | camel-spring または camel-quartz コンポーネントから cron スケジューラーを使用します。スケジューラーにビルドされた値 spring または quartz を使用。 | none | オブジェクト |
schedulerProperties (スケジューラー) | カスタムスケジューラーまたは Quartz や Spring ベースのスケジューラーを使用する場合に、追加のプロパティーを設定します。 | マップ | |
startScheduler (scheduler) | スケジューラーを自動起動するかどうか。 | true | boolean |
timeUnit (scheduler) | initialDelay および delay オプションの時間単位。 列挙値:
| MILLISECONDS | TimeUnit |
useFixedDelay (scheduler) | 固定遅延または固定レートを使用するかどうかを制御します。詳細は、JDK の ScheduledExecutorService を参照してください。 | true | boolean |
accessKey (security) | Amazon AWS Access Key。 | String | |
secretKey (security) | Amazon AWS Secret Key。 | String |
必要な Kinesis コンポーネントオプション
プロキシーと関連するクレデンシャル情報が設定された状態で、レジストリーに KinesisClient を提供する必要があります。
4.5. バッチ consumer
このコンポーネントは、Batch Consumer を実装します。
これにより、たとえば、このバッチに存在するメッセージの数を知ることができ、たとえば、Aggregator にこの数のメッセージを集約させることができます。
4.6. 用途
4.6.1. 静的認証情報とデフォルトの認証情報プロバイダーの比較
useDefaultCredentialsProvider オプションを指定し、これを true に設定することにより、明示的な静的認証情報の使用を回避することが可能です。
- Java システムプロパティー - aws.accessKeyId および aws.secretKey
- 環境変数: AWS_ACCESS_KEY_ID および AWS_SECRET_ACCESS_KEY。
- AWS STS の Web ID トークン。
- 共有認証情報および設定ファイル。
- Amazon ECS コンテナー認証情報 - 環境変数 AWS_CONTAINER_CREDENTIALS_RELATIVE_URI が設定されている場合は、Amazon ECS からロードされます。
- Amazon EC2 インスタンスプロファイルの認証情報。
これに関する詳細情報は、AWS 認証情報のドキュメント を参照してください。
4.6.2. Kinesis consumer によって設定されるメッセージヘッダー
ヘッダー | タイプ | 説明 |
---|---|---|
|
| このレコードのシーケンス番号。これは、サイズが API によって定義されていないため、文字列として表されます。数値型として使用する場合は、次を使用します |
|
| AWS がレコードの到着時間として割り当てた時間。 |
|
| データレコードが割り当てられているストリーム内のシャードを識別します。 |
4.6.3. AmazonKinesis の設定
次に、amazonKinesisClient
URI オプションで KinesisClient を参照する必要があります。
from("aws2-kinesis://mykinesisstream?amazonKinesisClient=#kinesisClient") .to("log:out?showAll=true");
4.6.4. AWS 認証情報の指定
新しい ClientConfiguration インスタンスを作成するときのデフォルトである DefaultAWSCredentialsProviderChain を使用して認証情報を取得することをお勧めしますが、createClient (…) を呼び出すときに別の AWSCredentialsProvider を指定できます。
4.6.5. Kinesis producer が Kinesis に書き込むために使用するメッセージヘッダー。producer は、メッセージ本文が byte[]
であることを期待しています。
ヘッダー | タイプ | 説明 |
---|---|---|
|
| このレコードを保存するために Kinesis に渡す PartitionKey。 |
|
| このレコードのシーケンス番号を示すオプションのパラメーター。 |
4.6.6. レコードの保存が成功したときに Kinesis producer によって設定されるメッセージヘッダー
ヘッダー | タイプ | 説明 |
---|---|---|
|
| Response Syntax で定義されているレコードのシーケンス番号 |
|
| レコードが保存された場所のシャード ID |
4.7. 依存関係
Maven ユーザーは、以下の依存関係を pom.xml に追加する必要があります。
pom.xml
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-aws2-kinesis</artifactId> <version>${camel-version}</version> </dependency>
3.18.3
は Camel の実際のバージョンに置き換える必要があります。
4.8. Spring Boot 自動設定
Spring Boot で aws2-kinesis を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-aws2-kinesis-starter</artifactId> </dependency>
コンポーネントは、以下に記載される 40 のオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.component.aws2-kinesis-firehose.access-key | Amazon AWS Access Key。 | String | |
camel.component.aws2-kinesis-firehose.amazon-kinesis-firehose-client | このエンドポイントのすべてのリクエストに使用する Amazon Kinesis Firehose クライアント。オプションは、software.amazon.awssdk.services.firehose.FirehoseClient タイプです。 | FirehoseClient | |
camel.component.aws2-kinesis-firehose.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.aws2-kinesis-firehose.cbor-enabled | このオプションは、実行中に CBOR_ENABLED プロパティーを設定します。 | true | Boolean |
camel.component.aws2-kinesis-firehose.configuration | コンポーネントの設定。オプションは org.apache.camel.component.aws2.firehose.KinesisFirehose2Configuration タイプです。 | KinesisFirehose2Configuration | |
camel.component.aws2-kinesis-firehose.enabled | aws2-kinesis-firehose コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.aws2-kinesis-firehose.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
camel.component.aws2-kinesis-firehose.operation | ユーザーがレコードだけを送信したくない場合に行う操作。 | KinesisFirehose2Operations | |
camel.component.aws2-kinesis-firehose.override-endpoint | エンドポイントをオーバーライドする必要性を設定します。このオプションは uriEndpointOverride オプションと併用する必要があります。 | false | Boolean |
camel.component.aws2-kinesis-firehose.proxy-host | Kinesis Firehose クライアントをインスタンス化するときにプロキシーホストを定義するには。 | String | |
camel.component.aws2-kinesis-firehose.proxy-port | Kinesis Firehose クライアントをインスタンス化するときにプロキシーポートを定義するには。 | Integer | |
camel.component.aws2-kinesis-firehose.proxy-protocol | Kinesis Firehose クライアントをインスタンス化するときにプロキシープロトコルを定義するには。 | Protocol | |
camel.component.aws2-kinesis-firehose.region | Kinesis Firehose クライアントが機能する必要があるリージョン。このパラメーターを使用する場合、設定には小文字のリージョン名を指定します (例 ap-east-1)。名前 Region.EU_WEST_1.id() を使用する必要があります。 | String | |
camel.component.aws2-kinesis-firehose.secret-key | Amazon AWS Secret Key。 | String | |
camel.component.aws2-kinesis-firehose.trust-all-certificates | エンドポイントをオーバーライドするときにすべての証明書を信頼する場合。 | false | Boolean |
camel.component.aws2-kinesis-firehose.uri-endpoint-override | オーバーライドする URI エンドポイントを設定します。このオプションは overrideEndpoint オプションと組み合わせて使用する必要があります。 | String | |
camel.component.aws2-kinesis-firehose.use-default-credentials-provider | デフォルトのクレデンシャルプロバイダー経由でクレデンシャルをロードすること、または静的クレデンシャルが渡されることを Kinesis Firehose クライアントは想定すべきかどうかを設定します。 | false | Boolean |
camel.component.aws2-kinesis.access-key | Amazon AWS Access Key。 | String | |
camel.component.aws2-kinesis.amazon-kinesis-client | このエンドポイントに対するすべての要求に使用する Amazon Kinesis クライアント。オプションは、software.amazon.awssdk.services.kinesis.KinesisClient タイプです。 | KinesisClient | |
camel.component.aws2-kinesis.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.aws2-kinesis.bridge-error-handler | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | Boolean |
camel.component.aws2-kinesis.cbor-enabled | このオプションは、実行中に CBOR_ENABLED プロパティーを設定します。 | true | Boolean |
camel.component.aws2-kinesis.configuration | コンポーネントの設定。オプションは org.apache.camel.component.aws2.kinesis.Kinesis2Configuration タイプです。 | Kinesis2Configuration | |
camel.component.aws2-kinesis.enabled | aws2-kinesis コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.aws2-kinesis.iterator-type | Kinesis ストリーム内でレコードの取得を開始する場所を定義します。 | ShardIteratorType | |
camel.component.aws2-kinesis.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
camel.component.aws2-kinesis.max-results-per-request | 各ポーリングでフェッチされる最大レコード数。 | 1 | Integer |
camel.component.aws2-kinesis.override-endpoint | エンドポイントをオーバーライドする必要性を設定します。このオプションは uriEndpointOverride オプションと併用する必要があります。 | false | Boolean |
camel.component.aws2-kinesis.proxy-host | Kinesis クライアントをインスタンス化する際にプロキシーホストを定義します。 | String | |
camel.component.aws2-kinesis.proxy-port | Kinesis クライアントをインスタンス化する際にプロキシーポートを定義します。 | Integer | |
camel.component.aws2-kinesis.proxy-protocol | Kinesis クライアントをインスタンス化する際にプロキシープロトコルを定義します。 | Protocol | |
camel.component.aws2-kinesis.region | Kinesis Firehose クライアントが機能する必要があるリージョン。このパラメーターを使用する場合、設定には小文字のリージョン名を指定します (例 ap-east-1)。名前 Region.EU_WEST_1.id() を使用する必要があります。 | String | |
camel.component.aws2-kinesis.resume-strategy | AWS Kinesis の再開戦略を定義します。デフォルトの戦略は、指定されている場合は、sequenceNumber を読み取ります。オプションは org.apache.camel.component.aws2.kinesis.consumer.KinesisResumeStrategy タイプです。 | KinesisResumeStrategy | |
camel.component.aws2-kinesis.secret-key | Amazon AWS Secret Key。 | String | |
camel.component.aws2-kinesis.sequence-number | ポーリングを開始するシーケンス番号。iteratorType が AFTER_SEQUENCE_NUMBER または AT_SEQUENCE_NUMBER に設定されている場合に必要です。 | String | |
camel.component.aws2-kinesis.shard-closed | シャード (shard) が閉じられた場合の動作を定義します。使用できる値は ignore、silent、および fail です。ignore の場合、メッセージはログに記録され、consumer は最初から再起動します。silent の場合は、ログには記録されず、consumer は最初から起動します。fail の場合は、ReachedClosedStateException が発生します。 | Kinesis2ShardClosedStrategyEnum | |
camel.component.aws2-kinesis.shard-id | Kinesis ストリームでどの shardId からレコードを取得するかを定義します。 | String | |
camel.component.aws2-kinesis.trust-all-certificates | エンドポイントをオーバーライドするときにすべての証明書を信頼する場合。 | false | Boolean |
camel.component.aws2-kinesis.uri-endpoint-override | オーバーライドする URI エンドポイントを設定します。このオプションは overrideEndpoint オプションと組み合わせて使用する必要があります。 | String | |
camel.component.aws2-kinesis.use-default-credentials-provider | デフォルトのクレデンシャルプロバイダー経由でクレデンシャルをロードすること、または静的クレデンシャルが渡されることを Kinesis クライアントは想定すべきかどうかを設定します。 | false | Boolean |
第5章 AWS 2 Lambda
producer のみサポート対象
AWS2 Lambda コンポーネントは、AWS Lambda 関数の作成、取得、一覧表示、削除、および呼び出しをサポートしています。
前提条件
有効な Amazon Web Services 開発者アカウントを持っていて、Amazon Lambda を使用するためにサインアップしている必要がある。詳細については、AWS Lambda を参照してください。
Lambda 関数を作成するときは、少なくとも AWSLambdaBasicExecuteRole ポリシーがアタッチされた IAM ロールを指定する必要があります。
5.1. URI 形式
aws2-lambda://functionName[?options]
URI には、options=value&option2=value&…
という形式でクエリーオプションを追加できます。
5.2. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
5.2.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
5.2.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
5.3. コンポーネントオプション
AWS Lambda コンポーネントは、以下に示す 16 のオプションをサポートしています。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
configuration (producer) | コンポーネントの設定。 | Lambda2 設定 | |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
operation (producer) | 実行する操作。listFunctions、getFunction、createFunction、deleteFunction、または invokeFunction のいずれかです。 列挙値:
| invokeFunction | Lambda2Operations |
overrideEndpoint (producer) | エンドポイントをオーバーライドする必要性を設定します。このオプションは uriEndpointOverride オプションと併用する必要があります。 | false | boolean |
pojoRequest (producer) | POJO リクエストをボディーとして使用するかどうか。 | false | boolean |
region (producer) | Lambda クライアントが動作する必要があるリージョン。このパラメーターを使用する場合、設定には小文字のリージョン名を指定します (例 ap-east-1)。名前 Region.EU_WEST_1.id() を使用する必要があります。 | String | |
trustAllCertificates (producer) | エンドポイントをオーバーライドするときにすべての証明書を信頼する場合。 | false | boolean |
uriEndpointOverride (producer) | オーバーライドする URI エンドポイントを設定します。このオプションは overrideEndpoint オプションと組み合わせて使用する必要があります。 | String | |
useDefaultCredentialsProvider (producer) | Lambda クライアントがデフォルトの認証情報プロバイダーを介して認証情報をロードすることを期待するか、静的認証情報が渡されることを期待するかを設定します。 | false | boolean |
autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
awsLambdaClient (上級) | Autowired 既存の設定済みの AwsLambdaClient をクライアントとして使用します。 | LambdaClient | |
proxyHost (プロキシー) | Lambda クライアントをインスタンス化するときにプロキシーホストを定義します。 | String | |
proxyPort (プロキシー) | Lambda クライアントをインスタンス化するときにプロキシーポートを定義します。 | Integer | |
proxyProtocol (プロキシー) | Lambda クライアントをインスタンス化するときにプロキシープロトコルを定義します。 列挙値:
| HTTPS | Protocol |
accessKey (security) | Amazon AWS Access Key。 | String | |
secretKey (security) | Amazon AWS Secret Key。 | String |
5.4. エンドポイントオプション
AWS Lambda エンドポイントは、URI 構文を使用して設定されます。
aws2-lambda:function
パスおよびクエリーパラメーターを使用します。
5.4.1. パスパラメーター(1 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
function (producer) | 必須 Lambda 関数の名前。 | String |
5.4.2. クエリーパラメーター (14 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
operation (producer) | 実行する操作。listFunctions、getFunction、createFunction、deleteFunction、または invokeFunction のいずれかです。 列挙値:
| invokeFunction | Lambda2Operations |
overrideEndpoint (producer) | エンドポイントをオーバーライドする必要性を設定します。このオプションは uriEndpointOverride オプションと併用する必要があります。 | false | boolean |
pojoRequest (producer) | POJO リクエストをボディーとして使用するかどうか。 | false | boolean |
region (producer) | Lambda クライアントが動作する必要があるリージョン。このパラメーターを使用する場合、設定には小文字のリージョン名を指定します (例 ap-east-1)。名前 Region.EU_WEST_1.id() を使用する必要があります。 | String | |
trustAllCertificates (producer) | エンドポイントをオーバーライドするときにすべての証明書を信頼する場合。 | false | boolean |
uriEndpointOverride (producer) | オーバーライドする URI エンドポイントを設定します。このオプションは overrideEndpoint オプションと組み合わせて使用する必要があります。 | String | |
useDefaultCredentialsProvider (producer) | Lambda クライアントがデフォルトの認証情報プロバイダーを介して認証情報をロードすることを期待するか、静的認証情報が渡されることを期待するかを設定します。 | false | boolean |
awsLambdaClient (上級) | Autowired 既存の設定済みの AwsLambdaClient をクライアントとして使用します。 | LambdaClient | |
proxyHost (プロキシー) | Lambda クライアントをインスタンス化するときにプロキシーホストを定義します。 | String | |
proxyPort (プロキシー) | Lambda クライアントをインスタンス化するときにプロキシーポートを定義します。 | Integer | |
proxyProtocol (プロキシー) | Lambda クライアントをインスタンス化するときにプロキシープロトコルを定義します。 列挙値:
| HTTPS | Protocol |
accessKey (security) | Amazon AWS Access Key。 | String | |
secretKey (security) | Amazon AWS Secret Key。 | String |
必要な Lambda コンポーネントオプション
Amazon Lambda サービスにアクセスするには、レジストリーに awsLambdaClient を指定するか、accessKey と secretKey を指定する必要があります。
5.5. 用途
5.5.1. 静的認証情報とデフォルトの認証情報プロバイダーの比較
useDefaultCredentialsProvider オプションを指定し、これを true に設定することにより、明示的な静的認証情報の使用を回避することが可能です。
- Java システムプロパティー - aws.accessKeyId および aws.secretKey
- 環境変数: AWS_ACCESS_KEY_ID および AWS_SECRET_ACCESS_KEY。
- AWS STS の Web ID トークン。
- 共有認証情報および設定ファイル。
- Amazon ECS コンテナー認証情報 - 環境変数 AWS_CONTAINER_CREDENTIALS_RELATIVE_URI が設定されている場合は、Amazon ECS からロードされます。
- Amazon EC2 インスタンスプロファイルの認証情報。
これに関する詳細情報は、AWS 認証情報のドキュメント を参照してください。
5.5.2. Lambda producer によって評価されるメッセージヘッダー
操作 | ヘッダー | タイプ | 説明 | 必須 |
---|---|---|---|---|
すべて |
|
| 実行する操作。クエリーパラメーターとして渡されたオーバーライド操作 | はい |
createFunction |
|
| デプロイパッケージを含む .zip ファイルが保存される Amazon S3 バケット名。このバケットは、Lambda 関数を作成しているのと同じ AWS リージョンに存在する必要があります。 | いいえ |
createFunction |
|
| アップロードする Amazon S3 オブジェクト (デプロイパッケージ) のキー名。 | いいえ |
createFunction |
| String | アップロードする Amazon S3 オブジェクト (デプロイパッケージ) のバージョン。 | いいえ |
createFunction |
|
| zip ファイル (デプロイメントパッケージ) のローカルパス。zip ファイルの内容をメッセージ本文に入れることもできます。 | いいえ |
createFunction |
|
| Lambda が関数を実行して他のアマゾンウェブサービス (AWS) リソースにアクセスするときに引き受ける IAM ロールの Amazon リソースネーム (ARN)。 | はい |
createFunction |
| String | アップロードする Lambda 関数のランタイム環境。(nodejs、nodejs4.3、nodejs6.10、java8、python2.7、python3.6、dotnetcore1.0、odejs4.3-edge) | はい |
createFunction |
|
| 実行を開始するために Lambda が呼び出すコード内の関数。Node.js の場合は、関数の module-name.export 値です。Java の場合は、package.class-name::handler または package.class-name にすることができます。 | はい |
createFunction |
|
| ユーザー提供の説明。 | いいえ |
createFunction |
|
| Amazon SQS キューまたは Amazon SNS トピックのターゲット ARN (Amazon リソースネーム) を含む親オブジェクト。 | いいえ |
createFunction |
|
| 関数用に設定したメモリーサイズ (MB 単位)。64 MB の倍数である必要があります。 | いいえ |
createFunction |
|
| 関数の環境変数を暗号化するために使用される KMS キーの Amazon リソースネーム (ARN)。指定しない場合、AWS Lambda はデフォルトのサービスキーを使用します。 | いいえ |
createFunction |
|
| このブール値パラメーターを使用して、AWS Lambda に Lambda 関数を作成し、バージョンをアトミック操作として発行するようにリクエストできます。 | いいえ |
createFunction |
|
| Lambda が関数を終了する関数実行時間。デフォルトは 3 秒です。 | いいえ |
createFunction |
|
| 関数のトレース設定 (Active または PassThrough)。 | いいえ |
createFunction |
|
| 環境の設定設定を表すキーと値のペア。 | いいえ |
createFunction |
|
| 新しい関数に割り当てられたタグ (キーと値のペア) のリスト。 | いいえ |
createFunction |
|
| Lambda 関数が VPC 内のリソースにアクセスする場合、VPC 内の 1 つ以上のセキュリティーグループ ID のリスト。 | いいえ |
createFunction |
|
| Lambda 関数が VPC 内のリソースにアクセスする場合、VPC 内の 1 つ以上のサブネット ID のリスト。 | いいえ |
createAlias |
|
| エイリアスに設定する関数のバージョン | はい |
createAlias |
|
| エイリアスに設定する関数名 | はい |
createAlias |
|
| エイリアスに設定する関数の説明 | いいえ |
deleteAlias |
|
| エイリアスの関数名 | はい |
getAlias |
|
| エイリアスの関数名 | はい |
listAliases |
|
| エイリアスに設定する関数のバージョン | いいえ |
5.6. 利用可能な操作のリスト
- listFunctions
- getFunction
- createFunction
- deleteFunction
- invokeFunction
- updateFunction
- createEventSourceMapping
- deleteEventSourceMapping
- listEventSourceMapping
- listTags
- tagResource
- untagResource
- publishVersion
- listVersions
- createAlias
- deleteAlias
- getAlias
- listAliases
5.7. 例
5.7.1. producer の例
コンポーネントがどのように機能するかを完全に理解するには、これらの 統合テスト を参照してください。
5.7.2. producer の例
- CreateFunction: この操作は、AWS Lambda で関数を作成します
from("direct:createFunction").to("aws2-lambda://GetHelloWithName?operation=createFunction").to("mock:result");
そして送ることで
template.send("direct:createFunction", ExchangePattern.InOut, new Processor() { @Override public void process(Exchange exchange) throws Exception { exchange.getIn().setHeader(Lambda2Constants.RUNTIME, "nodejs6.10"); exchange.getIn().setHeader(Lambda2Constants.HANDLER, "GetHelloWithName.handler"); exchange.getIn().setHeader(Lambda2Constants.DESCRIPTION, "Hello with node.js on Lambda"); exchange.getIn().setHeader(Lambda2Constants.ROLE, "arn:aws:iam::643534317684:role/lambda-execution-role"); ClassLoader classLoader = getClass().getClassLoader(); File file = new File( classLoader .getResource("org/apache/camel/component/aws2/lambda/function/node/GetHelloWithName.zip") .getFile()); FileInputStream inputStream = new FileInputStream(file); exchange.getIn().setBody(inputStream); } });
5.8. POJO を本体として使用する
複数のオプションがあるため、AWS リクエストの作成が複雑になる場合があります。POJO を本体として使用する可能性を紹介します。AWS Lambda には、送信できる複数の操作があります。Get Function リクエストの例として、次のようなことができます。
from("direct:getFunction") .setBody(GetFunctionRequest.builder().functionName("test").build()) .to("aws2-lambda://GetHelloWithName?awsLambdaClient=#awsLambdaClient&operation=getFunction&pojoRequest=true")
このようにして、この操作に特に関連するヘッダーやオプションを渡す必要なく、リクエストを直接渡します。
5.9. Dependencies
Maven ユーザーは、以下の依存関係を pom.xml に追加する必要があります。
pom.xml
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-aws2-lambda</artifactId> <version>${camel-version}</version> </dependency>
3.18.3
は Camel の実際のバージョンに置き換える必要があります。
5.10. Spring Boot 自動設定
Spring Boot で aws2-lambda を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-aws2-lambda-starter</artifactId> </dependency>
コンポーネントは、以下に記載される 17 のオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.component.aws2-lambda.access-key | Amazon AWS Access Key。 | String | |
camel.component.aws2-lambda.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.aws2-lambda.aws-lambda-client | 既存の設定済みの AwsLambdaClient をクライアントとして使用するには。オプションは、software.amazon.awssdk.services.lambda.LambdaClient タイプです。 | LambdaClient | |
camel.component.aws2-lambda.configuration | コンポーネントの設定。オプションは org.apache.camel.component.aws2.lambda.Lambda2Configuration タイプです。 | Lambda2 設定 | |
camel.component.aws2-lambda.enabled | aws2-lambda コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.aws2-lambda.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
camel.component.aws2-lambda.operation | 実行する操作。listFunctions、getFunction、createFunction、deleteFunction、または invokeFunction のいずれかです。 | Lambda2Operations | |
camel.component.aws2-lambda.override-endpoint | エンドポイントをオーバーライドする必要性を設定します。このオプションは uriEndpointOverride オプションと併用する必要があります。 | false | Boolean |
camel.component.aws2-lambda.pojo-request | POJO リクエストをボディーとして使用するかどうか。 | false | Boolean |
camel.component.aws2-lambda.proxy-host | Lambda クライアントをインスタンス化するときにプロキシーホストを定義します。 | String | |
camel.component.aws2-lambda.proxy-port | Lambda クライアントをインスタンス化するときにプロキシーポートを定義します。 | Integer | |
camel.component.aws2-lambda.proxy-protocol | Lambda クライアントをインスタンス化するときにプロキシープロトコルを定義します。 | Protocol | |
camel.component.aws2-lambda.region | Lambda クライアントが動作する必要があるリージョン。このパラメーターを使用する場合、設定には小文字のリージョン名を指定します (例 ap-east-1)。名前 Region.EU_WEST_1.id() を使用する必要があります。 | String | |
camel.component.aws2-lambda.secret-key | Amazon AWS Secret Key。 | String | |
camel.component.aws2-lambda.trust-all-certificates | エンドポイントをオーバーライドするときにすべての証明書を信頼する場合。 | false | Boolean |
camel.component.aws2-lambda.uri-endpoint-override | オーバーライドする URI エンドポイントを設定します。このオプションは overrideEndpoint オプションと組み合わせて使用する必要があります。 | String | |
camel.component.aws2-lambda.use-default-credentials-provider | Lambda クライアントがデフォルトの認証情報プロバイダーを介して認証情報をロードすることを期待するか、静的認証情報が渡されることを期待するかを設定します。 | false | Boolean |
第6章 AWS S3 ストレージサービス
producer と consumer の両方がサポート対象
AWS2 S3 コンポーネントは、Amazon の S3 サービスとの間でのオブジェクトの保存と取得をサポートしています。
前提条件
有効な Amazon Web Services 開発者アカウントを持っていて、Amazon S3 を使用するためにサインアップしている必要がある。詳細については、https://aws.amazon.com/s3 [Amazon S3] のリンクを参照してください。
6.1. URI 形式
aws2-s3://bucketNameOrArn[?options]
バケットがまだ存在しない場合は作成されます。URI には、次の形式でクエリーオプションを追加できます。
options=value&option2=value&…
6.2. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
6.2.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
6.2.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
6.3. コンポーネントオプション
AWS S3 Storage Service コンポーネントは、以下に示す 50 のオプションをサポートしています。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
amazonS3Client (共通) | Autowired レジストリーの com.amazonaws.services.s3.AmazonS3 への参照。 | S3Client | |
amazonS3Presigner (共通) | Autowired リクエストの S3 Presigner。主に createDownloadLink 操作で使用されます。 | S3Presigner | |
autoCreateBucket (共通) | S3 バケット bucketName の自動作成の設定。moveAfterRead オプションが有効になっている場合も適用され、destinationBucket が存在しない場合は作成されます。 | false | boolean |
configuration (共通) | コンポーネントの設定。 | AWS2S3 設定 | |
overrideEndpoint (共通) | エンドポイントをオーバーライドする必要性を設定します。このオプションは uriEndpointOverride オプションと併用する必要があります。 | false | boolean |
pojoRequest (共通) | POJO リクエストをボディーとして使用するかどうか。 | false | boolean |
policy (共通) | com.amazonaws.services.s3.AmazonS3#setBucketPolicy() メソッドに設定されるこのキューのポリシー。 | String | |
proxyHost (共通) | SQS クライアントをインスタンス化するときにプロキシーホストを定義します。 | String | |
proxyPort (共通) | クライアント定義内で使用されるプロキシーポートを指定します。 | Integer | |
proxyProtocol (共通) | S3 クライアントをインスタンス化するときにプロキシープロトコルを定義します。 列挙値:
| HTTPS | Protocol |
region (共通) | S3 クライアントが機能する必要があるリージョン。このパラメーターを使用する場合、設定には小文字のリージョン名を指定します (例 ap-east-1)。名前 Region.EU_WEST_1.id() を使用する必要があります。 | String | |
trustAllCertificates (共通) | エンドポイントをオーバーライドするときにすべての証明書を信頼する場合。 | false | boolean |
uriEndpointOverride (共通) | オーバーライドする URI エンドポイントを設定します。このオプションは overrideEndpoint オプションと組み合わせて使用する必要があります。 | String | |
useDefaultCredentialsProvider (共通) | デフォルトのクレデンシャルプロバイダー経由でクレデンシャルをロードすること、または静的クレデンシャルが渡されることを S3 クライアントは想定すべきかどうかを設定します。 | false | boolean |
customerAlgorithm(共通 (上級)) | CustomerKey が有効になっている場合に使用するカスタマーアルゴリズムを定義します。 | String | |
customerKeyId (共通 (上級)) | CustomerKey が有効になっている場合に使用するカスタマーキーの ID を定義します。 | String | |
customerKeyMD5 (共通 (上級)) | CustomerKey が有効になっている場合に使用するカスタマーキーの MD5 を定義します。 | String | |
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
deleteAfterRead (consumer) | 取得後に S3 からオブジェクトを削除します。削除は、エクスチェンジがコミットされた場合にのみ実行されます。ロールバックが発生すると、オブジェクトは削除されません。このオプションが false の場合、同じオブジェクトがポーリングで繰り返し取得されます。そのため、ルートで Idempotent Consumer EIP を使用して重複を除外する必要があります。AWS2S3Constants#BUCKET_NAME および AWS2S3Constants#KEY ヘッダーを使用してフィルターすることも、AWS2S3Constants#KEY ヘッダーのみを使用してフィルターすることもできます。 | true | boolean |
delimiter (consumer) | 対象のオブジェクトのみを消費するために com.amazonaws.services.s3.model.ListObjectsRequest で使用される区切り文字。 | String | |
destinationBucket (consumer) | moveAfterRead が true に設定されている場合にオブジェクトを移動する必要がある宛先バケットを定義します。 | String | |
destinationBucketPrefix (consumer) | オブジェクトを移動する必要があり、moveAfterRead が true に設定されている場合に使用する宛先バケット接頭辞を定義します。 | String | |
destinationBucketSuffix (consumer) | オブジェクトを移動する必要があり、moveAfterRead が true に設定されている場合に使用する宛先バケット接尾辞を定義します。 | String | |
doneFileName (consumer) | 指定すると、Camel は完了したファイルが存在する場合にのみファイルを消費します。 | String | |
fileName (consumer) | 指定のファイル名を持つバケットからオブジェクトを取得します。 | String | |
ignoreBody (consumer) | true の場合、S3 オブジェクトボディは完全に無視されます。false に設定されている場合、S3 オブジェクトはボディに配置されます。これを true に設定すると、includeBody オプションで定義された動作がオーバーライドされます。 | false | boolean |
includeBody (consumer) | true の場合、S3Object エクスチェンジが消費され、ボディーに配置され、閉じられます。false の場合、S3Object ストリームは raw でボディーに配置され、ヘッダーは S3 オブジェクトメタデータで設定されます。このオプションは、autocloseBody オプションと密接に関係します。S3Object ストリームが消費されるため includeBody を true に設定した場合、includeBody が false であっても閉じられるため、S3Object ストリームを閉じるのは呼び出し側が判断します。しかし、includeBody が false の場合に autocloseBody を true に設定すると、エクスチェンジの完了時に S3Object ストリームを自動的に閉じるようにスケジュールされます。 | true | boolean |
includeFolders (consumer) | true の場合、フォルダー/ディレクトリーが消費されます。false の場合は無視され、エクスチェンジは作成されません。 | true | boolean |
moveAfterRead (consumer) | オブジェクトの取得後に S3 バケットから別のバケットに移動します。操作を実行するには、destinationBucket オプションを設定する必要があります。copy bucket 操作は、エクスチェンジがコミットされた場合にのみ実行されます。ロールバックが発生した場合、オブジェクトは移動しません。 | false | boolean |
prefix (consumer) | 対象のオブジェクトのみを消費するために com.amazonaws.services.s3.model.ListObjectsRequest で使用される接頭辞。 | String | |
autocloseBody (consumer (上級)) | このオプションが true で、includeBody が false の場合、エクスチェンジの完了時に S3Object.close() メソッドが呼び出されます。このオプションは includeBody オプションと密接に関係しています。includeBody を false に設定し、autocloseBody を false に設定した場合、S3Object ストリームを閉じるのは呼び出し側が判断します。autocloseBody を true に設定すると、S3Object ストリームが自動的に閉じられます。 | true | boolean |
batchMessageNumber (producer) | ストリーミングのアップロードモードでバッチを作成するメッセージの数 | 10 | int |
batchSize (producer) | ストリーミングのアップロードモードのバッチサイズ (バイト単位) | 1000000 | int |
deleteAfterWrite (producer) | S3 ファイルのアップロード後にファイルオブジェクトを削除します。 | false | boolean |
keyName (producer) | endpoint パラメーター経由でバケットの要素のキー名を設定します。 | String | |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
multiPartUpload (producer) | true の場合、Camel はマルチパート形式のファイルをアップロードし、パートサイズは partSize のオプションによって決定されます。 | false | boolean |
namingStrategy (producer) | ストリーミングのアップロードモードで使用する命名ストラテジー。 列挙値:
| progressive | AWSS3NamingStrategyEnum |
operation (producer) | ユーザーがアップロードだけをしたくない場合に行う操作。 列挙値:
| AWS2S3Operations | |
partSize (producer) | マルチパートのアップロードで使用される partSize を設定します。デフォルトのサイズは 25M です。 | 26214400 | long |
restartingPolicy (producer) | ストリーミングのアップロードモードで使用する再起動ポリシー。 列挙値:
| override | AWSS3RestartingPolicyEnum |
storageClass (producer) | com.amazonaws.services.s3.model.PutObjectRequest リクエストに設定するストレージクラス。 | String | |
streamingUploadMode (producer) | ストリームモードが true の場合、バケットへのアップロードはストリーミングで行われます。 | false | boolean |
streamingUploadTimeout (producer) | ストリーミングアップロードモードが true の場合、このオプションはタイムアウトを設定してアップロードを完了します。 | long | |
awsKMSKeyId (producer (上級)) | KMS が有効になっている場合に使用する KMS キーの ID を定義します。 | String | |
useAwsKMS (producer (上級)) | KMS を使用する必要があるかどうかを定義します。 | false | boolean |
useCustomerKey (producer (上級)) | カスタマーキーを使用する必要があるかどうかを定義します。 | false | boolean |
autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
accessKey (security) | Amazon AWS Access Key。 | String | |
secretKey (security) | Amazon AWS Secret Key。 | String |
6.4. エンドポイントオプション
AWS S3 Storage Service エンドポイントは、URI 構文を使用して設定されます。
aws2-s3://bucketNameOrArn
パスおよびクエリーパラメーターを使用します。
6.4.1. パスパラメーター(1 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
bucketNameOrArn (共通) | 必須 のバケット名または ARN。 | String |
6.4.2. クエリーパラメーター (68 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
amazonS3Client (共通) | Autowired レジストリーの com.amazonaws.services.s3.AmazonS3 への参照。 | S3Client | |
amazonS3Presigner (共通) | Autowired リクエストの S3 Presigner。主に createDownloadLink 操作で使用されます。 | S3Presigner | |
autoCreateBucket (共通) | S3 バケット bucketName の自動作成の設定。moveAfterRead オプションが有効になっている場合も適用され、destinationBucket が存在しない場合は作成されます。 | false | boolean |
overrideEndpoint (共通) | エンドポイントをオーバーライドする必要性を設定します。このオプションは uriEndpointOverride オプションと併用する必要があります。 | false | boolean |
pojoRequest (共通) | POJO リクエストをボディーとして使用するかどうか。 | false | boolean |
policy (共通) | com.amazonaws.services.s3.AmazonS3#setBucketPolicy() メソッドに設定されるこのキューのポリシー。 | String | |
proxyHost (共通) | SQS クライアントをインスタンス化するときにプロキシーホストを定義します。 | String | |
proxyPort (共通) | クライアント定義内で使用されるプロキシーポートを指定します。 | Integer | |
proxyProtocol (共通) | S3 クライアントをインスタンス化するときにプロキシープロトコルを定義します。 列挙値:
| HTTPS | Protocol |
region (共通) | S3 クライアントが機能する必要があるリージョン。このパラメーターを使用する場合、設定には小文字のリージョン名を指定します (例 ap-east-1)。名前 Region.EU_WEST_1.id() を使用する必要があります。 | String | |
trustAllCertificates (共通) | エンドポイントをオーバーライドするときにすべての証明書を信頼する場合。 | false | boolean |
uriEndpointOverride (共通) | オーバーライドする URI エンドポイントを設定します。このオプションは overrideEndpoint オプションと組み合わせて使用する必要があります。 | String | |
useDefaultCredentialsProvider (共通) | デフォルトのクレデンシャルプロバイダー経由でクレデンシャルをロードすること、または静的クレデンシャルが渡されることを S3 クライアントは想定すべきかどうかを設定します。 | false | boolean |
customerAlgorithm(共通 (上級)) | CustomerKey が有効になっている場合に使用するカスタマーアルゴリズムを定義します。 | String | |
customerKeyId (共通 (上級)) | CustomerKey が有効になっている場合に使用するカスタマーキーの ID を定義します。 | String | |
customerKeyMD5 (共通 (上級)) | CustomerKey が有効になっている場合に使用するカスタマーキーの MD5 を定義します。 | String | |
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
deleteAfterRead (consumer) | 取得後に S3 からオブジェクトを削除します。削除は、エクスチェンジがコミットされた場合にのみ実行されます。ロールバックが発生すると、オブジェクトは削除されません。このオプションが false の場合、同じオブジェクトがポーリングで繰り返し取得されます。そのため、ルートで Idempotent Consumer EIP を使用して重複を除外する必要があります。AWS2S3Constants#BUCKET_NAME および AWS2S3Constants#KEY ヘッダーを使用してフィルターすることも、AWS2S3Constants#KEY ヘッダーのみを使用してフィルターすることもできます。 | true | boolean |
delimiter (consumer) | 対象のオブジェクトのみを消費するために com.amazonaws.services.s3.model.ListObjectsRequest で使用される区切り文字。 | String | |
destinationBucket (consumer) | moveAfterRead が true に設定されている場合にオブジェクトを移動する必要がある宛先バケットを定義します。 | String | |
destinationBucketPrefix (consumer) | オブジェクトを移動する必要があり、moveAfterRead が true に設定されている場合に使用する宛先バケット接頭辞を定義します。 | String | |
destinationBucketSuffix (consumer) | オブジェクトを移動する必要があり、moveAfterRead が true に設定されている場合に使用する宛先バケット接尾辞を定義します。 | String | |
doneFileName (consumer) | 指定すると、Camel は完了したファイルが存在する場合にのみファイルを消費します。 | String | |
fileName (consumer) | 指定のファイル名を持つバケットからオブジェクトを取得します。 | String | |
ignoreBody (consumer) | true の場合、S3 オブジェクトボディは完全に無視されます。false に設定されている場合、S3 オブジェクトはボディに配置されます。これを true に設定すると、includeBody オプションで定義された動作がオーバーライドされます。 | false | boolean |
includeBody (consumer) | true の場合、S3Object エクスチェンジが消費され、ボディーに配置され、閉じられます。false の場合、S3Object ストリームは raw でボディーに配置され、ヘッダーは S3 オブジェクトメタデータで設定されます。このオプションは、autocloseBody オプションと密接に関係します。S3Object ストリームが消費されるため includeBody を true に設定した場合、includeBody が false であっても閉じられるため、S3Object ストリームを閉じるのは呼び出し側が判断します。しかし、includeBody が false の場合に autocloseBody を true に設定すると、エクスチェンジの完了時に S3Object ストリームを自動的に閉じるようにスケジュールされます。 | true | boolean |
includeFolders (consumer) | true の場合、フォルダー/ディレクトリーが消費されます。false の場合は無視され、エクスチェンジは作成されません。 | true | boolean |
maxConnections (consumer) | S3 クライアント設定の maxConnections パラメーターを設定します。 | 60 | int |
maxMessagesPerPoll (consumer) | 各ポーリングのポーリング制限としてメッセージの最大数を取得します。各ポーリングのポーリング制限としてメッセージの最大数を取得します。デフォルト値は 10 です。0 または負の値を使用すると、無制限として設定されます。 | 10 | int |
moveAfterRead (consumer) | オブジェクトの取得後に S3 バケットから別のバケットに移動します。操作を実行するには、destinationBucket オプションを設定する必要があります。copy bucket 操作は、エクスチェンジがコミットされた場合にのみ実行されます。ロールバックが発生した場合、オブジェクトは移動しません。 | false | boolean |
prefix (consumer) | 対象のオブジェクトのみを消費するために com.amazonaws.services.s3.model.ListObjectsRequest で使用される接頭辞。 | String | |
sendEmptyMessageWhenIdle (consumer) | ポーリング consumer がファイルをポーリングしなかった場合、このオプションを有効にして、代わりに空のメッセージ (ボディーなし) を送信できます。 | false | boolean |
autocloseBody (consumer (上級)) | このオプションが true で、includeBody が false の場合、エクスチェンジの完了時に S3Object.close() メソッドが呼び出されます。このオプションは includeBody オプションと密接に関係しています。includeBody を false に設定し、autocloseBody を false に設定した場合、S3Object ストリームを閉じるのは呼び出し側が判断します。autocloseBody を true に設定すると、S3Object ストリームが自動的に閉じられます。 | true | boolean |
exceptionHandler (consumer (上級)) | consumer によるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、consumer は例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
exchangePattern (consumer (上級)) | consumer がエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
pollStrategy (consumer (上級)) | プラグ可能な org.apache.camel.PollingConsumerPollingStrategy を使用すると、エクスチェンジが作成され、Camel でルーティングされる前に、通常はポーリング操作中に発生するエラー処理を制御するカスタム実装が提供できます。 | PollingConsumerPollStrategy | |
batchMessageNumber (producer) | ストリーミングのアップロードモードでバッチを作成するメッセージの数 | 10 | int |
batchSize (producer) | ストリーミングのアップロードモードのバッチサイズ (バイト単位) | 1000000 | int |
deleteAfterWrite (producer) | S3 ファイルのアップロード後にファイルオブジェクトを削除します。 | false | boolean |
keyName (producer) | endpoint パラメーター経由でバケットの要素のキー名を設定します。 | String | |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
multiPartUpload (producer) | true の場合、Camel はマルチパート形式のファイルをアップロードし、パートサイズは partSize のオプションによって決定されます。 | false | boolean |
namingStrategy (producer) | ストリーミングのアップロードモードで使用する命名ストラテジー。 列挙値:
| progressive | AWSS3NamingStrategyEnum |
operation (producer) | ユーザーがアップロードだけをしたくない場合に行う操作。 列挙値:
| AWS2S3Operations | |
partSize (producer) | マルチパートのアップロードで使用される partSize を設定します。デフォルトのサイズは 25M です。 | 26214400 | long |
restartingPolicy (producer) | ストリーミングのアップロードモードで使用する再起動ポリシー。 列挙値:
| override | AWSS3RestartingPolicyEnum |
storageClass (producer) | com.amazonaws.services.s3.model.PutObjectRequest リクエストに設定するストレージクラス。 | String | |
streamingUploadMode (producer) | ストリームモードが true の場合、バケットへのアップロードはストリーミングで行われます。 | false | boolean |
streamingUploadTimeout (producer) | ストリーミングアップロードモードが true の場合、このオプションはタイムアウトを設定してアップロードを完了します。 | long | |
awsKMSKeyId (producer (上級)) | KMS が有効になっている場合に使用する KMS キーの ID を定義します。 | String | |
useAwsKMS (producer (上級)) | KMS を使用する必要があるかどうかを定義します。 | false | boolean |
useCustomerKey (producer (上級)) | カスタマーキーを使用する必要があるかどうかを定義します。 | false | boolean |
backoffErrorThreshold (scheduler) | backoffMultipler が開始する前に発生する必要がある後続のエラーポーリング (エラーによって失敗した) の数。 | int | |
backoffIdleThreshold (scheduler) | backoffMultipler が開始する前に発生する必要がある後続のアイドルポーリングの数。 | int | |
backoffMultiplier (scheduler) | 後続のアイドル状態/エラーが連続して発生した場合に、スケジュールされたポーリング consumer のバックオフを許可します。乗数は、実際に次の試行が行われる前にスキップされるポーリングの数です。このオプションが使用されている場合は、backoffIdleThreshold や backoffErrorThreshold も設定する必要があります。 | int | |
delay (scheduler) | 次のポーリングまでの時間 (ミリ秒単位)。 | 500 | long |
greedy (scheduler) | greedy が有効で、以前の実行が 1 つ以上のメッセージをポーリングした場合、ScheduledPollConsumer は即座に再度実行されます。 | false | boolean |
initialDelay (scheduler) | 最初のポーリングが開始されるまでの時間 (ミリ秒単位)。 | 1000 | long |
repeatCount (スケジューラー) | 実行の最大数を指定します。そのため、これを 1 に設定するとスケジューラーは 1 度だけ実行されます。これを 5 に設定した場合、5 回だけ実行されます。0 または負の値を設定すると、無制限に実行されます。 | 0 | long |
runLoggingLevel (scheduler) | consumer はポーリング時に開始/完了のログ行を記録します。このオプションを使用すると、ログレベルを設定できます。 列挙値:
| TRACE | LoggingLevel |
scheduledExecutorService (scheduler) | consumer に使用するカスタム/共有スレッドプールを設定できます。デフォルトでは、各 consumer に独自の単一スレッドのスレッドプールがあります。 | ScheduledExecutorService | |
scheduler (スケジューラー) | camel-spring または camel-quartz コンポーネントから cron スケジューラーを使用します。スケジューラーにビルドされた値 spring または quartz を使用。 | none | オブジェクト |
schedulerProperties (スケジューラー) | カスタムスケジューラーまたは Quartz や Spring ベースのスケジューラーを使用する場合に、追加のプロパティーを設定します。 | マップ | |
startScheduler (scheduler) | スケジューラーを自動起動するかどうか。 | true | boolean |
timeUnit (scheduler) | initialDelay および delay オプションの時間単位。 列挙値:
| MILLISECONDS | TimeUnit |
useFixedDelay (scheduler) | 固定遅延または固定レートを使用するかどうかを制御します。詳細は、JDK の ScheduledExecutorService を参照してください。 | true | boolean |
accessKey (security) | Amazon AWS Access Key。 | String | |
secretKey (security) | Amazon AWS Secret Key。 | String |
必須の S3 コンポーネントオプション
Amazon の S3 にアクセスするには、レジストリーに amazonDDBClient を指定するか、accessKey と secretKey を指定する必要があります。
6.5. バッチ consumer
このコンポーネントは、Batch Consumer を実装します。
これにより、たとえば、このバッチに存在するメッセージの数を知ることができ、たとえば、Aggregator にこの数のメッセージを集約させることができます。
6.6. 用途
たとえば、バケット helloBucket
からファイル hello.txt
を読み取るには、次のスニペットを使用します。
from("aws2-s3://helloBucket?accessKey=yourAccessKey&secretKey=yourSecretKey&prefix=hello.txt") .to("file:/var/downloaded");
6.6.1. S3 producer によって評価されるメッセージヘッダー
ヘッダー | タイプ | 説明 |
---|---|---|
|
| このオブジェクトが保存されるバケット名、または現在の操作に使用されるバケット名 |
|
| 現在の操作に使用されるバケット宛先名 |
|
| このオブジェクトのコンテンツの長さ。 |
|
| このオブジェクトのコンテンツタイプ。 |
|
| このオブジェクトのコンテンツコントロール。 |
|
| このオブジェクトのコンテンツの配置。 |
|
| このオブジェクトのコンテンツエンコーディング。 |
|
| このオブジェクトの md5 チェックサム。 |
|
| 現在の操作に使用される宛先キー |
|
| このオブジェクトが格納されるキー、または現在の操作に使用されるキー |
|
| このオブジェクトの最終変更のタイムスタンプ。 |
|
| 実行する操作。許可されている値は、copyObject、deleteObject、listBuckets、deleteBucket、listObjects です。 |
|
| このオブジェクトのストレージクラス。 |
|
|
オブジェクトに適用される既定の ACL。許可されている値については、 |
|
|
適切に設定された Amazon S3 アクセスコントロールリストオブジェクト。詳細については、 |
| String | AWS が管理するキーを使用してオブジェクトを暗号化するときに、サーバー側の暗号化アルゴリズムを設定します。たとえば、AES256 を使用します。 |
|
| 現在の操作から格納または返されるオブジェクトのバージョン ID |
|
| S3 のオブジェクトと共に保存されるメタデータのマップ。メタデータの詳細。 |
6.6.2. S3 producer によって設定されたメッセージヘッダー
ヘッダー | タイプ | 説明 |
---|---|---|
|
| 新しくアップロードされたオブジェクトの ETag 値。 |
|
| 新しくアップロードされたオブジェクトの オプション のバージョン ID。 |
6.6.3. S3 consumer によって設定されたメッセージヘッダー
ヘッダー | タイプ | 説明 |
---|---|---|
|
| このオブジェクトが格納されるキー。 |
|
| このオブジェクトが含まれるバケットの名前。 |
|
| RFC 1864 に従って、関連付けられたオブジェクトの 16 進数でエンコードされた 128 ビット MD5 ダイジェスト。このデータは、呼び出し元によって受信されたデータが Amazon S3 によって送信されたデータと同じであることを確認するための整合性チェックとして使用されます。 |
|
| Last-Modified ヘッダーの値。Amazon S3 が関連付けられたオブジェクトへの変更を最後に記録した日時を示します。 |
|
| 関連する Amazon S3 オブジェクトのバージョン ID (利用可能な場合)。バージョン ID は、オブジェクトのバージョニングが有効になっている Amazon S3 バケットにオブジェクトがアップロードされた場合にのみ、オブジェクトに割り当てられます。 |
|
| 関連付けられたオブジェクトに格納されているコンテンツのタイプを示す Content-Type HTTP ヘッダー。このヘッダーの値は、標準の MIME タイプです。 |
|
| RFC 1864 に従って、関連付けられたオブジェクト (ヘッダーを含まないコンテンツ) の base64 でエンコードされた 128 ビット MD5 ダイジェスト。このデータは、Amazon S3 が受信したデータが発信者が送信したデータと同じであることを確認するためのメッセージ整合性チェックとして使用されます。 |
|
| 関連付けられたオブジェクトのサイズをバイト単位で示す Content-Length HTTP ヘッダー。 |
|
| オブジェクトに適用されたコンテンツエンコーディングと、Content-Type フィールドによって参照されるメディアタイプを取得するために適用する必要があるデコードメカニズムを指定する、オプション の Content-Encoding HTTP ヘッダー。 |
|
| オプション の Content-Disposition HTTP ヘッダー。保存するオブジェクトの推奨ファイル名などの表示情報を指定します。 |
|
| ユーザーが HTTP 要求/応答チェーンに沿ってキャッシュ動作を指定できるようにする、オプション の Cache-Control HTTP ヘッダー。 |
| String | AWS が管理するキーを使用してオブジェクトを暗号化するときのサーバー側の暗号化アルゴリズム。 |
|
| S3 のオブジェクトとともに保存されたメタデータのマップ。メタデータの詳細。 |
6.6.4. S3 producer の操作
Camel-AWS2-S3 コンポーネントは、producer 側で次の操作を提供します。
- copyObject
- deleteObject
- listBuckets
- deleteBucket
- listObjects
- getObject (これは S3Object インスタンスを返します)
- getObjectRange (これは S3Object インスタンスを返します)
- createDownloadLink
操作を明示的に指定しない場合、producer は次のことを行います。- 単一ファイルのアップロード - multiPartUpload オプションが有効な場合はマルチパートアップロード。
6.6.5. 高度な AmazonS3 設定
Camel アプリケーションがファイアウォールの背後で実行されている場合、または S3Client
インスタンス設定をより詳細に制御する必要がある場合は、独自のインスタンスを作成して、Camel aws2-s3 コンポーネント設定で参照できます。
from("aws2-s3://MyBucket?amazonS3Client=#client&delay=5000&maxMessagesPerPoll=5") .to("mock:result");
6.6.6. S3 コンポーネントで KMS を使用する
AWS インフラストラクチャーを使用して AWS KMS を使用してデータを暗号化/復号化するには、次の例のように 2.21.x で導入されたオプションを使用できます。
from("file:tmp/test?fileName=test.txt") .setHeader(S3Constants.KEY, constant("testFile")) .to("aws2-s3://mybucket?amazonS3Client=#client&useAwsKMS=true&awsKMSKeyId=3f0637ad-296a-3dfe-a796-e60654fb128c");
このようにして、KMS キー 3f0637ad-296a-3dfe-a796-e60654fb128c を使用してファイル test.txt を暗号化するよう S3 に依頼します。このファイルのダウンロードを要求すると、ダウンロードの直前に復号化が行われます。
6.6.7. 静的認証情報とデフォルトの認証情報プロバイダーの比較
useDefaultCredentialsProvider オプションを指定し、これを true に設定することにより、明示的な静的認証情報の使用を回避することが可能です。
- Java システムプロパティー - aws.accessKeyId および aws.secretKey
- 環境変数: AWS_ACCESS_KEY_ID および AWS_SECRET_ACCESS_KEY。
- AWS STS の Web ID トークン。
- 共有認証情報および設定ファイル。
- Amazon ECS コンテナー認証情報 - 環境変数 AWS_CONTAINER_CREDENTIALS_RELATIVE_URI が設定されている場合は、Amazon ECS からロードされます。
- Amazon EC2 インスタンスプロファイルの認証情報。
これに関する詳細情報は、AWS 認証情報のドキュメント を参照してください。
6.6.8. S3 Producer 操作例
- 単一のアップロード: この操作は、本文の内容に基づいてファイルを S3 にアップロードします。
from("direct:start").process(new Processor() { @Override public void process(Exchange exchange) throws Exception { exchange.getIn().setHeader(S3Constants.KEY, "camel.txt"); exchange.getIn().setBody("Camel rocks!"); } }) .to("aws2-s3://mycamelbucket?amazonS3Client=#amazonS3Client") .to("mock:result");
この操作により、コンテンツ Camel rocks! を含むファイル camel.txt がアップロードされます。mycamelbucket バケット内
- マルチパートアップロード: この操作は、本文のコンテンツに基づいて S3 へのファイルのマルチパートアップロードを実行します。
from("direct:start").process(new Processor() { @Override public void process(Exchange exchange) throws Exception { exchange.getIn().setHeader(AWS2S3Constants.KEY, "empty.txt"); exchange.getIn().setBody(new File("src/empty.txt")); } }) .to("aws2-s3://mycamelbucket?amazonS3Client=#amazonS3Client&multiPartUpload=true&autoCreateBucket=true&partSize=1048576") .to("mock:result");
この操作は、mycamelbucket バケット内のファイル src/empty.txt のコンテンツに基づいて、ファイル empty.txt のマルチパートアップロードを実行します。
- CopyObject: この操作は、あるバケットから別のバケットにオブジェクトをコピーします
from("direct:start").process(new Processor() { @Override public void process(Exchange exchange) throws Exception { exchange.getIn().setHeader(S3Constants.BUCKET_DESTINATION_NAME, "camelDestinationBucket"); exchange.getIn().setHeader(S3Constants.KEY, "camelKey"); exchange.getIn().setHeader(S3Constants.DESTINATION_KEY, "camelDestinationKey"); } }) .to("aws2-s3://mycamelbucket?amazonS3Client=#amazonS3Client&operation=copyObject") .to("mock:result");
この操作は、ヘッダー camelDestinationKey で表された名前を持つオブジェクトを、バケット mycamelbucket から camelDestinationBucket バケットにコピーします。
- DeleteObject: この操作は、バケットからオブジェクトを削除します
from("direct:start").process(new Processor() { @Override public void process(Exchange exchange) throws Exception { exchange.getIn().setHeader(S3Constants.KEY, "camelKey"); } }) .to("aws2-s3://mycamelbucket?amazonS3Client=#amazonS3Client&operation=deleteObject") .to("mock:result");
この操作により、オブジェクト camelKey がバケット mycamelbucket から削除されます。
- ListBuckets: この操作は、このリージョン内のこのアカウントのバケットを一覧表示します
from("direct:start") .to("aws2-s3://mycamelbucket?amazonS3Client=#amazonS3Client&operation=listBuckets") .to("mock:result");
この操作は、このアカウントのバケットを一覧表示します
- DeleteBucket: この操作は、URI パラメーターまたはヘッダーとして指定されたバケットを削除します
from("direct:start") .to("aws2-s3://mycamelbucket?amazonS3Client=#amazonS3Client&operation=deleteBucket") .to("mock:result");
この操作により、バケット mycamelbucket が削除されます
- ListObjects: 特定のバケット内のこのオペレーションリストオブジェクト
from("direct:start") .to("aws2-s3://mycamelbucket?amazonS3Client=#amazonS3Client&operation=listObjects") .to("mock:result");
この操作は、mycamelbucket バケット内のオブジェクトを一覧表示します
- GetObject: この操作は、特定のバケット内の単一のオブジェクトを取得します
from("direct:start").process(new Processor() { @Override public void process(Exchange exchange) throws Exception { exchange.getIn().setHeader(S3Constants.KEY, "camelKey"); } }) .to("aws2-s3://mycamelbucket?amazonS3Client=#amazonS3Client&operation=getObject") .to("mock:result");
このオペレーションは、mycamelbucket バケットの camelKey オブジェクトに関連する S3Object インスタンスを返します。
- GetObjectRange: この操作は、特定のバケット内の単一のオブジェクト範囲を取得します
from("direct:start").process(new Processor() { @Override public void process(Exchange exchange) throws Exception { exchange.getIn().setHeader(S3Constants.KEY, "camelKey"); exchange.getIn().setHeader(S3Constants.RANGE_START, "0"); exchange.getIn().setHeader(S3Constants.RANGE_END, "9"); } }) .to("aws2-s3://mycamelbucket?amazonS3Client=#amazonS3Client&operation=getObjectRange") .to("mock:result");
このオペレーションは、0 から 9 までのバイトを含む、mycamelbucket バケット内の camelKey オブジェクトに関連する S3Object インスタンスを返します。
- CreateDownloadLink: この操作は、S3 Presigner を介してダウンロードリンクを返します。
from("direct:start").process(new Processor() { @Override public void process(Exchange exchange) throws Exception { exchange.getIn().setHeader(S3Constants.KEY, "camelKey"); } }) .to("aws2-s3://mycamelbucket?accessKey=xxx&secretKey=yyy®ion=region&operation=createDownloadLink") .to("mock:result");
この操作は、バケット mycamelbucket およびリージョン region 内のファイル camel-key のダウンロードリンク URL を返します。
6.7. ストリーミングアップロードモード
ストリームモードを有効にすると、ユーザーはマルチパートアップロードを利用することで、データの次元を事前に知らなくても S3 にデータをアップロードできます。アップロードは、batchSize が完了したか、batchMessageNumber に達したときに完了します。次の 2 つの命名戦略が考えられます。
progressive
プログレッシブ戦略では、各ファイルには keyName オプションとプログレッシブカウンターで設定された名前が付けられ、最終的にはファイル拡張子 (存在する場合) が付けられます。
ランダム
ランダム戦略では、keyName の後に UUID が追加され、最終的にファイル拡張子が追加されます。
たとえば、以下のようになります。
from(kafka("topic1").brokers("localhost:9092")) .log("Kafka Message is: ${body}") .to(aws2S3("camel-bucket").streamingUploadMode(true).batchMessageNumber(25).namingStrategy(AWS2S3EndpointBuilderFactory.AWSS3NamingStrategyEnum.progressive).keyName("{{kafkaTopic1}}/{{kafkaTopic1}}.txt")); from(kafka("topic2").brokers("localhost:9092")) .log("Kafka Message is: ${body}") .to(aws2S3("camel-bucket").streamingUploadMode(true).batchMessageNumber(25).namingStrategy(AWS2S3EndpointBuilderFactory.AWSS3NamingStrategyEnum.progressive).keyName("{{kafkaTopic2}}/{{kafkaTopic2}}.txt"));
バッチのデフォルトサイズは 1 Mb ですが、必要に応じて調整できます。
producer ルートを停止すると、producer はバッファーリングされた残りのメッセージをフラッシュし、アップロードを完了します。
ストリーミングアップロードでは、producer を離れたところから再開できます。この機能は、プログレッシブ命名戦略を使用する場合にのみ重要であることに注意してください。
restartingPolicy を lastPart に設定することで、ファイルとコンテンツのアップロードを producer が残した最後のパーツ番号から再開します。
例
- プログレッシブ命名戦略でルートを開始し、keyname は camel.txt に等しく、batchMessageNumber は 20 に等しく、restartingPolicy は lastPart に等しい - 70 個のメッセージを送信します。
- ルートを停止
S3 バケットには、次の 4 つのファイルが表示されます: * camel.txt
- camel-1.txt
- camel-2.txt
camel-3.txt
最初の 3 つには 20 件のメッセージが含まれますが、最後の 1 つには 10 件しかありません。
- ルートを再開します。
- メッセージを 25 回送信します。
- ルートを停止します。
- バケットには他に 2 つのファイルがあります。camel-5.txt と camel-6.txt です。最初のファイルには 20 件のメッセージがあり、2 つ目のファイルには 5 件のメッセージがあります。
- どうぞ
ランダムな命名戦略を使用する場合、これは必要ありません。
反対に、オーバーライドの restartingPolicy を指定できます。その場合、バケットで以前に書いたものを (その特定のキー名に対して) 上書きすることができます。
ストリーミングアップロードモードでは、考慮される唯一の keyName オプションは endpoint オプションです。ヘッダーを使用すると NPE が出力されますが、これは設計によるものです。ヘッダーを設定すると、各交換でファイル名が変更される可能性があり、これはストリーミングアップロード producer の目的に反します。keyName は固定で静的である必要があります。選択した命名戦略によって、残りの作業が行われます。
もう 1 つの可能性は、batchMessageNumber および batchSize オプションで streamingUploadTimeout を指定することです。このオプションを使用すると、ユーザーは一定の時間が経過した後にファイルのアップロードを完了することができます。このように、アップロードの完了は、タイムアウト、メッセージ数、およびバッチサイズの 3 つの層で渡されます。
たとえば、以下のようになります。
from(kafka("topic1").brokers("localhost:9092")) .log("Kafka Message is: ${body}") .to(aws2S3("camel-bucket").streamingUploadMode(true).batchMessageNumber(25).streamingUploadTimeout(10000).namingStrategy(AWS2S3EndpointBuilderFactory.AWSS3NamingStrategyEnum.progressive).keyName("{{kafkaTopic1}}/{{kafkaTopic1}}.txt"));
この場合、アップロードは 10 秒後に完了します。
6.8. バケットの自動作成
オプション autoCreateBucket
を使用すると、S3 バケットが存在しない場合に、ユーザーは S3 バケットの自動作成を回避できます。このオプションのデフォルトは true
です。false に設定すると、AWS に存在しないバケットに対する操作は成功せず、エラーが返されます。
6.9. バケットと別のバケットの間でスタッフを移動する
一部のユーザーは、このコンポーネントの copyObject 機能を使用せずに、バケットからコンテンツを消費し、コンテンツを別のバケットに移動することを好みます。この場合、consumer の受信交換から bucketName ヘッダーを削除することを忘れないでください。そうしないと、ファイルは常に同じ元のバケットで上書きされます。
6.10. MoveAfterRead consumer オプション
deleteAfterRead に加えて、moveAfterRead という別のオプションが追加されました。このオプションを有効にすると、消費されたオブジェクトは削除されるだけでなく、ターゲットの destinationBucket に移動されます。これには、destinationBucket オプションを指定する必要があります。例として:
from("aws2-s3://mycamelbucket?amazonS3Client=#amazonS3Client&moveAfterRead=true&destinationBucket=myothercamelbucket") .to("mock:result");
この場合、消費されたオブジェクトは myothercamelbucket バケットに移動され、元のバケットから削除されます (deleteAfterRead がデフォルトで true に設定されているため)。
ファイルを別のバケットに移動するときに、キーの接頭辞/接尾辞を使用することもできます。オプションは、destinationBucketPrefix と destinationBucketSuffix です。
上記の例を取ると、次のようなことができます。
from("aws2-s3://mycamelbucket?amazonS3Client=#amazonS3Client&moveAfterRead=true&destinationBucket=myothercamelbucket&destinationBucketPrefix=RAW(pre-)&destinationBucketSuffix=RAW(-suff)") .to("mock:result");
この場合、消費されたオブジェクトは myothercamelbucket バケットに移動され、元のバケットから削除されます (deleteAfterRead がデフォルトで true に設定されているため)。
したがって、ファイル名が test の場合、myothercamelbucket に pre-test-suff というファイルが表示されます。
6.11. 顧客キーを暗号化として使用する
また、カスタマーキーサポート (KMS を使用する代替手段) も導入しました。次のコードは例を示しています。
String key = UUID.randomUUID().toString(); byte[] secretKey = generateSecretKey(); String b64Key = Base64.getEncoder().encodeToString(secretKey); String b64KeyMd5 = Md5Utils.md5AsBase64(secretKey); String awsEndpoint = "aws2-s3://mycamel?autoCreateBucket=false&useCustomerKey=true&customerKeyId=RAW(" + b64Key + ")&customerKeyMD5=RAW(" + b64KeyMd5 + ")&customerAlgorithm=" + AES256.name(); from("direct:putObject") .setHeader(AWS2S3Constants.KEY, constant("test.txt")) .setBody(constant("Test")) .to(awsEndpoint);
6.12. POJO を本体として使用する
複数のオプションがあるため、AWS リクエストの作成が複雑になる場合があります。POJO を本体として使用する可能性を紹介します。AWS S3 には、送信できる複数の操作があります。たとえば、リストブローカーリクエストの場合、次のようなことができます。
from("direct:aws2-s3") .setBody(ListObjectsRequest.builder().bucket(bucketName).build()) .to("aws2-s3://test?amazonS3Client=#amazonS3Client&operation=listObjects&pojoRequest=true")
このようにして、この操作に特に関連するヘッダーやオプションを渡す必要なく、リクエストを直接渡します。
6.13. S3 クライアントを作成し、コンポーネントをレジストリーに追加する
S3 クライアントの設定もできる AWS2S3Configuration を使用して、高度な設定を実行する場合があります。次の例に示すように、コンポーネント設定で S3 クライアントを作成および設定できます。
String awsBucketAccessKey = "your_access_key"; String awsBucketSecretKey = "your_secret_key"; S3Client s3Client = S3Client.builder().credentialsProvider(StaticCredentialsProvider.create(AwsBasicCredentials.create(awsBucketAccessKey, awsBucketSecretKey))) .region(Region.US_EAST_1).build(); AWS2S3Configuration configuration = new AWS2S3Configuration(); configuration.setAmazonS3Client(s3Client); configuration.setAutoDiscoverClient(true); configuration.setBucketName("s3bucket2020"); configuration.setRegion("us-east-1");
これで、ルートを初期化する前に、(上で作成した設定オブジェクトを使用して) S3 コンポーネントを設定し、configure メソッドでレジストリーに追加できます。
AWS2S3Component s3Component = new AWS2S3Component(getContext()); s3Component.setConfiguration(configuration); s3Component.setLazyStartProducer(true); camelContext.addComponent("aws2-s3", s3Component);
これで、キャメルルートに実装されたすべての操作にコンポーネントが使用されます。
6.14. Dependencies
Maven ユーザーは、以下の依存関係を pom.xml
に追加する必要があります。
pom.xml
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-aws2-s3</artifactId> <version>${camel-version}</version> </dependency>
3.18.3
は Camel の実際のバージョンに置き換える必要があります。
6.15. Spring Boot 自動設定
Spring Boot で aws2-s3 を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-aws2-s3-starter</artifactId> </dependency>
コンポーネントは、以下に記載される 51 のオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.component.aws2-s3.access-key | Amazon AWS Access Key。 | String | |
camel.component.aws2-s3.amazon-s3-client | レジストリーの com.amazonaws.services.s3.AmazonS3 への参照。オプションは、software.amazon.awssdk.services.s3.S3Client タイプです。 | S3Client | |
camel.component.aws2-s3.amazon-s3-presigner | リクエストの S3 Presigner。主に createDownloadLink 操作で使用されます。オプションは、software.amazon.awssdk.services.s3.presigner.S3Presigner タイプです。 | S3Presigner | |
camel.component.aws2-s3.auto-create-bucket | S3 バケット bucketName の自動作成の設定。moveAfterRead オプションが有効になっている場合も適用され、destinationBucket が存在しない場合は作成されます。 | false | Boolean |
camel.component.aws2-s3.autoclose-body | このオプションが true で、includeBody が false の場合、エクスチェンジの完了時に S3Object.close() メソッドが呼び出されます。このオプションは includeBody オプションと密接に関係しています。includeBody を false に設定し、autocloseBody を false に設定した場合、S3Object ストリームを閉じるのは呼び出し側が判断します。autocloseBody を true に設定すると、S3Object ストリームが自動的に閉じられます。 | true | Boolean |
camel.component.aws2-s3.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.aws2-s3.aws-k-m-s-key-id | KMS が有効になっている場合に使用する KMS キーの ID を定義します。 | String | |
camel.component.aws2-s3.batch-message-number | ストリーミングのアップロードモードでバッチを作成するメッセージの数 | 10 | Integer |
camel.component.aws2-s3.batch-size | ストリーミングのアップロードモードのバッチサイズ (バイト単位) | 1000000 | Integer |
camel.component.aws2-s3.bridge-error-handler | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | Boolean |
camel.component.aws2-s3.configuration | コンポーネントの設定。オプションは org.apache.camel.component.aws2.s3.AWS2S3Configuration タイプです。 | AWS2S3 設定 | |
camel.component.aws2-s3.customer-algorithm | CustomerKey が有効になっている場合に使用するカスタマーアルゴリズムを定義します。 | String | |
camel.component.aws2-s3.customer-key-id | CustomerKey が有効になっている場合に使用するカスタマーキーの ID を定義します。 | String | |
camel.component.aws2-s3.customer-key-m-d5 | CustomerKey が有効になっている場合に使用するカスタマーキーの MD5 を定義します。 | String | |
camel.component.aws2-s3.delete-after-read | 取得後に S3 からオブジェクトを削除します。削除は、エクスチェンジがコミットされた場合にのみ実行されます。ロールバックが発生すると、オブジェクトは削除されません。このオプションが false の場合、同じオブジェクトがポーリングで繰り返し取得されます。そのため、ルートで Idempotent Consumer EIP を使用して重複を除外する必要があります。AWS2S3Constants#BUCKET_NAME および AWS2S3Constants#KEY ヘッダーを使用してフィルターすることも、AWS2S3Constants#KEY ヘッダーのみを使用してフィルターすることもできます。 | true | Boolean |
camel.component.aws2-s3.delete-after-write | S3 ファイルのアップロード後にファイルオブジェクトを削除します。 | false | Boolean |
camel.component.aws2-s3.delimiter | 対象のオブジェクトのみを消費するために com.amazonaws.services.s3.model.ListObjectsRequest で使用される区切り文字。 | String | |
camel.component.aws2-s3.destination-bucket | moveAfterRead が true に設定されている場合にオブジェクトを移動する必要がある宛先バケットを定義します。 | String | |
camel.component.aws2-s3.destination-bucket-prefix | オブジェクトを移動する必要があり、moveAfterRead が true に設定されている場合に使用する宛先バケット接頭辞を定義します。 | String | |
camel.component.aws2-s3.destination-bucket-suffix | オブジェクトを移動する必要があり、moveAfterRead が true に設定されている場合に使用する宛先バケット接尾辞を定義します。 | String | |
camel.component.aws2-s3.done-file-name | 指定すると、Camel は完了したファイルが存在する場合にのみファイルを消費します。 | String | |
camel.component.aws2-s3.enabled | aws2-c3 コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.aws2-s3.file-name | 指定のファイル名を持つバケットからオブジェクトを取得します。 | String | |
camel.component.aws2-s3.ignore-body | true の場合、S3 オブジェクトボディは完全に無視されます。false に設定されている場合、S3 オブジェクトはボディに配置されます。これを true に設定すると、includeBody オプションで定義された動作がオーバーライドされます。 | false | Boolean |
camel.component.aws2-s3.include-body | true の場合、S3Object エクスチェンジが消費され、ボディーに配置され、閉じられます。false の場合、S3Object ストリームは raw でボディーに配置され、ヘッダーは S3 オブジェクトメタデータで設定されます。このオプションは、autocloseBody オプションと密接に関係します。S3Object ストリームが消費されるため includeBody を true に設定した場合、includeBody が false であっても閉じられるため、S3Object ストリームを閉じるのは呼び出し側が判断します。しかし、includeBody が false の場合に autocloseBody を true に設定すると、エクスチェンジの完了時に S3Object ストリームを自動的に閉じるようにスケジュールされます。 | true | Boolean |
camel.component.aws2-s3.include-folders | true の場合、フォルダー/ディレクトリーが消費されます。false の場合は無視され、エクスチェンジは作成されません。 | true | Boolean |
camel.component.aws2-s3.key-name | endpoint パラメーター経由でバケットの要素のキー名を設定します。 | String | |
camel.component.aws2-s3.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
camel.component.aws2-s3.move-after-read | オブジェクトの取得後に S3 バケットから別のバケットに移動します。操作を実行するには、destinationBucket オプションを設定する必要があります。copy bucket 操作は、エクスチェンジがコミットされた場合にのみ実行されます。ロールバックが発生した場合、オブジェクトは移動しません。 | false | Boolean |
camel.component.aws2-s3.multi-part-upload | true の場合、Camel はマルチパート形式のファイルをアップロードし、パートサイズは partSize のオプションによって決定されます。 | false | Boolean |
camel.component.aws2-s3.naming-strategy | ストリーミングのアップロードモードで使用する命名ストラテジー。 | AWSS3NamingStrategyEnum | |
camel.component.aws2-s3.operation | ユーザーがアップロードだけをしたくない場合に行う操作。 | AWS2S3Operations | |
camel.component.aws2-s3.override-endpoint | エンドポイントをオーバーライドする必要性を設定します。このオプションは uriEndpointOverride オプションと併用する必要があります。 | false | Boolean |
camel.component.aws2-s3.part-size | マルチパートのアップロードで使用される partSize を設定します。デフォルトのサイズは 25M です。 | 26214400 | Long |
camel.component.aws2-s3.pojo-request | POJO リクエストをボディーとして使用するかどうか。 | false | Boolean |
camel.component.aws2-s3.policy | com.amazonaws.services.s3.AmazonS3#setBucketPolicy() メソッドに設定されるこのキューのポリシー。 | String | |
camel.component.aws2-s3.prefix | 対象のオブジェクトのみを消費するために com.amazonaws.services.s3.model.ListObjectsRequest で使用される接頭辞。 | String | |
camel.component.aws2-s3.proxy-host | SQS クライアントをインスタンス化するときにプロキシーホストを定義します。 | String | |
camel.component.aws2-s3.proxy-port | クライアント定義内で使用されるプロキシーポートを指定します。 | Integer | |
camel.component.aws2-s3.proxy-protocol | S3 クライアントをインスタンス化するときにプロキシープロトコルを定義します。 | Protocol | |
camel.component.aws2-s3.region | S3 クライアントが機能する必要があるリージョン。このパラメーターを使用する場合、設定には小文字のリージョン名を指定します (例 ap-east-1)。名前 Region.EU_WEST_1.id() を使用する必要があります。 | String | |
camel.component.aws2-s3.restarting-policy | ストリーミングのアップロードモードで使用する再起動ポリシー。 | AWSS3RestartingPolicyEnum | |
camel.component.aws2-s3.secret-key | Amazon AWS Secret Key。 | String | |
camel.component.aws2-s3.storage-class | com.amazonaws.services.s3.model.PutObjectRequest リクエストに設定するストレージクラス。 | String | |
camel.component.aws2-s3.streaming-upload-mode | ストリームモードが true の場合、バケットへのアップロードはストリーミングで行われます。 | false | Boolean |
camel.component.aws2-s3.streaming-upload-timeout | ストリーミングアップロードモードが true の場合、このオプションはタイムアウトを設定してアップロードを完了します。 | Long | |
camel.component.aws2-s3.trust-all-certificates | エンドポイントをオーバーライドするときにすべての証明書を信頼する場合。 | false | Boolean |
camel.component.aws2-s3.uri-endpoint-override | オーバーライドする URI エンドポイントを設定します。このオプションは overrideEndpoint オプションと組み合わせて使用する必要があります。 | String | |
camel.component.aws2-s3.use-aws-k-m-s | KMS を使用する必要があるかどうかを定義します。 | false | Boolean |
camel.component.aws2-s3.use-customer-key | カスタマーキーを使用する必要があるかどうかを定義します。 | false | Boolean |
camel.component.aws2-s3.use-default-credentials-provider | デフォルトのクレデンシャルプロバイダー経由でクレデンシャルをロードすること、または静的クレデンシャルが渡されることを S3 クライアントは想定すべきかどうかを設定します。 | false | Boolean |
第7章 AWS Simple Notification System (SNS)
producer のみサポート対象
AWS2 SNS コンポーネントを使用すると、メッセージを Amazon Simple Notification Topic に送信できます。Amazon API の実装は AWS SDK によって提供されます。
前提条件
有効な Amazon Web Services 開発者アカウントを持っていて、Amazon Kinesis を使用するためにサインアップしている必要がある。詳細は、Amazon SNS を参照してください。
7.1. URI 形式
aws2-sns://topicNameOrArn[?options]
トピックがまだ存在しない場合は作成されます。URI には、?options=value&option2=value&…
という形式でクエリーオプションを追加できます。
7.2. URI オプション
7.2.1. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
7.2.1.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
7.2.1.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
7.3. コンポーネントオプション
AWS Simple Notification System (SNS) コンポーネントは、以下に示す 24 のオプションをサポートしています。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
amazonSNSClient (producer) | Autowired AmazonSNS をクライアントとして使用します。 | SnsClient | |
autoCreateTopic (producer) | トピックの自動作成を設定します。 | false | boolean |
configuration (producer) | コンポーネントの設定。 | Sns2Configuration | |
kmsMasterKeyId (producer) | Amazon SNS の AWS 管理のカスタマーマスターキー (CMK) の ID またはカスタム CMK の ID。 | String | |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
messageDeduplicationIdStrategy (producer) | FIFO トピックのみ。メッセージに messageDeduplicationId を設定するストラテジー。useExchangeId または useContentBasedDeduplication のいずれかをオプションとして使用できます。useContentBasedDeduplication オプションでは、メッセージに messageDeduplicationId が設定されません。 列挙値:
| useExchangeId | String |
messageGroupIdStrategy (producer) | FIFO トピックのみ。メッセージに messageGroupId を設定するストラテジー。useConstant、useExchangeId、usePropertyValue のいずれかをオプションとして使用できます。usePropertyValue オプションでは、CamelAwsMessageGroupId プロパティーの値が使用されます。 列挙値:
| String | |
messageStructure (producer) | json などの使用するメッセージ構造。 | String | |
overrideEndpoint (producer) | エンドポイントをオーバーライドする必要性を設定します。このオプションは uriEndpointOverride オプションと併用する必要があります。 | false | boolean |
policy (producer) | このトピックのポリシー。デフォルトではクラスパスからロードされますが、classpath:、file:、または http: をプレフィックとして指定して、異なるシステムからリソースをロードすることもできます。 | String | |
proxyHost (producer) | SNS クライアントをインスタンス化するときにプロキシーホストを定義します。 | String | |
proxyPort (producer) | SNS クライアントをインスタンス化するときにプロキシーポートを定義します。 | Integer | |
proxyProtocol (producer) | SNS クライアントをインスタンス化するときにプロキシープロトコルを定義します。 列挙値:
| HTTPS | Protocol |
queueUrl (producer) | サブスクライブする queueUrl。 | String | |
region (producer) | SNS クライアントが機能する必要があるリージョン。このパラメーターを使用する場合、設定には小文字のリージョン名を指定します (例 ap-east-1)。名前 Region.EU_WEST_1.id() を使用する必要があります。 | String | |
serverSideEncryptionEnabled (producer) | サーバー側の暗号化がトピックで有効であるかどうかを定義します。 | false | boolean |
subject (producer) | メッセージヘッダー 'CamelAwsSnsSubject' が存在しない場合に使用されるサブジェクト。 | String | |
subscribeSNStoSQS (producer) | SNS トピックと SQS との間のサブスクリプションを完了する必要があるかどうかを定義します。 | false | boolean |
trustAllCertificates (producer) | エンドポイントをオーバーライドするときにすべての証明書を信頼する場合。 | false | boolean |
uriEndpointOverride (producer) | オーバーライドする URI エンドポイントを設定します。このオプションは overrideEndpoint オプションと組み合わせて使用する必要があります。 | String | |
useDefaultCredentialsProvider (producer) | SNS クライアントが AWS infra インスタンスでクレデンシャルのロードすること、または静的クレデンシャルが渡されることを SNS クライアントが想定すべきかどうかを設定します。 | false | boolean |
autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
accessKey (security) | Amazon AWS Access Key。 | String | |
secretKey (security) | Amazon AWS Secret Key。 | String |
7.4. エンドポイントオプション
AWS Simple Notification System (SNS) エンドポイントは、URI 構文を使用して設定されます。
aws2-sns:topicNameOrArn
パスおよびクエリーパラメーターを使用します。
7.4.1. パスパラメーター(1 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
topicNameOrArn (producer) | 必須 のトピック名または ARN。 | String |
7.4.2. クエリーパラメーター (23 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
amazonSNSClient (producer) | Autowired AmazonSNS をクライアントとして使用します。 | SnsClient | |
autoCreateTopic (producer) | トピックの自動作成を設定します。 | false | boolean |
headerFilterStrategy (producer) | カスタムの HeaderFilterStrategy を使用して、ヘッダーから Camel または Camel からヘッダーにマッピングします。 | HeaderFilterStrategy | |
kmsMasterKeyId (producer) | Amazon SNS の AWS 管理のカスタマーマスターキー (CMK) の ID またはカスタム CMK の ID。 | String | |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
messageDeduplicationIdStrategy (producer) | FIFO トピックのみ。メッセージに messageDeduplicationId を設定するストラテジー。useExchangeId または useContentBasedDeduplication のいずれかをオプションとして使用できます。useContentBasedDeduplication オプションでは、メッセージに messageDeduplicationId が設定されません。 列挙値:
| useExchangeId | String |
messageGroupIdStrategy (producer) | FIFO トピックのみ。メッセージに messageGroupId を設定するストラテジー。useConstant、useExchangeId、usePropertyValue のいずれかをオプションとして使用できます。usePropertyValue オプションでは、CamelAwsMessageGroupId プロパティーの値が使用されます。 列挙値:
| String | |
messageStructure (producer) | json などの使用するメッセージ構造。 | String | |
overrideEndpoint (producer) | エンドポイントをオーバーライドする必要性を設定します。このオプションは uriEndpointOverride オプションと併用する必要があります。 | false | boolean |
policy (producer) | このトピックのポリシー。デフォルトではクラスパスからロードされますが、classpath:、file:、または http: をプレフィックとして指定して、異なるシステムからリソースをロードすることもできます。 | String | |
proxyHost (producer) | SNS クライアントをインスタンス化するときにプロキシーホストを定義します。 | String | |
proxyPort (producer) | SNS クライアントをインスタンス化するときにプロキシーポートを定義します。 | Integer | |
proxyProtocol (producer) | SNS クライアントをインスタンス化するときにプロキシープロトコルを定義します。 列挙値:
| HTTPS | Protocol |
queueUrl (producer) | サブスクライブする queueUrl。 | String | |
region (producer) | SNS クライアントが機能する必要があるリージョン。このパラメーターを使用する場合、設定には小文字のリージョン名を指定します (例 ap-east-1)。名前 Region.EU_WEST_1.id() を使用する必要があります。 | String | |
serverSideEncryptionEnabled (producer) | サーバー側の暗号化がトピックで有効であるかどうかを定義します。 | false | boolean |
subject (producer) | メッセージヘッダー 'CamelAwsSnsSubject' が存在しない場合に使用されるサブジェクト。 | String | |
subscribeSNStoSQS (producer) | SNS トピックと SQS との間のサブスクリプションを完了する必要があるかどうかを定義します。 | false | boolean |
trustAllCertificates (producer) | エンドポイントをオーバーライドするときにすべての証明書を信頼する場合。 | false | boolean |
uriEndpointOverride (producer) | オーバーライドする URI エンドポイントを設定します。このオプションは overrideEndpoint オプションと組み合わせて使用する必要があります。 | String | |
useDefaultCredentialsProvider (producer) | SNS クライアントが AWS infra インスタンスでクレデンシャルのロードすること、または静的クレデンシャルが渡されることを SNS クライアントが想定すべきかどうかを設定します。 | false | boolean |
accessKey (security) | Amazon AWS Access Key。 | String | |
secretKey (security) | Amazon AWS Secret Key。 | String |
必要な SNS コンポーネントオプション
Amazon の SNS にアクセスするには、レジストリーに amazonDDBClient を指定するか、accessKey と secretKey を指定する必要があります。
7.5. 用途
7.5.1. 静的認証情報とデフォルトの認証情報プロバイダーの比較
useDefaultCredentialsProvider オプションを指定し、これを true に設定することにより、明示的な静的認証情報の使用を回避することが可能です。
- Java システムプロパティー - aws.accessKeyId および aws.secretKey
- 環境変数: AWS_ACCESS_KEY_ID および AWS_SECRET_ACCESS_KEY。
- AWS STS の Web ID トークン。
- 共有認証情報および設定ファイル。
- Amazon ECS コンテナー認証情報 - 環境変数 AWS_CONTAINER_CREDENTIALS_RELATIVE_URI が設定されている場合は、Amazon ECS からロードされます。
- Amazon EC2 インスタンスプロファイルの認証情報。
これに関する詳細情報は、AWS 認証情報のドキュメント を参照してください。
7.5.2. SNS producer によって評価されるメッセージヘッダー
ヘッダー | タイプ | 説明 |
---|---|---|
|
|
Amazon SNS メッセージの件名。設定されていない場合は、 |
7.5.3. SNS producer によって設定されるメッセージヘッダー
ヘッダー | タイプ | 説明 |
---|---|---|
|
| Amazon SNS メッセージ ID。 |
7.5.4. 高度な AmazonSNS 設定
SnsClient
インスタンス設定をさらに制御する必要がある場合は、独自のインスタンスを作成し、URI から参照できます。
from("direct:start") .to("aws2-sns://MyTopic?amazonSNSClient=#client");
#client
は、レジストリー内の AmazonSNS
を参照します。
7.5.5. AWS SNS トピックと AWS SQS キューの間にサブスクリプションを作成する
次の方法で、SNS トピックへの SQS キューのサブスクリプションを作成できます。
from("direct:start") .to("aws2-sns://test-camel-sns1?amazonSNSClient=#amazonSNSClient&subscribeSNStoSQS=true&queueUrl=https://sqs.eu-central-1.amazonaws.com/780410022472/test-camel");
#amazonSNSClient
は、レジストリー内の SnsClient
を参照します。subscribeSNStoSQS
を true に指定し、既存の SQS キューの queueUrl
を指定すると、SQS キューを SNS トピックにサブスクライブできます。
この時点で、SQS キューを介して SNS トピックからのメッセージを消費できます。
from("aws2-sqs://test-camel?amazonSQSClient=#amazonSQSClient&delay=50&maxMessagesPerPoll=5") .to(...);
7.6. トピックの自動作成
オプション autoCreateTopic
を使用すると、SNS トピックが存在しない場合に自動作成を回避できます。このオプションのデフォルトは true
です。false に設定すると、AWS に存在しないトピックに対する操作は成功せず、エラーが返されます。
7.7. SNS FIFO
SNS FIFO がサポートされています。SNS トピックにサブスクライブする SQS キューを作成する際に、覚えておくべき重要な点があります。SNS トピックがメッセージを SQS キューに送信できるようにする必要があります。
例
Order.fifo
という SNS FIFO トピックと QueueSub.fifo
という SQS キューを作成したとします。
QueueSub.fifo
のアクセスポリシーでは、次のようなものを送信する必要があります。
{ "Version": "2008-10-17", "Id": "__default_policy_ID", "Statement": [ { "Sid": "__owner_statement", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::780560123482:root" }, "Action": "SQS:*", "Resource": "arn:aws:sqs:eu-west-1:780560123482:QueueSub.fifo" }, { "Effect": "Allow", "Principal": { "Service": "sns.amazonaws.com" }, "Action": "SQS:SendMessage", "Resource": "arn:aws:sqs:eu-west-1:780560123482:QueueSub.fifo", "Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:sns:eu-west-1:780410022472:Order.fifo" } } } ] }
これは、サブスクリプションを正しく機能させるための重要なステップです。
7.7.1. SNS Fifo トピックメッセージグループ Id 戦略とメッセージ 重複排除 Id 戦略
何かを FIFO トピックに送信するときは、常にメッセージグループ ID 戦略を設定する必要があります。
コンテンツベースのメッセージ重複排除が SNS Fifo トピックで有効になっている場合、メッセージ重複排除 ID 戦略を設定する必要はありません。それ以外の場合は、設定する必要があります。
7.8. 例
7.8.1. producer の例
トピックへの送信
from("direct:start") .to("aws2-sns://camel-topic?subject=The+subject+message&autoCreateTopic=true");
7.9. Dependencies
Maven ユーザーは、以下の依存関係を pom.xml に追加する必要があります。
pom.xml
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-aws2-sns</artifactId> <version>${camel-version}</version> </dependency>
3.18.3
は Camel の実際のバージョンに置き換える必要があります。
7.10. Spring Boot 自動設定
Spring Boot で aws2-ddb を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-aws2-sns-starter</artifactId> </dependency>
コンポーネントは、以下に記載される 25 のオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.component.aws2-sns.access-key | Amazon AWS Access Key。 | String | |
camel.component.aws2-sns.amazon-s-n-s-client | AmazonSNS をクライアントとして使用します。オプションは、software.amazon.awssdk.services.sns.SnsClient タイプです。 | SnsClient | |
camel.component.aws2-sns.auto-create-topic | トピックの自動作成を設定します。 | false | Boolean |
camel.component.aws2-sns.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.aws2-sns.configuration | コンポーネントの設定。オプションは org.apache.camel.component.aws2.sns.Sns2Configuration タイプです。 | Sns2Configuration | |
camel.component.aws2-sns.enabled | aws2-sns コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.aws2-sns.kms-master-key-id | Amazon SNS の AWS 管理のカスタマーマスターキー (CMK) の ID またはカスタム CMK の ID。 | String | |
camel.component.aws2-sns.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
camel.component.aws2-sns.message-deduplication-id-strategy | FIFO トピックのみ。メッセージに messageDeduplicationId を設定するストラテジー。useExchangeId または useContentBasedDeduplication のいずれかをオプションとして使用できます。useContentBasedDeduplication オプションでは、メッセージに messageDeduplicationId が設定されません。 | useExchangeId | String |
camel.component.aws2-sns.message-group-id-strategy | FIFO トピックのみ。メッセージに messageGroupId を設定するストラテジー。useConstant、useExchangeId、usePropertyValue のいずれかをオプションとして使用できます。usePropertyValue オプションでは、CamelAwsMessageGroupId プロパティーの値が使用されます。 | String | |
camel.component.aws2-sns.message-structure | json などの使用するメッセージ構造。 | String | |
camel.component.aws2-sns.override-endpoint | エンドポイントをオーバーライドする必要性を設定します。このオプションは uriEndpointOverride オプションと併用する必要があります。 | false | Boolean |
camel.component.aws2-sns.policy | このトピックのポリシー。デフォルトではクラスパスからロードされますが、classpath:、file:、または http: をプレフィックとして指定して、異なるシステムからリソースをロードすることもできます。 | String | |
camel.component.aws2-sns.proxy-host | SNS クライアントをインスタンス化するときにプロキシーホストを定義します。 | String | |
camel.component.aws2-sns.proxy-port | SNS クライアントをインスタンス化するときにプロキシーポートを定義します。 | Integer | |
camel.component.aws2-sns.proxy-protocol | SNS クライアントをインスタンス化するときにプロキシープロトコルを定義します。 | Protocol | |
camel.component.aws2-sns.queue-url | サブスクライブする queueUrl。 | String | |
camel.component.aws2-sns.region | SNS クライアントが機能する必要があるリージョン。このパラメーターを使用する場合、設定には小文字のリージョン名を指定します (例 ap-east-1)。名前 Region.EU_WEST_1.id() を使用する必要があります。 | String | |
camel.component.aws2-sns.secret-key | Amazon AWS Secret Key。 | String | |
camel.component.aws2-sns.server-side-encryption-enabled | サーバー側の暗号化がトピックで有効であるかどうかを定義します。 | false | Boolean |
camel.component.aws2-sns.subject | メッセージヘッダー 'CamelAwsSnsSubject' が存在しない場合に使用されるサブジェクト。 | String | |
camel.component.aws2-sns.subscribe-s-n-sto-s-q-s | SNS トピックと SQS との間のサブスクリプションを完了する必要があるかどうかを定義します。 | false | Boolean |
camel.component.aws2-sns.trust-all-certificates | エンドポイントをオーバーライドするときにすべての証明書を信頼する場合。 | false | Boolean |
camel.component.aws2-sns.uri-endpoint-override | オーバーライドする URI エンドポイントを設定します。このオプションは overrideEndpoint オプションと組み合わせて使用する必要があります。 | String | |
camel.component.aws2-sns.use-default-credentials-provider | SNS クライアントが AWS infra インスタンスでクレデンシャルのロードすること、または静的クレデンシャルが渡されることを SNS クライアントが想定すべきかどうかを設定します。 | false | Boolean |
第8章 AWS Simple Queue Service (SQS)
producer と consumer の両方がサポート対象
AWS2 SQS コンポーネントは、Amazon の SQS サービス へのメッセージの送受信をサポートしています。
前提条件
有効な Amazon Web Services 開発者アカウントを持っていて、Amazon SQS を使用するためにサインアップしている必要がある。詳細は、Amazon SQS を参照してください。
8.1. URI 形式
aws2-sqs://queueNameOrArn[?options]
キューがまだ存在しない場合は作成されます。URI には、次の形式でクエリーオプションを追加できます。
?options=value&option2=value&…
8.2. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
8.2.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
8.2.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
8.3. コンポーネントオプション
AWS Simple Queue Service (SQS) コンポーネントは、以下に示す 43 のオプションをサポートしています。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
amazonAWSHost (共通) | Amazon AWS クラウドのホスト名。 | amazonaws.com | String |
amazonSQSClient (共通) | Autowired AmazonSQS をクライアントとして使用します。 | SqsClient | |
autoCreateQueue (共通) | キューの自動作成の設定。 | false | boolean |
configuration (共通) | AWS SQS のデフォルト設定。 | Sqs2Configuration | |
overrideEndpoint (共通) | エンドポイントをオーバーライドする必要性を設定します。このオプションは uriEndpointOverride オプションと併用する必要があります。 | false | boolean |
protocol (共通) | SQS との通信に使用される基礎となるプロトコル。 | https | String |
proxyProtocol (共通) | SQS クライアントをインスタンス化するときにプロキシープロトコルを定義します。 列挙値:
| HTTPS | Protocol |
queueOwnerAWSAccountId (共通) | 異なるアカウント所有者でキューを接続する必要がある場合は、キュー所有者の aws アカウント ID を指定します。 | String | |
region (共通) | SQS クライアントが機能する必要があるリージョン。このパラメーターを使用する場合、設定には小文字のリージョン名を指定します (例 ap-east-1)。名前 Region.EU_WEST_1.id() を使用する必要があります。 | String | |
trustAllCertificates (共通) | エンドポイントをオーバーライドするときにすべての証明書を信頼する場合。 | false | boolean |
uriEndpointOverride (共通) | オーバーライドする URI エンドポイントを設定します。このオプションは overrideEndpoint オプションと組み合わせて使用する必要があります。 | String | |
useDefaultCredentialsProvider (共通) | SQS クライアントが AWS infra インスタンスでクレデンシャルのロードすること、または静的クレデンシャルが渡されることを SNS クライアントが想定すべきかどうかを設定します。 | false | boolean |
attributeNames (consumer) | 消費時に受け取る属性名のリスト。複数の値はコンマで区切ることができます。 | String | |
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
concurrentConsumers (consumer) | 複数のスレッドを使用して sqs キューをポーリングし、スループットを向上させることができます。 | 1 | int |
defaultVisibilityTimeout (consumer) | デフォルトの表示タイムアウト (秒単位)。 | Integer | |
deleteAfterRead (consumer) | メッセージが読まれた後、SQS からメッセージを削除します。 | true | boolean |
deleteIfFiltered (consumer) | キー Sqs2Constants#SQS_DELETE_FILTERED (CamelAwsSqsDeleteFiltered) が true に設定されたプロパティーが交換にある場合に、DeleteMessage を SQS キューに送信するかどうか。 | true | boolean |
extendMessageVisibility (consumer) | 有効にすると、スケジュールされたバックグラウンドタスクにより、SQS でのメッセージの可視性が拡張され続けます。これは、メッセージの処理に時間がかかる場合に必要です。true に設定した場合は、defaultVisibilityTimeout を設定する必要があります。 | false | boolean |
kmsDataKeyReusePeriodSeconds (consumer) | AWS KMS を再度呼び出す前に、Amazon SQS がデータキーを再利用してメッセージを暗号化または復号できる時間の長さ (秒単位)。60 秒 (1 分) から 86,400 秒 (24 時間) までの秒を表す整数。デフォルトは 300 (5 分) です。 | Integer | |
kmsMasterKeyId (consumer) | Amazon SQS の AWS 管理のカスタマーマスターキー (CMK) の ID またはカスタム CMK の ID。 | String | |
messageAttributeNames (consumer) | 消費時に受け取るメッセージ属性名のリスト。複数の値はコンマで区切ることができます。 | String | |
serverSideEncryptionEnabled (consumer) | サーバー側の暗号化がキューで有効であるかどうかを定義します。 | false | boolean |
visibilityTimeout (consumer) | 受信したメッセージが、com.amazonaws.services.sqs.model.SetQueueAttributesRequest で設定する ReceiveMessage リクエストによって取得された後、後続の取得リクエストから非表示になる期間 (秒単位)。これは、defaultVisibilityTimeout とは異なる場合にのみ意味があります。キューの可視性タイムアウト属性を永続的に変更します。 | Integer | |
waitTimeSeconds (consumer) | メッセージがキューに入れられて応答に含まれるまで、ReceiveMessage アクション呼び出しが待機する時間 (0 から 20) です。 | Integer | |
batchSeparator (producer) | 文字列を渡してバッチメッセージ操作を送信するときに、区切り記号を設定します。 | , | String |
delaySeconds (producer) | 数秒間メッセージの送信を遅延します。 | Integer | |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
messageDeduplicationIdStrategy (producer) | FIFO キューの場合のみ。メッセージに messageDeduplicationId を設定するストラテジー。useExchangeId または useContentBasedDeduplication のいずれかをオプションとして使用できます。useContentBasedDeduplication オプションでは、メッセージに messageDeduplicationId が設定されません。 列挙値:
| useExchangeId | String |
messageGroupIdStrategy (producer) | FIFO キューの場合のみ。メッセージに messageGroupId を設定するストラテジー。useConstant、useExchangeId、usePropertyValue のいずれかをオプションとして使用できます。usePropertyValue オプションでは、CamelAwsMessageGroupId プロパティーの値が使用されます。 列挙値:
| String | |
operation (producer) | ユーザーがメッセージだけを送信したくない場合に行う操作。 列挙値:
| Sqs2Operations | |
autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
delayQueue (上級) | delaySeconds オプションをキューまたは単一のメッセージに適用するかどうかを定義します。 | false | boolean |
queueUrl (上級) | queueUrl を明示的に定義します。queueUrl に影響を与えるその他のパラメーターはすべて無視されます。このパラメーターは、テストのために SQS の仮実装 (モック) に接続すること目的としています。 | String | |
proxyHost (プロキシー) | SQS クライアントをインスタンス化するときにプロキシーホストを定義します。 | String | |
proxyPort (プロキシー) | SQS クライアントをインスタンス化するときにプロキシーポートを定義します。 | Integer | |
maximumMessageSize (キュー) | このキューの SQS メッセージに含めることができる maximumMessageSize (バイト単位)。 | Integer | |
messageRetentionPeriod (queue) | このキューの SQS によってメッセージが保持される messageRetentionPeriod (秒単位)。 | Integer | |
ポリシー (キュー) | このキューのポリシー。デフォルトではクラスパスからロードできますが、classpath:、file:、または http: の接頭辞を付けて、別のシステムからリソースをロードできます。 | String | |
receiveMessageWaitTimeSeconds (queue) | 要求で WaitTimeSeconds を指定しない場合は、キュー属性 ReceiveMessageWaitTimeSeconds を使用して待機時間を決定します。 | Integer | |
redrivePolicy (キュー) | DeadLetter キューにメッセージを送信するポリシーを指定します。Amazon ドキュメントで詳細を参照してください。 | String | |
accessKey (security) | Amazon AWS Access Key。 | String | |
secretKey (security) | Amazon AWS Secret Key。 | String |
8.4. エンドポイントオプション
AWS Simple Queue Service (SQS) エンドポイントは、URI 構文を使用して設定されます。
aws2-sqs:queueNameOrArn
パスおよびクエリーパラメーターを使用します。
8.4.1. パスパラメーター(1 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
queueNameOrArn (共通) | 必須 のキュー名または ARN。 | String |
8.4.2. クエリーパラメーター (61 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
amazonAWSHost (共通) | Amazon AWS クラウドのホスト名。 | amazonaws.com | String |
amazonSQSClient (共通) | Autowired AmazonSQS をクライアントとして使用します。 | SqsClient | |
autoCreateQueue (共通) | キューの自動作成の設定。 | false | boolean |
headerFilterStrategy (共通) | カスタムの HeaderFilterStrategy を使用して、ヘッダーから Camel または Camel からヘッダーにマッピングします。 | HeaderFilterStrategy | |
overrideEndpoint (共通) | エンドポイントをオーバーライドする必要性を設定します。このオプションは uriEndpointOverride オプションと併用する必要があります。 | false | boolean |
protocol (共通) | SQS との通信に使用される基礎となるプロトコル。 | https | String |
proxyProtocol (共通) | SQS クライアントをインスタンス化するときにプロキシープロトコルを定義します。 列挙値:
| HTTPS | Protocol |
queueOwnerAWSAccountId (共通) | 異なるアカウント所有者でキューを接続する必要がある場合は、キュー所有者の aws アカウント ID を指定します。 | String | |
region (共通) | SQS クライアントが機能する必要があるリージョン。このパラメーターを使用する場合、設定には小文字のリージョン名を指定します (例 ap-east-1)。名前 Region.EU_WEST_1.id() を使用する必要があります。 | String | |
trustAllCertificates (共通) | エンドポイントをオーバーライドするときにすべての証明書を信頼する場合。 | false | boolean |
uriEndpointOverride (共通) | オーバーライドする URI エンドポイントを設定します。このオプションは overrideEndpoint オプションと組み合わせて使用する必要があります。 | String | |
useDefaultCredentialsProvider (共通) | SQS クライアントが AWS infra インスタンスでクレデンシャルのロードすること、または静的クレデンシャルが渡されることを SNS クライアントが想定すべきかどうかを設定します。 | false | boolean |
attributeNames (consumer) | 消費時に受け取る属性名のリスト。複数の値はコンマで区切ることができます。 | String | |
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
concurrentConsumers (consumer) | 複数のスレッドを使用して sqs キューをポーリングし、スループットを向上させることができます。 | 1 | int |
defaultVisibilityTimeout (consumer) | デフォルトの表示タイムアウト (秒単位)。 | Integer | |
deleteAfterRead (consumer) | メッセージが読まれた後、SQS からメッセージを削除します。 | true | boolean |
deleteIfFiltered (consumer) | キー Sqs2Constants#SQS_DELETE_FILTERED (CamelAwsSqsDeleteFiltered) が true に設定されたプロパティーが交換にある場合に、DeleteMessage を SQS キューに送信するかどうか。 | true | boolean |
extendMessageVisibility (consumer) | 有効にすると、スケジュールされたバックグラウンドタスクにより、SQS でのメッセージの可視性が拡張され続けます。これは、メッセージの処理に時間がかかる場合に必要です。true に設定した場合は、defaultVisibilityTimeout を設定する必要があります。詳細については、Amazon ドキュメントを参照してください。 | false | boolean |
kmsDataKeyReusePeriodSeconds (consumer) | AWS KMS を再度呼び出す前に、Amazon SQS がデータキーを再利用してメッセージを暗号化または復号できる時間の長さ (秒単位)。60 秒 (1 分) から 86,400 秒 (24 時間) までの秒を表す整数。デフォルトは 300 (5 分) です。 | Integer | |
kmsMasterKeyId (consumer) | Amazon SQS の AWS 管理のカスタマーマスターキー (CMK) の ID またはカスタム CMK の ID。 | String | |
maxMessagesPerPoll (consumer) | 各ポーリングのポーリング制限としてメッセージの最大数を取得します。デフォルトは無制限ですが、0 または負の数を使用して無制限として無効にします。 | int | |
messageAttributeNames (consumer) | 消費時に受け取るメッセージ属性名のリスト。複数の値はコンマで区切ることができます。 | String | |
sendEmptyMessageWhenIdle (consumer) | ポーリング consumer がファイルをポーリングしなかった場合、このオプションを有効にして、代わりに空のメッセージ (ボディーなし) を送信できます。 | false | boolean |
serverSideEncryptionEnabled (consumer) | サーバー側の暗号化がキューで有効であるかどうかを定義します。 | false | boolean |
visibilityTimeout (consumer) | 受信したメッセージが、com.amazonaws.services.sqs.model.SetQueueAttributesRequest で設定する ReceiveMessage リクエストによって取得された後、後続の取得リクエストから非表示になる期間 (秒単位)。これは、defaultVisibilityTimeout とは異なる場合にのみ意味があります。キューの可視性タイムアウト属性を永続的に変更します。 | Integer | |
waitTimeSeconds (consumer) | メッセージがキューに入れられて応答に含まれるまで、ReceiveMessage アクション呼び出しが待機する時間 (0 から 20) です。 | Integer | |
exceptionHandler (consumer (上級)) | consumer によるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、consumer は例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
exchangePattern (consumer (上級)) | consumer がエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
pollStrategy (consumer (上級)) | プラグ可能な org.apache.camel.PollingConsumerPollingStrategy を使用すると、エクスチェンジが作成され、Camel でルーティングされる前に、通常はポーリング操作中に発生するエラー処理を制御するカスタム実装が提供できます。 | PollingConsumerPollStrategy | |
batchSeparator (producer) | 文字列を渡してバッチメッセージ操作を送信するときに、区切り記号を設定します。 | , | String |
delaySeconds (producer) | 数秒間メッセージの送信を遅延します。 | Integer | |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
messageDeduplicationIdStrategy (producer) | FIFO キューの場合のみ。メッセージに messageDeduplicationId を設定するストラテジー。useExchangeId または useContentBasedDeduplication のいずれかをオプションとして使用できます。useContentBasedDeduplication オプションでは、メッセージに messageDeduplicationId が設定されません。 列挙値:
| useExchangeId | String |
messageGroupIdStrategy (producer) | FIFO キューの場合のみ。メッセージに messageGroupId を設定するストラテジー。useConstant、useExchangeId、usePropertyValue のいずれかをオプションとして使用できます。usePropertyValue オプションでは、CamelAwsMessageGroupId プロパティーの値が使用されます。 列挙値:
| String | |
operation (producer) | ユーザーがメッセージだけを送信したくない場合に行う操作。 列挙値:
| Sqs2Operations | |
delayQueue (上級) | delaySeconds オプションをキューまたは単一のメッセージに適用するかどうかを定義します。 | false | boolean |
queueUrl (上級) | queueUrl を明示的に定義します。queueUrl に影響を与えるその他のパラメーターはすべて無視されます。このパラメーターは、テストのために SQS の仮実装 (モック) に接続すること目的としています。 | String | |
proxyHost (プロキシー) | SQS クライアントをインスタンス化するときにプロキシーホストを定義します。 | String | |
proxyPort (プロキシー) | SQS クライアントをインスタンス化するときにプロキシーポートを定義します。 | Integer | |
maximumMessageSize (キュー) | このキューの SQS メッセージに含めることができる maximumMessageSize (バイト単位)。 | Integer | |
messageRetentionPeriod (queue) | このキューの SQS によってメッセージが保持される messageRetentionPeriod (秒単位)。 | Integer | |
ポリシー (キュー) | このキューのポリシー。デフォルトではクラスパスからロードできますが、classpath:、file:、または http: の接頭辞を付けて、別のシステムからリソースをロードできます。 | String | |
receiveMessageWaitTimeSeconds (queue) | 要求で WaitTimeSeconds を指定しない場合は、キュー属性 ReceiveMessageWaitTimeSeconds を使用して待機時間を決定します。 | Integer | |
redrivePolicy (キュー) | DeadLetter キューにメッセージを送信するポリシーを指定します。Amazon ドキュメントで詳細を参照してください。 | String | |
backoffErrorThreshold (scheduler) | backoffMultipler が開始する前に発生する必要がある後続のエラーポーリング (エラーによって失敗した) の数。 | int | |
backoffIdleThreshold (scheduler) | backoffMultipler が開始する前に発生する必要がある後続のアイドルポーリングの数。 | int | |
backoffMultiplier (scheduler) | 後続のアイドル状態/エラーが連続して発生した場合に、スケジュールされたポーリング consumer のバックオフを許可します。乗数は、実際に次の試行が行われる前にスキップされるポーリングの数です。このオプションが使用されている場合は、backoffIdleThreshold や backoffErrorThreshold も設定する必要があります。 | int | |
delay (scheduler) | 次のポーリングまでの時間 (ミリ秒単位)。 | 500 | long |
greedy (scheduler) | greedy が有効で、以前の実行が 1 つ以上のメッセージをポーリングした場合、ScheduledPollConsumer は即座に再度実行されます。 | false | boolean |
initialDelay (scheduler) | 最初のポーリングが開始されるまでの時間 (ミリ秒単位)。 | 1000 | long |
repeatCount (スケジューラー) | 実行の最大数を指定します。そのため、これを 1 に設定するとスケジューラーは 1 度だけ実行されます。これを 5 に設定した場合、5 回だけ実行されます。0 または負の値を設定すると、無制限に実行されます。 | 0 | long |
runLoggingLevel (scheduler) | consumer はポーリング時に開始/完了のログ行を記録します。このオプションを使用すると、ログレベルを設定できます。 列挙値:
| TRACE | LoggingLevel |
scheduledExecutorService (scheduler) | consumer に使用するカスタム/共有スレッドプールを設定できます。デフォルトでは、各 consumer に独自の単一スレッドのスレッドプールがあります。 | ScheduledExecutorService | |
scheduler (スケジューラー) | camel-spring または camel-quartz コンポーネントから cron スケジューラーを使用します。スケジューラーにビルドされた値 spring または quartz を使用。 | none | オブジェクト |
schedulerProperties (スケジューラー) | カスタムスケジューラーまたは Quartz や Spring ベースのスケジューラーを使用する場合に、追加のプロパティーを設定します。 | マップ | |
startScheduler (scheduler) | スケジューラーを自動起動するかどうか。 | true | boolean |
timeUnit (scheduler) | initialDelay および delay オプションの時間単位。 列挙値:
| MILLISECONDS | TimeUnit |
useFixedDelay (scheduler) | 固定遅延または固定レートを使用するかどうかを制御します。詳細は、JDK の ScheduledExecutorService を参照してください。 | true | boolean |
accessKey (security) | Amazon AWS Access Key。 | String | |
secretKey (security) | Amazon AWS Secret Key。 | String |
必須の SQS コンポーネントオプション
Amazon の SQS にアクセスするには、レジストリーに amazonDDBClient を指定するか、accessKey と secretKey を指定する必要があります。
8.5. バッチ consumer
このコンポーネントは、Batch Consumer を実装します。
これにより、たとえば、このバッチに存在するメッセージの数を知ることができ、たとえば、Aggregator にこの数のメッセージを集約させることができます。
8.6. 用途
8.6.1. 静的認証情報とデフォルトの認証情報プロバイダーの比較
useDefaultCredentialsProvider
オプションを指定し、これを true に設定することにより、明示的な静的認証情報の使用を回避することが可能です。
-
Java system properties -
aws.accessKeyId
andaws.secretKey
-
環境変数:
AWS_ACCESS_KEY_ID
およびAWS_SECRET_ACCESS_KEY
。 - AWS STS の Web ID トークン。
- 共有認証情報および設定ファイル。
-
Amazon ECS コンテナー認証情報 - 環境変数
AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
が設定されている場合は、Amazon ECS からロードされます。 - Amazon EC2 インスタンスプロファイルの認証情報。
これに関する詳細情報は、AWS 認証情報のドキュメント を参照してください。
8.6.2. SQS producer によって設定されるメッセージヘッダー
ヘッダー | タイプ | 説明 |
---|---|---|
|
| Amazon SQS メッセージの MD5 チェックサム。 |
|
| Amazon SQS メッセージ ID。 |
|
| Amazon SQS メッセージが他のユーザーに表示される遅延秒数。 |
8.6.3. SQS consumer によって設定されるメッセージヘッダー
ヘッダー | タイプ | 説明 |
---|---|---|
|
| Amazon SQS メッセージの MD5 チェックサム。 |
|
| Amazon SQS メッセージ ID。 |
|
| Amazon SQS メッセージ受信ハンドル。 |
|
| Amazon SQS メッセージ属性。 |
8.6.4. 高度な AmazonSQS 設定
Camel アプリケーションがファイアウォールの背後で実行されている場合、または SqsClient
インスタンス設定をより詳細に制御する必要がある場合は、独自のインスタンスを作成できます。
from("aws2-sqs://MyQueue?amazonSQSClient=#client&delay=5000&maxMessagesPerPoll=5") .to("mock:result");
8.6.5. SQS キューの作成または更新
SQS コンポーネントでは、エンドポイントが開始されると、チェックが実行され、キューの存在に関する情報が取得されます。SQSConfiguration
オプションを使用して QueueAttributeName
マッピングを介して作成をカスタマイズできます。
from("aws2-sqs://MyQueue?amazonSQSClient=#client&delay=5000&maxMessagesPerPoll=5") .to("mock:result");
この例では、AWS で MyQueue
キューがまだ作成されていない場合 (および autoCreateQueue
オプションが true に設定されている場合)、SQS 設定のデフォルトパラメーターで作成されます。すでに AWS で稼働している場合は、SQS 設定オプションを使用して既存の AWS 設定をオーバーライドします。
8.6.6. 単一メッセージの DelayQueue VS 遅延
オプション delayQueue
が true に設定されている場合、SQS キューは DelaySeconds
オプションが遅延として指定された DelayQueue
になります。DelayQueue
の詳細については、AWS SQS のドキュメント を参照してください。考慮すべき重要な情報の 1 つは、次のとおりです。
- 標準キューの場合、キューごとの遅延設定は遡及的ではありません。設定を変更しても、すでにキューにあるメッセージの遅延には影響しません。
- FIFO キューの場合、キューごとの遅延設定は遡及的です。設定を変更すると、すでにキューにあるメッセージの遅延に影響します。
公式ドキュメントに記載されているとおりです。単一のメッセージに遅延を指定する場合は、delayQueue
オプションを無視できますが、エンキューされたすべてのメッセージに固定遅延を追加する必要がある場合は、このオプションを true に設定できます。
8.6.7. サーバー側の暗号化
キューには一連のサーバー側暗号化属性があります。関連するオプションは、serverSideEncryptionEnabled
、keyMasterKeyId
、および kmsDataKeyReusePeriod
です。SSE はデフォルトで無効になっています。オプションを明示的に true に設定し、関連するパラメーターをキュー属性として設定する必要があります。
8.7. JMS スタイルのセレクター
SQS ではセレクターを使用できませんが、キャメルフィルター EIP を使用して適切な visibilityTimeout
を設定することで効果的にこれを実現できます。SQS がメッセージをディスパッチするとき、DeleteMessage
が受信されない限り、可視性タイムアウトまで待機してから、別の consumer にメッセージをディスパッチしようとします。デフォルトでは、ルートが失敗に終わっていない限り、Camel は常にルートの最後に DeleteMessage
を送信します。適切なフィルタリングを実現し、ルートが正常に完了した場合でも DeleteMessage
を送信しないようにするには、Filter を使用します。
from("aws2-sqs://MyQueue?amazonSQSClient=#client&defaultVisibilityTimeout=5000&deleteIfFiltered=false&deleteAfterRead=false") .filter("${header.login} == true") .setProperty(Sqs2Constants.SQS_DELETE_FILTERED, constant(true)) .to("mock:filter");
上記のコードでは、交換に適切なヘッダーがない場合、フィルターを通過せず、SQS キューからも削除されません。5000 ミリ秒後、メッセージは他の consumer に表示されます。
フィルタリングされている場合、プロパティー Sqs2Constants.SQS_DELETE_FILTERED
を true
に設定して、Camel に DeleteMessage
を送信するように指示する必要があることに注意してください。
8.8. 利用可能な producer 操作
- 単一メッセージ (デフォルト)
- sendBatchMessage
- deleteMessage
- listQueues
8.9. メッセージを送信
SendMessageBatchRequest
または Iterable
を設定できます
from("direct:start") .setBody(constant("Camel rocks!")) .to("aws2-sqs://camel-1?accessKey=RAW(xxx)&secretKey=RAW(xxx)®ion=eu-west-1");
8.10. バッチメッセージの送信
SendMessageBatchRequest
または Iterable
を設定できます
from("direct:start") .setHeader(SqsConstants.SQS_OPERATION, constant("sendBatchMessage")) .process(new Processor() { @Override public void process(Exchange exchange) throws Exception { Collection c = new ArrayList(); c.add("team1"); c.add("team2"); c.add("team3"); c.add("team4"); exchange.getIn().setBody(c); } }) .to("aws2-sqs://camel-1?accessKey=RAW(xxx)&secretKey=RAW(xxx)®ion=eu-west-1");
その結果、SendMessageBatchResponse
インスタンスを含む交換が得られます。これを調べて、成功したメッセージと失敗したメッセージを確認できます。バッチの各メッセージに設定された ID は、ランダム UUID になります。
8.11. 単一のメッセージを削除
単一のメッセージを削除するには、deleteMessage
オペレーションを使用します。削除するメッセージの受信ハンドルヘッダーを設定する必要があります。
from("direct:start") .setHeader(SqsConstants.SQS_OPERATION, constant("deleteMessage")) .setHeader(SqsConstants.RECEIPT_HANDLE, constant("123456")) .to("aws2-sqs://camel-1?accessKey=RAW(xxx)&secretKey=RAW(xxx)®ion=eu-west-1");
その結果、メッセージが削除されたかどうかを確認するために使用できる DeleteMessageResponse
インスタンスを含む交換が得られます。
8.12. リストキュー
キューを一覧表示するには、listQueues
オペレーションを使用します。
from("direct:start") .setHeader(SqsConstants.SQS_OPERATION, constant("listQueues")) .to("aws2-sqs://camel-1?accessKey=RAW(xxx)&secretKey=RAW(xxx)®ion=eu-west-1");
その結果、実際のキューを確認するために調べることができる ListQueuesResponse
インスタンスを含む交換が得られます。
8.13. パージキュー
キューをパージするには、purgeQueue
オペレーションを使用します。
from("direct:start") .setHeader(SqsConstants.SQS_OPERATION, constant("purgeQueue")) .to("aws2-sqs://camel-1?accessKey=RAW(xxx)&secretKey=RAW(xxx)®ion=eu-west-1");
その結果、PurgeQueueResponse
インスタンスを含む交換が得られます。
8.14. キューの自動作成
オプション autoCreateQueue
を使用すると、SQS キューが存在しない場合に、ユーザーは SQS キューの自動作成を回避できます。このオプションのデフォルトは true
です。false に設定すると、AWS に存在しないキューに対する操作は成功せず、エラーが返されます。
8.15. バッチメッセージの送信とメッセージの重複排除戦略
SendBatchMessage
操作を使用している場合は、次の 2 種類のメッセージ重複排除戦略を設定できます: - useExchangeId - useContentBasedDeduplication
最初のものは ExchangeIdMessageDeduplicationIdStrategy
を使用し、Exchange ID をパラメーターとして使用します。もう 1 つは NullMessageDeduplicationIdStrategy
を使用し、本文を重複排除要素として使用します。
バッチメッセージの送信操作の場合、useContentBasedDeduplication
を使用する必要があり、ポイントしているキューで コンテンツベースの重複排除
オプションを有効にする必要があります。
8.16. Dependencies
Maven ユーザーは、以下の依存関係を pom.xml に追加する必要があります。
pom.xml
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-aws2-sqs</artifactId> <version>${camel-version}</version> </dependency>
3.18.3
は Camel の実際のバージョンに置き換える必要があります。
8.17. Spring Boot 自動設定
Spring Boot で aws2-ddb を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-aws2-sqs-starter</artifactId> </dependency>
コンポーネントは、以下に記載される 44 のオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.component.aws2-sqs.access-key | Amazon AWS Access Key。 | String | |
camel.component.aws2-sqs.amazon-a-w-s-host | Amazon AWS クラウドのホスト名。 | amazonaws.com | String |
camel.component.aws2-sqs.amazon-s-q-s-client | AmazonSQS をクライアントとして使用します。オプションは、software.amazon.awssdk.services.sqs.SqsClient タイプです。 | SqsClient | |
camel.component.aws2-sqs.attribute-names | 消費時に受け取る属性名のリスト。複数の値はコンマで区切ることができます。 | String | |
camel.component.aws2-sqs.auto-create-queue | キューの自動作成の設定。 | false | Boolean |
camel.component.aws2-sqs.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.aws2-sqs.batch-separator | 文字列を渡してバッチメッセージ操作を送信するときに、区切り記号を設定します。 | , | String |
camel.component.aws2-sqs.bridge-error-handler | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | Boolean |
camel.component.aws2-sqs.concurrent-consumers | 複数のスレッドを使用して sqs キューをポーリングし、スループットを向上させることができます。 | 1 | Integer |
camel.component.aws2-sqs.configuration | AWS SQS のデフォルト設定。オプションは org.apache.camel.component.aws2.sqs.Sqs2Configuration タイプです。 | Sqs2Configuration | |
camel.component.aws2-sqs.default-visibility-timeout | デフォルトの表示タイムアウト (秒単位)。 | Integer | |
camel.component.aws2-sqs.delay-queue | delaySeconds オプションをキューまたは単一のメッセージに適用するかどうかを定義します。 | false | Boolean |
camel.component.aws2-sqs.delay-seconds | 数秒間メッセージの送信を遅延します。 | Integer | |
camel.component.aws2-sqs.delete-after-read | メッセージが読まれた後、SQS からメッセージを削除します。 | true | Boolean |
camel.component.aws2-sqs.delete-if-filtered | キー Sqs2Constants#SQS_DELETE_FILTERED (CamelAwsSqsDeleteFiltered) が true に設定されたプロパティーが交換にある場合に、DeleteMessage を SQS キューに送信するかどうか。 | true | Boolean |
camel.component.aws2-sqs.enabled | aws2-sqs コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.aws2-sqs.extend-message-visibility | 有効にすると、スケジュールされたバックグラウンドタスクにより、SQS でのメッセージの可視性が拡張され続けます。これは、メッセージの処理に時間がかかる場合に必要です。true に設定した場合は、defaultVisibilityTimeout を設定する必要があります。詳細については、Amazon ドキュメントを参照してください。 | false | Boolean |
camel.component.aws2-sqs.kms-data-key-reuse-period-seconds | AWS KMS を再度呼び出す前に、Amazon SQS がデータキーを再利用してメッセージを暗号化または復号できる時間の長さ (秒単位)。60 秒 (1 分) から 86,400 秒 (24 時間) までの秒を表す整数。デフォルトは 300 (5 分) です。 | Integer | |
camel.component.aws2-sqs.kms-master-key-id | Amazon SQS の AWS 管理のカスタマーマスターキー (CMK) の ID またはカスタム CMK の ID。 | String | |
camel.component.aws2-sqs.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
camel.component.aws2-sqs.maximum-message-size | このキューの SQS メッセージに含めることができる maximumMessageSize (バイト単位)。 | Integer | |
camel.component.aws2-sqs.message-attribute-names | 消費時に受け取るメッセージ属性名のリスト。複数の値はコンマで区切ることができます。 | String | |
camel.component.aws2-sqs.message-deduplication-id-strategy | FIFO キューの場合のみ。メッセージに messageDeduplicationId を設定するストラテジー。useExchangeId または useContentBasedDeduplication のいずれかをオプションとして使用できます。useContentBasedDeduplication オプションでは、メッセージに messageDeduplicationId が設定されません。 | useExchangeId | String |
camel.component.aws2-sqs.message-group-id-strategy | FIFO キューの場合のみ。メッセージに messageGroupId を設定するストラテジー。useConstant、useExchangeId、usePropertyValue のいずれかをオプションとして使用できます。usePropertyValue オプションでは、CamelAwsMessageGroupId プロパティーの値が使用されます。 | String | |
camel.component.aws2-sqs.message-retention-period | このキューの SQS によってメッセージが保持される messageRetentionPeriod (秒単位)。 | Integer | |
camel.component.aws2-sqs.operation | ユーザーがメッセージだけを送信したくない場合に行う操作。 | Sqs2Operations | |
camel.component.aws2-sqs.override-endpoint | エンドポイントをオーバーライドする必要性を設定します。このオプションは uriEndpointOverride オプションと併用する必要があります。 | false | Boolean |
camel.component.aws2-sqs.policy | このキューのポリシー。デフォルトではクラスパスからロードできますが、classpath:、file:、または http: の接頭辞を付けて、別のシステムからリソースをロードできます。 | String | |
camel.component.aws2-sqs.protocol | SQS との通信に使用される基礎となるプロトコル。 | https | String |
camel.component.aws2-sqs.proxy-host | SQS クライアントをインスタンス化するときにプロキシーホストを定義します。 | String | |
camel.component.aws2-sqs.proxy-port | SQS クライアントをインスタンス化するときにプロキシーポートを定義します。 | Integer | |
camel.component.aws2-sqs.proxy-protocol | SQS クライアントをインスタンス化するときにプロキシープロトコルを定義します。 | Protocol | |
camel.component.aws2-sqs.queue-owner-a-w-s-account-id | 異なるアカウント所有者でキューを接続する必要がある場合は、キュー所有者の aws アカウント ID を指定します。 | String | |
camel.component.aws2-sqs.queue-url | queueUrl を明示的に定義します。queueUrl に影響を与えるその他のパラメーターはすべて無視されます。このパラメーターは、テストのために SQS の仮実装 (モック) に接続すること目的としています。 | String | |
camel.component.aws2-sqs.receive-message-wait-time-seconds | 要求で WaitTimeSeconds を指定しない場合は、キュー属性 ReceiveMessageWaitTimeSeconds を使用して待機時間を決定します。 | Integer | |
camel.component.aws2-sqs.redrive-policy | DeadLetter キューにメッセージを送信するポリシーを指定します。Amazon ドキュメントで詳細を参照してください。 | String | |
camel.component.aws2-sqs.region | SQS クライアントが機能する必要があるリージョン。このパラメーターを使用する場合、設定には小文字のリージョン名を指定します (例 ap-east-1)。名前 Region.EU_WEST_1.id() を使用する必要があります。 | String | |
camel.component.aws2-sqs.secret-key | Amazon AWS Secret Key。 | String | |
camel.component.aws2-sqs.server-side-encryption-enabled | サーバー側の暗号化がキューで有効であるかどうかを定義します。 | false | Boolean |
camel.component.aws2-sqs.trust-all-certificates | エンドポイントをオーバーライドするときにすべての証明書を信頼する場合。 | false | Boolean |
camel.component.aws2-sqs.uri-endpoint-override | オーバーライドする URI エンドポイントを設定します。このオプションは overrideEndpoint オプションと組み合わせて使用する必要があります。 | String | |
camel.component.aws2-sqs.use-default-credentials-provider | SQS クライアントが AWS infra インスタンスでクレデンシャルのロードすること、または静的クレデンシャルが渡されることを SNS クライアントが想定すべきかどうかを設定します。 | false | Boolean |
camel.component.aws2-sqs.visibility-timeout | 受信したメッセージが、com.amazonaws.services.sqs.model.SetQueueAttributesRequest で設定する ReceiveMessage リクエストによって取得された後、後続の取得リクエストから非表示になる期間 (秒単位)。これは、defaultVisibilityTimeout とは異なる場合にのみ意味があります。キューの可視性タイムアウト属性を永続的に変更します。 | Integer | |
camel.component.aws2-sqs.wait-time-seconds | メッセージがキューに入れられて応答に含まれるまで、ReceiveMessage アクション呼び出しが待機する時間 (0 から 20) です。 | Integer |
第9章 Azure ServiceBus
Camel 3.12 以降
producer と consumer の両方がサポート対象
Azure ServiceBus を統合する azure-servicebus コンポーネント。Azure ServiceBus は、フルマネージドのエンタープライズ統合メッセージブローカーです。Service Bus は、アプリケーションとサービスを切り離すことができます。Service Bus は、データと状態の非同期転送のための信頼できる安全なプラットフォームを提供します。メッセージを使用して、異なるアプリケーションやサービス間でデータが転送されます。
前提条件
有効な Windows Azure ストレージアカウントが必要です。詳細については、Azure ドキュメントポータル を参照してください。
このコンポーネントの pom.xml
に次の依存関係を追加します。
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-azure-servicebus</artifactId> <version>3.20.1.redhat-00031</version> <!-- use the same version as your Camel core version --> </dependency>
9.1. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
9.1.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
9.1.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
9.2. コンポーネントオプション
Azure ServiceBus コンポーネントは、以下に示す 25 のオプションをサポートしています。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
amqpRetryOptions (common) | Service Bus クライアントの再試行オプションを設定します。指定しないと、デフォルトの再試行オプションが使用されます。 | AmqpRetryOptions | |
amqpTransportType (common) | Azure Service Bus とのすべての通信が発生するトランスポートの種類を設定します。デフォルト値は AmqpTransportType#AMQP です。 列挙値:
| AMQP | AmqpTransportType |
clientOptions (共通) | このビルダーから構築されたクライアントから送信される ClientOptions を設定し、特定のプロパティーのカスタマイズを有効にし、カスタムヘッダー情報の追加をサポートします。詳細は、ClientOptions のドキュメントを参照してください。 | ClientOptions | |
configuration (common) | コンポーネントの設定。 | ServiceBusConfiguration | |
proxyOptions (共通) | ServiceBusSenderAsyncClient に使用するプロキシー設定を設定します。プロキシーが設定されている場合は、AmqpTransportType#AMQP_WEB_SOCKETS をトランスポートタイプに使用する必要があります。 | ProxyOptions | |
serviceBusType (common) | 必須 実行するサービスバスの接続の種類。キューは、サブスクリプションベースのモデルの典型的なキューオプションとトピックです。 列挙値:
| queue | ServiceBusType |
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
consumerOperation (consumer) | consumer で使用する目的の操作を設定します。 列挙値:
| receiveMessages | ServiceBusConsumerOperationDefinition |
disableAutoComplete (consumer) | 受信メッセージのオートコンプリートと自動破棄を無効にします。デフォルトでは、正常に処理されたメッセージは \\{link ServiceBusReceiverAsyncClient#complete (ServiceBusReceivedMessage) completed} です。メッセージの処理時にエラーが発生した場合は、\\{link ServiceBusReceiverAsyncClient#abandon(ServiceBusReceivedMessage) abandoned} 放棄} です。 | false | boolean |
maxAutoLockRenewDuration (consumer) | ロックの自動更新を継続する時間を設定します。Duration#ZERO または null を設定すると、自動更新が無効になります。\\{link ServiceBusReceiveMode#RECEIVE_AND_DELETE RECEIVE_AND_DELETE} モードでは、自動更新は無効になっています。 | 5m | 期間 |
peekNumMaxMessages (consumer) | ピーク操作中にピークされるメッセージの最大数を設定します。 | Integer | |
prefetchCount (consumer) | レシーバーのプリフェッチカウントを設定します。\\{link ServiceBusReceiveMode#PEEK_LOCK PEEK_LOCK} モードと \\{link ServiceBusReceiveMode#RECEIVE_AND_DELETE RECEIVE_AND_DELETE} モードの両方で、デフォルト値は 1 です。プリフェッチは、アプリケーションが ServiceBusReceiverAsyncClient#receiveMessages () を使用して要求する前に、ローカルでメッセージをすぐに取得できるようにすることで、メッセージフローを高速化します。ゼロ以外の値を設定すると、その数のメッセージがプリフェッチされます。値をゼロに設定すると、プリフェッチがオフになります。 | int | |
receiverAsyncClient (consumer) | Autowired consumer がメッセージを消費するために、receiverAsyncClient を設定します。 | ServiceBusReceiverAsyncClient | |
serviceBusReceiveMode (consumer) | 受信機の受信モードを設定します。 列挙値:
| PEEK_LOCK | ServiceBusReceiveMode |
subQueue (consumer) | 接続先の SubQueue のタイプを設定します。 列挙値:
| SubQueue | |
subscriptionName (consumer) | リッスンするトピックのサブスクリプションの名前を設定します。topicOrQueueName および serviceBusType=topic も設定する必要があります。このプロパティーは、serviceBusType=topic であり、consumer が使用されている場合に必要です。 | 文字列 | |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
ProducerOperation (producer) | producer で使用する目的の操作を設定します。 列挙値:
| sendMessages | ServiceBusProducerOperationDefinition |
scheduledEnqueueTime (producer) | メッセージが Service Bus キューまたはトピックに表示される OffsetDateTime を設定します。 | OffsetDateTime | |
senderAsyncClient (producer) | Autowired producer で使用される SenderAsyncClient を設定します。 | ServiceBusSenderAsyncClient | |
serviceBusTransactionContext (producer) | サービス中のトランザクションを表します。このオブジェクトにはトランザクション ID のみが含まれます。 | ServiceBusTransactionContext | |
autowiredEnabled (advanced) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
connectionString (セキュリティー) | Service Bus 名前空間または特定の Service Bus リソースの接続文字列を設定します。 | 文字列 | |
fullyQualifiedNamespace (セキュリティー) | サービスバスの完全修飾名前空間。 | 文字列 | |
tokenCredential (セキュリティー) | com.azure.identity に実装されている、Azure AD 認証用の TokenCredential。 | TokenCredential |
9.3. エンドポイントオプション
Azure ServiceBus エンドポイントは、URI 構文を使用して設定されます。
azure-servicebus:topicOrQueueName
パスおよびクエリーパラメーターを使用します。
9.3.1. パスパラメーター(1 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
topicOrQueueName (common) | serviceBusType 設定に依存する、選択されたトピック名またはキュー名。たとえば、serviceBusType=queue の場合、これはキュー名になり、serviceBusType=topic の場合、これはトピック名になります。 | 文字列 |
9.3.2. クエリーパラメーター (25 個のパラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
amqpRetryOptions (common) | Service Bus クライアントの再試行オプションを設定します。指定しないと、デフォルトの再試行オプションが使用されます。 | AmqpRetryOptions | |
amqpTransportType (common) | Azure Service Bus とのすべての通信が発生するトランスポートの種類を設定します。デフォルト値は AmqpTransportType#AMQP です。 列挙値:
| AMQP | AmqpTransportType |
clientOptions (共通) | このビルダーから構築されたクライアントから送信される ClientOptions を設定し、特定のプロパティーのカスタマイズを有効にし、カスタムヘッダー情報の追加をサポートします。詳細は、ClientOptions のドキュメントを参照してください。 | ClientOptions | |
proxyOptions (共通) | ServiceBusSenderAsyncClient に使用するプロキシー設定を設定します。プロキシーが設定されている場合は、AmqpTransportType#AMQP_WEB_SOCKETS をトランスポートタイプに使用する必要があります。 | ProxyOptions | |
serviceBusType (common) | 必須 実行するサービスバスの接続の種類。キューは、サブスクリプションベースのモデルの典型的なキューオプションとトピックです。 列挙値:
| queue | ServiceBusType |
consumerOperation (consumer) | consumer で使用する目的の操作を設定します。 列挙値:
| receiveMessages | ServiceBusConsumerOperationDefinition |
disableAutoComplete (consumer) | 受信メッセージのオートコンプリートと自動破棄を無効にします。デフォルトでは、正常に処理されたメッセージは \\{link ServiceBusReceiverAsyncClient#complete (ServiceBusReceivedMessage) completed} です。メッセージの処理時にエラーが発生した場合は、\\{link ServiceBusReceiverAsyncClient#abandon(ServiceBusReceivedMessage) abandoned} 放棄} です。 | false | boolean |
maxAutoLockRenewDuration (consumer) | ロックの自動更新を継続する時間を設定します。Duration#ZERO または null を設定すると、自動更新が無効になります。\\{link ServiceBusReceiveMode#RECEIVE_AND_DELETE RECEIVE_AND_DELETE} モードでは、自動更新は無効になっています。 | 5m | 期間 |
peekNumMaxMessages (consumer) | ピーク操作中にピークされるメッセージの最大数を設定します。 | Integer | |
prefetchCount (consumer) | レシーバーのプリフェッチカウントを設定します。\\{link ServiceBusReceiveMode#PEEK_LOCK PEEK_LOCK} モードと \\{link ServiceBusReceiveMode#RECEIVE_AND_DELETE RECEIVE_AND_DELETE} モードの両方で、デフォルト値は 1 です。プリフェッチは、アプリケーションが ServiceBusReceiverAsyncClient#receiveMessages () を使用して要求する前に、ローカルでメッセージをすぐに取得できるようにすることで、メッセージフローを高速化します。ゼロ以外の値を設定すると、その数のメッセージがプリフェッチされます。値をゼロに設定すると、プリフェッチがオフになります。 | int | |
receiverAsyncClient (consumer) | Autowired consumer がメッセージを消費するために、receiverAsyncClient を設定します。 | ServiceBusReceiverAsyncClient | |
serviceBusReceiveMode (consumer) | 受信機の受信モードを設定します。 列挙値:
| PEEK_LOCK | ServiceBusReceiveMode |
subQueue (consumer) | 接続先の SubQueue のタイプを設定します。 列挙値:
| SubQueue | |
subscriptionName (consumer) | リッスンするトピックのサブスクリプションの名前を設定します。topicOrQueueName および serviceBusType=topic も設定する必要があります。このプロパティーは、serviceBusType=topic であり、consumer が使用されている場合に必要です。 | 文字列 | |
bridgeErrorHandler (consumer (上級)) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
exceptionHandler (consumer (上級)) | consumer によるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、consumer は例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
exchangePattern (consumer (上級)) | consumer がエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
ProducerOperation (producer) | producer で使用する目的の操作を設定します。 列挙値:
| sendMessages | ServiceBusProducerOperationDefinition |
scheduledEnqueueTime (producer) | メッセージが Service Bus キューまたはトピックに表示される OffsetDateTime を設定します。 | OffsetDateTime | |
senderAsyncClient (producer) | Autowired producer で使用される SenderAsyncClient を設定します。 | ServiceBusSenderAsyncClient | |
serviceBusTransactionContext (producer) | サービス中のトランザクションを表します。このオブジェクトにはトランザクション ID のみが含まれます。 | ServiceBusTransactionContext | |
lazyStartProducer (producer (advanced)) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
connectionString (セキュリティー) | Service Bus 名前空間または特定の Service Bus リソースの接続文字列を設定します。 | 文字列 | |
fullyQualifiedNamespace (セキュリティー) | サービスバスの完全修飾名前空間。 | 文字列 | |
tokenCredential (セキュリティー) | com.azure.identity に実装されている、Azure AD 認証用の TokenCredential。 | TokenCredential |
9.4. 非同期 consumer と producer
このコンポーネントは、非同期の consumer と producer を実装します。これにより、camel ルートは、スレッドをブロックすることなく、イベントを非同期に消費および生成できます。
9.5. メッセージヘッダー
Azure ServiceBus コンポーネントは、以下に示す 25 個のメッセージヘッダーをサポートしています。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
CamelAzureServiceBusApplicationProperties (common) | producer と consumer によってそれぞれ送受信されるメッセージのアプリケーションプロパティー (カスタムプロパティーとも呼ばれます)。 | Map | |
CamelAzureServiceBusContentType (consumer) 定数: CONTENT_TYPE | メッセージのコンテンツタイプを取得します。 | 文字列 | |
CamelAzureServiceBusCorrelationId (consumer) 定数: CORRELATION_ID | 相関識別子を取得します。 | 文字列 | |
CamelAzureServiceBusDeadLetterErrorDescription (consumer) | デッドレターキューに追加されたメッセージの説明を取得します。 | 文字列 | |
CamelAzureServiceBusDeadLetterReason (consumer) | メッセージがデッドレターキューに追加された理由を取得します。 | 文字列 | |
CamelAzureServiceBusDeadLetterSource (consumer) | このメッセージがキューに格納されたキューまたはサブスクリプションの名前を取得してから、デッドレターに追加されます。 | 文字列 | |
CamelAzureServiceBusDeliveryCount (consumer) 定数: DELIVERY_COUNT | このメッセージがクライアントに配信された回数を取得します。 | long | |
CamelAzureServiceBusEnqueuedSequenceNumber (consumer) | Service Bus によってメッセージに割り当てられた、キューに入れられたシーケンス番号を取得します。 | long | |
CamelAzureServiceBusEnqueuedTime (consumer) 定数: ENQUEUED_TIME | このメッセージが Azure Service Bus でエンキューされた日時を取得します。 | OffsetDateTime | |
CamelAzureServiceBusExpiresAt (consumer) 定数: EXPIRES_AT | このメッセージの有効期限が切れる日時を取得します。 | OffsetDateTime | |
CamelAzureServiceBusLockToken (consumer) 定数: LOCK_TOKEN | 現在のメッセージのロックトークンを取得します。 | 文字列 | |
CamelAzureServiceBusLockedUntil (consumer) 定数: LOCKED_UNTIL | このメッセージのロックが切れる日時を取得します。 | OffsetDateTime | |
CamelAzureServiceBusMessageId (consumer) 定数: MESSAGE_ID | メッセージの識別子を取得します。 | 文字列 | |
CamelAzureServiceBusPartitionKey (consumer) 定数: PARTITION_KEY | パーティション分割されたエンティティーにメッセージを送信するためのパーティションキーを取得します。 | 文字列 | |
CamelAzureServiceBusRawAmqpMessage (consumer) 定数: RAW_AMQP_MESSAGE | AMQP プロトコルで定義されたメッセージの表現。 | AmqpAnnotatedMessage | |
CamelAzureServiceBusReplyTo (consumer) 定数: REPLY_TO | 返信を送信するエンティティーのアドレスを取得します。 | 文字列 | |
CamelAzureServiceBusReplyToSessionId (consumer) | ReplyTo アドレスを拡張するセッション識別子を取得または設定します。 | 文字列 | |
CamelAzureServiceBusSequenceNumber (consumer) 定数: SEQUENCE_NUMBER | Service Bus によってメッセージに割り当てられた一意の番号を取得します。 | long | |
CamelAzureServiceBusSessionId (consumer) 定数: SESSION_ID | メッセージのセッション ID を取得します。 | 文字列 | |
CamelAzureServiceBusSubject (consumer) 定数: SUBJECT | メッセージのサブジェクトを取得します。 | 文字列 | |
CamelAzureServiceBusTimeToLive (consumer) 定数: TIME_TO_LIVE | このメッセージが期限切れになるまでの期間を取得します。 | 期間 | |
CamelAzureServiceBusTo (consumer) 定数: TO | アドレスを取得します。 | 文字列 | |
CamelAzureServiceBusScheduledEnqueueTime (common) | (producer) メッセージが Service Bus キューまたはトピックに表示される OffsetDateTime をオーバーライドします。(consumer) このメッセージのスケジュールされたエンキュー時刻を取得します。 | OffsetDateTime | |
CamelAzureServiceBusServiceBusTransactionContext (producer) | サービス中のトランザクションをオーバーライドします。このオブジェクトにはトランザクション ID のみが含まれます。 | ServiceBusTransactionContext | |
CamelAzureServiceBusProducerOperation (producer) | producer で使用する目的の操作をオーバーライドします。 列挙値:
| ServiceBusProducerOperationDefinition |
9.5.1. メッセージボディー
producer では、このコンポーネントは String
型または List<String>
のメッセージ本文を受け入れてバッチメッセージを送信します。
cosumer では、返されるメッセージ本文は String.type になります。
9.5.2. Azure ServiceBus producer の操作
操作 | 説明 |
---|---|
| バッチアプローチを使用して、一連のメッセージを Service Bus キューまたはトピックに送信します。 |
| この送信者が接続されている Azure Service Bus エンティティーにスケジュールされたメッセージを送信します。スケジュールされたメッセージはキューに入れられ、スケジュールされたエンキュー時間にのみ受信者が利用できるようになります。 |
9.5.3. Azure ServiceBus consumer の操作
操作 | 説明 |
---|---|
| Service Bus エンティティーから <b>無限</b> のメッセージストリームを受信します。 |
| 受信側またはメッセージソースの状態を変更せずに、アクティブメッセージの次のバッチを読み取ります。 |
9.5.3.1. 例
-
sendMessages
from("direct:start") .process(exchange -> { final List<Object> inputBatch = new LinkedList<>(); inputBatch.add("test batch 1"); inputBatch.add("test batch 2"); inputBatch.add("test batch 3"); inputBatch.add(123456); exchange.getIn().setBody(inputBatch); }) .to("azure-servicebus:test//?connectionString=test") .to("mock:result");
-
scheduleMessages
from("direct:start") .process(exchange -> { final List<Object> inputBatch = new LinkedList<>(); inputBatch.add("test batch 1"); inputBatch.add("test batch 2"); inputBatch.add("test batch 3"); inputBatch.add(123456); exchange.getIn().setHeader(ServiceBusConstants.SCHEDULED_ENQUEUE_TIME, OffsetDateTime.now()); exchange.getIn().setBody(inputBatch); }) .to("azure-servicebus:test//?connectionString=test&producerOperation=scheduleMessages") .to("mock:result");
-
receiveMessages
from("azure-servicebus:test//?connectionString=test") .log("${body}") .to("mock:result");
-
peekMessages
from("azure-servicebus:test//?connectionString=test&consumerOperation=peekMessages&peekNumMaxMessages=3") .log("${body}") .to("mock:result");
9.6. Spring Boot 自動設定
Spring Boot で azure-servicebus を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-azure-servicebus-starter</artifactId> </dependency>
コンポーネントは、以下に記載される 26 個のオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.component.azure-servicebus.amqp-retry-options | Service Bus クライアントの再試行オプションを設定します。指定しないと、デフォルトの再試行オプションが使用されます。オプションは com.azure.core.amqp.AmqpRetryOptions 型です。 | AmqpRetryOptions | |
camel.component.azure-servicebus.amqp-transport-type | Azure Service Bus とのすべての通信が発生するトランスポートの種類を設定します。デフォルト値は AmqpTransportType#AMQP です。 | AmqpTransportType | |
camel.component.azure-servicebus.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.azure-servicebus.bridge-error-handler | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | Boolean |
camel.component.azure-servicebus.client-options | このビルダーから構築されたクライアントから送信される ClientOptions を設定し、特定のプロパティーのカスタマイズを有効にし、カスタムヘッダー情報の追加をサポートします。詳細は、ClientOptions のドキュメントを参照してください。オプションは com.azure.core.util.ClientOptions 型です。 | ClientOptions | |
camel.component.azure-servicebus.configuration | コンポーネントの設定。オプションは org.apache.camel.component.azure.servicebus.ServiceBusConfiguration タイプです。 | ServiceBusConfiguration | |
camel.component.azure-servicebus.connection-string | Service Bus 名前空間または特定の Service Bus リソースの接続文字列を設定します。 | 文字列 | |
camel.component.azure-servicebus.consumer-operation | consumer で使用する目的の操作を設定します。 | ServiceBusConsumerOperationDefinition | |
camel.component.azure-servicebus.disable-auto-complete | 受信メッセージのオートコンプリートと自動破棄を無効にします。デフォルトでは、正常に処理されたメッセージは \\{link ServiceBusReceiverAsyncClient#complete (ServiceBusReceivedMessage) completed} です。メッセージの処理時にエラーが発生した場合は、\\{link ServiceBusReceiverAsyncClient#abandon(ServiceBusReceivedMessage) abandoned} 放棄} です。 | false | Boolean |
camel.component.azure-servicebus.enabled | azure-servicebus コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.azure-servicebus.fully-qualified-namespace | サービスバスの完全修飾名前空間。 | 文字列 | |
camel.component.azure-servicebus.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
camel.component.azure-servicebus.max-auto-lock-renew-duration | ロックの自動更新を継続する時間を設定します。Duration#ZERO または null を設定すると、自動更新が無効になります。\\{link ServiceBusReceiveMode#RECEIVE_AND_DELETE RECEIVE_AND_DELETE} モードでは、自動更新は無効になっています。オプションは java.time.Duration タイプです。 | 期間 | |
camel.component.azure-servicebus.peek-num-max-messages | ピーク操作中にピークされるメッセージの最大数を設定します。 | Integer | |
camel.component.azure-servicebus.prefetch-count | レシーバーのプリフェッチカウントを設定します。\\{link ServiceBusReceiveMode#PEEK_LOCK PEEK_LOCK} モードと \\{link ServiceBusReceiveMode#RECEIVE_AND_DELETE RECEIVE_AND_DELETE} モードの両方で、デフォルト値は 1 です。プリフェッチは、アプリケーションが ServiceBusReceiverAsyncClient#receiveMessages () を使用して要求する前に、ローカルでメッセージをすぐに取得できるようにすることで、メッセージフローを高速化します。ゼロ以外の値を設定すると、その数のメッセージがプリフェッチされます。値をゼロに設定すると、プリフェッチがオフになります。 | Integer | |
camel.component.azure-servicebus.producer-operation | producer で使用する目的の操作を設定します。 | ServiceBusProducerOperationDefinition | |
camel.component.azure-servicebus.proxy-options | ServiceBusSenderAsyncClient に使用するプロキシー設定を設定します。プロキシーが設定されている場合は、AmqpTransportType#AMQP_WEB_SOCKETS をトランスポートタイプに使用する必要があります。オプションは com.azure.core.amqp.ProxyOptions 型です。 | ProxyOptions | |
camel.component.azure-servicebus.receiver-async-client | consumer がメッセージを消費するために、receiverAsyncClient を設定します。オプションは com.azure.messaging.servicebus.ServiceBusReceiverAsyncClient 型です。 | ServiceBusReceiverAsyncClient | |
camel.component.azure-servicebus.scheduled-enqueue-time | メッセージが Service Bus キューまたはトピックに表示される OffsetDateTime を設定します。オプションは java.time.OffsetDateTime 型です。 | OffsetDateTime | |
camel.component.azure-servicebus.sender-async-client | producer で使用される SenderAsyncClient を設定します。オプションは com.azure.messaging.servicebus.ServiceBusSenderAsyncClient 型です。 | ServiceBusSenderAsyncClient | |
camel.component.azure-servicebus.service-bus-receive-mode | 受信機の受信モードを設定します。 | ServiceBusReceiveMode | |
camel.component.azure-servicebus.service-bus-transaction-context | サービス中のトランザクションを表します。このオブジェクトにはトランザクション ID のみが含まれます。オプションは com.azure.messaging.servicebus.ServiceBusTransactionContext 型です。 | ServiceBusTransactionContext | |
camel.component.azure-servicebus.service-bus-type | 実行するサービスバスの接続の種類。キューは、サブスクリプションベースのモデルの典型的なキューオプションとトピックです。 | ServiceBusType | |
camel.component.azure-servicebus.sub-queue | 接続先の SubQueue のタイプを設定します。 | SubQueue | |
camel.component.azure-servicebus.subscription-name | リッスンするトピックのサブスクリプションの名前を設定します。topicOrQueueName および serviceBusType=topic も設定する必要があります。このプロパティーは、serviceBusType=topic であり、consumer が使用されている場合に必要です。 | 文字列 | |
camel.component.azure-servicebus.token-credential | com.azure.identity に実装されている、Azure AD 認証用の TokenCredential。オプションは com.azure.core.credential.TokenCredential 型です。 | TokenCredential |
第10章 Azure Storage Blob Service
producer と consumer の両方がサポート対象
Azure Storage Blob コンポーネントは、Azure API v12 を使用して Azure Storage Blob Service から BLOB を格納および取得するために使用されます。ただし、v12 より上のバージョンの場合、破壊的な変更がどの程度発生するかによって、このコンポーネントがこれらの変更を採用できるかどうかを確認します。
前提条件
有効な Windows Azure ストレージアカウントが必要です。詳細については、Azure ドキュメントポータル を参照してください。
Maven ユーザーは、このコンポーネントの pom.xml
に以下の依存関係を追加する必要があります。
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-azure-storage-blob</artifactId> <version>{CamelSBVersion}</version> <!-- use the same version as your Camel core version --> </dependency>
10.1. URI 形式
azure-storage-blob://accountName[/containerName][?options]
consumer の場合、accountName
、containerName
が必要です。producer の場合、要求される操作によって異なります。たとえば、操作がコンテナーレベルである場合、たとえば createContainer
の場合、accountName
と containerName
のみが必要ですが、BLOB レベルで操作が要求される場合、たとえば、getBlob
、accountName
、containerName
、および blobName
は必須です。
BLOB がまだ存在しない場合は作成されます。URI には、次の形式でクエリーオプションを追加できます。
?options=value&option2=value&…
10.2. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
10.2.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
10.2.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
10.3. コンポーネントオプション
Azure Storage Blob Service コンポーネントは、以下に示す 31 のオプションをサポートしています。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
blobName (共通) | コンテナーから特定の BLOB を使用するための BLOB 名。ただし、producer では、BLOB レベルでの操作にのみ必要です。 | String | |
blobOffset (共通) | アップロードまたはダウンロード操作の BLOB オフセットを設定します。デフォルトは 0 です。 | 0 | long |
blobType (共通) | BLOB の種類ごとに適切な設定を開始するための BLOB の種類。 列挙値:
| blockblob | BlobType |
closeStreamAfterRead (共通) | 読み取り後にストリームを閉じるか、開いたままにします。デフォルトは true です。 | true | boolean |
configuration (共通) | コンポーネントの設定。 | BlobConfiguration | |
credentials (共通) | StorageSharedKeyCredential を挿入して Azure クライアントを作成できます。これには重要な認証情報が保持されます。 | StorageSharedKeyCredential | |
dataCount (共通) | 範囲に含めるバイト数。指定する場合は、0 以上である必要があります。 | Long | |
fileDir (共通) | ダウンロードされた BLOB が保存されるファイルディレクトリー。これは producer と consumer の両方で使用できます。 | String | |
maxResultsPerPage (共通) | すべての BlobPrefix 要素を含め、返される BLOB の最大数を指定します。要求で maxResultsPerPage が指定されていないか、5,000 を超える値が指定されている場合、サーバーは最大 5,000 項目を返します。 | Integer | |
maxRetryRequests (共通) | レスポンスのボディーからデータを読み取るときに作成される追加の HTTP Get 要求の最大数を指定します。 | 0 | int |
prefix (共通) | 結果をフィルター処理して、名前が指定された接頭辞で始まる BLOB のみを返します。すべての BLOB を返すには null の場合があります。 | String | |
regex (共通) | 結果をフィルタリングして、指定された正規表現と名前が一致する BLOB のみを返します。接頭辞と正規表現の両方が設定されている場合は、すべてを返すために null になる場合があります。正規表現が優先され、接頭辞は無視されます。 | String | |
serviceClient (共通) | クライアントをストレージアカウントに Autowired します。このクライアントは、特定のストレージアカウントに関する状態を保持しませんが、サービス上のリソースに適切な要求を送信する便利な方法です。また、BLOB およびコンテナーへの URL を作成するために使用することもできます。このクライアントには、サービスアカウントに対する操作が含まれています。コンテナーに対する操作は、BlobServiceClient#getBlobContainerClient(String) を介して BlobContainerClient で利用でき、ブロブに対する操作は、BlobContainerClient#getBlobClient(String) を介して BlobClient で利用できます。 | BlobServiceClient | |
timeout (共通) | それを超えると RuntimeException が発生する任意のタイムアウト値。 | 期間 | |
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
blobSequenceNumber (producer) | リクエストの追跡に使用できるユーザー制御の値。シーケンス番号の値は、0 から 263 - 1 の間でなければなりません。デフォルト値は 0 です。 | 0 | Long |
blockListType (producer) | 返すブロックのタイプを指定します。 列挙値:
| COMMITTED | BlockListType |
changeFeedContext (producer) | getChangeFeed producer オペレーションを使用する場合は、これにより、サービス呼び出し中に Http パイプラインを介して渡される追加のコンテキストが提供されます。 | コンテキスト | |
changeFeedEndTime (producer) | getChangeFeed producer オペレーションを使用する場合は、これにより結果がフィルター処理され、終了時刻のほぼ前にイベントが返されます。注意: 次の 1 時間に属するいくつかのイベントも返される可能性があります。この時間に属するいくつかのイベントが欠落している可能性があります。その時間のすべてのイベントが確実に返されるようにするには、終了時間を 1 時間単位で切り上げます。 | OffsetDateTime | |
changeFeedStartTime (producer) | getChangeFeed producer 操作を使用する場合は、これにより結果がフィルター処理され、開始時刻のほぼ後にイベントが返されます。注意: 前の時間に属するいくつかのイベントも返される可能性があります。この時間に属するいくつかのイベントが欠落している可能性があります。その時間のすべてのイベントが確実に返されるようにするには、開始時間を 1 時間単位で切り捨てます。 | OffsetDateTime | |
closeStreamAfterWrite (producer) | 書き込み後にストリームを閉じるか、開いたままにします。デフォルトは true です。 | true | boolean |
commitBlockListLater (producer) | true に設定されていると、ステージングされたブロックは直接コミットされません。 | true | boolean |
createAppendBlob (producer) | true に設定されていると、追加ブロックのコミット時に追加ブロックが作成されます。 | true | boolean |
createPageBlob (producer) | true に設定すると、ページブロブのアップロード時にページ Blob が作成されます。 | true | boolean |
downloadLinkExpiration (producer) | URL ダウンロードリンクのデフォルトの有効期限 (ミリ秒) をオーバーライドします。 | Long | |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
operation (producer) | producer のこのコンポーネントで使用できる Blob 操作。 列挙値:
| listBlobContainers | BlobOperationsDefinition |
pageBlobSize (producer) | ページ BLOB の最大サイズを 8 TB まで指定します。ページ BLOB のサイズは、512 バイトの境界に合わせる必要があります。 | 512 | Long |
autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
accessKey (security) | Azure Blob サービスでの認証に使用される、関連付けられた Azure アカウント名のアクセスキー。 | String | |
sourceBlobAccessKey (セキュリティー) | ソース Blob アクセスキー: copyblob 操作では、コピーするソース Blob の accessKey が必要です。accessKey をヘッダーとして渡すと、安全ではないため、キーとして設定できます。 | String |
10.4. エンドポイントオプション
Azure Storage Blob Service エンドポイントは、URI 構文を使用して設定されます。
azure-storage-blob:accountName/containerName
パスおよびクエリーパラメーターを使用します。
10.4.1. パスパラメーター (2 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
accountName (共通) | Azure BLOB サービスでの認証に使用される Azure アカウント名。 | String | |
containerName (共通) | BLOB コンテナー名。 | String |
10.4.2. クエリーパラメーター (48 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
blobName (共通) | コンテナーから特定の BLOB を使用するための BLOB 名。ただし、producer では、BLOB レベルでの操作にのみ必要です。 | String | |
blobOffset (共通) | アップロードまたはダウンロード操作の BLOB オフセットを設定します。デフォルトは 0 です。 | 0 | long |
blobServiceClient (共通) | ストレージアカウントへのクライアント。このクライアントは、特定のストレージアカウントに関する状態を保持しませんが、サービス上のリソースに適切な要求を送信する便利な方法です。また、BLOB およびコンテナーへの URL を作成するために使用することもできます。このクライアントには、サービスアカウントに対する操作が含まれています。コンテナーに対する操作は、BlobServiceClient#getBlobContainerClient(String) を介して BlobContainerClient で利用でき、ブロブに対する操作は、getBlobContainerClient(String).getBlobClient(String) を介して BlobClient で利用できます。 | BlobServiceClient | |
blobType (共通) | BLOB の種類ごとに適切な設定を開始するための BLOB の種類。 列挙値:
| blockblob | BlobType |
closeStreamAfterRead (共通) | 読み取り後にストリームを閉じるか、開いたままにします。デフォルトは true です。 | true | boolean |
credentials (共通) | StorageSharedKeyCredential を挿入して Azure クライアントを作成できます。これには重要な認証情報が保持されます。 | StorageSharedKeyCredential | |
dataCount (共通) | 範囲に含めるバイト数。指定する場合は、0 以上である必要があります。 | Long | |
fileDir (共通) | ダウンロードされた BLOB が保存されるファイルディレクトリー。これは producer と consumer の両方で使用できます。 | String | |
maxResultsPerPage (共通) | すべての BlobPrefix 要素を含め、返される BLOB の最大数を指定します。要求で maxResultsPerPage が指定されていないか、5,000 を超える値が指定されている場合、サーバーは最大 5,000 項目を返します。 | Integer | |
maxRetryRequests (共通) | レスポンスのボディーからデータを読み取るときに作成される追加の HTTP Get 要求の最大数を指定します。 | 0 | int |
prefix (共通) | 結果をフィルター処理して、名前が指定された接頭辞で始まる BLOB のみを返します。すべての BLOB を返すには null の場合があります。 | String | |
regex (共通) | 結果をフィルタリングして、指定された正規表現と名前が一致する BLOB のみを返します。接頭辞と正規表現の両方が設定されている場合は、すべてを返すために null になる場合があります。正規表現が優先され、接頭辞は無視されます。 | String | |
serviceClient (共通) | クライアントをストレージアカウントに Autowired します。このクライアントは、特定のストレージアカウントに関する状態を保持しませんが、サービス上のリソースに適切な要求を送信する便利な方法です。また、BLOB およびコンテナーへの URL を作成するために使用することもできます。このクライアントには、サービスアカウントに対する操作が含まれています。コンテナーに対する操作は、BlobServiceClient#getBlobContainerClient(String) を介して BlobContainerClient で利用でき、ブロブに対する操作は、BlobContainerClient#getBlobClient(String) を介して BlobClient で利用できます。 | BlobServiceClient | |
timeout (共通) | それを超えると RuntimeException が発生する任意のタイムアウト値。 | 期間 | |
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
sendEmptyMessageWhenIdle (consumer) | ポーリング consumer がファイルをポーリングしなかった場合、このオプションを有効にして、代わりに空のメッセージ (ボディーなし) を送信できます。 | false | boolean |
exceptionHandler (consumer (上級)) | consumer によるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、consumer は例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
exchangePattern (consumer (上級)) | consumer がエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
pollStrategy (consumer (上級)) | プラグ可能な org.apache.camel.PollingConsumerPollingStrategy を使用すると、エクスチェンジが作成され、Camel でルーティングされる前に、通常はポーリング操作中に発生するエラー処理を制御するカスタム実装が提供できます。 | PollingConsumerPollStrategy | |
blobSequenceNumber (producer) | リクエストの追跡に使用できるユーザー制御の値。シーケンス番号の値は、0 から 263 - 1 の間でなければなりません。デフォルト値は 0 です。 | 0 | Long |
blockListType (producer) | 返すブロックのタイプを指定します。 列挙値:
| COMMITTED | BlockListType |
changeFeedContext (producer) | getChangeFeed producer オペレーションを使用する場合は、これにより、サービス呼び出し中に Http パイプラインを介して渡される追加のコンテキストが提供されます。 | コンテキスト | |
changeFeedEndTime (producer) | getChangeFeed producer オペレーションを使用する場合は、これにより結果がフィルター処理され、終了時刻のほぼ前にイベントが返されます。注意: 次の 1 時間に属するいくつかのイベントも返される可能性があります。この時間に属するいくつかのイベントが欠落している可能性があります。その時間のすべてのイベントが確実に返されるようにするには、終了時間を 1 時間単位で切り上げます。 | OffsetDateTime | |
changeFeedStartTime (producer) | getChangeFeed producer 操作を使用する場合は、これにより結果がフィルター処理され、開始時刻のほぼ後にイベントが返されます。注意: 前の時間に属するいくつかのイベントも返される可能性があります。この時間に属するいくつかのイベントが欠落している可能性があります。その時間のすべてのイベントが確実に返されるようにするには、開始時間を 1 時間単位で切り捨てます。 | OffsetDateTime | |
closeStreamAfterWrite (producer) | 書き込み後にストリームを閉じるか、開いたままにします。デフォルトは true です。 | true | boolean |
commitBlockListLater (producer) | true に設定されていると、ステージングされたブロックは直接コミットされません。 | true | boolean |
createAppendBlob (producer) | true に設定されていると、追加ブロックのコミット時に追加ブロックが作成されます。 | true | boolean |
createPageBlob (producer) | true に設定すると、ページブロブのアップロード時にページ Blob が作成されます。 | true | boolean |
downloadLinkExpiration (producer) | URL ダウンロードリンクのデフォルトの有効期限 (ミリ秒) をオーバーライドします。 | Long | |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
operation (producer) | producer のこのコンポーネントで使用できる Blob 操作。 列挙値:
| listBlobContainers | BlobOperationsDefinition |
pageBlobSize (producer) | ページ BLOB の最大サイズを 8 TB まで指定します。ページ BLOB のサイズは、512 バイトの境界に合わせる必要があります。 | 512 | Long |
backoffErrorThreshold (スケジューラー) | backoffMultipler が開始する前に発生する必要がある後続のエラーポーリング (エラーによって失敗した) の数。 | int | |
backoffIdleThreshold (scheduler) | backoffMultipler が開始する前に発生する必要がある後続のアイドルポーリングの数。 | int | |
backoffMultiplier (scheduler) | 後続のアイドル状態/エラーが連続して発生した場合に、スケジュールされたポーリング consumer のバックオフを許可します。乗数は、実際に次の試行が行われる前にスキップされるポーリングの数です。このオプションが使用されている場合は、backoffIdleThreshold や backoffErrorThreshold も設定する必要があります。 | int | |
delay (scheduler) | 次のポーリングまでの時間 (ミリ秒単位)。 | 500 | long |
greedy (scheduler) | greedy が有効で、以前の実行が 1 つ以上のメッセージをポーリングした場合、ScheduledPollConsumer は即座に再度実行されます。 | false | boolean |
initialDelay (scheduler) | 最初のポーリングが開始されるまでの時間 (ミリ秒単位)。 | 1000 | long |
repeatCount (スケジューラー) | 実行の最大数を指定します。そのため、これを 1 に設定するとスケジューラーは 1 度だけ実行されます。これを 5 に設定した場合、5 回だけ実行されます。0 または負の値を設定すると、無制限に実行されます。 | 0 | long |
runLoggingLevel (scheduler) | consumer はポーリング時に開始/完了のログ行を記録します。このオプションを使用すると、ログレベルを設定できます。 列挙値:
| TRACE | LoggingLevel |
scheduledExecutorService (scheduler) | consumer に使用するカスタム/共有スレッドプールを設定できます。デフォルトでは、各 consumer に独自の単一スレッドのスレッドプールがあります。 | ScheduledExecutorService | |
scheduler (スケジューラー) | camel-spring または camel-quartz コンポーネントから cron スケジューラーを使用します。スケジューラーにビルドされた値 spring または quartz を使用。 | none | オブジェクト |
schedulerProperties (スケジューラー) | カスタムスケジューラーまたは Quartz や Spring ベースのスケジューラーを使用する場合に、追加のプロパティーを設定します。 | マップ | |
startScheduler (scheduler) | スケジューラーを自動起動するかどうか。 | true | boolean |
timeUnit (scheduler) | initialDelay および delay オプションの時間単位。 列挙値:
| MILLISECONDS | TimeUnit |
useFixedDelay (scheduler) | 固定遅延または固定レートを使用するかどうかを制御します。詳細は、JDK の ScheduledExecutorService を参照してください。 | true | boolean |
accessKey (security) | Azure Blob サービスでの認証に使用される、関連付けられた Azure アカウント名のアクセスキー。 | String | |
sourceBlobAccessKey (セキュリティー) | ソース Blob アクセスキー: copyblob 操作では、コピーするソース Blob の accessKey が必要です。accessKey をヘッダーとして渡すと、安全ではないため、キーとして設定できます。 | String |
必須情報オプション
このコンポーネントを使用するには、必要な Azure 認証情報を提供するための 3 つのオプションがあります。
-
Azure アカウントの
accountName
とaccessKey
を指定します。これが最も簡単な開始方法です。accessKey は、Azure portal から生成できます。 -
認証情報
オプションに提供できる StorageSharedKeyCredential インスタンスを提供します。 -
blobServiceClient
に提供できる BlobServiceClient インスタンスを提供します。注: 特定のクライアントを作成する必要はありません (例: BlockBlobClient)。BlobServiceClient は、下位レベルのクライアントを取得するために使用できる上位レベルを表します。
10.5. 用途
たとえば、camelazure
ストレージアカウントの container1
にあるブロック blob hello.txt
から blob コンテンツをダウンロードするには、次のスニペットを使用します。
from("azure-storage-blob://camelazure/container1?blobName=hello.txt&accessKey=yourAccessKey"). to("file://blobdirectory");
10.5.1. コンポーネント producer によって評価されるメッセージヘッダー
ヘッダー | 変数名 | タイプ | 操作 | 説明 |
---|---|---|---|---|
|
|
| すべて | それを超えると {@link RuntimeException} が発生する任意のタイムアウト値。 |
|
|
| コンテナーと BLOB に関する操作 | コンテナーまたは BLOB に関連付けるメタデータ。 |
|
|
|
|
このコンテナー内のデータを公開する方法を指定します。パブリックアクセスがない場合は |
|
|
| コンテナーと BLOB に関する操作 | これには、さまざまな要求の正常な動作を現在の条件に制限する値が含まれています。これらの条件は完全にオプションです。 |
|
|
|
| 特定のブロブを一覧表示するための詳細 |
|
|
|
| 結果をフィルター処理して、名前が指定された接頭辞で始まる BLOB のみを返します。すべての BLOB を返すには null の場合があります。 |
|
|
|
| すべての BlobPrefix 要素を含め、返される BLOB の最大数を指定します。要求で maxResultsPerPage が指定されていないか、5,000 を超える値が指定されている場合、サーバーは最大 5,000 項目を返します。 |
|
|
|
| {@link BlobContainerClient} オブジェクトで listBlobsFlatSegment への呼び出しの動作を設定するために使用できるオプションを定義します。 |
|
|
|
| 一連の操作の追加パラメーター。 |
|
|
|
| AccessTier の値を定義します。 |
|
|
| BLOB のアップロードに関連するほとんどの操作 | ブロックコンテンツの MD5 ハッシュ。このハッシュは、転送中にブロックの整合性を検証するために使用されます。このヘッダーが指定されている場合、ストレージサービスは、到着したコンテンツのハッシュとこのヘッダー値を比較します。この MD5 ハッシュは BLOB には保存されないことに注意してください。2 つのハッシュが一致しない場合、操作は失敗します。 |
|
|
| ページブロブに関連する操作 | {@link PageRange} オブジェクト。ページを 512 バイトの境界に揃える必要がある場合、開始オフセットは 512 の係数である必要があり、終了オフセットは 512 - 1 の係数である必要があります。有効なバイト範囲の例は、0 - 511、512 - 1023 などです。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 返すブロックのタイプを指定します。 |
|
|
|
| ページ BLOB の最大サイズを 8 TB まで指定します。ページ BLOB のサイズは、512 バイトの境界に合わせる必要があります。 |
|
|
|
| リクエストの追跡に使用できるユーザー制御の値。シーケンス番号の値は、0 から 2^63 - 1 の間でなければなりません。デフォルト値は 0 です。 |
|
|
|
| この BLOB のスナップショットを削除するための動作を指定します。\{@code Include} は、ベース BLOB とすべてのスナップショットを削除します。\{@code Only} はスナップショットのみを削除します。スナップショットが削除されている場合は、null を渡す必要があります。 |
|
|
|
| サービスによって返されるデータを指定する {@link ListBlobContainersOptions}。 |
|
|
|
| ファイルへのダウンロードに使用する {@link ParallelTransferOptions}。並列転送数パラメーターは無視されます。 |
|
|
|
| ダウンロードした BLOB が保存されるファイルディレクトリー。 |
|
|
|
| URL ダウンロードリンクのデフォルトの有効期限 (ミリ秒) をオーバーライドします。 |
|
|
| ブロブに関連する操作 | 交換ヘッダーの BLOB 名をオーバーライド/設定します。 |
|
|
| コンテナーと BLOB に関する操作 | 交換ヘッダーのコンテナー名をオーバーライド/設定します。 |
|
|
| すべて | 実行する producer 操作を指定します。producer 操作に関連するこのページのドキュメントを参照してください。 |
|
|
|
| 結果をフィルタリングして、指定された正規表現と名前が一致する BLOB のみを返します。すべてを返すには null の場合があります。接頭辞と正規表現の両方が設定されている場合、正規表現が優先され、接頭辞は無視されます。 |
|
|
|
| 結果をフィルタリングして、開始時刻の前後のイベントを返します。注意: 前の時間に属するいくつかのイベントも返される可能性があります。この時間に属するいくつかのイベントが欠落している可能性があります。その時間のすべてのイベントが確実に返されるようにするには、開始時間を 1 時間単位で切り捨てます。 |
|
|
|
| 結果をフィルタリングして、終了時刻のほぼ前にイベントを返します。注意: 次の 1 時間に属するいくつかのイベントも返される可能性があります。この時間に属するいくつかのイベントが欠落している可能性があります。その時間のすべてのイベントが確実に返されるようにするには、終了時間を 1 時間単位で切り上げます。 |
|
|
|
| これにより、サービス呼び出し中に Http パイプラインを介して渡される追加のコンテキストが提供されます。 |
|
|
|
| コピー BLOB 操作でソースアカウント名として使用されるソース BLOB アカウント名 |
|
|
|
| コピー BLOB 操作でソースコンテナー名として使用されるソース BLOB コンテナー名 |
10.5.2. コンポーネントの producer または consumer によって設定されるメッセージヘッダー
ヘッダー | 変数名 | タイプ | 説明 |
---|---|---|---|
|
|
| BLOB のアクセス層。 |
|
|
| BLOB のアクセス層が最後に変更された日時。 |
|
|
| BLOB のアーカイブステータス。 |
|
|
| ブロブの作成時間。 |
|
|
| ページ BLOB の現在のシーケンス番号。 |
|
|
| ブロブのサイズ。 |
|
|
| ブロブのタイプ。 |
|
|
| BLOB に指定されたキャッシュコントロール。 |
|
|
| 追加 BLOB にコミットされたブロックの数 |
|
|
| BLOB に指定されたコンテンツの配置。 |
|
|
| BLOB に指定されたコンテンツエンコーディング。 |
|
|
| BLOB に指定されたコンテンツ言語。 |
|
|
| BLOB に指定されたコンテンツ MD5。 |
|
|
| BLOB に指定されたコンテンツタイプ。 |
|
|
| BLOB に対する最後のコピー操作が完了した日時。 |
|
|
| BLOB の最後の増分コピースナップショットのスナップショット識別子。 |
|
|
| BLOB に対して実行された最後のコピー操作の識別子。 |
|
|
| BLOB に対して実行された最後のコピー操作の状態。 |
|
|
| BLOB に対して実行された最後のコピー操作のソース。 |
|
|
| BLOB に対して実行された最後のコピー操作の状態。 |
|
|
| BLOB に対する最後のコピー操作の説明。 |
|
|
| ブロブの E タグ |
|
|
| BLOB のアクセス層が BLOB のプロパティーから推測されたかどうかを示すフラグ。 |
|
|
| BLOB が増分コピーされたかどうかを示すフラグ。 |
|
|
| BLOB のコンテンツがサーバー上で暗号化されているかどうかを示すフラグ。 |
|
|
| BLOB が最後に変更された日時。 |
|
|
| BLOB のリースの種類。 |
|
|
| BLOB のリースの状態。 |
|
|
| BLOB のリースのステータス。 |
|
|
| BLOB に関連付けられた追加のメタデータ。 |
|
|
| ブロックがブロック BLOB にコミットされたオフセット。 |
|
|
|
操作 |
|
|
|
|
|
|
| ユーザーが使用できる解析されていない httpHeaders を返します。 |
10.5.3. 高度な Azure Storage Blob 設定
Camel アプリケーションがファイアウォールの背後で実行されている場合、または BlobServiceClient
インスタンス設定をより詳細に制御する必要がある場合は、独自のインスタンスを作成できます。
StorageSharedKeyCredential credential = new StorageSharedKeyCredential("yourAccountName", "yourAccessKey"); String uri = String.format("https://%s.blob.core.windows.net", "yourAccountName"); BlobServiceClient client = new BlobServiceClientBuilder() .endpoint(uri) .credential(credential) .buildClient(); // This is camel context context.getRegistry().bind("client", client);
次に、Camel azure-storage-blob
コンポーネント設定でこのインスタンスを参照します。
from("azure-storage-blob://cameldev/container1?blobName=myblob&serviceClient=#client") .to("mock:result");
10.5.4. レジストリー内の BlobServiceClient クライアントの自動検出
このコンポーネントは、レジストリー内の BlobServiceClient bean の存在を検出できます。そのタイプの唯一のインスタンスである場合、それはクライアントとして使用され、上記の例のように uri パラメーターとして定義する必要はありません。これは、エンドポイントのよりスマートな設定に非常に役立つ場合があります。
10.5.5. Azure Storage Blob producer の操作
Camel Azure Storage Blob コンポーネントは、producer 側で幅広い操作を提供します。
サービスレベルの操作
これらの操作には、accountName
が 必要 です。
操作 | 説明 |
---|---|
| ブロブの内容を取得します。この操作の出力をブロブ範囲に制限できます。 |
| ストレージアカウント内の BLOB と BLOB メタデータに発生したすべての変更のトランザクションログを返します。変更フィードは、これらの変更の順序付けられた、保証された、永続的で不変の読み取り専用ログを提供します。 |
コンテナーレベルでの操作
これらの操作には、accountName
と containerName
が 必要です。
操作 | 説明 |
---|---|
| ストレージアカウント内に新しいコンテナーを作成します。同じ名前のコンテナーがすでに存在する場合、producer はそれを無視します。 |
| ストレージアカウント内の指定されたコンテナーを削除します。コンテナーが存在しない場合、操作は失敗します。 |
| フォルダー構造がフラット化された、このコンテナー内の BLOB のリストを返します。 |
BLOB レベルでの操作
これらの操作では、accountName
、containerName
、および blobName
が 必須です。
操作 | ブロブの種類 | 説明 |
---|---|---|
| 共通 | ブロブの内容を取得します。この操作の出力をブロブ範囲に制限できます。 |
| 共通 | ブロブを削除します。 |
| 共通 | パスで指定されたファイルに BLOB 全体をダウンロードします。ファイルが作成されますが、存在してはなりません。ファイルがすでに存在する場合、{@link FileAlreadyExistsException} が出力されます。 |
| 共通 | Shared Access Signature (SAS) を使用して、指定された BLOB のダウンロードリンクを生成します。デフォルトでは、これは許可されたアクセスを 1 時間に制限します。ただし、ヘッダーを使用してデフォルトの有効期限をオーバーライドできます。 |
| BlockBlob | 新しいブロック BLOB を作成するか、既存のブロック BLOB の内容を更新します。既存のブロック BLOB を更新すると、BLOB の既存のメタデータが上書きされます。PutBlob では部分的な更新はサポートされていません。既存の BLOB のコンテンツは新しいコンテンツで上書きされます。 |
|
|
指定されたブロックをブロック BLOB のステージング領域にアップロードし、後で commitBlobBlockList の呼び出しによってコミットします。ただし、ヘッダー |
|
|
BLOB を設定するブロック ID のリストを指定して、BLOB を書き込みます。ブロックが BLOB の一部として書き込まれるためには、ブロックが前の |
|
| 指定されたブロックリストフィルターを使用して、ブロック BLOB の一部としてアップロードされたブロックのリストを返します。 |
|
| 長さ 0 の追加 BLOB を作成します。commitAppendBlo`b 操作を呼び出して、追加 BLOB にデータを追加します。 |
|
|
新しいデータブロックを既存の追加 BLOB の末尾にコミットします。ヘッダー |
|
|
指定された長さのページ BLOB を作成します。 |
|
|
1 つ以上のページをページ BLOB に書き込みます。書き込みサイズは 512 の倍数である必要があります。ヘッダー |
|
| ページ BLOB のサイズを指定されたサイズ (512 の倍数である必要があります) に変更します。 |
|
| 指定されたページをページ BLOB から解放します。範囲のサイズは 512 の倍数でなければなりません。 |
|
| ページ BLOB またはページ BLOB のスナップショットの有効なページ範囲のリストを返します。 |
|
| 異なるアカウントからでも、あるコンテナーから別のコンテナーに BLOB をコピーします。 |
これらの操作を camel アプリケーションで使用する方法については、このページの例のセクションを参照してください。
10.5.6. consumer の例
ファイルコンポーネントを使用して BLOB をファイルに取り込むには、次のようにします。
from("azure-storage-blob://camelazure/container1?blobName=hello.txt&accountName=yourAccountName&accessKey=yourAccessKey"). to("file://blobdirectory");
ただし、ファイルコンポーネントを使用せずにファイルに直接書き込むこともできます。BLOB をマシンに保存するには、fileDir
フォルダーパスを指定する必要があります。
from("azure-storage-blob://camelazure/container1?blobName=hello.txt&accountName=yourAccountName&accessKey=yourAccessKey&fileDir=/var/to/awesome/dir"). to("mock:results");
また、コンポーネントはバッチ consumer をサポートしているため、コンテナー名を指定するだけで複数の BLOB を使用できます。consumer は、コンテナー内の BLOB の数に応じて複数の交換を返します。
例
from("azure-storage-blob://camelazure/container1?accountName=yourAccountName&accessKey=yourAccessKey&fileDir=/var/to/awesome/dir"). to("mock:results");
10.5.7. producer 操作の例
-
listBlobContainers
from("direct:start") .process(exchange -> { // set the header you want the producer to evaluate, refer to the previous // section to learn about the headers that can be set // e.g: exchange.getIn().setHeader(BlobConstants.LIST_BLOB_CONTAINERS_OPTIONS, new ListBlobContainersOptions().setMaxResultsPerPage(10)); }) .to("azure-storage-blob://camelazure?operation=listBlobContainers&client&serviceClient=#client") .to("mock:result");
-
createBlobContainer
from("direct:start") .process(exchange -> { // set the header you want the producer to evaluate, refer to the previous // section to learn about the headers that can be set // e.g: exchange.getIn().setHeader(BlobConstants.BLOB_CONTAINER_NAME, "newContainerName"); }) .to("azure-storage-blob://camelazure/container1?operation=createBlobContainer&serviceClient=#client") .to("mock:result");
-
deleteBlobContainer
:
from("direct:start") .process(exchange -> { // set the header you want the producer to evaluate, refer to the previous // section to learn about the headers that can be set // e.g: exchange.getIn().setHeader(BlobConstants.BLOB_CONTAINER_NAME, "overridenName"); }) .to("azure-storage-blob://camelazure/container1?operation=deleteBlobContainer&serviceClient=#client") .to("mock:result");
-
listBlobs
:
from("direct:start") .process(exchange -> { // set the header you want the producer to evaluate, refer to the previous // section to learn about the headers that can be set // e.g: exchange.getIn().setHeader(BlobConstants.BLOB_CONTAINER_NAME, "overridenName"); }) .to("azure-storage-blob://camelazure/container1?operation=listBlobs&serviceClient=#client") .to("mock:result");
-
getBlob
:
交換本体に outputStream
を設定し、それにデータを書き込むことができます。例:
from("direct:start") .process(exchange -> { // set the header you want the producer to evaluate, refer to the previous // section to learn about the headers that can be set // e.g: exchange.getIn().setHeader(BlobConstants.BLOB_CONTAINER_NAME, "overridenName"); // set our body exchange.getIn().setBody(outputStream); }) .to("azure-storage-blob://camelazure/container1?blobName=blob&operation=getBlob&serviceClient=#client") .to("mock:result");
本体を設定しない場合、この操作は、さらに下流に進むことができる InputStream
インスタンスを提供します。
from("direct:start") .to("azure-storage-blob://camelazure/container1?blobName=blob&operation=getBlob&serviceClient=#client") .process(exchange -> { InputStream inputStream = exchange.getMessage().getBody(InputStream.class); // We use Apache common IO for simplicity, but you are free to do whatever dealing // with inputStream System.out.println(IOUtils.toString(inputStream, StandardCharsets.UTF_8.name())); }) .to("mock:result");
-
deleteBlob
:
from("direct:start") .process(exchange -> { // set the header you want the producer to evaluate, refer to the previous // section to learn about the headers that can be set // e.g: exchange.getIn().setHeader(BlobConstants.BLOB_NAME, "overridenName"); }) .to("azure-storage-blob://camelazure/container1?blobName=blob&operation=deleteBlob&serviceClient=#client") .to("mock:result");
-
downloadBlobToFile
:
from("direct:start") .process(exchange -> { // set the header you want the producer to evaluate, refer to the previous // section to learn about the headers that can be set // e.g: exchange.getIn().setHeader(BlobConstants.BLOB_NAME, "overridenName"); }) .to("azure-storage-blob://camelazure/container1?blobName=blob&operation=downloadBlobToFile&fileDir=/var/mydir&serviceClient=#client") .to("mock:result");
-
downloadLink
from("direct:start") .to("azure-storage-blob://camelazure/container1?blobName=blob&operation=downloadLink&serviceClient=#client") .process(exchange -> { String link = exchange.getMessage().getHeader(BlobConstants.DOWNLOAD_LINK, String.class); System.out.println("My link " + link); }) .to("mock:result");
-
uploadBlockBlob
from("direct:start") .process(exchange -> { // set the header you want the producer to evaluate, refer to the previous // section to learn about the headers that can be set // e.g: exchange.getIn().setHeader(BlobConstants.BLOB_NAME, "overridenName"); exchange.getIn().setBody("Block Blob"); }) .to("azure-storage-blob://camelazure/container1?blobName=blob&operation=uploadBlockBlob&serviceClient=#client") .to("mock:result");
-
stageBlockBlobList
from("direct:start") .process(exchange -> { final List<BlobBlock> blocks = new LinkedList<>(); blocks.add(BlobBlock.createBlobBlock(new ByteArrayInputStream("Hello".getBytes()))); blocks.add(BlobBlock.createBlobBlock(new ByteArrayInputStream("From".getBytes()))); blocks.add(BlobBlock.createBlobBlock(new ByteArrayInputStream("Camel".getBytes()))); exchange.getIn().setBody(blocks); }) .to("azure-storage-blob://camelazure/container1?blobName=blob&operation=stageBlockBlobList&serviceClient=#client") .to("mock:result");
-
commitBlockBlobList
from("direct:start") .process(exchange -> { // We assume here you have the knowledge of these blocks you want to commit final List<Block> blocksIds = new LinkedList<>(); blocksIds.add(new Block().setName("id-1")); blocksIds.add(new Block().setName("id-2")); blocksIds.add(new Block().setName("id-3")); exchange.getIn().setBody(blocksIds); }) .to("azure-storage-blob://camelazure/container1?blobName=blob&operation=commitBlockBlobList&serviceClient=#client") .to("mock:result");
-
getBlobBlockList
from("direct:start") .to("azure-storage-blob://camelazure/container1?blobName=blob&operation=getBlobBlockList&serviceClient=#client") .log("${body}") .to("mock:result");
-
createAppendBlob
from("direct:start") .to("azure-storage-blob://camelazure/container1?blobName=blob&operation=createAppendBlob&serviceClient=#client") .to("mock:result");
-
commitAppendBlob
from("direct:start") .process(exchange -> { final String data = "Hello world from my awesome tests!"; final InputStream dataStream = new ByteArrayInputStream(data.getBytes(StandardCharsets.UTF_8)); exchange.getIn().setBody(dataStream); // of course you can set whatever headers you like, refer to the headers section to learn more }) .to("azure-storage-blob://camelazure/container1?blobName=blob&operation=commitAppendBlob&serviceClient=#client") .to("mock:result");
-
createPageBlob
from("direct:start") .to("azure-storage-blob://camelazure/container1?blobName=blob&operation=createPageBlob&serviceClient=#client") .to("mock:result");
-
uploadPageBlob
from("direct:start") .process(exchange -> { byte[] dataBytes = new byte[512]; // we set range for the page from 0-511 new Random().nextBytes(dataBytes); final InputStream dataStream = new ByteArrayInputStream(dataBytes); final PageRange pageRange = new PageRange().setStart(0).setEnd(511); exchange.getIn().setHeader(BlobConstants.PAGE_BLOB_RANGE, pageRange); exchange.getIn().setBody(dataStream); }) .to("azure-storage-blob://camelazure/container1?blobName=blob&operation=uploadPageBlob&serviceClient=#client") .to("mock:result");
-
resizePageBlob
from("direct:start") .process(exchange -> { final PageRange pageRange = new PageRange().setStart(0).setEnd(511); exchange.getIn().setHeader(BlobConstants.PAGE_BLOB_RANGE, pageRange); }) .to("azure-storage-blob://camelazure/container1?blobName=blob&operation=resizePageBlob&serviceClient=#client") .to("mock:result");
-
clearPageBlob
from("direct:start") .process(exchange -> { final PageRange pageRange = new PageRange().setStart(0).setEnd(511); exchange.getIn().setHeader(BlobConstants.PAGE_BLOB_RANGE, pageRange); }) .to("azure-storage-blob://camelazure/container1?blobName=blob&operation=clearPageBlob&serviceClient=#client") .to("mock:result");
-
getPageBlobRanges
from("direct:start") .process(exchange -> { final PageRange pageRange = new PageRange().setStart(0).setEnd(511); exchange.getIn().setHeader(BlobConstants.PAGE_BLOB_RANGE, pageRange); }) .to("azure-storage-blob://camelazure/container1?blobName=blob&operation=getPageBlobRanges&serviceClient=#client") .log("${body}") .to("mock:result");
-
copyBlob
from("direct:copyBlob") .process(exchange -> { exchange.getIn().setHeader(BlobConstants.BLOB_NAME, "file.txt"); exchange.getMessage().setHeader(BlobConstants.SOURCE_BLOB_CONTAINER_NAME, "containerblob1"); exchange.getMessage().setHeader(BlobConstants.SOURCE_BLOB_ACCOUNT_NAME, "account"); }) .to("azure-storage-blob://account/containerblob2?operation=copyBlob&sourceBlobAccessKey=RAW(accessKey)") .to("mock:result");
このようにして、アカウント 'account' のコンテナー containerblob1 内の file.txt が、同じアカウントのコンテナー containerblob2 にコピーされます。
10.5.8. 開発ノート (重要)
すべての統合テストは Testcontainers を使用し、デフォルトで実行されます。Azure サービスを使用してすべての統合テストを実行できるようにするには、Azure の accessKey と accountName を取得する必要があります。モック単体テストに加えて、マイナーバージョンのアップグレードでも Azure クライアントが問題を起こす可能性があるため、変更を加えたり、クライアントのアップグレードごとに統合テストを実行したりする必要があります。統合テストを実行するには、このコンポーネントディレクトリーで次の maven コマンドを実行します。
mvn verify -PfullTests -DaccountName=myacc -DaccessKey=mykey
ここで、accountName
は Azure アカウント名で、accessKey
は Azure portal から生成されるアクセスキーです。
10.6. Spring Boot Auto-Configuration
Spring Boot で azure-storage-blob を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-azure-storage-blob-starter</artifactId> </dependency>
コンポーネントは、以下に記載される 32 のオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.component.azure-storage-blob.access-key | Azure Blob サービスでの認証に使用される、関連付けられた Azure アカウント名のアクセスキー。 | String | |
camel.component.azure-storage-blob.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.azure-storage-blob.blob-name | コンテナーから特定の BLOB を使用するための BLOB 名。ただし、producer では、BLOB レベルでの操作にのみ必要です。 | String | |
camel.component.azure-storage-blob.blob-offset | アップロードまたはダウンロード操作の BLOB オフセットを設定します。デフォルトは 0 です。 | 0 | Long |
camel.component.azure-storage-blob.blob-sequence-number | リクエストの追跡に使用できるユーザー制御の値。シーケンス番号の値は、0 から 263 - 1 の間でなければなりません。デフォルト値は 0 です。 | 0 | Long |
camel.component.azure-storage-blob.blob-type | BLOB の種類ごとに適切な設定を開始するための BLOB の種類。 | BlobType | |
camel.component.azure-storage-blob.block-list-type | 返すブロックのタイプを指定します。 | BlockListType | |
camel.component.azure-storage-blob.bridge-error-handler | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | Boolean |
camel.component.azure-storage-blob.change-feed-context | getChangeFeed producer オペレーションを使用する場合は、これにより、サービス呼び出し中に Http パイプラインを介して渡される追加のコンテキストが提供されます。オプションは com.azure.core.util.Context 型です。 | コンテキスト | |
camel.component.azure-storage-blob.change-feed-end-time | getChangeFeed producer オペレーションを使用する場合は、これにより結果がフィルター処理され、終了時刻のほぼ前にイベントが返されます。注意: 次の 1 時間に属するいくつかのイベントも返される可能性があります。この時間に属するいくつかのイベントが欠落している可能性があります。その時間のすべてのイベントが確実に返されるようにするには、終了時間を 1 時間単位で切り上げます。オプションは java.time.OffsetDateTime 型です。 | OffsetDateTime | |
camel.component.azure-storage-blob.change-feed-start-time | getChangeFeed producer 操作を使用する場合は、これにより結果がフィルター処理され、開始時刻のほぼ後にイベントが返されます。注意: 前の時間に属するいくつかのイベントも返される可能性があります。この時間に属するいくつかのイベントが欠落している可能性があります。その時間のすべてのイベントが確実に返されるようにするには、開始時間を 1 時間単位で切り捨てます。オプションは java.time.OffsetDateTime 型です。 | OffsetDateTime | |
camel.component.azure-storage-blob.close-stream-after-read | 読み取り後にストリームを閉じるか、開いたままにします。デフォルトは true です。 | true | Boolean |
camel.component.azure-storage-blob.close-stream-after-write | 書き込み後にストリームを閉じるか、開いたままにします。デフォルトは true です。 | true | Boolean |
camel.component.azure-storage-blob.commit-block-list-later | true に設定されていると、ステージングされたブロックは直接コミットされません。 | true | Boolean |
camel.component.azure-storage-blob.configuration | コンポーネントの設定。オプションは org.apache.camel.component.azure.storage.blob.BlobConfiguration タイプです。 | BlobConfiguration | |
camel.component.azure-storage-blob.create-append-blob | true に設定されていると、追加ブロックのコミット時に追加ブロックが作成されます。 | true | Boolean |
camel.component.azure-storage-blob.create-page-blob | true に設定すると、ページブロブのアップロード時にページ Blob が作成されます。 | true | Boolean |
camel.component.azure-storage-blob.credentials | StorageSharedKeyCredential を挿入して Azure クライアントを作成できます。これには重要な認証情報が保持されます。オプションは com.azure.storage.common.StorageSharedKeyCredential 型です。 | StorageSharedKeyCredential | |
camel.component.azure-storage-blob.data-count | 範囲に含めるバイト数。指定する場合は、0 以上である必要があります。 | Long | |
camel.component.azure-storage-blob.download-link-expiration | URL ダウンロードリンクのデフォルトの有効期限 (ミリ秒) をオーバーライドします。 | Long | |
camel.component.azure-storage-blob.enabled | azure-storage-blob コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.azure-storage-blob.file-dir | ダウンロードされた BLOB が保存されるファイルディレクトリー。これは producer と consumer の両方で使用できます。 | String | |
camel.component.azure-storage-blob.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
camel.component.azure-storage-blob.max-results-per-page | すべての BlobPrefix 要素を含め、返される BLOB の最大数を指定します。要求で maxResultsPerPage が指定されていないか、5,000 を超える値が指定されている場合、サーバーは最大 5,000 項目を返します。 | Integer | |
camel.component.azure-storage-blob.max-retry-requests | レスポンスのボディーからデータを読み取るときに作成される追加の HTTP Get 要求の最大数を指定します。 | 0 | Integer |
camel.component.azure-storage-blob.operation | producer のこのコンポーネントで使用できる Blob 操作。 | BlobOperationsDefinition | |
camel.component.azure-storage-blob.page-blob-size | ページ BLOB の最大サイズを 8 TB まで指定します。ページ BLOB のサイズは、512 バイトの境界に合わせる必要があります。 | 512 | Long |
camel.component.azure-storage-blob.prefix | 結果をフィルター処理して、名前が指定された接頭辞で始まる BLOB のみを返します。すべての BLOB を返すには null の場合があります。 | String | |
camel.component.azure-storage-blob.regex | 結果をフィルタリングして、指定された正規表現と名前が一致する BLOB のみを返します。接頭辞と正規表現の両方が設定されている場合は、すべてを返すために null になる場合があります。正規表現が優先され、接頭辞は無視されます。 | String | |
camel.component.azure-storage-blob.service-client | ストレージアカウントへのクライアント。このクライアントは、特定のストレージアカウントに関する状態を保持しませんが、サービス上のリソースに適切な要求を送信する便利な方法です。また、BLOB およびコンテナーへの URL を作成するために使用することもできます。このクライアントには、サービスアカウントに対する操作が含まれています。コンテナーに対する操作は、BlobServiceClient#getBlobContainerClient(String) を介して BlobContainerClient で利用でき、ブロブに対する操作は、BlobContainerClient#getBlobClient(String) を介して BlobClient で利用できます。オプションは com.azure.storage.blob.BlobServiceClient 型です。 | BlobServiceClient | |
camel.component.azure-storage-blob.source-blob-access-key | ソース Blob アクセスキー: copyblob 操作では、コピーするソース Blob の accessKey が必要です。accessKey をヘッダーとして渡すと、安全ではないため、キーとして設定できます。 | String | |
camel.component.azure-storage-blob.timeout | それを超えると RuntimeException が発生する任意のタイムアウト値。オプションは java.time.Duration タイプです。 | 期間 |
第11章 Azure ストレージキューサービス
producer と consumer の両方がサポート対象
Azure Storage Queue コンポーネントは、Azure API v12 を使用した Azure Storage Queue サービスとの間のメッセージの保存と取得をサポートしています。ただし、v12 より上のバージョンの場合、破壊的な変更がどの程度発生するかによって、このコンポーネントがこれらの変更を採用できるかどうかを確認します。
前提条件
有効な Windows Azure ストレージアカウントが必要です。詳細については、Azure ドキュメントポータル を参照してください。
Maven ユーザーは、このコンポーネントの pom.xml
に以下の依存関係を追加する必要があります。
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-azure-storage-queue</artifactId> <version>{CamelSBVersion}</version> <!-- use the same version as your Camel core version --> </dependency>
11.1. URI 形式
azure-storage-queue://accountName[/queueName][?options]
consumer の場合、accountName と queueName が必要です。producer の場合は、要求される操作によって異なります。たとえば、操作がサービスレベルである場合は eb: listQueues、accountName のみが必要ですが、キューレベルで操作が要求される場合は、createQueue などです。sendMessage.. など、accountName と queueName の両方が必要です。
キューがまだ存在しない場合は作成されます。URI には、次の形式でクエリーオプションを追加できます。
?options=value&option2=value&…
11.2. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
11.2.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
11.2.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
11.3. コンポーネントオプション
Azure Storage Queue Service コンポーネントは、以下に示す 15 のオプションをサポートしています。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
configuration (共通) | コンポーネントの設定。 | QueueConfiguration | |
serviceClient (共通) | Autowired サービスクライアントをストレージアカウントに接続して、キューサービスとやり取りします。このクライアントは、特定のストレージアカウントに関する状態を保持しませんが、サービス上のリソースに適切な要求を送信する便利な方法です。このクライアントには、Azure Storage のキューアカウントを操作するためのすべての操作が含まれています。クライアントによって許可される操作は、キューの作成、一覧表示、および削除、アカウントのプロパティーの取得と更新、およびアカウントの統計の取得です。 | QueueServiceClient | |
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
createQueue (producer) | true に設定すると、メッセージを送信するときにキューが自動的に作成されます。 | false | boolean |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
operation (producer) | producer へのキューサービス操作のヒント。 列挙値:
| QueueOperationDefinition | |
autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
maxMessages (キュー) | 取得するメッセージの最大数。要求された数よりもキューに存在するメッセージが少ない場合は、すべてのメッセージが返されます。空のままにすると、1 つのメッセージのみが取得されます。許可される範囲は 1 から 32 のメッセージです。 | 1 | Integer |
messageId (queue) | 削除または更新するメッセージの ID。 | String | |
popReceipt (queue) | メッセージを削除または更新するために一致する必要がある一意の識別子。 | String | |
タイムアウト (キュー) | 操作に適用されるオプションのタイムアウト。タイムアウトが終了する前に応答が返されない場合、RuntimeException が出力されます。 | 期間 | |
timeToLive (キュー) | メッセージがキュー内で存続する時間。設定されていない場合、値はデフォルトで 7 日になります。-1 が渡されると、メッセージは期限切れになりません。存続時間は -1 または任意の正の数でなければなりません。形式は PnDTnHnMn.nS の形式である必要があります (例: PT20.345S は 20.345 秒として解析し、P2D は、2 日として解析)。ただし、EndpointDsl/ComponentDsl を使用している場合は、これらの Java API はタイプセーフであるため、Duration.ofSeconds() のようなものが可能になります。 | 期間 | |
visibilityTimeout (キュー) | メッセージがキューに表示されないタイムアウト期間。タイムアウトは 1 秒から 7 日の間にする必要があります。形式は PnDTnHnMn.nS の形式である必要があります (例: PT20.345S は 20.345 秒として解析し、P2D は、2 日として解析)。ただし、EndpointDsl/ComponentDsl を使用している場合は、これらの Java API はタイプセーフであるため、Duration.ofSeconds() のようなものが可能になります。 | 期間 | |
accessKey (security) | azure キューサービスでの認証に使用される、関連付けられた azure アカウント名のアクセスキー。 | String | |
認証情報 (セキュリティー) | StorageSharedKeyCredential を挿入して Azure クライアントを作成できます。これには重要な認証情報が保持されます。 | StorageSharedKeyCredential |
11.4. エンドポイントオプション
Azure ストレージキューサービスエンドポイントは、URI 構文を使用して設定されます。
azure-storage-queue:accountName/queueName
パスおよびクエリーパラメーターを使用します。
11.4.1. パスパラメーター (2 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
accountName (共通) | Azure キューサービスでの認証に使用される Azure アカウント名。 | String | |
queueName (共通) | キューリソース名。 | String |
11.4.2. クエリーパラメーター (31 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
serviceClient (共通) | Autowired サービスクライアントをストレージアカウントに接続して、キューサービスとやり取りします。このクライアントは、特定のストレージアカウントに関する状態を保持しませんが、サービス上のリソースに適切な要求を送信する便利な方法です。このクライアントには、Azure Storage のキューアカウントを操作するためのすべての操作が含まれています。クライアントによって許可される操作は、キューの作成、一覧表示、および削除、アカウントのプロパティーの取得と更新、およびアカウントの統計の取得です。 | QueueServiceClient | |
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
sendEmptyMessageWhenIdle (consumer) | ポーリング consumer がファイルをポーリングしなかった場合、このオプションを有効にして、代わりに空のメッセージ (ボディーなし) を送信できます。 | false | boolean |
exceptionHandler (consumer (上級)) | consumer によるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、consumer は例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
exchangePattern (consumer (上級)) | consumer がエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
pollStrategy (consumer (上級)) | プラグ可能な org.apache.camel.PollingConsumerPollingStrategy を使用すると、エクスチェンジが作成され、Camel でルーティングされる前に、通常はポーリング操作中に発生するエラー処理を制御するカスタム実装が提供できます。 | PollingConsumerPollStrategy | |
createQueue (producer) | true に設定すると、メッセージを送信するときにキューが自動的に作成されます。 | false | boolean |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
operation (producer) | producer へのキューサービス操作のヒント。 列挙値:
| QueueOperationDefinition | |
maxMessages (キュー) | 取得するメッセージの最大数。要求された数よりもキューに存在するメッセージが少ない場合は、すべてのメッセージが返されます。空のままにすると、1 つのメッセージのみが取得されます。許可される範囲は 1 から 32 のメッセージです。 | 1 | Integer |
messageId (queue) | 削除または更新するメッセージの ID。 | String | |
popReceipt (queue) | メッセージを削除または更新するために一致する必要がある一意の識別子。 | String | |
タイムアウト (キュー) | 操作に適用されるオプションのタイムアウト。タイムアウトが終了する前に応答が返されない場合、RuntimeException が出力されます。 | 期間 | |
timeToLive (キュー) | メッセージがキュー内で存続する時間。設定されていない場合、値はデフォルトで 7 日になります。-1 が渡されると、メッセージは期限切れになりません。存続時間は -1 または任意の正の数でなければなりません。形式は PnDTnHnMn.nS の形式である必要があります (例: PT20.345S は 20.345 秒として解析し、P2D は、2 日として解析)。ただし、EndpointDsl/ComponentDsl を使用している場合は、これらの Java API はタイプセーフであるため、Duration.ofSeconds() のようなものが可能になります。 | 期間 | |
visibilityTimeout (キュー) | メッセージがキューに表示されないタイムアウト期間。タイムアウトは 1 秒から 7 日の間にする必要があります。形式は PnDTnHnMn.nS の形式である必要があります (例: PT20.345S は 20.345 秒として解析し、P2D は、2 日として解析)。ただし、EndpointDsl/ComponentDsl を使用している場合は、これらの Java API はタイプセーフであるため、Duration.ofSeconds() のようなものが可能になります。 | 期間 | |
backoffErrorThreshold (スケジューラー) | backoffMultipler が開始する前に発生する必要がある後続のエラーポーリング (エラーによって失敗した) の数。 | int | |
backoffIdleThreshold (scheduler) | backoffMultipler が開始する前に発生する必要がある後続のアイドルポーリングの数。 | int | |
backoffMultiplier (scheduler) | 後続のアイドル状態/エラーが連続して発生した場合に、スケジュールされたポーリング consumer のバックオフを許可します。乗数は、実際に次の試行が行われる前にスキップされるポーリングの数です。このオプションが使用されている場合は、backoffIdleThreshold や backoffErrorThreshold も設定する必要があります。 | int | |
delay (scheduler) | 次のポーリングまでの時間 (ミリ秒単位)。 | 500 | long |
greedy (scheduler) | greedy が有効で、以前の実行が 1 つ以上のメッセージをポーリングした場合、ScheduledPollConsumer は即座に再度実行されます。 | false | boolean |
initialDelay (scheduler) | 最初のポーリングが開始されるまでの時間 (ミリ秒単位)。 | 1000 | long |
repeatCount (スケジューラー) | 実行の最大数を指定します。そのため、これを 1 に設定するとスケジューラーは 1 度だけ実行されます。これを 5 に設定した場合、5 回だけ実行されます。0 または負の値を設定すると、無制限に実行されます。 | 0 | long |
runLoggingLevel (scheduler) | consumer はポーリング時に開始/完了のログ行を記録します。このオプションを使用すると、ログレベルを設定できます。 列挙値:
| TRACE | LoggingLevel |
scheduledExecutorService (scheduler) | consumer に使用するカスタム/共有スレッドプールを設定できます。デフォルトでは、各 consumer に独自の単一スレッドのスレッドプールがあります。 | ScheduledExecutorService | |
scheduler (スケジューラー) | camel-spring または camel-quartz コンポーネントから cron スケジューラーを使用します。スケジューラーにビルドされた値 spring または quartz を使用。 | none | オブジェクト |
schedulerProperties (スケジューラー) | カスタムスケジューラーまたは Quartz や Spring ベースのスケジューラーを使用する場合に、追加のプロパティーを設定します。 | マップ | |
startScheduler (scheduler) | スケジューラーを自動起動するかどうか。 | true | boolean |
timeUnit (scheduler) | initialDelay および delay オプションの時間単位。 列挙値:
| MILLISECONDS | TimeUnit |
useFixedDelay (scheduler) | 固定遅延または固定レートを使用するかどうかを制御します。詳細は、JDK の ScheduledExecutorService を参照してください。 | true | boolean |
accessKey (security) | azure キューサービスでの認証に使用される、関連付けられた azure アカウント名のアクセスキー。 | String | |
認証情報 (セキュリティー) | StorageSharedKeyCredential を挿入して Azure クライアントを作成できます。これには重要な認証情報が保持されます。 | StorageSharedKeyCredential |
必須情報オプション
このコンポーネントを使用するには、必要な Azure 認証情報を提供するための 3 つのオプションがあります。
-
Azure アカウントの
accountName
とaccessKey
を指定します。これが最も簡単な開始方法です。accessKey は、Azure portal から生成できます。 -
認証情報
オプションに提供できる StorageSharedKeyCredential インスタンスを提供します。 -
serviceClient
に提供できる QueueServiceClient インスタンスを提供します。注: 特定のクライアントを作成する必要はありません (例: QueueClient)。QueueServiceClient は、下位レベルのクライアントを取得するために使用できる上位レベルを表します。
11.5. 用途
たとえば、storageAccount
ストレージアカウントのキュー messageQueue
からメッセージコンテンツを取得するには、次のスニペットを使用します。
from("azure-storage-queue://storageAccount/messageQueue?accessKey=yourAccessKey"). to("file://queuedirectory");
11.5.1. コンポーネント producer によって評価されるメッセージヘッダー
ヘッダー | 変数名 | タイプ | 操作 | 説明 |
---|---|---|---|---|
|
|
|
| キューを一覧表示するためのオプション |
|
|
| すべて | それを超えると \{@link RuntimeException} が発生する任意のタイムアウト値。 |
|
|
|
| キューに関連付けるメタデータ |
|
|
|
| メッセージがキュー内で存続する時間。設定されていない場合、値はデフォルトで 7 日になります。-1 が渡されると、メッセージは期限切れになりません。存続時間は -1 または任意の正の数でなければなりません。 |
|
|
|
| メッセージがキューに表示されないタイムアウト期間。設定されていない場合、値はデフォルトで 0 になり、メッセージはすぐに表示されます。タイムアウトは 0 秒から 7 日の間にする必要があります。 |
|
|
|
|
|
|
|
|
| メッセージを削除または更新するために一致する必要がある一意の識別子。 |
|
|
|
| 削除または更新するメッセージの ID。 |
|
|
|
| 取得するメッセージの最大数。要求された数よりもキューに存在するメッセージが少ない場合は、すべてのメッセージが返されます。空のままにすると、1 つのメッセージのみが取得されます。許可される範囲は 1 から 32 のメッセージです。 |
|
|
| すべて | 実行する producer 操作を指定します。producer 操作に関連するこのページのドキュメントを参照してください。 |
|
|
| すべて | キュー名をオーバーライドします。 |
11.5.2. コンポーネントの producer または consumer によって設定されるメッセージヘッダー
ヘッダー | 変数名 | タイプ | 説明 |
---|---|---|---|
|
|
| キューに送信されるメッセージの ID。 |
|
|
| メッセージがキューに挿入された時刻。 |
|
|
| メッセージが期限切れになり、自動的に削除される時間。 |
|
|
| この値は、メッセージを削除/更新するために必要です。この popreceipt を使用して削除に失敗した場合、メッセージは別のクライアントによってキューから取り出されています。 |
|
|
| メッセージが再びキューに表示される時間。 |
|
|
| メッセージがデキューされた回数。 |
|
|
| ユーザーが使用できる解析されていない httpHeaders を返します。 |
11.5.3. 高度な Azure ストレージキューの設定
Camel アプリケーションがファイアウォールの背後で実行されている場合、または QueueServiceClient
インスタンス設定をより詳細に制御する必要がある場合は、独自のインスタンスを作成できます。
StorageSharedKeyCredential credential = new StorageSharedKeyCredential("yourAccountName", "yourAccessKey"); String uri = String.format("https://%s.queue.core.windows.net", "yourAccountName"); QueueServiceClient client = new QueueServiceClientBuilder() .endpoint(uri) .credential(credential) .buildClient(); // This is camel context context.getRegistry().bind("client", client);
次に、Camel azure-storage-queue
コンポーネント設定でこのインスタンスを参照します。
from("azure-storage-queue://cameldev/queue1?serviceClient=#client") .to("file://outputFolder?fileName=output.txt&fileExist=Append");
11.5.4. レジストリー内の QueueServiceClient クライアントの自動検出
このコンポーネントは、レジストリー内の QueueServiceClient Bean の存在を検出できます。そのタイプの唯一のインスタンスである場合、それはクライアントとして使用され、上記の例のように uri パラメーターとして定義する必要はありません。これは、エンドポイントのよりスマートな設定に非常に役立つ場合があります。
11.5.5. Azure Storage Queue Producer の操作
Camel Azure Storage Queue コンポーネントは、producer 側で幅広い操作を提供します。
サービスレベルの操作
これらの操作には、accountName
が 必要 です。
操作 | 説明 |
---|---|
| 指定されたマーカーから開始して、フィルターを通過するストレージアカウント内のキューを一覧表示します。 |
キューレベルでの操作
これらの操作には、accountName
と queueName
が 必要です。
操作 | 説明 |
---|---|
| 新しいキューを作成します。 |
| キューを完全に削除します。 |
| キュー内のすべてのメッセージを削除します.. |
|
デフォルトのプロデューサ操作 指定された存続時間とメッセージがキューに表示されないタイムアウト期間を指定してメッセージを送信します。メッセージテキストは、Exchange メッセージ本文から評価されます。デフォルトでは、キューが存在しない場合、最初に空のキューが作成されます。これを無効にする場合は、config |
| 指定されたメッセージをキューから削除します。 |
| キューからメッセージを最大数まで取得し、タイムアウト期間中は他の操作から非表示にします。ただし、信頼性の理由から、キューからメッセージをデキューしません。 |
| キューの先頭からメッセージの最大数までメッセージをピークします。 |
| キュー内の特定のメッセージを新しいメッセージで更新し、表示タイムアウトをリセットします。メッセージテキストは、Exchange メッセージ本文から評価されます。 |
これらの操作を camel アプリケーションで使用する方法については、このページの例のセクションを参照してください。
11.5.6. consumer の例
1 つのバッチで最大 5 つのメッセージを含むファイルコンポーネントにキューを消費するには、次のようにします。
from("azure-storage-queue://cameldev/queue1?serviceClient=#client&maxMessages=5") .to("file://outputFolder?fileName=output.txt&fileExist=Append");
11.5.7. producer 操作の例
-
listQueues
:
from("direct:start") .process(exchange -> { // set the header you want the producer to evaluate, refer to the previous // section to learn about the headers that can be set // e.g, to only returns list of queues with 'awesome' prefix: exchange.getIn().setHeader(QueueConstants.QUEUES_SEGMENT_OPTIONS, new QueuesSegmentOptions().setPrefix("awesome")); }) .to("azure-storage-queue://cameldev?serviceClient=#client&operation=listQueues") .log("${body}") .to("mock:result");
-
createQueue
:
from("direct:start") .process(exchange -> { // set the header you want the producer to evaluate, refer to the previous // section to learn about the headers that can be set // e.g: exchange.getIn().setHeader(QueueConstants.QUEUE_NAME, "overrideName"); }) .to("azure-storage-queue://cameldev/test?serviceClient=#client&operation=createQueue");
-
deleteQueue
:
from("direct:start") .process(exchange -> { // set the header you want the producer to evaluate, refer to the previous // section to learn about the headers that can be set // e.g: exchange.getIn().setHeader(QueueConstants.QUEUE_NAME, "overrideName"); }) .to("azure-storage-queue://cameldev/test?serviceClient=#client&operation=deleteQueue");
-
clearQueue
:
from("direct:start") .process(exchange -> { // set the header you want the producer to evaluate, refer to the previous // section to learn about the headers that can be set // e.g: exchange.getIn().setHeader(QueueConstants.QUEUE_NAME, "overrideName"); }) .to("azure-storage-queue://cameldev/test?serviceClient=#client&operation=clearQueue");
-
sendMessage
:
from("direct:start") .process(exchange -> { // set the header you want the producer to evaluate, refer to the previous // section to learn about the headers that can be set // e.g: exchange.getIn().setBody("message to send"); // we set a visibility of 1min exchange.getIn().setHeader(QueueConstants.VISIBILITY_TIMEOUT, Duration.ofMinutes(1)); }) .to("azure-storage-queue://cameldev/test?serviceClient=#client");
-
deleteMessage
:
from("direct:start") .process(exchange -> { // set the header you want the producer to evaluate, refer to the previous // section to learn about the headers that can be set // e.g: // Mandatory header: exchange.getIn().setHeader(QueueConstants.MESSAGE_ID, "1"); // Mandatory header: exchange.getIn().setHeader(QueueConstants.POP_RECEIPT, "PAAAAHEEERXXX-1"); }) .to("azure-storage-queue://cameldev/test?serviceClient=#client&operation=deleteMessage");
-
receiveMessages
:
from("direct:start") .to("azure-storage-queue://cameldev/test?serviceClient=#client&operation=receiveMessages") .process(exchange -> { final List<QueueMessageItem> messageItems = exchange.getMessage().getBody(List.class); messageItems.forEach(messageItem -> System.out.println(messageItem.getMessageText())); }) .to("mock:result");
-
peekMessages
:
from("direct:start") .to("azure-storage-queue://cameldev/test?serviceClient=#client&operation=peekMessages") .process(exchange -> { final List<PeekedMessageItem> messageItems = exchange.getMessage().getBody(List.class); messageItems.forEach(messageItem -> System.out.println(messageItem.getMessageText())); }) .to("mock:result");
-
updateMessage
:
from("direct:start") .process(exchange -> { // set the header you want the producer to evaluate, refer to the previous // section to learn about the headers that can be set // e.g: exchange.getIn().setBody("new message text"); // Mandatory header: exchange.getIn().setHeader(QueueConstants.MESSAGE_ID, "1"); // Mandatory header: exchange.getIn().setHeader(QueueConstants.POP_RECEIPT, "PAAAAHEEERXXX-1"); // Mandatory header: exchange.getIn().setHeader(QueueConstants.VISIBILITY_TIMEOUT, Duration.ofMinutes(1)); }) .to("azure-storage-queue://cameldev/test?serviceClient=#client&operation=updateMessage");
11.5.8. 開発ノート (重要)
このコンポーネントで開発する場合、統合テストを実行するために Azure accessKey を取得する必要があります。モック単体テストに加えて、マイナーバージョンのアップグレードでも Azure クライアントが問題を起こす可能性があるため、変更を加えたり、クライアントのアップグレードごとに統合テストを実行したりする必要があります。統合テストを実行するには、このコンポーネントディレクトリーで次の maven コマンドを実行します。
mvn verify -PfullTests -DaccountName=myacc -DaccessKey=mykey
ここで、accountName
は Azure アカウント名で、accessKey
は Azure portal から生成されるアクセスキーです。
11.6. Spring Boot Auto-Configuration
Spring Boot で azure-storage-queue を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-azure-storage-queue-starter</artifactId> </dependency>
コンポーネントは、以下に記載される 16 のオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.component.azure-storage-queue.access-key | azure キューサービスでの認証に使用される、関連付けられた azure アカウント名のアクセスキー。 | String | |
camel.component.azure-storage-queue.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.azure-storage-queue.bridge-error-handler | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | Boolean |
camel.component.azure-storage-queue.configuration | コンポーネントの設定。オプションは org.apache.camel.component.azure.storage.queue.QueueConfiguration タイプです。 | QueueConfiguration | |
camel.component.azure-storage-queue.create-queue | true に設定すると、メッセージを送信するときにキューが自動的に作成されます。 | false | Boolean |
camel.component.azure-storage-queue.credentials | StorageSharedKeyCredential を挿入して Azure クライアントを作成できます。これには重要な認証情報が保持されます。オプションは com.azure.storage.common.StorageSharedKeyCredential 型です。 | StorageSharedKeyCredential | |
camel.component.azure-storage-queue.enabled | azure-storage-queue コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.azure-storage-queue.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
camel.component.azure-storage-queue.max-messages | 取得するメッセージの最大数。要求された数よりもキューに存在するメッセージが少ない場合は、すべてのメッセージが返されます。空のままにすると、1 つのメッセージのみが取得されます。許可される範囲は 1 から 32 のメッセージです。 | 1 | Integer |
camel.component.azure-storage-queue.message-id | 削除または更新するメッセージの ID。 | String | |
camel.component.azure-storage-queue.operation | producer へのキューサービス操作のヒント。 | QueueOperationDefinition | |
camel.component.azure-storage-queue.pop-receipt | メッセージを削除または更新するために一致する必要がある一意の識別子。 | String | |
camel.component.azure-storage-queue.service-client | クライアントをストレージアカウントにサービスして、キューサービスとやり取りします。このクライアントは、特定のストレージアカウントに関する状態を保持しませんが、サービス上のリソースに適切な要求を送信する便利な方法です。このクライアントには、Azure Storage のキューアカウントを操作するためのすべての操作が含まれています。クライアントによって許可される操作は、キューの作成、一覧表示、および削除、アカウントのプロパティーの取得と更新、およびアカウントの統計の取得です。オプションは com.azure.storage.queue.QueueServiceClient 型です。 | QueueServiceClient | |
camel.component.azure-storage-queue.time-to-live | メッセージがキュー内で存続する時間。設定されていない場合、値はデフォルトで 7 日になります。-1 が渡されると、メッセージは期限切れになりません。存続時間は -1 または任意の正の数でなければなりません。形式は PnDTnHnMn.nS の形式である必要があります (例: PT20.345S は 20.345 秒として解析し、P2D は、2 日として解析)。ただし、EndpointDsl/ComponentDsl を使用している場合は、これらの Java API はタイプセーフであるため、Duration.ofSeconds() のようなものが可能になります。オプションは java.time.Duration タイプです。 | 期間 | |
camel.component.azure-storage-queue.timeout | 操作に適用されるオプションのタイムアウト。タイムアウトが終了する前に応答が返されない場合、RuntimeException が出力されます。オプションは java.time.Duration タイプです。 | 期間 | |
camel.component.azure-storage-queue.visibility-timeout | メッセージがキューに表示されないタイムアウト期間。タイムアウトは 1 秒から 7 日の間にする必要があります。形式は PnDTnHnMn.nS の形式である必要があります (例: PT20.345S は 20.345 秒として解析し、P2D は、2 日として解析)。ただし、EndpointDsl/ComponentDsl を使用している場合は、これらの Java API はタイプセーフであるため、Duration.ofSeconds() のようなものが可能になります。オプションは java.time.Duration タイプです。 | 期間 |
第12章 Bean
producer のみサポート対象
Bean コンポーネントは Bean を Camel メッセージエクスチェンジにバインドします。
12.1. URI 形式
bean:beanName[?options]
beanID には、レジストリーで Bean を検索するために使用される任意の文字列を指定できます。
12.2. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
12.2.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
12.2.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
12.3. コンポーネントオプション
Bean コンポーネントは、以下に示す 4 つのオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
cache (producer) | 非推奨 代わりにシングルトンオプションを使用してください。 | true | Boolean |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
scope (producer) | Bean のスコープ。シングルトンスコープ (デフォルト) を使用する場合、Bean は 1 回のみ作成または検索され、エンドポイントの有効期間に再利用されます。同時スレッドが同時に Bean を呼び出す場合、Bean はスレッドセーフである必要があります。リクエストスコープを使用する場合、Bean はリクエストごとに 1 回作成またはルックアップされます (交換)。リクエストの処理中に Bean に状態を保存する場合や、リクエストの処理中に同じ Bean インスタンスを複数回呼び出す場合に使用できます。インスタンスは同じリクエストからのみ呼び出されるため、Bean はスレッドセーフである必要はありません。delegate スコープを使用すると、呼び出しごとに Bean が検索または作成されます。ただしルックアップの場合、これは Spring や CDI (使用されている場合) などの Bean レジストリーに委譲され、設定に応じてシングルトンまたはプロトタイプスコープのいずれかとして機能します。したがって、いつプロトタイプを使用するかは委譲されたレジストリーにより異なります。 列挙値:
| シングルトン | BeanScope |
autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
12.4. エンドポイントオプション
Bean エンドポイントは、URI 構文を使用して設定されます。
bean:beanName
パスおよびクエリーパラメーターを使用します。
12.4.1. パスパラメーター(1 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
beanName (共通) | 必須: 呼び出す Bean の名前を設定します。 | String |
12.4.2. クエリーパラメーター (5 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
cache (共通) | 非推奨 代わりにスコープオプションを使用してください。 | Boolean | |
method (共通) | Bean で呼び出すメソッドの名前を設定します。 | String | |
scope (共通) | Bean のスコープ。シングルトンスコープ (デフォルト) を使用する場合、Bean は 1 回のみ作成または検索され、エンドポイントの有効期間に再利用されます。同時スレッドが同時に Bean を呼び出す場合、Bean はスレッドセーフである必要があります。リクエストスコープを使用する場合、Bean はリクエストごとに 1 回作成またはルックアップされます (交換)。リクエストの処理中に Bean に状態を保存する場合や、リクエストの処理中に同じ Bean インスタンスを複数回呼び出す場合に使用できます。インスタンスは同じリクエストからのみ呼び出されるため、Bean はスレッドセーフである必要はありません。プロトタイプコープを使用すると、呼び出しごとに Bean がルックアップまたは作成されます。ただしルックアップの場合、これは Spring や CDI (使用されている場合) などの Bean レジストリーに委譲され、設定に応じてシングルトンまたはプロトタイプスコープのいずれかとして機能します。したがって、いつプロトタイプを使用するかは委譲されたレジストリーにより異なります。 列挙値:
| シングルトン | BeanScope |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
parameters (上級) | Bean の追加プロパティーの設定に使用します。 | マップ |
12.5. 使用
メッセージの消費に使用されるオブジェクトインスタンスは、レジストリーに明示的に登録する必要があります。たとえば、Spring を使用している場合は、Spring 設定で Bean を定義する必要があります。
bind
メソッドを使用して、Camel の Registry
を介して Bean を手動で登録することもできます。
エンドポイントが登録されたら、エクスチェンジの処理に使用する Camel ルートを構築できます。
bean: エンドポイントは、ルートへの入力として定義できません。つまり、消費できません。一部のインバウンドメッセージエンドポイントから Bean エンドポイントに、出力としてのみルーティングできます。direct: または queue: エンドポイントを入力として使用することを検討してください。
ProxyHelper で createProxy()
メソッドを使用して、BeanExchange を生成して任意のエンドポイントに送信するプロキシーを作成できます。
XML DSL を使用した同じルート:
<route> <from uri="direct:hello"/> <to uri="bean:bye"/> </route>
12.6. エンドポイントとしての Bean
Camel は、エンドポイントとしての Bean の呼び出しもサポートします。エクスチェンジが myBean
にルーティングされると、Camel は Bean バインディングを使用して Bean を呼び出します。Bean のソースは plain POJO です。
Camel は Bean バインディングを使用して sayHello
メソッドを呼び出し、エクスチェンジの In ボディを String
タイプに変換し、メソッドの出力をエクスチェンジの Out ボディに保存します。
12.7. Java DSL Bean 構文
Java DSL には、コンポーネントのシンタックスシュガーが付属しています。Bean を明示的にエンドポイント (つまり to ("bean:beanName")
) として指定する代わりに、次の構文を使用できます。
// Send message to the bean endpoint // and invoke method resolved using Bean Binding. from("direct:start").bean("beanName"); // Send message to the bean endpoint // and invoke given method. from("direct:start").bean("beanName", "methodName");
Bean への参照の名前を渡す代わりに (Camel がレジストリーでそれを検索できるようにするため)、Bean 自体を指定できます。
// Send message to the given bean instance. from("direct:start").bean(new ExampleBean()); // Explicit selection of bean method to be invoked. from("direct:start").bean(new ExampleBean(), "methodName"); // Camel will create the instance of bean and cache it for you. from("direct:start").bean(ExampleBean.class);
12.8. Bean バインディング
呼び出される Bean メソッドの選択方法 (method パラメーターで明示的に指定されていない場合) と、メッセージからパラメーター値が構築される方法は、Camel 内のさまざまな Bean 統合メカニズム全体で使用される Bean バインディングメカニズムによりすべて定義されます。
12.9. Spring Boot Auto-Configuration
Spring Boot で bean を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-bean-starter</artifactId> </dependency>
このコンポーネントは、以下に示す 13 のオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.component.bean.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.bean.enabled | Bean コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.bean.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
camel.component.bean.scope | Bean のスコープ。シングルトンスコープ (デフォルト) を使用する場合、Bean は 1 回のみ作成または検索され、エンドポイントの有効期間に再利用されます。同時スレッドが同時に Bean を呼び出す場合、Bean はスレッドセーフである必要があります。リクエストスコープを使用する場合、Bean はリクエストごとに 1 回作成またはルックアップされます (交換)。リクエストの処理中に Bean に状態を保存する場合や、リクエストの処理中に同じ Bean インスタンスを複数回呼び出す場合に使用できます。インスタンスは同じリクエストからのみ呼び出されるため、Bean はスレッドセーフである必要はありません。delegate スコープを使用すると、呼び出しごとに Bean が検索または作成されます。ただしルックアップの場合、これは Spring や CDI (使用されている場合) などの Bean レジストリーに委譲され、設定に応じてシングルトンまたはプロトタイプスコープのいずれかとして機能します。したがって、いつプロトタイプを使用するかは委譲されたレジストリーにより異なります。 | BeanScope | |
camel.component.class.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.class.enabled | クラスコンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.class.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
camel.component.class.scope | Bean のスコープ。シングルトンスコープ (デフォルト) を使用する場合、Bean は 1 回のみ作成または検索され、エンドポイントの有効期間に再利用されます。同時スレッドが同時に Bean を呼び出す場合、Bean はスレッドセーフである必要があります。リクエストスコープを使用する場合、Bean はリクエストごとに 1 回作成またはルックアップされます (交換)。リクエストの処理中に Bean に状態を保存する場合や、リクエストの処理中に同じ Bean インスタンスを複数回呼び出す場合に使用できます。インスタンスは同じリクエストからのみ呼び出されるため、Bean はスレッドセーフである必要はありません。delegate スコープを使用すると、呼び出しごとに Bean が検索または作成されます。ただしルックアップの場合、これは Spring や CDI (使用されている場合) などの Bean レジストリーに委譲され、設定に応じてシングルトンまたはプロトタイプスコープのいずれかとして機能します。したがって、いつプロトタイプを使用するかは委譲されたレジストリーにより異なります。 | BeanScope | |
camel.language.bean.enabled | Bean 言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.language.bean.scope | Bean のスコープ。シングルトンスコープ (デフォルト) を使用する場合、Bean は 1 回のみ作成または検索され、エンドポイントの有効期間に再利用されます。同時スレッドが同時に Bean を呼び出す場合、Bean はスレッドセーフである必要があります。リクエストスコープを使用する場合、Bean はリクエストごとに 1 回作成またはルックアップされます (交換)。リクエストの処理中に Bean に状態を保存する場合や、リクエストの処理中に同じ Bean インスタンスを複数回呼び出す場合に使用できます。インスタンスは同じリクエストからのみ呼び出されるため、Bean はスレッドセーフである必要はありません。プロトタイプコープを使用すると、呼び出しごとに Bean がルックアップまたは作成されます。ただしルックアップの場合、これは Spring や CDI (使用されている場合) などの Bean レジストリーに委譲され、設定に応じてシングルトンまたはプロトタイプスコープのいずれかとして機能します。そのため、プロトタイプスコープを使用する場合、これは Bean レジストリーの実装によって異なります。 | シングルトン | String |
camel.language.bean.trim | 値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。 | true | Boolean |
camel.component.bean.cache | 非推奨 代わりにシングルトンオプションを使用してください。 | true | Boolean |
camel.component.class.cache | 非推奨 代わりにシングルトンオプションを使用してください。 | true | Boolean |
第13章 Bean バリデーター
producer のみサポート対象
バリデーターコンポーネントは、Java Bean Validation API () を使用してメッセージボディーの Bean 検証を実行します。Camel は Hibernate Validator のリファレンス実装を使用します。
Maven ユーザーは、このコンポーネントの pom.xml
に以下の依存関係を追加する必要があります。
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-bean-validator</artifactId> <version>{CamelSBVersion}</version> <!-- use the same version as your Camel core version --> </dependency>
13.1. URI 形式
bean-validator:label[?options]
label は、エンドポイントを記述する任意のテキスト値です。URI には、次の形式でクエリーオプションを追加できます。
?option=value&option=value&…
13.2. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
13.2.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
13.2.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
13.3. コンポーネントオプション
Bean バリデーターコンポーネントは、以下に示す 8 つのオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
ignoreXmlConfiguration (producer) | META-INF/validation.xml ファイルからのデータを無視するかどうか。 | false | boolean |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
constraintValidatorFactory (上級) | カスタムの ConstraintValidatorFactory を使用します。 | ConstraintValidatorFactory | |
messageInterpolator (上級) | カスタムの MessageInterpolator を使用します。 | MessageInterpolator | |
traversableResolver (上級) | カスタムの TraversableResolver を使用します。 | TraversableResolver | |
validationProviderResolver (上級) | カスタムの ValidationProviderResolver を使用します。 | ValidationProviderResolver | |
validatorFactory (上級) | Autowired: カスタムの ValidatorFactory を使用します。 | ValidatorFactory |
13.4. エンドポイントオプション
Bean バリデーターエンドポイントは URI 構文を使用して設定されます。
bean-validator:label
パスおよびクエリーパラメーターを使用します。
13.4.1. パスパラメーター(1 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
label (producer) | 必須 ラベルは、エンドポイントを記述する任意のテキスト値です。 | String |
13.4.2. クエリーパラメーター (8 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
group (producer) | カスタム検証グループを使用します。 | javax.validation.groups.Default | String |
ignoreXmlConfiguration (producer) | META-INF/validation.xml ファイルからのデータを無視するかどうか。 | false | boolean |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
constraintValidatorFactory (上級) | カスタムの ConstraintValidatorFactory を使用します。 | ConstraintValidatorFactory | |
messageInterpolator (上級) | カスタムの MessageInterpolator を使用します。 | MessageInterpolator | |
traversableResolver (上級) | カスタムの TraversableResolver を使用します。 | TraversableResolver | |
validationProviderResolver (上級) | カスタムの ValidationProviderResolver を使用します。 | ValidationProviderResolver | |
validatorFactory (上級) | カスタムの ValidatorFactory を使用します。 | ValidatorFactory |
13.5. OSGi デプロイメント
OSGi 環境で Hibernate Validator を使用するには、org.apache.camel.component.bean.validator.HibernateValidationProviderResolver
と同様に専用の ValidationProviderResolver
実装を使用します。以下のスニペットは、このアプローチを示しています。HibernateValidationProviderResolver
も使用できます。
Using HibernateValidationProviderResolver
from("direct:test"). to("bean-validator://ValidationProviderResolverTest?validationProviderResolver=#myValidationProviderResolver");
<bean id="myValidationProviderResolver" class="org.apache.camel.component.bean.validator.HibernateValidationProviderResolver"/>
カスタムの ValidationProviderResolver
が定義されておらず、バリデーターコンポーネントが OSGi 環境にデプロイされている場合、HibernateValidationProviderResolver
は自動的に使用されます。
13.6. 例
以下を持つ java Bean があると仮定します。アノテーション:
Car.java
public class Car { @NotNull private String manufacturer; @NotNull @Size(min = 5, max = 14, groups = OptionalChecks.class) private String licensePlate; // getter and setter }
カスタムバリデーショングループのインターフェイス定義:
OptionalChecks.java
public interface OptionalChecks { }
以下の Camel ルート。manufacturer および licensePlate 属性の @NotNull 制約のみが検証されます (Camel はデフォルトのグループ javax.validation.groups.Default
を使用します)。
from("direct:start") .to("bean-validator://x") .to("mock:end")
OptionalChecks
グループからの制約を確認する場合は、以下のようなルートを定義する必要があります。
from("direct:start") .to("bean-validator://x?group=OptionalChecks") .to("mock:end")
両方のグループからの制約を確認する場合は、最初に新しいインターフェイスを定義する必要があります。
AllChecks.java
@GroupSequence({Default.class, OptionalChecks.class}) public interface AllChecks { }
ルート定義は以下のようになります。
from("direct:start") .to("bean-validator://x?group=AllChecks") .to("mock:end")
また、独自のメッセージインターポレーター、通過可能なリゾルバー、および制約バリデーターファクトリーを提供する必要がある場合は、次のようなルートを記述する必要があります。
<bean id="myMessageInterpolator" class="my.ConstraintValidatorFactory" /> <bean id="myTraversableResolver" class="my.TraversableResolver" /> <bean id="myConstraintValidatorFactory" class="my.ConstraintValidatorFactory" />
from("direct:start") .to("bean-validator://x?group=AllChecks&messageInterpolator=#myMessageInterpolator &traversableResolver=#myTraversableResolver&constraintValidatorFactory=#myConstraintValidatorFactory") .to("mock:end")
また、制約を Java アノテーションではなく、XML として記述することも可能です。この場合、次のようなファイル META-INF/validation.xml
を提供する必要があります。
validation.xml
<validation-config xmlns="http://jboss.org/xml/ns/javax/validation/configuration" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/configuration"> <default-provider>org.hibernate.validator.HibernateValidator</default-provider> <message-interpolator>org.hibernate.validator.engine.ResourceBundleMessageInterpolator</message-interpolator> <traversable-resolver>org.hibernate.validator.engine.resolver.DefaultTraversableResolver</traversable-resolver> <constraint-validator-factory>org.hibernate.validator.engine.ConstraintValidatorFactoryImpl</constraint-validator-factory> <constraint-mapping>/constraints-car.xml</constraint-mapping> </validation-config>
constraints-car.xml
ファイル
constraints-car.xml
<constraint-mappings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jboss.org/xml/ns/javax/validation/mapping validation-mapping-1.0.xsd" xmlns="http://jboss.org/xml/ns/javax/validation/mapping"> <default-package>org.apache.camel.component.bean.validator</default-package> <bean class="CarWithoutAnnotations" ignore-annotations="true"> <field name="manufacturer"> <constraint annotation="javax.validation.constraints.NotNull" /> </field> <field name="licensePlate"> <constraint annotation="javax.validation.constraints.NotNull" /> <constraint annotation="javax.validation.constraints.Size"> <groups> <value>org.apache.camel.component.bean.validator.OptionalChecks</value> </groups> <element name="min">5</element> <element name="max">14</element> </constraint> </field> </bean> </constraint-mappings>
OrderedChecks のサンプルルート定義の XML 構文を次に示します。
ボディーには検証するクラスのインスタンスを含める必要があることに注意してください。
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd"> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"> <route> <from uri="direct:start"/> <to uri="bean-validator://x?group=org.apache.camel.component.bean.validator.OrderedChecks"/> </route> </camelContext> </beans>
13.7. Spring Boot Auto-Configuration
Spring Boot で bean-validator を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-bean-validator-starter</artifactId> </dependency>
このコンポーネントは、以下に示す 9 のオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.component.bean-validator.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.bean-validator.constraint-validator-factory | カスタムの ConstraintValidatorFactory を使用します。オプションは javax.validation.ConstraintValidatorFactory タイプです。 | ConstraintValidatorFactory | |
camel.component.bean-validator.enabled | bean-validator コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.bean-validator.ignore-xml-configuration | META-INF/validation.xml ファイルからのデータを無視するかどうか。 | false | Boolean |
camel.component.bean-validator.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
camel.component.bean-validator.message-interpolator | カスタムの MessageInterpolator を使用します。オプションは javax.validation.MessageInterpolator タイプです。 | MessageInterpolator | |
camel.component.bean-validator.traversable-resolver | カスタムの TraversableResolver を使用します。オプションは javax.validation.TraversableResolver タイプです。 | TraversableResolver | |
camel.component.bean-validator.validation-provider-resolver | カスタムの ValidationProviderResolver を使用します。オプションは javax.validation.ValidationProviderResolver タイプです。 | ValidationProviderResolver | |
camel.component.bean-validator.validator-factory | カスタムの ValidatorFactory を使用します。オプションは javax.validation.ValidatorFactory タイプです。 | ValidatorFactory |
第14章 参照
producer と consumer の両方がサポート対象
Browse コンポーネントは、テスト、視覚化ツール、またはデバッグに役立つシンプルな BrowsableEndpoint を提供します。エンドポイントに送信された交換はすべて閲覧可能です。
14.1. URI 形式
browse:someName[?options]
someName は、エンドポイントを一意に識別する任意の文字列にすることができます。
14.2. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
14.2.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
14.2.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
14.3. コンポーネントオプション
Browse コンポーネントは、以下に示す 3 つのオプションをサポートしています。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
14.4. エンドポイントオプション
Browse エンドポイントは、URI 構文を使用して設定されます。
browse:name
パスおよびクエリーパラメーターを使用します。
14.4.1. パスパラメーター(1 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
name (共通) | 必須 エンドポイントを一意に識別する任意の文字列の名前。 | String |
14.4.2. クエリーパラメーター (4 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
exceptionHandler (consumer (上級)) | consumer によるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、consumer は例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
exchangePattern (consumer (上級)) | consumer がエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
14.5. 例
以下のルートでは、通過する Exchange を参照できるように、browse:
コンポーネントを挿入します。
from("activemq:order.in").to("browse:orderReceived").to("bean:processOrder");
受信した交換を Java コード内から検査できるようになりました。
private CamelContext context; public void inspectReceivedOrders() { BrowsableEndpoint browse = context.getEndpoint("browse:orderReceived", BrowsableEndpoint.class); List<Exchange> exchanges = browse.getExchanges(); // then we can inspect the list of received exchanges from Java for (Exchange exchange : exchanges) { String payload = exchange.getIn().getBody(); // do something with payload } }
14.6. Spring Boot Auto-Configuration
Spring Boot で bean を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-browse-starter</artifactId> </dependency>
コンポーネントは、以下に記載される 4 のオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.component.browse.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.browse.bridge-error-handler | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | Boolean |
camel.component.browse.enabled | 参照コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.browse.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
第15章 Cassandra CQL
producer と consumer の両方がサポート対象
Apache Cassandra は、コモディティハードウェアで大量のデータを処理するように設計されたオープンソースの NoSQL データベースです。Amazon の DynamoDB と同様に、Cassandra にはピアツーピアおよびマスターレスアーキテクチャーがあり、単一障害点を回避し、高可用性を保証します。Google の BigTable と同様に、Cassandra データは、Thrift RPC API または CQL と呼ばれる SQL に似た API を介してアクセスできる列ファミリーを使用して構造化されています。
このコンポーネントは、(Thrift API ではなく) CQL3 API を使用して Cassandra 2.0+ を統合することを目的としています。DataStax が提供する Cassandra Java Driver をベースにしています。
15.1. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
15.1.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
15.1.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
15.2. コンポーネントオプション
Cassandra CQL コンポーネントは、以下に示す 3 つのオプションをサポートしています。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
15.3. エンドポイントオプション
Cassandra CQL エンドポイントは、URI 構文を使用して設定されます。
cql:beanRef:hosts:port/keyspace
パスおよびクエリーパラメーターを使用します。
15.3.1. パスパラメーター (4 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
beanRef (共通) | beanRef は bean:id を使用して定義されます。 | String | |
hosts (共通) | ホスト名 Cassandra サーバー複数のホストはコンマで区切ることができます。 | String | |
port (共通) | Cassandra サーバーのポート番号 | Integer | |
keyspace (共通) | 使用するキースペース | String |
15.3.2. クエリーパラメーター (30 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
clusterName (共通) | クラスター名 | String | |
consistencyLevel (共通) | 使用する一貫性レベル。 列挙値:
| DefaultConsistencyLevel | |
cql (共通) | 実行する CQL クエリー。キー CamelCqlQuery を持つメッセージヘッダーでオーバーライドできます。 | String | |
datacenter (共通) | 使用するデータセンター。 | datacenter1 | String |
loadBalancingPolicyClass (共通) | 特定の LoadBalancingPolicyClass を使用するには。 | String | |
password (共通) | セッション認証のパスワード。 | String | |
prepareStatements (共通) | PreparedStatements を使用するか、通常のステートメントを使用するか。 | true | boolean |
resultSetConversionStrategy (共通) | ResultSet をメッセージ本文 ALL、ONE、LIMIT_10、LIMIT_100… に変換するためのロジックを実装するカスタムクラスを使用するには | ResultSetConversionStrategy | |
session (共通) | Session インスタンスを使用するには (通常、このオプションは使用しません)。 | CqlSession | |
username (共通) | セッション認証のユーザー名。 | String | |
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
sendEmptyMessageWhenIdle (consumer) | ポーリング consumer がファイルをポーリングしなかった場合、このオプションを有効にして、代わりに空のメッセージ (ボディーなし) を送信できます。 | false | boolean |
exceptionHandler (consumer (上級)) | consumer によるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、consumer は例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
exchangePattern (consumer (上級)) | consumer がエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
pollStrategy (consumer (上級)) | プラグ可能な org.apache.camel.PollingConsumerPollingStrategy を使用すると、エクスチェンジが作成され、Camel でルーティングされる前に、通常はポーリング操作中に発生するエラー処理を制御するカスタム実装が提供できます。 | PollingConsumerPollStrategy | |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
backoffErrorThreshold (scheduler) | backoffMultipler が開始する前に発生する必要がある後続のエラーポーリング (エラーによって失敗した) の数。 | int | |
backoffIdleThreshold (scheduler) | backoffMultipler が開始する前に発生する必要がある後続のアイドルポーリングの数。 | int | |
backoffMultiplier (scheduler) | 後続のアイドル状態/エラーが連続して発生した場合に、スケジュールされたポーリング consumer のバックオフを許可します。乗数は、実際に次の試行が行われる前にスキップされるポーリングの数です。このオプションが使用されている場合は、backoffIdleThreshold や backoffErrorThreshold も設定する必要があります。 | int | |
delay (scheduler) | 次のポーリングまでの時間 (ミリ秒単位)。 | 500 | long |
greedy (scheduler) | greedy が有効で、以前の実行が 1 つ以上のメッセージをポーリングした場合、ScheduledPollConsumer は即座に再度実行されます。 | false | boolean |
initialDelay (scheduler) | 最初のポーリングが開始されるまでの時間 (ミリ秒単位)。 | 1000 | long |
repeatCount (スケジューラー) | 実行の最大数を指定します。そのため、これを 1 に設定するとスケジューラーは 1 度だけ実行されます。これを 5 に設定した場合、5 回だけ実行されます。0 または負の値を設定すると、無制限に実行されます。 | 0 | long |
runLoggingLevel (scheduler) | consumer はポーリング時に開始/完了のログ行を記録します。このオプションを使用すると、ログレベルを設定できます。 列挙値:
| TRACE | LoggingLevel |
scheduledExecutorService (scheduler) | consumer に使用するカスタム/共有スレッドプールを設定できます。デフォルトでは、各 consumer に独自の単一スレッドのスレッドプールがあります。 | ScheduledExecutorService | |
scheduler (スケジューラー) | camel-spring または camel-quartz コンポーネントから cron スケジューラーを使用します。スケジューラーにビルドされた値 spring または quartz を使用。 | none | オブジェクト |
schedulerProperties (スケジューラー) | カスタムスケジューラーまたは Quartz や Spring ベースのスケジューラーを使用する場合に、追加のプロパティーを設定します。 | マップ | |
startScheduler (scheduler) | スケジューラーを自動起動するかどうか。 | true | boolean |
timeUnit (scheduler) | initialDelay および delay オプションの時間単位。 列挙値:
| MILLISECONDS | TimeUnit |
useFixedDelay (scheduler) | 固定遅延または固定レートを使用するかどうかを制御します。詳細は、JDK の ScheduledExecutorService を参照してください。 | true | boolean |
15.4. エンドポイント接続の構文
エンドポイントは、Cassandra 接続を開始するか、既存のものを使用できます。
URI | 説明 |
---|---|
| 単一ホスト、デフォルトポート、通常はテスト用 |
| マルチホスト、デフォルトポート |
| マルチホスト、カスタムポート |
| デフォルトのポートとキースペース |
| 提供されたセッション参照 |
| 提供されたクラスター参照 |
Cassandra 接続 (SSL オプション、プーリングオプション、負荷分散ポリシー、再試行ポリシー、再接続ポリシーなど) を微調整するには、独自のクラスターインスタンスを作成し、それを Camel エンドポイントに渡します。
15.5. メッセージ
15.5.1. 着信メッセージ
Camel Cassandra エンドポイントは、クエリーパラメーターとして CQL ステートメントにバインドされる一連の単純なオブジェクト (Object
または Object[]
または Collection<Object>
) を想定しています。メッセージ本文が null または空の場合、CQL クエリーはパラメーターをバインドせずに実行されます。
Headers
CamelCqlQuery
(オプション、文字列
またはRegularStatement
)プレーン文字列として、または
QueryBuilder
を使用して構築された CQL クエリー。
15.5.2. 送信メッセージ
Camel Cassandra エンドポイントは、resultSetConversionStrategy
に応じて、1 つまたは複数の Cassandra Row オブジェクトを生成します。
-
List<Row>
(resultSetConversionStrategy
がALL
またはLIMIT_0-9+
の場合) -
resultSetConversionStrategy
がONE
の場合h Single` Row` -
その他 (
resultSetConversionStrategy
がResultSetConversionStrategy
のカスタム実装である場合)
15.6. リポジトリー
Cassandra を使用して、べき等および集約 EIP のメッセージキーまたはメッセージを格納できます。
Cassandra は、まだユースケースをキューに入れるための最適なツールではない可能性があります。Cassandra anti-patterns queues and queue like datasets を参照してください。これらのテーブルに LeveledCompaction と小さな GC 猶予設定を使用して、廃棄された行をすばやく削除できるようにすることをお勧めします。
15.7. 冪等リポジトリー
NamedCassandraIdempotentRepository
は、メッセージキーを次のように Cassandra テーブルに格納します。
CAMEL_IDEMPOTENT.cql
CREATE TABLE CAMEL_IDEMPOTENT ( NAME varchar, -- Repository name KEY varchar, -- Message key PRIMARY KEY (NAME, KEY) ) WITH compaction = {'class':'LeveledCompactionStrategy'} AND gc_grace_seconds = 86400;
このリポジトリーの実装では、軽量のトランザクション (Compare and Set とも呼ばれます) を使用し、Cassandra 2.0.7+ が必要です。
または、CassandraIdempotentRepository
には NAME
列がなく、別のデータモデルを使用するように拡張できます。
オプション | デフォルト | 説明 |
---|---|---|
|
| テーブル名 |
|
| 主キー列 |
|
リポジトリー名、 | |
| 重要な生存期間 | |
|
キーの挿入/削除に使用される一貫性レベル: | |
|
キーの読み取り/チェックに使用される一貫性レベル: |
15.8. 集計リポジトリー
NamedCassandraAggregationRepository
は、次のように Cassandra テーブルに相関キーによる交換を格納します。
CAMEL_AGGREGATION.cql
CREATE TABLE CAMEL_AGGREGATION ( NAME varchar, -- Repository name KEY varchar, -- Correlation id EXCHANGE_ID varchar, -- Exchange id EXCHANGE blob, -- Serialized exchange PRIMARY KEY (NAME, KEY) ) WITH compaction = {'class':'LeveledCompactionStrategy'} AND gc_grace_seconds = 86400;
または、CassandraAggregationRepository
には NAME
列がなく、別のデータモデルを使用するように拡張できます。
オプション | デフォルト | 説明 |
---|---|---|
|
| テーブル名 |
|
| 主キー列 |
|
| 交換 ID 列 |
|
| 交換内容欄 |
|
リポジトリー名、 | |
| 生存時間の交換 | |
|
交換の挿入/削除に使用される一貫性レベル: | |
|
交換の読み取り/チェックに使用される整合性レベル: |
15.9. 例
テーブルに何かを挿入するには、次のコードを使用できます。
String CQL = "insert into camel_user(login, first_name, last_name) values (?, ?, ?)"; from("direct:input") .to("cql://localhost/camel_ks?cql=" + CQL);
この時点で、リストを本文として使用してデータを挿入できるはずです
Arrays.asList("davsclaus", "Claus", "Ibsen")
テーブルの更新またはクエリーにも同じアプローチを使用できます。
15.10. Spring Boot Auto-Configuration
Spring Boot で cql を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-cassandraql-starter</artifactId> </dependency>
コンポーネントは、以下に記載される 4 のオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.component.cql.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.cql.bridge-error-handler | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | Boolean |
camel.component.cql.enabled | cql コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.cql.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
第16章 コントロールバス
producer のみサポート対象
EIP パターンからの 制御バス により、統合システムをフレームワーク内から監視および管理できます。
コントロールバスを使用して、エンタープライズ統合システムを管理します。コントロールバスは、アプリケーションデータで使用されるのと同じメッセージングメカニズムを使用しますが、メッセージフローに含まれるコンポーネントの管理に関連するデータを送信するために別のチャネルを使用します。
Camel では、JMX を使用して、または CamelContext
から、または org.apache.camel.api.management
パッケージから Java API を使用して、またはここに例があるイベント通知機能を使用して、管理および監視できます。
ControlBus コンポーネントは、Control Bus EIP パターンに基づいて Camel アプリケーションを簡単に管理できるようにします。たとえば、エンドポイントにメッセージを送信することで、ルートのライフサイクルを制御したり、パフォーマンス統計を収集したりできます。
controlbus:command[?options]
command には、使用するコマンドのタイプを識別するための任意の文字列を指定できます。
16.1. コマンド
コマンド | 説明 |
---|---|
|
|
| メッセージ本文の評価に使用するを指定できます。評価の結果があれば、その結果がメッセージ本文に入れられます。 |
16.2. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
16.2.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
16.2.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
16.3. コンポーネントオプション
コントロールバスコンポーネントは、以下に示す 2 つのオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
16.4. エンドポイントオプション
Control Bus エンドポイントは、URI 構文を使用して設定されます。
controlbus:command:language
パスおよびクエリーパラメーターを使用します。
16.4.1. パスパラメーター (2 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
command (producer) | 必要な コマンドは、ルートまたは言語のいずれかです。 列挙値:
| String | |
language (producer) | メッセージ本文の評価に使用する言語の名前を指定できます。評価の結果があれば、その結果がメッセージ本文に入れられます。 列挙値:
| 言語 |
16.4.1.1. クエリーパラメーター (6 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
action (producer) | 開始、停止、またはステータスのいずれかのアクションを示す。ルートを開始または停止するか、ルートのステータスをメッセージ本文の出力として取得します。Camel 2.11.1 以降では、サスペンドとレジュームを使用して、ルートをサスペンドまたはレジュームできます。また、Camel 2.11.1 以降では、stats を使用して、パフォーマンスの統計を XML 形式で取得できます。routeId オプションを使用して、パフォーマンス統計を取得するルートを定義できます。routeId が定義されていない場合は、CamelContext 全体の統計を取得します。再起動アクションはルートを再起動します。 列挙値:
| String | |
async (producer) | コントロールバスタスクを非同期で実行するかどうか。重要: このオプションを有効にすると、タスクの結果は Exchange に設定されません。これは、タスクを同期的に実行する場合にのみ可能です。 | false | boolean |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
loggingLevel (producer) | タスクが完了したとき、またはタスクの処理中に例外が発生した場合にログに使用されるログレベル。 列挙値:
| INFO | LoggingLevel |
restartDelay (producer) | ルートを再起動するときに使用するミリ単位の遅延。 | 1000 | int |
routeId (producer) | ID でルートを指定します。特別なキーワード current は、現在のルートを示します。 | String |
16.5. ルートコマンドの使用
route コマンドを使用すると、特定のルートで一般的なタスクを非常に簡単に実行できます。たとえば、ルートを開始するには、このエンドポイントに空のメッセージを送信できます。
template.sendBody("controlbus:route?routeId=foo&action=start", null);
ルートのステータスを取得するには、次のようにします。
String status = template.requestBody("controlbus:route?routeId=foo&action=status", null, String.class);
16.6. パフォーマンス統計の取得
これには、JMX を有効にする必要があります (デフォルトで)。そうすると、ルートごと、または CamelContext のパフォーマンス統計を取得できます。たとえば、foo という名前のルートの統計を取得するには、次のようにします。
String xml = template.requestBody("controlbus:route?routeId=foo&action=stats", null, String.class);
返される統計は XML 形式です。ManagedRouteMBean
で dumpRouteStatsAsXml
操作を使用して JMX から取得できるデータと同じです。
CamelContext 全体の統計を取得するには、以下に示すように routeId パラメーターを省略します。
String xml = template.requestBody("controlbus:route?action=stats", null, String.class);
16.7. シンプルな言語を使用する
コントロールバスで Simple 言語を使用できます。たとえば、特定のルートを停止するには、次のメッセージを含む "controlbus:language:simple"
エンドポイントにメッセージを送信できます。
template.sendBody("controlbus:language:simple", "${camelContext.getRouteController().stopRoute('myRoute')}");
これは無効な操作であるため、結果は返されません。ただし、ルートステータスが必要な場合は、次のことができます。
String status = template.requestBody("controlbus:language:simple", "${camelContext.getRouteStatus('myRoute')}", String.class);
route
コマンドを使用してルートのライフサイクルを制御する方が簡単です。language
コマンドを使用すると、Groovy などのより強力な言語スクリプトを実行したり、Simple 言語を拡張したりできます。
たとえば、Camel 自体をシャットダウンするには、次のようにします。
template.sendBody("controlbus:language:simple?async=true", "${camelContext.stop()}");
async=true
を使用して Camel を非同期的に停止します。そうしないと、制御バスコンポーネントに送信したメッセージを処理中に Camel を停止しようとすることになります。
Groovy などの他の言語も使用できます。
16.8. Spring Boot Auto-Configuration
Spring Boot で controlbus を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-controlbus-starter</artifactId> </dependency>
コンポーネントは、以下に記載される 3 つのオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.component.controlbus.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.controlbus.enabled | コントロールバスコンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.controlbus.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
第17章 Cron
consumer のみがサポートされている
Cron コンポーネントは、Unix cron 構文を使用して指定された特定の時間間隔でイベントをトリガーできる汎用インターフェイスコンポーネントです (例: 0/2 * * * * ?
は 2 秒ごとにイベントをトリガーします)。
インターフェイスコンポーネントであるため、Cron コンポーネントにはデフォルトの実装が含まれていません。代わりに、ユーザーが選択した実装をプラグインする必要があります。
次の標準 Camel コンポーネントは、Cron エンドポイントをサポートしています。
- キャメルクォーツ
- Camel-spring
Cron コンポーネントは Camel K でもサポートされており、cron 式で必要なときに Kubernetes スケジューラーを使用してルートをトリガーできます。Camel K では、Kubernetes cron 構文と互換性のある cron 式を使用する場合、追加のライブラリーをプラグインする必要はありません。
Maven ユーザーは、このコンポーネントの pom.xml
に以下の依存関係を追加する必要があります。
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-cron</artifactId> <version>{CamelSBVersion}</version> <!-- use the same version as your Camel core version --> </dependency>
特定の実装をプラグインするには、追加のライブラリーが必要になる場合があります。
17.1. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
17.1.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
17.1.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
17.2. コンポーネントオプション
Cron コンポーネントは、以下に示す 3 つのオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
cronService (上級) | 複数の実装が提供されている場合に使用する CamelCronService の ID。 | String |
17.3. エンドポイントオプション
Cron エンドポイントは、URI 構文を使用して設定されます。
cron:name
パスおよびクエリーパラメーターを使用します。
17.3.1. パスパラメーター(1 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
name (consumer) | 必須 cron トリガーの名前。 | String |
17.3.2. クエリーパラメーター (4 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
schedule (consumer) | 必須 イベントの生成に使用される cron 式。 | String | |
exceptionHandler (consumer (上級)) | consumer によるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、consumer は例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
exchangePattern (consumer (上級)) | consumer がエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern |
17.4. 用途
次の例のように、コンポーネントを使用して、指定した時間にイベントをトリガーできます。
from("cron:tab?schedule=0/1+*+*+*+*+?") .setBody().constant("event") .log("${body}");
スケジュール式 0/3+10+*+?
は、0/3 10 * * * ?
とも書けます。毎時 10 分だけ 3 秒ごとにイベントをトリガーします。
スケジュール式の各部の意味 (順番):
- 秒 (オプション)
- 分
- 時
- Day of month
- 月
- Day of week
- 年 (オプション)
スケジュール式は、5 ~ 7 個のパーツで作成できます。式が 6 つの部分で設定されている場合、最初の項目は秒の部分です (年は欠落していると見なされます)。
スケジュール式のその他の有効な例は次のとおりです。
-
0/2 * * * ?
(5 部、2 分ごとのイベント) -
0 0/2 * * * MON-FRI 2030
(7 部、2030 年のみ 2 分ごとのイベント)
ルートは、XML DSL を使用して記述することもできます。
<route> <from uri="cron:tab?schedule=0/1+*+*+*+*+?"/> <setBody> <constant>event</constant> </setBody> <to uri="log:info"/> </route>
17.5. Spring Boot Auto-Configuration
Spring Boot で cron を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-cron-starter</artifactId> </dependency>
コンポーネントは、以下に記載される 4 のオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.component.cron.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.cron.bridge-error-handler | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | Boolean |
camel.component.cron.cron-service | 複数の実装が提供されている場合に使用する CamelCronService の ID。 | String | |
camel.component.cron.enabled | cron コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean |
第18章 CXF
producer と consumer の両方がサポート対象
CXF コンポーネントは、CXF でホストされている JAX-WS サービスに接続するための Apache CXF との統合を提供します。
ストリーミングモードで CXF を使用する場合 (DataFormat オプションを参照)、ストリームキャッシングについてもお読みください。
Maven ユーザーは、このコンポーネントの pom.xml
に次の依存関係を追加する必要があります。
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-cxf-soap</artifactId> <version>{CamelSBVersion}</version> <!-- use the same version as your Camel core version --> </dependency>
18.1. URI 形式
このエンドポイントには、cxfEndpoint と someAddress の 2 つの URI 形式があります。
cxf:bean:cxfEndpoint[?options]
cxfEndpoint は、Spring Bean レジストリー内の Bean を参照する Bean ID を表します。この URI 形式では、ほとんどのエンドポイントの詳細が Bean 定義で指定されます。
cxf://someAddress[?options]
someAddress は、CXF エンドポイントのアドレスを指定します。この URI 形式では、ほとんどのエンドポイントの詳細がオプションを使用して指定されます。
上記のどちらのスタイルでも、次のように URI にオプションを追加できます。
cxf:bean:cxfEndpoint?wsdlURL=wsdl/hello_world.wsdl&dataFormat=PAYLOAD
18.2. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
18.2.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
18.2.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定する タイプセーフ 方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
18.3. コンポーネントオプション
CXF コンポーネントは、以下に示す 6 つのオプションをサポートしています。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
allowStreaming (上級) | このオプションは、CXF コンポーネントが PAYLOAD モードで実行されている場合に、着信メッセージを DOM 解析して DOM 要素にするか、場合によってはストリーミングを許可する javax.xml.transform.Source オブジェクトとしてペイロードを保持するかを制御します。 | Boolean | |
autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
headerFilterStrategy (filter) | カスタムの org.apache.camel.spi.HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルターします。 | HeaderFilterStrategy | |
useGlobalSslContextParameters (security) | グローバル SSL コンテキストパラメーターの使用を有効にします。 | false | boolean |
18.4. エンドポイントオプション
CXF エンドポイントは、URI 構文を使用して設定されます。
cxf:beanId:address
パスおよびクエリーパラメーターを使用します。
18.4.1. パスパラメーター (2 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
beanId (共通) | 既存の設定済み CxfEndpoint を検索するには。bean: を接頭辞として使用する必要があります。 | String | |
住所 (サービス) | サービス公開アドレス。 | String |
18.4.2. クエリーパラメーター (35 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
dataFormat (共通) | CXF エンドポイントでサポートされるデータタイプメッセージ。 列挙値:
| POJO | DataFormat |
ラップスタイル (共通) | パラメーターが SOAP 本文でどのように表現されるかを記述する WSDL スタイル。値が false の場合、CXF は document-literal のラップされていないスタイルを選択します。値が true の場合、CXF は document-literal のラップされたスタイルを選択します。 | Boolean | |
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
exceptionHandler (consumer (上級)) | consumer によるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、consumer は例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
exchangePattern (consumer (上級)) | consumer がエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
cookieHandler (producer) | HTTP セッションを維持するように Cookie ハンドラーを設定します。 | CookieHandler | |
defaultOperationName (producer) | このオプションは、リモートサービスを呼び出す CxfProducer によって使用されるデフォルトの operationName を設定します。 | String | |
defaultOperationNamespace (producer) | このオプションは、リモートサービスを呼び出す CxfProducer によって使用されるデフォルトの operationNamespace を設定します。 | String | |
hostnameVerifier (producer) | 使用するホスト名ベリファイア。# 表記を使用して、レジストリーから HostnameVerifier を参照します。 | HostnameVerifier | |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
sslContextParameters (producer) | Camel SSL 設定リファレンス。# 表記を使用して、SSL コンテキストを参照します。 | SSLContextParameters | |
ラップ (producer) | CXF エンドポイント producer が呼び出す操作の種類。 | false | boolean |
synchronous (producer (上級)) | 同期処理を厳密に使用するかどうかを設定します。 | false | boolean |
allowStreaming (上級) | このオプションは、CXF コンポーネントが PAYLOAD モードで実行されている場合に、着信メッセージを DOM 解析して DOM 要素にするか、場合によってはストリーミングを許可する javax.xml.transform.Source オブジェクトとしてペイロードを保持するかを制御します。 | Boolean | |
bus (上級) | カスタム設定の CXF バスを使用するには。 | バス | |
continuationTimeout (上級) | このオプションは、CXF サーバーが Jetty またはサーブレットトランスポートを使用している場合にデフォルトで CxfConsumer で使用できる CXF 継続タイムアウトを設定するために使用されます。 | 30000 | long |
cxfBinding (上級) | カスタム CxfBinding を使用して、Camel メッセージと CXF メッセージ間のバインディングを制御します。 | CxfBinding | |
cxfConfigurer (上級) | このオプションは、プログラムによる方法での CXF エンドポイントの設定をサポートする org.apache.camel.component.cxf.CxfEndpointConfigurer の実装を適用できます。ユーザーは、CxfEndpointConfigurer の configure{ServerClient} メソッドを実装することで、CXF サーバーとクライアントを設定できます。 | CxfConfigurer | |
defaultBus (上級) | CXF エンドポイントが独自にバスを作成するときに、デフォルトのバスを設定します。 | false | boolean |
headerFilterStrategy (上級) | カスタムの HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルタリングします。 | HeaderFilterStrategy | |
mergeProtocolHeaders (上級) | プロトコルヘッダーをマージするかどうか。有効にすると、Camel と CXF の間でヘッダーを伝播する際の一貫性と類似性が高まります。詳細については、CAMEL-6393 を参照してください。 | false | boolean |
mtomEnabled (上級) | MTOM (添付ファイル) を有効にします。これには、POJO または PAYLOAD データ形式モードを使用する必要があります。 | false | boolean |
properties (上級) | マップのキーと値のペアを使用して、追加の CXF オプションを設定します。たとえば、SOAP 障害でスタックトレースを有効にするには、properties.faultStackTraceEnabled=true とします。 | マップ | |
skipPayloadMessagePartCheck (上級) | SOAP メッセージの検証を無効にするかどうかを設定します。 | false | boolean |
loggingFeatureEnabled (logging) | このオプションは、インバウンドおよびアウトバウンドの SOAP メッセージをログに書き込む CXF ログ機能を有効にします。 | false | boolean |
loggingSizeLimit (logging) | ロギング機能が有効になっているときにロガーが出力するバイト数の合計サイズを制限するには、制限なしの場合は -1 を指定します。 | 49152 | int |
skipFaultLogging (ロギング) | このオプションは、PhaseInterceptorChain がキャッチした Fault のログ記録をスキップするかどうかを制御します。 | false | boolean |
password (セキュリティー) | このオプションは、CXF クライアントのパスワードの基本認証情報を設定するために使用されます。 | String | |
username (セキュリティー) | このオプションは、CXF クライアントのユーザー名の基本認証情報を設定するために使用されます。 | String | |
bindingId (service) | 使用するサービスモデルの bindingId。 | String | |
portName (サービス) | このサービスが実装しているエンドポイント名で、wsdl:portname にマップされます。ns:PORT_NAME の形式で、ns はこのスコープで有効な名前空間接頭辞です。 | String | |
publishedEndpointUrl (service) | このオプションは、サービスアドレス URL と wsd でアクセスできる WSDL から発行された endpointUrl をオーバーライドできます。 | String | |
serviceClass (サービス) | JSR181 アノテーションを持つかどうかにかかわらず、SEI (Service Endpoint Interface) クラスのクラス名。 | クラス | |
サービス名 (サービス) | このサービスが実装しているサービス名で、wsdl:servicename にマップされます。 | String | |
wsdlURL (サービス) | WSDL のロケーション。クラスパス、ファイルシステム、またはリモートでホストできます。 | String |
serviceName
と portName
は QNames であるため、これらを指定する場合は、上記の例に示すように {namespace} を前に付けてください。
18.4.3. データ形式の説明
Apache Camel では、Camel CXF コンポーネントがルートを Web サービスと統合するための鍵となります。Camel CXF コンポーネントを使用して、次のいずれかの方法で使用できる CXF エンドポイントを作成できます。
- consumer — (ルートの開始時) は、ルートと統合される Web サービスインスタンスを表します。ルートに挿入されるペイロードのタイプは、エンドポイントの dataFormat オプションの値によって異なります。
- producer — (ルートの他のポイントで) WS クライアントプロキシーを表し、現在の交換オブジェクトをリモート Web サービスでの操作呼び出しに変換します。現在の交換の形式は、エンドポイントの dataFormat 設定と一致する必要があります。
DataFormat | 説明 |
---|---|
| POJO (Plain old Java objects) は、ターゲットサーバーで呼び出されるメソッドへの Java パラメーターです。プロトコル JAX-WS ハンドラーと論理 JAX-WS ハンドラーの両方がサポートされています。 |
|
|
|
|
|
|
交換プロパティー CamelCXFDataFormat
を取得することで、交換のデータ形式モードを判別できます。交換キー定数は org.apache.camel.component.cxf.common.message.CxfConstants.DATA_FORMAT_PROPERTY
で定義されています。
18.4.4. CXF の LoggingOutInterceptor を RAW モードで有効にする方法
CXF の LoggingOutInterceptor
は、ロギングシステム (Java Util Logging) に送信されるアウトバウンドメッセージを出力します。LoggingOutInterceptor
は PRE_STREAM
フェーズにあるため (ただし、PRE_STREAM
フェーズは RAW
モードでは削除されます)、WRITE
フェーズ中に実行されるように LoggingOutInterceptor
を設定する必要があります。以下に例を示します。
@Bean public CxfEndpoint serviceEndpoint(LoggingOutInterceptor loggingOutInterceptor) { CxfSpringEndpoint cxfEndpoint = new CxfSpringEndpoint(); cxfEndpoint.setAddress("http://localhost:" + port + "/services" + SERVICE_ADDRESS); cxfEndpoint.setServiceClass(org.apache.camel.component.cxf.HelloService.class); Map<String, Object> properties = new HashMap<String, Object>(); properties.put("dataFormat", "RAW"); cxfEndpoint.setProperties(properties); cxfEndpoint.getOutInterceptors().add(loggingOutInterceptor); return cxfEndpoint; } @Bean public LoggingOutInterceptor loggingOutInterceptor() { LoggingOutInterceptor logger = new LoggingOutInterceptor("write"); return logger; }
18.4.5. RelayHeaders オプションの説明
JAXWS WSDL ファーストの開発者の観点から見ると、帯域内 ヘッダーと 帯域外 ヘッダーがあります。
インバンド ヘッダーは、SOAP ヘッダーなどのエンドポイントの WSDL バインディングコントラクトの一部として明示的に定義されるヘッダーです。
アウトオブバンド ヘッダーは、ネットワーク経由でシリアル化されるヘッダーですが、明示的に WSDL バインディングコントラクトの一部ではありません。
ヘッダーの中継/フィルタリングは双方向です。
ルートに CXF エンドポイントがあり、開発者が SOAP ヘッダーなどのオンザワイヤヘッダーをルートに沿ってリレーして、たとえば別の JAXWS エンドポイントで消費する必要がある場合、relayHeaders
を true
に設定する必要があります。デフォルト値。
18.4.6. POJO モードでのみ使用可能
relayHeaders=true
は、ヘッダーをリレーする意図を表します。特定のヘッダーが中継されるかどうかの実際の決定は、MessageHeadersRelay
インターフェイスを実装するプラグ可能なインスタンスに委譲されます。MessageHeadersRelay
の具体的な実装を調べて、ヘッダーを中継する必要があるかどうかを判断します。既知の SOAP 名前空間にバインドする SoapMessageHeadersRelay
の実装がすでにあります。現在、帯域外ヘッダーのみがフィルタリングされ、relayHeaders=true
の場合、帯域内ヘッダーは常に中継されます。ネームスペースがランタイムに不明なヘッダーがワイヤ上にある場合、フォールバック DefaultMessageHeadersRelay
が使用されます。これにより、すべてのヘッダーの中継が単純に許可されます。
RelayHeaders=false
設定は、帯域内および帯域外のすべてのヘッダーをドロップする必要があることを指定します。
独自の MessageHeadersRelay
実装をプラグインして、リレーのリストをオーバーライドまたは追加することができます。プリロードされたリレーインスタンスをオーバーライドするには、MessageHeadersRelay
実装がオーバーライドしようとしている名前空間と同じ名前空間を提供していることを確認してください。また、オーバーライドするリレーは、オーバーライドしようとしているすべての名前空間にサービスを提供する必要があることに注意してください。そうしないと、インスタンスマッピングをリレーする名前空間にあいまいさが生じるため、ルートの起動時に実行時例外が出力されます。
<cxf:cxfEndpoint ...> <cxf:properties> <entry key="org.apache.camel.cxf.message.headers.relays"> <list> <ref bean="customHeadersRelay"/> </list> </entry> </cxf:properties> </cxf:cxfEndpoint> <bean id="customHeadersRelay" class="org.apache.camel.component.cxf.soap.headers.CustomHeadersRelay"/>
ここでヘッダーをリレー/ドロップする方法を示すテストを見てください。
-
POJO
およびPAYLOAD
モードがサポートされています。POJO
モードでは、CXF によってインバンドヘッダーが処理され、ヘッダーリストから削除されているため、フィルタリングに使用できるのはアウトオブバンドメッセージヘッダーのみです。インバンドヘッダーは、POJO モードでMessageContentList
に組み込まれます。camel-cxf
コンポーネントは、インバンドヘッダーをMessageContentList
から削除しようとします。インバンドヘッダーのフィルタリングが必要な場合は、PAYLOAD
モードを使用するか、(非常に簡単な) CXF インターセプター/JAXWS ハンドラーを CXF エンドポイントにプラグインしてください。 -
メッセージヘッダーリレーメカニズムは
CxfHeaderFilterStrategy
にマージされました。relayHeaders
オプション、そのセマンティクス、およびデフォルト値は同じままですが、CxfHeaderFilterStrategy
のプロパティーです。以下はその設定例です。
@Bean public HeaderFilterStrategy dropAllMessageHeadersStrategy() { CxfHeaderFilterStrategy headerFilterStrategy = new CxfHeaderFilterStrategy(); headerFilterStrategy.setRelayHeaders(false); return headerFilterStrategy; }
その後、エンドポイントは CxfHeaderFilterStrategy
を参照できます。
@Bean public CxfEndpoint routerNoRelayEndpoint(HeaderFilterStrategy dropAllMessageHeadersStrategy) { CxfSpringEndpoint cxfEndpoint = new CxfSpringEndpoint(); cxfEndpoint.setServiceClass(org.apache.camel.component.cxf.soap.headers.HeaderTester.class); cxfEndpoint.setAddress("/CxfMessageHeadersRelayTest/HeaderService/routerNoRelayEndpoint"); cxfEndpoint.setWsdlURL("soap_header.wsdl"); cxfEndpoint.setEndpointNameAsQName( QName.valueOf("{http://apache.org/camel/component/cxf/soap/headers}SoapPortNoRelay")); cxfEndpoint.setServiceNameAsQName(SERVICENAME); Map<String, Object> properties = new HashMap<String, Object>(); properties.put("dataFormat", "PAYLOAD"); cxfEndpoint.setProperties(properties); cxfEndpoint.setHeaderFilterStrategy(dropAllMessageHeadersStrategy); return cxfEndpoint; } @Bean public CxfEndpoint serviceNoRelayEndpoint(HeaderFilterStrategy dropAllMessageHeadersStrategy) { CxfSpringEndpoint cxfEndpoint = new CxfSpringEndpoint(); cxfEndpoint.setServiceClass(org.apache.camel.component.cxf.soap.headers.HeaderTester.class); cxfEndpoint.setAddress("http://localhost:" + port + "/services/CxfMessageHeadersRelayTest/HeaderService/routerNoRelayEndpointBackend"); cxfEndpoint.setWsdlURL("soap_header.wsdl"); cxfEndpoint.setEndpointNameAsQName( QName.valueOf("{http://apache.org/camel/component/cxf/soap/headers}SoapPortNoRelay")); cxfEndpoint.setServiceNameAsQName(SERVICENAME); Map<String, Object> properties = new HashMap<String, Object>(); properties.put("dataFormat", "PAYLOAD"); cxfEndpoint.setProperties(properties); cxfEndpoint.setHeaderFilterStrategy(dropAllMessageHeadersStrategy); return cxfEndpoint; }
次に、ルートを次のように設定します。
rom("cxf:bean:routerNoRelayEndpoint") .to("cxf:bean:serviceNoRelayEndpoint");
-
MessageHeadersRelay
インターフェイスがわずかに変更され、名前がMessageHeaderFilter
に変更されました。CxfHeaderFilterStrategy
のプロパティーです。ユーザー定義のメッセージヘッダーフィルターを設定する例を次に示します。
@Bean public HeaderFilterStrategy customMessageFilterStrategy() { CxfHeaderFilterStrategy headerFilterStrategy = new CxfHeaderFilterStrategy(); List<MessageHeaderFilter> headerFilterList = new ArrayList<MessageHeaderFilter>(); headerFilterList.add(new SoapMessageHeaderFilter()); headerFilterList.add(new CustomHeaderFilter()); headerFilterStrategy.setMessageHeaderFilters(headerFilterList); return headerFilterStrategy; }
-
relayHeaders
に加えて、次のプロパティーをCxfHeaderFilterStrategy
で設定できます。
名前 | 必須 | 説明 |
---|---|---|
| いいえ |
すべてのメッセージヘッダーは、メッセージヘッダーフィルターによって処理されます タイプ: |
| いいえ |
すべてのメッセージヘッダーが伝達されます (メッセージヘッダーフィルターによる処理なし) タイプ: |
| いいえ |
アクティベーション名前空間で 2 つのフィルターが重複する場合、プロパティーはその処理方法を制御します。値が |
18.5. Spring で CXF エンドポイントを設定する
以下に示す Spring 設定ファイルを使用して CXF エンドポイントを設定できます。また、エンドポイントを camelContext
タグに埋め込むこともできます。サービスエンドポイントを呼び出すときに、operationName
ヘッダーと operationNamespace
ヘッダーを設定して、呼び出す操作を明示的に指定できます。
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:cxf="http://camel.apache.org/schema/cxf" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://camel.apache.org/schema/cxf http://camel.apache.org/schema/cxf/camel-cxf.xsd http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd"> <cxf:cxfEndpoint id="routerEndpoint" address="http://localhost:9003/CamelContext/RouterPort" serviceClass="org.apache.hello_world_soap_http.GreeterImpl"/> <cxf:cxfEndpoint id="serviceEndpoint" address="http://localhost:9000/SoapContext/SoapPort" wsdlURL="testutils/hello_world.wsdl" serviceClass="org.apache.hello_world_soap_http.Greeter" endpointName="s:SoapPort" serviceName="s:SOAPService" xmlns:s="http://apache.org/hello_world_soap_http" /> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"> <route> <from uri="cxf:bean:routerEndpoint" /> <to uri="cxf:bean:serviceEndpoint" /> </route> </camelContext> </beans>
ルート Bean 要素で指定された JAX-WS schemaLocation
属性を必ず含めてください。これにより、CXF はファイルを検証できるようになります。これは必須です。<cxf:cxfEndpoint/>
タグの末尾にある名前空間の宣言にも注意してください。結合された {namespace}localName
構文は現在、このタグの属性値に対してサポートされていないため、これらの宣言が必要です。
cxf:cxfEndpoint
要素は、多くの追加属性をサポートしています。
名前 | 値 |
---|---|
|
このサービスが実装しているエンドポイント名で、 |
|
このサービスが実装しているサービス名で、 |
| WSDL のロケーション。クラスパス、ファイルシステム、またはリモートでホストできます。 |
|
使用するサービスモデルの |
| サービス公開アドレス。 |
| JAX-WS エンドポイントで使用されるバス名。 |
| JSR181 アノテーションを持つかどうかにかかわらず、SEI (Service Endpoint Interface) クラスのクラス名。 |
また、多くの子要素もサポートしています。
名前 | 値 |
---|---|
|
このエンドポイントの着信インターセプター。 |
|
このエンドポイントの着信障害インターセプター。 |
|
このエンドポイントの発信インターセプター。 |
|
このエンドポイントの送信障害インターセプター。 |
| JAX-WS エンドポイントに提供する必要があるプロパティーマップ。以下を参照してください。 |
| JAX-WS エンドポイントに提供する必要がある JAX-WS ハンドラーリスト。以下を参照してください。 |
|
エンドポイントで使用する |
|
このエンドポイントが使用する |
| このエンドポイントのインターセプターを保持する機能。Bean または参照のリスト |
| エンドポイントが使用するスキーマの場所。schemaLocations のリスト |
|
このエンドポイントが使用するサービスファクトリー。これは、Spring |
CXF JAX-WS 設定ページ で、インターセプター、プロパティー、およびハンドラーを提供する方法を示すより高度な例を見つけることができます。
cxf:properties を使用して、Spring 設定ファイルから camel-cxf エンドポイントの dataFormat および setDefaultBus プロパティーを設定できます。
<cxf:cxfEndpoint id="testEndpoint" address="http://localhost:9000/router" serviceClass="org.apache.camel.component.cxf.HelloService" endpointName="s:PortName" serviceName="s:ServiceName" xmlns:s="http://www.example.com/test"> <cxf:properties> <entry key="dataFormat" value="RAW"/> <entry key="setDefaultBus" value="true"/> </cxf:properties> </cxf:cxfEndpoint>
SpringBoot では、Spring XML ファイルを使用して camel-cxf
を設定し、次の例のようなコードを使用して XML 設定 Bean を作成できます。
@ImportResource({ "classpath:spring-configuration.xml" })
ただし、SpringBoot では、(他の例で示されているように) Java コードで設定された Bean を使用するのがベストプラクティスです。
18.6. camel-cxf コンポーネントで java.util.logging の代わりに log4j を使用する方法
CXF のデフォルトのロガーは java.util.logging
です。log4j に変更する場合は、次の手順を実行します。クラスパスに META-INF/cxf/org.apache.cxf.logger
という名前のファイルを作成します。このファイルには、クラスの完全修飾名 org.apache.cxf.common.logging.Log4jLogger
がコメントなしで 1 行に含まれている必要があります。
18.7. camel-cxf のレスポンスを xml 処理命令で開始させる方法
PHP などの SOAP クライアントを使用している場合、CXF は XML 処理命令 <?xml version="1.0" encoding="utf-8"?>
を追加しないため、この種のエラーが発生します。
Error:sendSms: SoapFault exception: [Client] looks like we got no XML document in [...]
この問題を解決するには、以下の WriteXmlDeclarationInterceptor のように、StaxOutInterceptor に XML 開始ドキュメントを書き込むように指示するだけです。
public class WriteXmlDeclarationInterceptor extends AbstractPhaseInterceptor<SoapMessage> { public WriteXmlDeclarationInterceptor() { super(Phase.PRE_STREAM); addBefore(StaxOutInterceptor.class.getName()); } public void handleMessage(SoapMessage message) throws Fault { message.put("org.apache.cxf.stax.force-start-document", Boolean.TRUE); } }
別の方法として、CxfConsumerTest で示されているように、メッセージヘッダーを追加できます。
// set up the response context which force start document Map<String, Object> map = new HashMap<String, Object>(); map.put("org.apache.cxf.stax.force-start-document", Boolean.TRUE); exchange.getOut().setHeader(Client.RESPONSE_CONTEXT, map);
18.8. メッセージヘッダーから CXF producer アドレスを上書きする方法
camel-cxf
producer は、メッセージヘッダー CamelDestinationOverrideUrl
を設定することで、ターゲットサービスアドレスのオーバーライドをサポートします。
// set up the service address from the message header to override the setting of CXF endpoint exchange.getIn().setHeader(Exchange.DESTINATION_OVERRIDE_URL, constant(getServiceAddress()));
18.9. POJO データ形式の camel-cxf エンドポイントからのメッセージを使用する方法
camel-cxf
エンドポイントconsumer POJO データ形式は CXF インボーカー に基づいているため、メッセージヘッダーには CxfConstants.OPERATION_NAME
という名前のプロパティーがあり、メッセージ本文は SEI メソッドパラメーターのリストです。
PersonProcessor のサンプルコードを考えてみましょう。
public class PersonProcessor implements Processor { private static final Logger LOG = LoggerFactory.getLogger(PersonProcessor.class); @Override @SuppressWarnings("unchecked") public void process(Exchange exchange) throws Exception { LOG.info("processing exchange in camel"); BindingOperationInfo boi = (BindingOperationInfo) exchange.getProperty(BindingOperationInfo.class.getName()); if (boi != null) { LOG.info("boi.isUnwrapped" + boi.isUnwrapped()); } // Get the parameters list which element is the holder. MessageContentsList msgList = (MessageContentsList) exchange.getIn().getBody(); Holder<String> personId = (Holder<String>) msgList.get(0); Holder<String> ssn = (Holder<String>) msgList.get(1); Holder<String> name = (Holder<String>) msgList.get(2); if (personId.value == null || personId.value.length() == 0) { LOG.info("person id 123, so throwing exception"); // Try to throw out the soap fault message org.apache.camel.wsdl_first.types.UnknownPersonFault personFault = new org.apache.camel.wsdl_first.types.UnknownPersonFault(); personFault.setPersonId(""); org.apache.camel.wsdl_first.UnknownPersonFault fault = new org.apache.camel.wsdl_first.UnknownPersonFault("Get the null value of person name", personFault); exchange.getMessage().setBody(fault); return; } name.value = "Bonjour"; ssn.value = "123"; LOG.info("setting Bonjour as the response"); // Set the response message, first element is the return value of the operation, // the others are the holders of method parameters exchange.getMessage().setBody(new Object[] { null, personId, ssn, name }); } }
18.10. POJO データ形式で camel-cxf エンドポイントのメッセージを準備する方法
camel-cxf
エンドポイント producer は、CXF client API に基づいています。まず、メッセージヘッダーでオペレーション名を指定し、次にメソッドパラメーターをリストに追加し、このパラメーターリストでメッセージを初期化する必要があります。応答メッセージの本文は messageContentsList であり、そのリストから結果を取得できます。
メッセージヘッダーで操作名を指定しない場合、CxfProducer
は CxfEndpoint
から defaultOperationName
を使用しようとします。CxfEndpoint
に defaultOperationName
が設定されていない場合、操作リストから最初の operationName を取得します。
メッセージ本文からオブジェクト配列を取得する場合は、CxfProducerRouterTest.testInvokingSimpleServerWithParams に示すように、message.getBody (Object.class)
を使用して本文を取得できます。
Exchange senderExchange = new DefaultExchange(context, ExchangePattern.InOut); final List<String> params = new ArrayList<>(); // Prepare the request message for the camel-cxf procedure params.add(TEST_MESSAGE); senderExchange.getIn().setBody(params); senderExchange.getIn().setHeader(CxfConstants.OPERATION_NAME, ECHO_OPERATION); Exchange exchange = template.send("direct:EndpointA", senderExchange); org.apache.camel.Message out = exchange.getMessage(); // The response message's body is an MessageContentsList which first element is the return value of the operation, // If there are some holder parameters, the holder parameter will be filled in the reset of List. // The result will be extract from the MessageContentsList with the String class type MessageContentsList result = (MessageContentsList) out.getBody(); LOG.info("Received output text: " + result.get(0)); Map<String, Object> responseContext = CastUtils.cast((Map<?, ?>) out.getHeader(Client.RESPONSE_CONTEXT)); assertNotNull(responseContext); assertEquals("UTF-8", responseContext.get(org.apache.cxf.message.Message.ENCODING), "We should get the response context here"); assertEquals("echo " + TEST_MESSAGE, result.get(0), "Reply body on Camel is wrong");
18.11. PAYLOAD データ形式の camel-cxf エンドポイントのメッセージを処理する方法
PAYLOAD
は、SOAP エンベロープからのペイロードをネイティブ CxfPayload として処理することを意味します。Message.getBody ()
は org.apache.camel.component.cxf.CxfPayload
オブジェクトを、SOAP メッセージヘッダーと SOAP 本文のゲッターと共に返します。
CxfConsumerPayloadTest を参照してください:
protected RouteBuilder createRouteBuilder() { return new RouteBuilder() { public void configure() { from(simpleEndpointURI + "&dataFormat=PAYLOAD").to("log:info").process(new Processor() { @SuppressWarnings("unchecked") public void process(final Exchange exchange) throws Exception { CxfPayload<SoapHeader> requestPayload = exchange.getIn().getBody(CxfPayload.class); List<Source> inElements = requestPayload.getBodySources(); List<Source> outElements = new ArrayList<>(); // You can use a customer toStringConverter to turn a CxfPayLoad message into String as you want String request = exchange.getIn().getBody(String.class); XmlConverter converter = new XmlConverter(); String documentString = ECHO_RESPONSE; Element in = new XmlConverter().toDOMElement(inElements.get(0)); // Just check the element namespace if (!in.getNamespaceURI().equals(ELEMENT_NAMESPACE)) { throw new IllegalArgumentException("Wrong element namespace"); } if (in.getLocalName().equals("echoBoolean")) { documentString = ECHO_BOOLEAN_RESPONSE; checkRequest("ECHO_BOOLEAN_REQUEST", request); } else { documentString = ECHO_RESPONSE; checkRequest("ECHO_REQUEST", request); } Document outDocument = converter.toDOMDocument(documentString, exchange); outElements.add(new DOMSource(outDocument.getDocumentElement())); // set the payload header with null CxfPayload<SoapHeader> responsePayload = new CxfPayload<>(null, outElements, null); exchange.getMessage().setBody(responsePayload); } }); } }; }
18.12. POJO モードで SOAP ヘッダーを取得および設定する方法
POJO
は、camel-cxf エンドポイントが Camel 交換を生成または消費するときのデータ形式が Java オブジェクトのリストであることを意味します。Camel はこのモードでメッセージ本文を POJO として公開しますが、camel-cxf は引き続き SOAP ヘッダーを読み書きするためのアクセスを提供します。ただし、CXF インターセプターはインバンド SOAP ヘッダーを処理後にヘッダーリストから削除するため、POJO モードの camel-cxf ではアウトオブバンド SOAP ヘッダーのみを使用できます。
次の例は、SOAP ヘッダーを取得/設定する方法を示しています。ある Camel-cxf エンドポイントから別のエンドポイントに転送するルートがあるとします。つまり、SOAP クライアント → Camel → CXF サービスです。2 つのプロセッサーを接続して、(1) 要求が CXF サービスに送信される前と (2) 応答が SOAP クライアントに返される前に、SOAP ヘッダーを取得/挿入できます。この例のプロセッサー (1) と (2) は、InsertRequestOutHeaderProcessor と InsertResponseOutHeaderProcessor です。ルートは次のようになります。
from("cxf:bean:routerRelayEndpointWithInsertion") .process(new InsertRequestOutHeaderProcessor()) .to("cxf:bean:serviceRelayEndpointWithInsertion") .process(new InsertResponseOutHeaderProcessor());
Bean routerRelayEndpointWithInsertion
および serviceRelayEndpointWithInsertion
は次のように定義されます。
@Bean public CxfEndpoint routerRelayEndpointWithInsertion() { CxfSpringEndpoint cxfEndpoint = new CxfSpringEndpoint(); cxfEndpoint.setServiceClass(org.apache.camel.component.cxf.soap.headers.HeaderTester.class); cxfEndpoint.setAddress("/CxfMessageHeadersRelayTest/HeaderService/routerRelayEndpointWithInsertion"); cxfEndpoint.setWsdlURL("soap_header.wsdl"); cxfEndpoint.setEndpointNameAsQName( QName.valueOf("{http://apache.org/camel/component/cxf/soap/headers}SoapPortRelayWithInsertion")); cxfEndpoint.setServiceNameAsQName(SERVICENAME); cxfEndpoint.getFeatures().add(new LoggingFeature()); return cxfEndpoint; } @Bean public CxfEndpoint serviceRelayEndpointWithInsertion() { CxfSpringEndpoint cxfEndpoint = new CxfSpringEndpoint(); cxfEndpoint.setServiceClass(org.apache.camel.component.cxf.soap.headers.HeaderTester.class); cxfEndpoint.setAddress("http://localhost:" + port + "/services/CxfMessageHeadersRelayTest/HeaderService/routerRelayEndpointWithInsertionBackend"); cxfEndpoint.setWsdlURL("soap_header.wsdl"); cxfEndpoint.setEndpointNameAsQName( QName.valueOf("{http://apache.org/camel/component/cxf/soap/headers}SoapPortRelayWithInsertion")); cxfEndpoint.setServiceNameAsQName(SERVICENAME); cxfEndpoint.getFeatures().add(new LoggingFeature()); return cxfEndpoint; }
SOAP ヘッダーは、Camel メッセージヘッダーとの間で伝達されます。Camel メッセージヘッダー名は、CXF (org.apache.cxf.headers.Header.HEADER_LIST) で定義されている定数である "org.apache.cxf.headers.Header.list" です。ヘッダー値は、CXF SoapHeader オブジェクト (org.apache.cxf.binding.soap.SoapHeader) のリストです。次のスニペットは、InsertResponseOutHeaderProcessor (応答メッセージに新しい SOAP ヘッダーを挿入する) です。InsertResponseOutHeaderProcessor と InsertRequestOutHeaderProcessor の両方で SOAP ヘッダーにアクセスする方法は、実際には同じです。2 つのプロセッサーの唯一の違いは、挿入される SOAP ヘッダーの方向を設定することです。
InsertResponseOutHeaderProcessor
の例は CxfMessageHeadersRelayTest にあります。
public static class InsertResponseOutHeaderProcessor implements Processor { public void process(Exchange exchange) throws Exception { List<SoapHeader> soapHeaders = CastUtils.cast((List<?>)exchange.getIn().getHeader(Header.HEADER_LIST)); // Insert a new header String xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?><outofbandHeader " + "xmlns=\"http://cxf.apache.org/outofband/Header\" hdrAttribute=\"testHdrAttribute\" " + "xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\" soap:mustUnderstand=\"1\">" + "<name>New_testOobHeader</name><value>New_testOobHeaderValue</value></outofbandHeader>"; SoapHeader newHeader = new SoapHeader(soapHeaders.get(0).getName(), DOMUtils.readXml(new StringReader(xml)).getDocumentElement()); // make sure direction is OUT since it is a response message. newHeader.setDirection(Direction.DIRECTION_OUT); //newHeader.setMustUnderstand(false); soapHeaders.add(newHeader); } }
18.13. PAYLOAD モードで SOAP ヘッダーを取得および設定する方法
PAYLOAD モードで CxfPayload オブジェクトとして SOAP メッセージにアクセスする方法については、PAYLOAD データ形式で camel-cxf エンドポイントのメッセージを処理する方法 セクションですでに説明しました。
CxfPayload オブジェクトを取得したら、DOM 要素 (SOAP ヘッダー) のリストを返す CxfPayload.getHeaders () メソッドを呼び出すことができます。
例については、CxfPayLoadSoapHeaderTest を参照してください。
from(getRouterEndpointURI()).process(new Processor() { @SuppressWarnings("unchecked") public void process(Exchange exchange) throws Exception { CxfPayload<SoapHeader> payload = exchange.getIn().getBody(CxfPayload.class); List<Source> elements = payload.getBodySources(); assertNotNull(elements, "We should get the elements here"); assertEquals(1, elements.size(), "Get the wrong elements size"); Element el = new XmlConverter().toDOMElement(elements.get(0)); elements.set(0, new DOMSource(el)); assertEquals("http://camel.apache.org/pizza/types", el.getNamespaceURI(), "Get the wrong namespace URI"); List<SoapHeader> headers = payload.getHeaders(); assertNotNull(headers, "We should get the headers here"); assertEquals(1, headers.size(), "Get the wrong headers size"); assertEquals("http://camel.apache.org/pizza/types", ((Element) (headers.get(0).getObject())).getNamespaceURI(), "Get the wrong namespace URI"); // alternatively you can also get the SOAP header via the camel header: headers = exchange.getIn().getHeader(Header.HEADER_LIST, List.class); assertNotNull(headers, "We should get the headers here"); assertEquals(1, headers.size(), "Get the wrong headers size"); assertEquals("http://camel.apache.org/pizza/types", ((Element) (headers.get(0).getObject())).getNamespaceURI(), "Get the wrong namespace URI"); } }) .to(getServiceEndpointURI());
サブチャプター POJO モードで SOAP ヘッダーを取得および設定する方法で説明されているのと同じ方法を使用して、SOAP ヘッダーを設定または取得することもできます。したがって、ヘッダー org.apache.cxf.headers.Header.list を使用して、SOAP ヘッダーのリストを取得および設定できます。これは、ある Camel-cxf エンドポイントから別のエンドポイントに転送するルートがある場合も意味します。(SOAP クライアント → Camel → CXF サービス)、SOAP クライアントによって送信された SOAP ヘッダーも CXF サービスに転送されるようになりました。これらのヘッダーを転送したくない場合は、Camel ヘッダー "org.apache.cxf.headers.Header.list" でそれらを削除する必要があります。
18.14. SOAP ヘッダーは RAW モードでは使用できません
SOAP 処理がスキップされるため、SOAP ヘッダーは RAW モードでは使用できません。
18.15. Camel から SOAP Fault を出力する方法
camel-cxf
エンドポイントを使用して SOAP リクエストを使用している場合は、camel コンテキストから SOAP Fault を出力する必要がある場合があります。
基本的に、これを行うには throwFault
DSL を使用できます。POJO
、PAYLOAD
、および MESSAGE
データ形式で機能します。
CxfCustomizedExceptionTest に示すように、SOAP 障害を定義できます。
SOAP_FAULT = new SoapFault(EXCEPTION_MESSAGE, SoapFault.FAULT_CODE_CLIENT); Element detail = SOAP_FAULT.getOrCreateDetail(); Document doc = detail.getOwnerDocument(); Text tn = doc.createTextNode(DETAIL_TEXT); detail.appendChild(tn);
あとは好きなように投げてください
from(routerEndpointURI).setFaultBody(constant(SOAP_FAULT));
CXF エンドポイントが MESSAGE
データ形式で動作している場合、CxfMessageStreamExceptionTest で示されているように、メッセージ本文に SOAP Fault メッセージを設定し、メッセージヘッダーに応答コードを設定できます。
from(routerEndpointURI).process(new Processor() { public void process(Exchange exchange) throws Exception { Message out = exchange.getOut(); // Set the message body with the out.setBody(this.getClass().getResourceAsStream("SoapFaultMessage.xml")); // Set the response code here out.setHeader(org.apache.cxf.message.Message.RESPONSE_CODE, new Integer(500)); } });
POJO データ形式を使用する場合も同様です。out body に SOAPFault を設定できます。
18.16. camel-cxf エンドポイントのリクエストとレスポンスのコンテキストを伝播する方法
CXF クライアント API は、要求と応答のコンテキストで操作を呼び出す方法を提供します。camel-cxf
エンドポイント producer を使用して外部 Web サービスを呼び出す場合は、次のコードを使用して、要求コンテキストを設定し、応答コンテキストを取得できます。
CxfExchange exchange = (CxfExchange)template.send(getJaxwsEndpointUri(), new Processor() { public void process(final Exchange exchange) { final List<String> params = new ArrayList<String>(); params.add(TEST_MESSAGE); // Set the request context to the inMessage Map<String, Object> requestContext = new HashMap<String, Object>(); requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, JAXWS_SERVER_ADDRESS); exchange.getIn().setBody(params); exchange.getIn().setHeader(Client.REQUEST_CONTEXT , requestContext); exchange.getIn().setHeader(CxfConstants.OPERATION_NAME, GREET_ME_OPERATION); } }); org.apache.camel.Message out = exchange.getOut(); // The output is an object array, the first element of the array is the return value Object\[\] output = out.getBody(Object\[\].class); LOG.info("Received output text: " + output\[0\]); // Get the response context form outMessage Map<String, Object> responseContext = CastUtils.cast((Map)out.getHeader(Client.RESPONSE_CONTEXT)); assertNotNull(responseContext); assertEquals("Get the wrong wsdl operation name", "{http://apache.org/hello_world_soap_http}greetMe", responseContext.get("javax.xml.ws.wsdl.operation").toString());
18.17. アタッチメントサポート
POJO モード: SOAP with Attachment と MTOM の両方がサポートされています (MTOM を有効にするためのペイロードモードの例を参照してください)。ただし、SOAP with Attachment はテストされていません。添付ファイルは POJO にマーシャリングおよびアンマーシャリングされるため、通常、ユーザーは添付ファイル自体を処理する必要はありません。MTOM が有効になっていない場合、添付ファイルは Camel メッセージの添付ファイルに伝達されます。そのため、Camel Message API で添付ファイルを取得することができます。
DataHandler Message.getAttachment(String id)
ペイロードモード: MTOM はコンポーネントによってサポートされます。添付ファイルは、上記の Camel Message API によって取得できます。SOAP with Attachment (SwA) がサポートされており、添付ファイルを取得できます。SwA がデフォルトです (CXF エンドポイントプロパティー mtom-enabled を false に設定するのと同じです)。
MTOM を有効にするには、CXF エンドポイントプロパティー "mtom-enabled" を true に設定します。
@Bean public CxfEndpoint routerEndpoint() { CxfSpringEndpoint cxfEndpoint = new CxfSpringEndpoint(); cxfEndpoint.setServiceNameAsQName(SERVICE_QNAME); cxfEndpoint.setEndpointNameAsQName(PORT_QNAME); cxfEndpoint.setAddress("/" + getClass().getSimpleName()+ "/jaxws-mtom/hello"); cxfEndpoint.setWsdlURL("mtom.wsdl"); Map<String, Object> properties = new HashMap<String, Object>(); properties.put("dataFormat", "PAYLOAD"); properties.put("mtom-enabled", true); cxfEndpoint.setProperties(properties); return cxfEndpoint; }
ペイロードモードで CXF エンドポイントに送信する添付ファイル付きの Camel メッセージを生成できます。
Exchange exchange = context.createProducerTemplate().send("direct:testEndpoint", new Processor() { public void process(Exchange exchange) throws Exception { exchange.setPattern(ExchangePattern.InOut); List<Source> elements = new ArrayList<Source>(); elements.add(new DOMSource(DOMUtils.readXml(new StringReader(MtomTestHelper.REQ_MESSAGE)).getDocumentElement())); CxfPayload<SoapHeader> body = new CxfPayload<SoapHeader>(new ArrayList<SoapHeader>(), elements, null); exchange.getIn().setBody(body); exchange.getIn().addAttachment(MtomTestHelper.REQ_PHOTO_CID, new DataHandler(new ByteArrayDataSource(MtomTestHelper.REQ_PHOTO_DATA, "application/octet-stream"))); exchange.getIn().addAttachment(MtomTestHelper.REQ_IMAGE_CID, new DataHandler(new ByteArrayDataSource(MtomTestHelper.requestJpeg, "image/jpeg"))); } }); // process response CxfPayload<SoapHeader> out = exchange.getOut().getBody(CxfPayload.class); Assert.assertEquals(1, out.getBody().size()); Map<String, String> ns = new HashMap<String, String>(); ns.put("ns", MtomTestHelper.SERVICE_TYPES_NS); ns.put("xop", MtomTestHelper.XOP_NS); XPathUtils xu = new XPathUtils(ns); Element oute = new XmlConverter().toDOMElement(out.getBody().get(0)); Element ele = (Element)xu.getValue("//ns:DetailResponse/ns:photo/xop:Include", oute, XPathConstants.NODE); String photoId = ele.getAttribute("href").substring(4); // skip "cid:" ele = (Element)xu.getValue("//ns:DetailResponse/ns:image/xop:Include", oute, XPathConstants.NODE); String imageId = ele.getAttribute("href").substring(4); // skip "cid:" DataHandler dr = exchange.getOut().getAttachment(photoId); Assert.assertEquals("application/octet-stream", dr.getContentType()); MtomTestHelper.assertEquals(MtomTestHelper.RESP_PHOTO_DATA, IOUtils.readBytesFromStream(dr.getInputStream())); dr = exchange.getOut().getAttachment(imageId); Assert.assertEquals("image/jpeg", dr.getContentType()); BufferedImage image = ImageIO.read(dr.getInputStream()); Assert.assertEquals(560, image.getWidth()); Assert.assertEquals(300, image.getHeight());
ペイロードモードで CXF エンドポイントから受信した Camel メッセージを使用することもできます。CxfMtomConsumerPayloadModeTest は、これがどのように機能するかを示しています。
public static class MyProcessor implements Processor { @SuppressWarnings("unchecked") public void process(Exchange exchange) throws Exception { CxfPayload<SoapHeader> in = exchange.getIn().getBody(CxfPayload.class); // verify request Assert.assertEquals(1, in.getBody().size()); Map<String, String> ns = new HashMap<String, String>(); ns.put("ns", MtomTestHelper.SERVICE_TYPES_NS); ns.put("xop", MtomTestHelper.XOP_NS); XPathUtils xu = new XPathUtils(ns); Element body = new XmlConverter().toDOMElement(in.getBody().get(0)); Element ele = (Element)xu.getValue("//ns:Detail/ns:photo/xop:Include", body, XPathConstants.NODE); String photoId = ele.getAttribute("href").substring(4); // skip "cid:" Assert.assertEquals(MtomTestHelper.REQ_PHOTO_CID, photoId); ele = (Element)xu.getValue("//ns:Detail/ns:image/xop:Include", body, XPathConstants.NODE); String imageId = ele.getAttribute("href").substring(4); // skip "cid:" Assert.assertEquals(MtomTestHelper.REQ_IMAGE_CID, imageId); DataHandler dr = exchange.getIn().getAttachment(photoId); Assert.assertEquals("application/octet-stream", dr.getContentType()); MtomTestHelper.assertEquals(MtomTestHelper.REQ_PHOTO_DATA, IOUtils.readBytesFromStream(dr.getInputStream())); dr = exchange.getIn().getAttachment(imageId); Assert.assertEquals("image/jpeg", dr.getContentType()); MtomTestHelper.assertEquals(MtomTestHelper.requestJpeg, IOUtils.readBytesFromStream(dr.getInputStream())); // create response List<Source> elements = new ArrayList<Source>(); elements.add(new DOMSource(DOMUtils.readXml(new StringReader(MtomTestHelper.RESP_MESSAGE)).getDocumentElement())); CxfPayload<SoapHeader> sbody = new CxfPayload<SoapHeader>(new ArrayList<SoapHeader>(), elements, null); exchange.getOut().setBody(sbody); exchange.getOut().addAttachment(MtomTestHelper.RESP_PHOTO_CID, new DataHandler(new ByteArrayDataSource(MtomTestHelper.RESP_PHOTO_DATA, "application/octet-stream"))); exchange.getOut().addAttachment(MtomTestHelper.RESP_IMAGE_CID, new DataHandler(new ByteArrayDataSource(MtomTestHelper.responseJpeg, "image/jpeg"))); } }
Raw モード: メッセージをまったく処理しないため、添付ファイルはサポートされていません。
CXF_RAW モード: MTOM がサポートされ、添付ファイルは上記の Camel Message API によって取得できます。マルチパート (つまり MTOM) メッセージを受信する場合、デフォルトの SOAPMessage から String へのコンバーターは、本文で完全なマルチパートペイロードを提供することに注意してください。文字列として SOAP XML だけが必要な場合は、message.getSOAPPart () でメッセージ本文を設定でき、Camel convert が残りの作業を実行できます。
18.18. PAYLOAD モードでのストリーミングのサポート
camel-cxf コンポーネントは、PAYLOAD モードの使用時に受信メッセージのストリーミングをサポートするようになりました。以前は、着信メッセージは完全に DOM 解析されていました。大きなメッセージの場合、これには時間がかかり、大量のメモリーが使用されます。着信メッセージは、ルーティング中に javax.xml.transform.Source のままにすることができ、何もペイロードを変更しない場合は、ターゲットの宛先に直接ストリーミングできます。一般的な単純なプロキシーの使用例 (例: from ("cxf:…").to ("cxf:…")) では、これによりパフォーマンスが大幅に向上するだけでなく、メモリー要件が大幅に削減されます。
ただし、ストリーミングが適切でない、または望ましくない場合があります。ストリーミングの性質上、無効な着信 XML は、処理チェーンの後半までキャッチされない場合があります。また、特定のアクションでは、とにかくメッセージを DOM 解析する必要がある場合があります (WS-Security やメッセージトレースなど)。この場合、ストリーミングの利点は制限されます。この時点で、ストリーミングを制御する方法は 2 つあります。
- エンドポイントプロパティー: "allowStreaming=false" をエンドポイントプロパティーとして追加して、ストリーミングのオン/オフを切り替えることができます。
- Component プロパティー: CxfComponent オブジェクトには、そのコンポーネントから作成されたエンドポイントのデフォルトを設定できる allowStreaming プロパティーもあります。
グローバルシステムプロパティー: org.apache.camel.component.cxf.streaming のシステムプロパティーを false に追加してオフにすることができます。これによりグローバルなデフォルトが設定されますが、上記のエンドポイントプロパティーを設定すると、そのエンドポイントのこの値がオーバーライドされます。
18.19. 一般的な CXF ディスパッチモードの使用
camel-cxf コンポーネントは、任意の構造 (つまり、特定の XML スキーマにバインドされていない) のメッセージを転送できるジェネリック CXF ディスパッチモード をサポートしています。このモードを使用するには、CXF エンドポイントの wsdlURL および serviceClass 属性の指定を省略します。
<cxf:cxfEndpoint id="testEndpoint" address="http://localhost:9000/SoapContext/SoapAnyPort"> <cxf:properties> <entry key="dataFormat" value="PAYLOAD"/> </cxf:properties> </cxf:cxfEndpoint>
デフォルトの CXF ディスパッチクライアントは、特定の SOAPAction ヘッダーを送信しないことに注意してください。したがって、ターゲットサービスが特定の SOAPAction 値を必要とする場合、キー SOAPAction (大文字と小文字を区別しない) を使用して Camel ヘッダーで提供されます。
18.20. Spring Boot Auto-Configuration
Spring Boot で cxf を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-cxf-soap-starter</artifactId> </dependency>
このコンポーネントは、以下に示す 13 のオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.component.cxf.allow-streaming | このオプションは、CXF コンポーネントが PAYLOAD モードで実行されている場合に、着信メッセージを DOM 解析して DOM 要素にするか、場合によってはストリーミングを許可する javax.xml.transform.Source オブジェクトとしてペイロードを保持するかを制御します。 | Boolean | |
camel.component.cxf.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.cxf.bridge-error-handler | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | Boolean |
camel.component.cxf.enabled | cxf コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.cxf.header-filter-strategy | カスタムの org.apache.camel.spi.HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルターします。このオプションは org.apache.camel.spi.HeaderFilterStrategy タイプです。 | HeaderFilterStrategy | |
camel.component.cxf.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
camel.component.cxf.use-global-ssl-context-parameters | グローバル SSL コンテキストパラメーターの使用を有効にします。 | false | Boolean |
camel.component.cxfrs.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.cxfrs.bridge-error-handler | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | Boolean |
camel.component.cxfrs.enabled | cxfrs コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.cxfrs.header-filter-strategy | カスタムの org.apache.camel.spi.HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルターします。このオプションは org.apache.camel.spi.HeaderFilterStrategy タイプです。 | HeaderFilterStrategy | |
camel.component.cxfrs.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
camel.component.cxfrs.use-global-ssl-context-parameters | グローバル SSL コンテキストパラメーターの使用を有効にします。 | false | Boolean |
第19章 データ形式
producer のみサポート対象
Dataformat コンポーネントを使用すると、Data Format を Camel コンポーネントとして使用できます。
19.1. URI 形式
dataformat:name:(marshal|unmarshal)[?options]
name はデータ形式の名前です。次に、marshal
または unmarshal
のいずれかでなければならない操作が続きます。オプションは、使用中の データ形式 を設定するために使用されます。どのオプションがサポートされているかについては、データ形式のドキュメントを参照してください。
19.2. データ形式オプション
19.2.1. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
19.2.1.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
19.2.1.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
19.3. コンポーネントオプション
データ形式コンポーネントは、以下に示す 2 つのオプションをサポートしています。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
19.4. エンドポイントオプション
Data Format エンドポイントは、URI 構文を使用して設定されます。
dataformat:name:operation
パスおよびクエリーパラメーターを使用します。
19.4.1. パスパラメーター (2 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
name (producer) | 必須 データ形式の名前。 | String | |
operation (producer) | マーシャリングまたはアンマーシャリングのいずれかを使用するために 必要な 操作。 列挙値:
| String |
19.4.2. クエリーパラメーター (1 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
19.5. サンプル
たとえば、JAXB データ形式 を使用するには、次のようにします。
from("activemq:My.Queue"). to("dataformat:jaxb:unmarshal?contextPath=com.acme.model"). to("mqseries:Another.Queue");
XML DSL では、次のようにします。
<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"> <route> <from uri="activemq:My.Queue"/> <to uri="dataformat:jaxb:unmarshal?contextPath=com.acme.model"/> <to uri="mqseries:Another.Queue"/> </route> </camelContext>
19.6. Spring Boot Auto-Configuration
Spring Boot で dataformat を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-dataformat-starter</artifactId> </dependency>
コンポーネントは、以下に記載される 3 つのオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.component.dataformat.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.dataformat.enabled | dataformat コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.dataformat.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
第20章 Dataset
producer と consumer の両方がサポート対象
分散処理と非同期処理のテストは、非常に難しいことで知られています。Mock、Test、および DataSet エンドポイントは Camel テストフレームワークとうまく連携し、エンタープライズ統合パターン と Camel の幅広いコンポーネントを強力な Bean 統合と共に使用して、ユニットと統合のテストを簡素化します。
DataSet コンポーネントは、システムの負荷テストとソークテストを簡単に実行するメカニズムを提供します。メッセージのソースとして、またデータセットが受信されたことをアサートする方法として、DataSet インスタンス を作成できるようにすることで機能します。
Camel は、データセットを送信するときに スループットロガー を使用します。
20.1. URI 形式
dataset:name[?options]
name は、レジストリーで DataSet インスタンス を検索するために使用されます
Camel には、独自の DataSet を実装するためのベースとして使用できる org.apache.camel.component.dataset.DataSet
、org.apache.camel.component.dataset.DataSetSupport
クラスのサポート実装が付属しています。org.apache.camel.component.dataset.SimpleDataSet
には、テスト
に使用できるいくつかの実装も同 梱
されています。そのうち DataSetSupport
を拡張します。
20.2. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
20.2.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
20.2.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
20.3. コンポーネントオプション
Dataset コンポーネントは、以下に示す 5 つのオプションをサポートしています。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
log (producer) | モックが着信メッセージを受信したときにロギングをオンにします。これは、着信メッセージの INFO レベルで 1 回だけログに記録されます。より詳細なログを取得するには、ロガーを org.apache.camel.component.mock.MockEndpoint クラスの DEBUG レベルに設定します。 | false | boolean |
autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
exchangeFormatter (上級) | Autowired カスタム ExchangeFormatter を設定して、Exchange をログに適した文字列に変換します。指定しない場合は、デフォルトで DefaultExchangeFormatter になります。 | ExchangeFormatter |
20.4. エンドポイントオプション
Dataset エンドポイントは、URI 構文を使用して設定されます。
dataset:name
パスおよびクエリーパラメーターを使用します。
20.4.1. パスパラメーター(1 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
name (共通) | レジストリーで検索する DataSet の 必須 の名前。 | DataSet |
20.4.2. クエリーパラメーター (21 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
dataSetIndex (共通) | CamelDataSetIndex ヘッダーの動作を制御します。consumer の場合: - off = ヘッダーは設定されません - strict/lenient = ヘッダーは設定されます producer の場合: - off = ヘッダー値は検証されず、存在しない場合は設定されません = strict =ヘッダー値が存在する必要があり、検証されます = lenient = ヘッダー値が存在する場合は検証され、存在しない場合は設定されます。 列挙値:
| lenient | String |
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
initialDelay (consumer) | メッセージの送信を開始する前に待機する時間 (ミリ単位)。 | 1000 | long |
minRate (consumer) | DataSet に少なくともこの数のメッセージが含まれるまで待ちます。 | 0 | int |
preloadSize (consumer) | ルートが初期化を完了する前にプリロード (送信) するメッセージの数を設定します。 | 0 | long |
produceDelay (consumer) | メッセージが consumer によって送信されるときに遅延を引き起こす遅延を指定できるようにします (遅い処理をシミュレートするため)。 | 3 | long |
exceptionHandler (consumer (上級)) | consumer によるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、consumer は例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
exchangePattern (consumer (上級)) | consumer がエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
assertPeriod (producer) | 暫定的なアサーションがまだ有効であることを確認するために、モックエンドポイントが再アサートするまでの猶予期間を設定します。これは、たとえば、正確な数のメッセージが到着したことをアサートするために使用されます。たとえば、expectedMessageCount (int) が 5 に設定されている場合、5 つ以上のメッセージが到着するとアサーションが満たされます。正確に 5 つのメッセージが到着するようにするには、それ以上メッセージが到着しないように少し待つ必要があります。これが、このメソッドを使用できるものです。デフォルトでは、この期間は無効になっています。 | long | |
consumeDelay (producer) | メッセージがプロデューサによって消費されるときに遅延を引き起こす遅延を指定できるようにします (遅い処理をシミュレートするため)。 | 0 | long |
expectedCount (producer) | このエンドポイントが受信するメッセージ交換の予想数を指定します。注意: 0 のメッセージを期待したい場合は、特別な注意が必要です。0 はテストの開始時に一致するため、アサート期間を設定して、テストをしばらく実行し、まだメッセージが到着していないことを確認する必要があります。;そのためには setAssertPeriod (long) を使用します。別の方法として、NotifyBuilder を使用し、モックで assertIsSatisfied () メソッドを呼び出す前に、NotifyBuilder を使用して、Camel がいくつかのメッセージのルーティングを完了したことを知ることができます。これにより、固定アサート期間を使用せずにテスト時間を短縮できます。正確に n 番目のメッセージがこのモックエンドポイントに到着することをアサートする場合は、詳細について setAssertPeriod (long) メソッドも参照してください。 | -1 | int |
failFast (producer) | assertIsSatisfied () が最初に検出された失敗した期待で高速に失敗する必要があるかどうかを設定しますが、それ以外の場合は、期待されるすべてのメッセージが到着するのを待ってから、期待の検証を実行します。デフォルトでは true です。Camel 2.x のような動作を使用するには、false に設定します。 | false | boolean |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
log (producer) | モックが着信メッセージを受信したときにロギングをオンにします。これは、着信メッセージの INFO レベルで 1 回だけログに記録されます。より詳細なログを取得するには、ロガーを org.apache.camel.component.mock.MockEndpoint クラスの DEBUG レベルに設定します。 | false | boolean |
reportGroup (producer) | サイズのグループに基づいてスループットログを有効にするために使用される数値。 | int | |
resultMinimumWaitTime (producer) | ラッチが満たされるまで assertIsSatisfied () が待機する最小予想時間 (ミリ秒単位) を設定します。 | long | |
resultWaitTime (producer) | ラッチが満たされるまで assertIsSatisfied () が待機する最大時間 (ミリ秒単位) を設定します。 | long | |
retainFirst (producer) | 受信した Exchange の最初の n 番目の数だけを保持するように指定します。これは、ビッグデータでテストするときに使用され、このモックエンドポイントが受信するすべての Exchange のコピーを保存しないことでメモリー消費を削減します。重要: この制限を使用する場合、getReceivedCounter() は受信した Exchange の実際の数を返します。たとえば、5000 の交換を受信し、最初の 10 の交換のみを保持するように設定した場合、getReceivedCounter () は引き続き 5000 を返しますが、getExchanges () および getReceivedExchanges () メソッドには最初の 10 の交換しかありません。このメソッドを使用する場合、他の期待値メソッドの一部はサポートされません。たとえば、expectedBodiesReceived(Object…) は、受信した最初の数のボディに期待値を設定します。setRetainFirst(int) メソッドと setRetainLast(int) メソッドの両方を設定して、最初と最後の受信の両方を制限できます。 | -1 | int |
retainLast (producer) | 受信した Exchange の最後の n 番目の数だけを保持するように指定します。これは、ビッグデータでテストするときに使用され、このモックエンドポイントが受信するすべての Exchange のコピーを保存しないことでメモリー消費を削減します。重要: この制限を使用する場合、getReceivedCounter() は受信した Exchange の実際の数を返します。たとえば、5000 の交換を受信し、最後の 20 の交換のみを保持するように設定した場合、getReceivedCounter () は引き続き 5000 を返しますが、getExchanges () および getReceivedExchanges () メソッドには最後の 20 の交換しかありません。このメソッドを使用する場合、他の期待値メソッドの一部はサポートされません。たとえば、expectedBodiesReceived(Object…) は、受信した最初の数のボディに期待値を設定します。setRetainFirst(int) メソッドと setRetainLast(int) メソッドの両方を設定して、最初と最後の受信の両方を制限できます。 | -1 | int |
sleepForEmptyTest (producer) | expectedMessageCount (int) がゼロで呼び出されたときに、このエンドポイントが実際に空であることを確認するために待機するスリープを指定できるようにします。 | long | |
copyOnExchange (producer (上級)) | このモックエンドポイントで受信したときに受信 Exchange のディープコピーを作成するかどうかを設定します。デフォルトでは true です。 | true | boolean |
20.5. DataSet の設定
Camel は、DataSet インターフェイスを実装する Bean をレジストリーで検索します。したがって、独自の DataSet を次のように登録できます。
<bean id="myDataSet" class="com.mycompany.MyDataSet"> <property name="size" value="100"/> </bean>
20.6. 例
たとえば、一連のメッセージがキューに送信され、メッセージを失うことなくキューから消費されることをテストするには、次のようにします。
// send the dataset to a queue from("dataset:foo").to("activemq:SomeQueue"); // now lets test that the messages are consumed correctly from("activemq:SomeQueue").to("dataset:foo");
上記は、レジストリーを調べて、メッセージの作成に使用される foo DataSet インスタンスを見つけます。
次に、以下で説明するように SimpleDataSet
を使用して DataSet 実装を作成し、データセットの大きさやメッセージの外観などを設定します。
20.7. DataSetSupport (抽象クラス)
DataSetSupport 抽象クラスは、新しい DataSet の出発点として最適であり、派生クラスにいくつかの便利な機能を提供します。
20.7.1. DataSetSupport のプロパティー
プロパティー | タイプ | デフォルト | 説明 |
---|---|---|---|
|
|
|
デフォルトのメッセージ本文を指定します。SimpleDataSet の場合、これは一定のペイロードです。ただし、メッセージごとにカスタムペイロードを作成する場合は、 |
|
| null | |
|
|
| 送信/消費するメッセージの数を指定します。 |
|
|
|
進行状況を報告する前に受信するメッセージの数を指定します。大規模な負荷テストの進行状況を表示するのに役立ちます。< 0 の場合は |
20.8. SimpleDataSet
SimpleDataSet
は DataSetSupport
を拡張し、デフォルトの本文を追加します。
20.8.1. SimpleDataSet の追加プロパティー
プロパティー | タイプ | デフォルト | 説明 |
---|---|---|---|
|
|
|
デフォルトのメッセージ本文を指定します。デフォルトでは、 |
20.9. ListDataSet
List`DataSet` は DataSetSupport
を拡張し、デフォルトボディのリストを追加します。
20.9.1. ListDataSet の追加プロパティー
プロパティー | タイプ | デフォルト | 説明 |
---|---|---|---|
|
|
|
デフォルトのメッセージ本文を指定します。デフォルトでは、 |
|
| defaultBodies リストのサイズ |
送信/消費するメッセージの数を指定します。この値は、 |
20.10. FileDataSet
FileDataSet
は ListDataSet
を拡張し、ファイルから本文をロードするためのサポートを追加します。
20.10.1. FileDataSet の追加プロパティー
プロパティー | タイプ | デフォルト | 説明 |
---|---|---|---|
|
| null | ペイロードのソースファイルを指定します |
|
| \z |
ファイルを複数のペイロードに分割するために |
20.11. Spring Boot Auto-Configuration
Spring Boot で dataset を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-dataset-starter</artifactId> </dependency>
コンポーネントは、以下に記載される 11 のオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.component.dataset-test.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.dataset-test.enabled | dataset-test コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.dataset-test.exchange-formatter | カスタム ExchangeFormatter を設定して、Exchange をログに適した文字列に変換します。指定しない場合は、デフォルトで DefaultExchangeFormatter になります。オプションは org.apache.camel.spi.ExchangeFormatter タイプです。 | ExchangeFormatter | |
camel.component.dataset-test.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
camel.component.dataset-test.log | モックが着信メッセージを受信したときにロギングをオンにします。これは、着信メッセージの INFO レベルで 1 回だけログに記録されます。より詳細なログを取得するには、ロガーを org.apache.camel.component.mock.MockEndpoint クラスの DEBUG レベルに設定します。 | false | Boolean |
camel.component.dataset.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.dataset.bridge-error-handler | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | Boolean |
camel.component.dataset.enabled | データセットコンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.dataset.exchange-formatter | カスタム ExchangeFormatter を設定して、Exchange をログに適した文字列に変換します。指定しない場合は、デフォルトで DefaultExchangeFormatter になります。オプションは org.apache.camel.spi.ExchangeFormatter タイプです。 | ExchangeFormatter | |
camel.component.dataset.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
camel.component.dataset.log | モックが着信メッセージを受信したときにロギングをオンにします。これは、着信メッセージの INFO レベルで 1 回だけログに記録されます。より詳細なログを取得するには、ロガーを org.apache.camel.component.mock.MockEndpoint クラスの DEBUG レベルに設定します。 | false | Boolean |
第21章 Direct
producer と consumer の両方がサポート対象
Direct コンポーネント producer がメッセージエクスチェンジを送信する際に、コンポーネントは consumer を直接、同期呼び出しを提供します。
このエンドポイントは、同じ Camel コンテキストの既存ルートを接続するために使用できます。
Asynchronous
SEDA コンポーネントは、producer がメッセージエクスチェンジを送信するときに、producer の非同期呼び出しを提供します。
21.1. URI 形式
direct:someName[?options]
someName は、エンドポイントを一意に識別する任意の文字列にすることができます。
21.2. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
21.2.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
21.2.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
21.3. コンポーネントオプション
Direct コンポーネントは、以下に示す 5 つのオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
block (producer) | アクティブな consumer を持たない direct エンドポイントにメッセージを送信する場合、ブロックして consumer がアクティブになるのを待つよう producer に指示できます。 | true | boolean |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
timeout (producer) | ブロックが有効な場合に使用するタイムアウト値。 | 30000 | long |
autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
21.4. エンドポイントオプション
Direct エンドポイントは、URI 構文を使用して設定されます。
direct:name
パスおよびクエリーパラメーターを使用します。
21.4.1. パスパラメーター(1 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
name (共通) | 必須 direct エンドポイントの名前 | String |
21.4.2. クエリーパラメーター (8 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
exceptionHandler (consumer (上級)) | consumer によるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、consumer は例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
exchangePattern (consumer (上級)) | consumer がエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
block (producer) | アクティブな consumer を持たない direct エンドポイントにメッセージを送信する場合、ブロックして consumer がアクティブになるのを待つよう producer に指示できます。 | true | boolean |
failIfNoConsumers (producer) | アクティブな consumer のない DIRECT エンドポイントに送信するときに、producer が例外を出力して失敗するかどうか。 | true | boolean |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
timeout (producer) | ブロックが有効な場合に使用するタイムアウト値。 | 30000 | long |
synchronous (上級) | 同期処理を強制するかどうか。有効にすると、producer スレッドは、同じスレッドが処理を続行する前に、メッセージが完了するまで強制的に待機します。無効 (デフォルト) にすると、producer スレッドは解放され、他のスレッドが引き続きメッセージを処理する間、別の作業を行うことができます (リアクティブ)。 | false | boolean |
21.5. サンプル
以下のルートでは、direct コンポーネントを使用して 2 つのルートをリンクします。
from("activemq:queue:order.in") .to("bean:orderServer?method=validate") .to("direct:processOrder"); from("direct:processOrder") .to("bean:orderService?method=process") .to("activemq:queue:order.out");
Spring DSL を使用した例:
<route> <from uri="activemq:queue:order.in"/> <to uri="bean:orderService?method=validate"/> <to uri="direct:processOrder"/> </route> <route> <from uri="direct:processOrder"/> <to uri="bean:orderService?method=process"/> <to uri="activemq:queue:order.out"/> </route>
SEDA コンポーネントの例、どのように併用できるか参照してください。
21.6. Spring Boot Auto-Configuration
Spring Boot で direct を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-direct-starter</artifactId> </dependency>
Bean コンポーネントは、以下に示す 6 つのオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.component.direct.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.direct.block | アクティブな consumer を持たない direct エンドポイントにメッセージを送信する場合、ブロックして consumer がアクティブになるのを待つよう producer に指示できます。 | true | Boolean |
camel.component.direct.bridge-error-handler | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | Boolean |
camel.component.direct.enabled | direct コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.direct.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
camel.component.direct.timeout | ブロックが有効な場合に使用するタイムアウト値。 | 30000 | Long |
第22章 Elasticsearch
Since Camel 3.18.3
producer のみサポート対象
ElasticSearch コンポーネントを使用すると、Java API クライアントライブラリーを使用して ElasticSearch 8.x API とやり取りできます。
このコンポーネントの pom.xml
に次の依存関係を追加します。
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-elasticsearch</artifactId> <version>3.20.1.redhat-00031</version> <!-- use the same version as your Camel core version --> </dependency>
22.1. URI 形式
elasticsearch://clusterName[?options]
22.2. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
22.2.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
22.2.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
22.3. コンポーネントオプション
Elasticsearch コンポーネントは、以下にリストされている 14 個のオプションをサポートしています。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
connectionTimeout (producer) | 接続がタイムアウトするまでのミリ秒単位の待機時間。 | 30000 | int |
hostAddresses (producer) | 使用する ip:port 形式のリモートトランスポートアドレスを含むコンマ区切りのリスト。代わりに hostAddresses が考慮されるようにするには、ip オプションと port オプションを空白のままにする必要があります。 | String | |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
maxRetryTimeout (producer) | 再試行までの時間 (ミリ秒)。 | 30000 | int |
socketTimeout (producer) | ソケットがタイムアウトする前に待機するミリ秒単位のタイムアウト。 | 30000 | int |
autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
client (上級) | Autowired エンドポイントごとにクライアントを作成する代わりに、既存の設定済み Elasticsearch クライアントを使用するには。これにより、特定の設定でクライアントをカスタマイズできます。 | RestClient | |
enableSniffer (上級) | 実行中の Elasticsearch クラスターからのノードの自動検出を有効にする。このオプションを Spring Boot と組み合わせて使用する場合、Spring Boot 設定によって管理されます (Spring Boot でスニファーを無効にするを参照)。 | false | boolean |
sniffAfterFailureDelay (上級) | 失敗後にスケジュールされたスニファ実行の遅延 (ミリ秒単位)。 | 60000 | int |
snifferInterval (上級) | 通常のスニファを連続して実行する間隔 (ミリ秒単位)。sniffOnFailure が無効になっている場合、または連続するスニファ実行の間に失敗がない場合に受け入れられます。 | 300000 | int |
certificatePath (セキュリティー) | Elasticsearch へのアクセスに使用する自己署名証明書のパス。 | String | |
enableSSL (セキュリティー) | SSL の有効化。 | false | boolean |
password (セキュリティー) | 認証用パスワード。 | String | |
ユーザー (セキュリティー) | 基本認証ユーザー。 | String |
22.4. エンドポイントオプション
Elasticsearch エンドポイントは、URI 構文を使用して設定されます。
elasticsearch:clusterName
パスおよびクエリーパラメーターを使用します。
22.4.1. パスパラメーター(1 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
clusterName (producer) | 必須 クラスターの名前。 | String |
22.4.2. クエリーパラメーター(19 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
connectionTimeout (producer) | 接続がタイムアウトするまでのミリ秒単位の待機時間。 | 30000 | int |
disconnect (producer) | producer の呼び出しが終了したら切断します。 | false | boolean |
from (producer) | 応答の開始インデックス。 | Integer | |
hostAddresses (producer) | 使用する ip:port 形式のリモートトランスポートアドレスを含むコンマ区切りのリスト。 | String | |
indexName (producer) | 動作させるインデックスの名前。 | String | |
maxRetryTimeout (producer) | 再試行までの時間 (ミリ秒)。 | 30000 | int |
operation (producer) | 実行する操作。 列挙値:
| ElasticsearchOperation | |
scrollKeepAliveMs (producer) | Elasticsearch が検索コンテキストを維持するミリ秒単位の時間。 | 60000 | int |
size (producer) | レスポンスのサイズ。 | Integer | |
socketTimeout (producer) | ソケットがタイムアウトする前に待機するミリ秒単位のタイムアウト。 | 30000 | int |
useScroll (producer) | スクロールの使用を有効にする。 | false | boolean |
waitForActiveShards (producer) | インデックスの作成は、シャードの書き込み整合性数が使用可能になるまで待機します。 | 1 | int |
lazyStartProducer (producer (上級)) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
documentClass (上級) | ドキュメントを逆シリアル化するときに使用するクラス。 | ObjectNode | クラス |
enableSniffer (上級) | 実行中の Elasticsearch クラスターからのノードの自動検出を有効にする。このオプションを Spring Boot と組み合わせて使用する場合、Spring Boot 設定によって管理されます (Spring Boot でスニファーを無効にするを参照)。 | false | boolean |
sniffAfterFailureDelay (上級) | 失敗後にスケジュールされたスニファ実行の遅延 (ミリ秒単位)。 | 60000 | int |
snifferInterval (上級) | 通常のスニファを連続して実行する間隔 (ミリ秒単位)。sniffOnFailure が無効になっている場合、または連続するスニファ実行の間に失敗がない場合に受け入れられます。 | 300000 | int |
certificatePath (セキュリティー) | Elasticsearch へのアクセスに使用する自己署名証明書のパス。 | String | |
enableSSL (セキュリティー) | SSL の有効化。 | false | boolean |
22.5. メッセージヘッダー
Elasticsearch コンポーネントは、以下にリストされている 9 個のメッセージヘッダーをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
operation (producer) 定数: PARAM_OPERATION | 実行する操作。 列挙値:
| ElasticsearchOperation | |
indexId (producer) 定数: PARAM_INDEX_ID | インデックス付けされたドキュメントの ID。 | String | |
indexName (producer) 定数: PARAM_INDEX_NAME | 動作させるインデックスの名前。 | String | |
documentClass (producer) | アンマーシャリングするドキュメントのクラスの完全修飾名。 | ObjectNode | クラス |
waitForActiveShards (producer) | インデックスの作成は、シャードの書き込み整合性数が使用可能になるまで待機します | Integer | |
scrollKeepAliveMs (producer) | 応答の開始インデックス。 | Integer | |
useScroll (producer) 定数: PARAM_SCROLL | スクロールの使用を有効にするには、true に設定します。 | Boolean | |
size (producer) 定数: PARAM_SIZE | レスポンスのサイズ。 | Integer | |
from (producer) 定数: PARAM_FROM | 応答の開始インデックス。 | Integer |
22.6. メッセージ操作
現在、次の ElasticSearch 操作がサポートされています。操作のキーと次のいずれかに設定された値を使用して、エンドポイント URI オプションまたはエクスチェンジヘッダーを設定するだけです。一部の操作では、他のパラメーターまたはメッセージ本文を設定する必要もあります。
operation | メッセージボディー | description |
---|---|---|
Index | Map、String、byte[]、Reader、InputStream または IndexRequest.Builder コンテンツをインデックスに登録する | コンテンツをインデックスに追加し、本文でコンテンツの indexId を返します。キー indexName でメッセージヘッダーを設定することにより、ターゲットインデックスの名前を設定できます。メッセージヘッダーにキー "indexId" を設定することで、indexId を設定できます。 |
GetById | 取得するコンテンツの 文字列 または GetRequest.Builder インデックス ID | 指定されたインデックス ID に対応するドキュメントを取得し、本文で GetResponse オブジェクトを返します。キー indexName でメッセージヘッダーを設定することにより、ターゲットインデックスの名前を設定できます。キー documentClass でメッセージヘッダーを設定することにより、ドキュメントのタイプを設定できます。 |
Delete | 削除するコンテンツの 文字列 または DeleteRequest.Builder インデックス ID | 指定された indexName を削除し、本文で Result オブジェクトを返します。キー indexName でメッセージヘッダーを設定することにより、ターゲットインデックスの名前を設定できます。 |
DeleteIndex | 削除するインデックスの 文字列 または DeleteIndexRequest.Builder インデックス名 | 指定された indexName を削除し、本文でステータスコードを返します。キー indexName でメッセージヘッダーを設定することにより、ターゲットインデックスの名前を設定できます。 |
バルク | すでに受け入れられている任意のタイプの Iterable または BulkRequest.Builder (削除操作の場合は DeleteOperation.Builder、更新操作の場合は UpdateOperation.Builder、作成操作の場合は CreateOperation.Builder、byte[]、InputStream、String、Reader、Map、または任意のドキュメントタイプインデックス操作) | インデックスに対してコンテンツを追加/更新/削除し、本文に List<BulkResponseItem> オブジェクトを返します。キー indexName でメッセージヘッダーを設定することにより、ターゲットインデックスの名前を設定できます。 |
Search | Map、文字列 または SearchRequest.Builder | クエリー文字列のマップでコンテンツを検索します。キー indexName でメッセージヘッダーを設定することにより、ターゲットインデックスの名前を設定できます。キーサイズでメッセージヘッダーを設定することで、返すヒット数を設定できます。キー from を使用してメッセージヘッダーを設定することにより、開始ドキュメントオフセットを設定できます。 |
MultiSearch | MsearchRequest.Builder | 一度に複数の検索 |
MultiGet | Iterable<String> または MgetRequest.Builder 取得するドキュメントの ID | 複数が 1 つに収まる キー indexName でメッセージヘッダーを設定することにより、ターゲットインデックスの名前を設定できます。 |
Exists | なし | インデックスが存在するかどうかを確認し、本文に Boolean フラグを返します。 キー indexName を使用してメッセージヘッダーを設定することにより、ターゲットインデックスの名前を設定する必要があります。 |
更新 | byte[]、InputStream、String、Reader、Map、または更新するドキュメントタイプのコンテンツ | コンテンツをインデックスに更新し、本文でコンテンツの indexId を返します。キー indexName でメッセージヘッダーを設定することにより、ターゲットインデックスの名前を設定できます。メッセージヘッダーにキー "indexId" を設定することで、indexId を設定できます。 |
Ping | なし | Elasticsearch クラスターに ping を実行し、ping が成功した場合は true、それ以外の場合は false を返します。 |
22.7. コンポーネントを設定して基本認証を有効にする
Elasticsearch コンポーネントを使用するには、最小構成で設定する必要があります。
ElasticsearchComponent elasticsearchComponent = new ElasticsearchComponent(); elasticsearchComponent.setHostAddresses("myelkhost:9200"); camelContext.addComponent("elasticsearch", elasticsearchComponent);
Elasticsearch を使用した基本認証、または Elasticsearch クラスターの前でリバース HTTP プロキシーを使用する場合は、以下の例のようにコンポーネントで基本認証と SSL をセットアップするだけです。
ElasticsearchComponent elasticsearchComponent = new ElasticsearchComponent(); elasticsearchComponent.setHostAddresses("myelkhost:9200"); elasticsearchComponent.setUser("elkuser"); elasticsearchComponent.setPassword("secure!!"); elasticsearchComponent.setEnableSSL(true); elasticsearchComponent.setCertificatePath(certPath); camelContext.addComponent("elasticsearch", elasticsearchComponent);
22.8. インデックスの例
以下は単純な INDEX の例です
from("direct:index") .to("elasticsearch://elasticsearch?operation=Index&indexName=twitter");
<route> <from uri="direct:index"/> <to uri="elasticsearch://elasticsearch?operation=Index&indexName=twitter"/> </route>
この操作では、indexId ヘッダーを指定する必要があります。
クライアントは、Map を含む本文メッセージをルートに渡すだけで済みます。結果の本文には、作成された indexId が含まれます。
Map<String, String> map = new HashMap<String, String>(); map.put("content", "test"); String indexId = template.requestBody("direct:index", map, String.class);
22.9. 検索例
特定のフィールドと値を検索するには、検索操作を使用します。クエリーの JSON 文字列またはマップを渡します
from("direct:search") .to("elasticsearch://elasticsearch?operation=Search&indexName=twitter");
<route> <from uri="direct:search"/> <to uri="elasticsearch://elasticsearch?operation=Search&indexName=twitter"/> </route>
String query = "{\"query\":{\"match\":{\"doc.content\":\"new release of ApacheCamel\"}}}"; HitsMetadata<?> response = template.requestBody("direct:search", query, HitsMetadata.class);
マップを使用して特定のフィールドを検索します。
Map<String, Object> actualQuery = new HashMap<>(); actualQuery.put("doc.content", "new release of ApacheCamel"); Map<String, Object> match = new HashMap<>(); match.put("match", actualQuery); Map<String, Object> query = new HashMap<>(); query.put("query", match); HitsMetadata<?> response = template.requestBody("direct:search", query, HitsMetadata.class);
すべての結果を取得するには、Elasticsearch スクロール API を使用して検索します。
from("direct:search") .to("elasticsearch://elasticsearch?operation=Search&indexName=twitter&useScroll=true&scrollKeepAliveMs=30000");
<route> <from uri="direct:search"/> <to uri="elasticsearch://elasticsearch?operation=Search&indexName=twitter&useScroll=true&scrollKeepAliveMs=30000"/> </route>
String query = "{\"query\":{\"match\":{\"doc.content\":\"new release of ApacheCamel\"}}}"; try (ElasticsearchScrollRequestIterator response = template.requestBody("direct:search", query, ElasticsearchScrollRequestIterator.class)) { // do something smart with results }
以下も使用できます。
from("direct:search") .to("elasticsearch://elasticsearch?operation=Search&indexName=twitter&useScroll=true&scrollKeepAliveMs=30000") .split() .body() .streaming() .to("mock:output") .end();
22.10. マルチサーチの例
特定のフィールドと値に対する MultiSearching は、Operation 'MultiSearch' を使用します。MultiSearchRequest インスタンスを渡す
from("direct:multiSearch") .to("elasticsearch://elasticsearch?operation=MultiSearch");
<route> <from uri="direct:multiSearch"/> <to uri="elasticsearch://elasticsearch?operation=MultiSearch"/> </route>
特定のフィールドでの MultiSearch
MsearchRequest.Builder builder = new MsearchRequest.Builder().index("twitter").searches( new RequestItem.Builder().header(new MultisearchHeader.Builder().build()) .body(new MultisearchBody.Builder().query(b -> b.matchAll(x -> x)).build()).build(), new RequestItem.Builder().header(new MultisearchHeader.Builder().build()) .body(new MultisearchBody.Builder().query(b -> b.matchAll(x -> x)).build()).build()); List<MultiSearchResponseItem<?>> response = template.requestBody("direct:multiSearch", builder, List.class);
22.11. ドキュメントタイプ
すべての検索操作で、取得するドキュメントのタイプを指定して、予想されるタイプで非整列化された結果を取得することができます。
ドキュメントタイプは、ヘッダー documentClass を使用するか、同じ名前の uri パラメーターを介して設定できます。
22.12. Spring Boot で Camel Elasticsearch を使用する
Spring Boot v2 で camel-elasticsearch-starter
を使用する場合、独自の pom.xml
で次の依存関係を宣言する必要があります。
<dependency> <groupId>jakarta.json</groupId> <artifactId>jakarta.json-api</artifactId> <version>2.0.2</version> </dependency>
これが必要なのは、Spring Boot v2 が jakarta.json-api:1.1.6 を提供し、Elasticsearch が json-api v2 を使用する必要があるためです。
22.12.1. Spring Boot が提供する RestClient を使用する
デフォルトでは、Spring Boot は camel によって使用される Elasticsearch RestClient を自動設定します。次の基本プロパティーを使用してクライアントをカスタマイズできます。
spring.elasticsearch.uris=myelkhost:9200 spring.elasticsearch.username=elkuser spring.elasticsearch.password=secure!!
詳細は、application-properties.data.spring.elasticsearch.connection-timeout を参照してください。
22.12.2. Spring Boot 使用時に Sniffer を無効にする
Spring Boot が classpath 上にある場合、Elasticsearch の Sniffer クライアントはデフォルトで有効になっています。このオプションは、Spring Boot 設定で無効にすることができます。
spring: autoconfigure: exclude: org.springframework.boot.autoconfigure.elasticsearch.ElasticsearchRestClientAutoConfiguration
22.13. Spring Boot Auto-Configuration
Spring Boot で elasticsearch を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-elasticsearch-starter</artifactId> </dependency>
コンポーネントは、以下に記載される 15 のオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.component.elasticsearch.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.elasticsearch.certificate-path | Elasticsearch へのアクセスに使用する自己署名証明書のパス。 | String | |
camel.component.elasticsearch.client | エンドポイントごとにクライアントを作成する代わりに、既存の設定済み Elasticsearch クライアントを使用するには。これにより、特定の設定でクライアントをカスタマイズできます。オプションは org.elasticsearch.client.RestClient タイプです。 | RestClient | |
camel.component.elasticsearch.connection-timeout | 接続がタイムアウトするまでのミリ秒単位の待機時間。 | 30000 | Integer |
camel.component.elasticsearch.enable-s-s-l | SSL の有効化。 | false | Boolean |
camel.component.elasticsearch.enable-sniffer | 実行中の Elasticsearch クラスターからのノードの自動検出を有効にする。このオプションを Spring Boot と組み合わせて使用する場合、Spring Boot 設定によって管理されます (Spring Boot でスニファーを無効にするを参照)。 | false | Boolean |
camel.component.elasticsearch.enabled | elasticsearch コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.elasticsearch.host-addresses | 使用する ip:port 形式のリモートトランスポートアドレスを含むコンマ区切りのリスト。代わりに hostAddresses が考慮されるようにするには、ip オプションと port オプションを空白のままにする必要があります。 | String | |
camel.component.elasticsearch.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
camel.component.elasticsearch.max-retry-timeout | 再試行までの時間 (ミリ秒)。 | 30000 | Integer |
camel.component.elasticsearch.password | 認証用パスワード。 | String | |
camel.component.elasticsearch.sniff-after-failure-delay | 失敗後にスケジュールされたスニファ実行の遅延 (ミリ秒単位)。 | 60000 | Integer |
camel.component.elasticsearch.sniffer-interval | 通常のスニファを連続して実行する間隔 (ミリ秒単位)。sniffOnFailure が無効になっている場合、または連続するスニファ実行の間に失敗がない場合に受け入れられます。 | 300000 | Integer |
camel.component.elasticsearch.socket-timeout | ソケットがタイムアウトする前に待機するミリ秒単位のタイムアウト。 | 30000 | Integer |
camel.component.elasticsearch.user | 基本認証ユーザー。 | String |
第23章 FHIR
producer と consumer の両方がサポート対象
FHIR コンポーネントは、Java での FHIR (Fast Healthcare Interoperability Resources) 仕様のオープンソース実装である HAPI-FHIR ライブラリーと統合されます。
Maven ユーザーは、このコンポーネントの pom.xml に以下の依存関係を追加する必要があります。
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-fhir</artifactId> <version>${camel-version}</version> </dependency>
23.1. URI 形式
FHIR コンポーネントは、次の URI 形式を使用します。
fhir://endpoint-prefix/endpoint?[options]
エンドポイント 接頭辞は次のいずれかです。
- capabilities
- create
- delete
- history
- load-page
- meta
- operation
- patch
- read
- search
- transaction
- update
- validate
23.2. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
23.2.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
23.2.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
23.3. コンポーネントオプション
コンポーネントは、以下に記載される 27 のオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
encoding (共通) | すべてのリクエストに使用するエンコーディング。 列挙値:
| String | |
fhirVersion (共通) | 使用する FHIR バージョン。 列挙値:
| R4 | String |
log (共通) | リクエストとレスポンスをすべてログに記録します。 | false | boolean |
prettyPrint (共通) | すべてのリクエストをきれいに印刷します。 | false | boolean |
serverUrl (共通) | FHIR サーバーのベース URL。 | String | |
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
client (上級) | カスタムクライアントを使用します。 | IGenericClient | |
clientFactory (上級) | カスタムクライアントファクトリーを使用します。 | IRestfulClientFactory | |
compress (上級) | 発信 (POST/PUT) コンテンツを GZIP 形式に圧縮します。 | false | boolean |
configuration (上級) | 共有設定を使用するには、以下を行います。 | FhirConfiguration | |
connectionTimeout (上級) | 初期 TCP 接続の試行と確立にかかる時間 (ミリ秒)。 | 10000 | Integer |
deferModelScanning (上級) | このオプションが設定されている場合は、指定されたタイプの子リストが実際にアクセスされるまで、モデルクラスの子はスキャンされません。 | false | boolean |
fhirContext (上級) | FhirContext は、作成するのにコストのかかるオブジェクトです。複数のインスタンスを作成しないようにするために、直接設定できます。 | FhirContext | |
forceConformanceCheck (上級) | 適合性チェックを強制します。 | false | boolean |
sessionCookie (上級) | すべてのリクエストに追加する HTTP セッション Cookie。 | String | |
socketTimeout (上級) | 個々の読み取り/書き込み操作をブロックする時間 (ミリ秒単位)。 | 10000 | Integer |
summary (上級) | _summary パラメーターを使用して、サーバーが応答を変更するように要求します。 列挙値:
| String | |
validationMode (上級) | Camel が FHIR Server の適合ステートメントをいつ検証する必要があるか。 列挙値:
| ONCE | String |
proxyHost (プロキシー) | プロキシーホスト。 | String | |
proxyPassword (プロキシー) | プロキシーパスワード。 | String | |
proxyPort (プロキシー) | プロキシーポート。 | Integer | |
proxyUser (プロキシー) | プロキシーのユーザー名。 | String | |
accessToken (セキュリティー) | OAuth アクセストークン。 | String | |
password (セキュリティー) | Basic 認証に使用するユーザー名。 | String | |
username (セキュリティー) | Basic 認証に使用するユーザー名。 | String |
23.4. エンドポイントオプション
FHIR エンドポイントは、URI 構文を使用して設定されます。
fhir:apiName/methodName
パスおよびクエリーパラメーターを使用します。
23.4.1. パスパラメーター (2 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
apiName (共通) | 必須 実行する操作の種類 列挙値:
| FhirApiName | |
methodName (共通) | 必須: 選択した操作に使用するサブ操作 | String |
23.4.2. クエリーパラメーター (44 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
encoding (共通) | すべてのリクエストに使用するエンコーディング。 列挙値:
| String | |
fhirVersion (共通) | 使用する FHIR バージョン。 列挙値:
| R4 | String |
inBody (共通) | ボディにて交換で渡されるパラメーターの名前を設定します。 | String | |
log (共通) | リクエストとレスポンスをすべてログに記録します。 | false | boolean |
prettyPrint (共通) | すべてのリクエストをきれいに印刷します。 | false | boolean |
serverUrl (共通) | FHIR サーバーのベース URL。 | String | |
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
sendEmptyMessageWhenIdle (consumer) | ポーリング consumer がファイルをポーリングしなかった場合、このオプションを有効にして、代わりに空のメッセージ (ボディーなし) を送信できます。 | false | boolean |
exceptionHandler (consumer (上級)) | consumer によるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、consumer は例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
exchangePattern (consumer (上級)) | consumer がエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
pollStrategy (consumer (上級)) | プラグ可能な org.apache.camel.PollingConsumerPollingStrategy を使用すると、エクスチェンジが作成され、Camel でルーティングされる前に、通常はポーリング操作中に発生するエラー処理を制御するカスタム実装が提供できます。 | PollingConsumerPollStrategy | |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
client (上級) | カスタムクライアントを使用します。 | IGenericClient | |
clientFactory (上級) | カスタムクライアントファクトリーを使用します。 | IRestfulClientFactory | |
compress (上級) | 発信 (POST/PUT) コンテンツを GZIP 形式に圧縮します。 | false | boolean |
connectionTimeout (上級) | 初期 TCP 接続の試行と確立にかかる時間 (ミリ秒)。 | 10000 | Integer |
deferModelScanning (上級) | このオプションが設定されている場合は、指定されたタイプの子リストが実際にアクセスされるまで、モデルクラスの子はスキャンされません。 | false | boolean |
fhirContext (上級) | FhirContext は、作成するのにコストのかかるオブジェクトです。複数のインスタンスを作成しないようにするために、直接設定できます。 | FhirContext | |
forceConformanceCheck (上級) | 適合性チェックを強制します。 | false | boolean |
sessionCookie (上級) | すべてのリクエストに追加する HTTP セッション Cookie。 | String | |
socketTimeout (上級) | 個々の読み取り/書き込み操作をブロックする時間 (ミリ秒単位)。 | 10000 | Integer |
summary (上級) | _summary パラメーターを使用して、サーバーが応答を変更するように要求します。 列挙値:
| String | |
validationMode (上級) | Camel が FHIR Server の適合ステートメントをいつ検証する必要があるか。 列挙値:
| ONCE | String |
proxyHost (プロキシー) | プロキシーホスト。 | String | |
proxyPassword (プロキシー) | プロキシーパスワード。 | String | |
proxyPort (プロキシー) | プロキシーポート。 | Integer | |
proxyUser (プロキシー) | プロキシーのユーザー名。 | String | |
backoffErrorThreshold (scheduler) | backoffMultipler が開始する前に発生する必要がある後続のエラーポーリング (エラーによって失敗した) の数。 | int | |
backoffIdleThreshold (scheduler) | backoffMultipler が開始する前に発生する必要がある後続のアイドルポーリングの数。 | int | |
backoffMultiplier (scheduler) | 後続のアイドル状態/エラーが連続して発生した場合に、スケジュールされたポーリング consumer のバックオフを許可します。乗数は、実際に次の試行が行われる前にスキップされるポーリングの数です。このオプションが使用されている場合は、backoffIdleThreshold や backoffErrorThreshold も設定する必要があります。 | int | |
delay (scheduler) | 次のポーリングまでの時間 (ミリ秒単位)。 | 500 | long |
greedy (scheduler) | greedy が有効で、以前の実行が 1 つ以上のメッセージをポーリングした場合、ScheduledPollConsumer は即座に再度実行されます。 | false | boolean |
initialDelay (scheduler) | 最初のポーリングが開始されるまでの時間 (ミリ秒単位)。 | 1000 | long |
repeatCount (スケジューラー) | 実行の最大数を指定します。そのため、これを 1 に設定するとスケジューラーは 1 度だけ実行されます。これを 5 に設定した場合、5 回だけ実行されます。0 または負の値を設定すると、無制限に実行されます。 | 0 | long |
runLoggingLevel (scheduler) | consumer はポーリング時に開始/完了のログ行を記録します。このオプションを使用すると、ログレベルを設定できます。 列挙値:
| TRACE | LoggingLevel |
scheduledExecutorService (scheduler) | consumer に使用するカスタム/共有スレッドプールを設定できます。デフォルトでは、各 consumer に独自の単一スレッドのスレッドプールがあります。 | ScheduledExecutorService | |
scheduler (スケジューラー) | camel-spring または camel-quartz コンポーネントから cron スケジューラーを使用します。スケジューラーにビルドされた値 spring または quartz を使用。 | none | オブジェクト |
schedulerProperties (スケジューラー) | カスタムスケジューラーまたは Quartz や Spring ベースのスケジューラーを使用する場合に、追加のプロパティーを設定します。 | マップ | |
startScheduler (scheduler) | スケジューラーを自動起動するかどうか。 | true | boolean |
timeUnit (scheduler) | initialDelay および delay オプションの時間単位。 列挙値:
| MILLISECONDS | TimeUnit |
useFixedDelay (scheduler) | 固定遅延または固定レートを使用するかどうかを制御します。詳細は、JDK の ScheduledExecutorService を参照してください。 | true | boolean |
accessToken (セキュリティー) | OAuth アクセストークン。 | String | |
password (セキュリティー) | Basic 認証に使用するユーザー名。 | String | |
username (セキュリティー) | Basic 認証に使用するユーザー名。 | String |
23.5. API パラメーター (13 API)
@FHIR エンドポイントは API ベースのコンポーネントであり、使用される API 名と API メソッドに基づく追加のパラメーターがあります。API 名と API メソッドは、apiName/methodName
パスパラメーターとしてエンドポイント URI に配置されます。
fhir:apiName/methodName
次の表に示すように、13 の API 名があります。
API 名 | タイプ | 説明 |
---|---|---|
両方 | サーバーの機能ステートメントをフェッチする API | |
両方 | サーバー上に新しいリソースインスタンスを作成する作成操作用の API | |
両方 | サーバーリソースで論理的な削除を実行する、削除操作用の API | |
両方 | history メソッドの API | |
両方 | Atom バンドル内の link type=next タグで指定されたリンクを使用して、ページセットからリソースの前/次のバンドルをロードする API | |
両方 | タグやその他のメタ要素をリソースから、またはサーバー全体で取得、追加、削除するために使用できるメタ操作用の API | |
両方 | 拡張 FHIR 操作用の API | |
両方 | サーバーリソースで論理パッチを実行する、パッチ操作用の API | |
両方 | 読み取り操作の API メソッド | |
両方 | 特定の基準セットに一致するリソースを検索する API | |
両方 | トランザクション (リソースの集まり) をサーバーに送信して単体で実行するための API | |
両方 | サーバーリソースで論理的な削除を実行する、更新操作用の API | |
両方 | リソースを検証するための API |
各 API については、以降のセクションで説明します。
23.5.1. API: 機能
producer と consumer の両方がサポート対象
機能 API は、次の構文で定義されます。
fhir:capabilities/methodName?[parameters]
以下の表にメソッドをリストし、その後に各メソッドの詳細な構文を示します。(API メソッドには、名前の代わりに構文で使用できる省略形の別名を付けることができます)
メソッド | 説明 |
---|---|
指定されたモデルタイプを使用して適合ステートメントを取得します |
23.5.1.1. タイプの方法
署名:
- org.hl7.fhir.instance.model.api.IBaseConformance ofType(Class<org.hl7.fhir.instance.model.api.IBaseConformance> type, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
fhir/ofType API メソッドには、次の表に示すパラメーターがあります。
パラメーター | 説明 | タイプ |
---|---|---|
extraParameters | 渡すことができるパラメーターの完全なリストについては、ExtraParameters を参照してください。NULL の場合があります。 | マップ |
type | モデルタイプ | クラス |
上記のパラメーターに加えて、fhir API は任意の クエリーパラメーター も使用できます。
いずれのパラメーターも、エンドポイント URI で指定するか、メッセージヘッダーで動的に指定できます。メッセージヘッダー名は CamelFhir.parameter
の形式である必要があります。inBody
パラメーターはメッセージヘッダーをオーバーライドします。つまり、エンドポイントパラメーター inBody=myParameterNameHere
は CamelFhir.myParameterNameHere
ヘッダーをオーバーライドします。
23.5.2. API: 作成
producer と consumer の両方がサポート対象
作成 API は、構文で次のように定義されます。
fhir:create/methodName?[parameters]
以下の表に 1 つのメソッドをリストし、その後に各メソッドの詳細な構文を示します。(API メソッドには、名前の代わりに構文で使用できる省略形の別名を付けることができます)
メソッド | 説明 |
---|---|
サーバー上に IBaseResource を作成します |
23.5.2.1. メソッドリソース
署名:
- ca.uhn.fhir.rest.api.MethodOutcome resource(String resourceAsString, String url, ca.uhn.fhir.rest.api.PreferReturnEnum preferReturn, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
- ca.uhn.fhir.rest.api.MethodOutcome resource(org.hl7.fhir.instance.model.api.IBaseResource resource, String url, ca.uhn.fhir.rest.api.PreferReturnEnum preferReturn, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
fhir/resource API メソッドには、次の表に示すパラメーターがあります。
パラメーター | 説明 | タイプ |
---|---|---|
extraParameters | 渡すことができるパラメーターの完全なリストについては、ExtraParameters を参照してください。NULL の場合があります。 | マップ |
preferReturn | リクエストに Prefer ヘッダーを追加します。これは、サーバーが結果の一部としてリソース本文を含めるか抑制することを要求します。リソースがサーバーによって返された場合、それは解析され、MethodOutcome#getResource () を介してクライアントにアクセス可能になります。null の場合があります。 | PreferReturnEnum |
resource | 作成するリソース | IBaseResource |
resourceAsString | 作成するリソース | String |
url | 使用する検索 URL。この URL の形式は、ResourceTypeParameters の形式にする必要があります。たとえば、Patientname=Smith&identifier=13.2.4.11.4%7C847366、null の可能性があります。 | String |
上記のパラメーターに加えて、fhir API は任意の クエリーパラメーター も使用できます。
いずれのパラメーターも、エンドポイント URI で指定するか、メッセージヘッダーで動的に指定できます。メッセージヘッダー名は CamelFhir.parameter
の形式である必要があります。inBody
パラメーターはメッセージヘッダーをオーバーライドします。つまり、エンドポイントパラメーター inBody=myParameterNameHere
は CamelFhir.myParameterNameHere
ヘッダーをオーバーライドします。
23.5.3. API: 削除
producer と consumer の両方がサポート対象
削除 API は、構文で次のように定義されます。
fhir:delete/methodName?[parameters]
以下の表に 3 つのメソッドをリストし、その後に各メソッドの詳細な構文を示します。(API メソッドには、名前の代わりに構文で使用できる省略形の別名を付けることができます)
メソッド | 説明 |
---|---|
指定されたリソースを削除します | |
リソースタイプ e でリソースを削除する | |
特定の検索 URL に対する条件付き削除として削除を実行する必要があることを指定します。 |
23.5.3.1. メソッドリソース
署名:
- org.hl7.fhir.instance.model.api.IBaseOperationOutcome resource(org.hl7.fhir.instance.model.api.IBaseResource resource, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
fhir/resource API メソッドには、次の表に示すパラメーターがあります。
パラメーター | 説明 | タイプ |
---|---|---|
extraParameters | 渡すことができるパラメーターの完全なリストについては、ExtraParameters を参照してください。NULL の場合があります。 | マップ |
resource | 削除する IBaseResource | IBaseResource |
23.5.3.2. メソッド resourceById
署名:
- org.hl7.fhir.instance.model.api.IBaseOperationOutcome resourceById(String type, String stringId, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
- org.hl7.fhir.instance.model.api.IBaseOperationOutcome resourceById(org.hl7.fhir.instance.model.api.IIdType id, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
fhir/resourceById API メソッドには、次の表に示すパラメーターがあります。
パラメーター | 説明 | タイプ |
---|---|---|
extraParameters | 渡すことができるパラメーターの完全なリストについては、ExtraParameters を参照してください。NULL の場合があります。 | マップ |
id | リソースを参照する IIdType | IIdType |
stringId | id です | String |
type | リソースの種類 (患者など) | String |
23.5.3.3. メソッド resourceConditionalByUrl
署名:
- org.hl7.fhir.instance.model.api.IBaseOperationOutcome resourceConditionalByUrl(String url, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
fhir/resourceConditionalByUrl API メソッドには、次の表に示すパラメーターがあります。
パラメーター | 説明 | タイプ |
---|---|---|
extraParameters | 渡すことができるパラメーターの完全なリストについては、ExtraParameters を参照してください。NULL の場合があります。 | マップ |
url | 使用する検索 URL。この URL の形式は、ResourceTypeParameters の形式にする必要があります。たとえば、Patientname=Smith&identifier=13.2.4.11.4%7C847366 です。 | String |
上記のパラメーターに加えて、fhir API は任意の クエリーパラメーター も使用できます。
いずれのパラメーターも、エンドポイント URI で指定するか、メッセージヘッダーで動的に指定できます。メッセージヘッダー名は CamelFhir.parameter
の形式である必要があります。inBody
パラメーターはメッセージヘッダーをオーバーライドします。つまり、エンドポイントパラメーター inBody=myParameterNameHere
は CamelFhir.myParameterNameHere
ヘッダーをオーバーライドします。
23.5.4. API: 履歴
producer と consumer の両方がサポート対象
履歴 API は、次の構文で定義されます。
fhir:history/methodName?[parameters]
以下の表に 3 つのメソッドをリストし、その後に各メソッドの詳細な構文を示します。(API メソッドには、名前の代わりに構文で使用できる省略形の別名を付けることができます)
メソッド | 説明 |
---|---|
サーバー上の特定のリソースのすべてのバージョンに対して (ID とタイプによって) 操作を実行します | |
サーバー上のすべてのタイプのすべてのリソースのすべてのバージョンで操作を実行します | |
サーバー上の指定されたタイプのすべてのリソースのすべてのバージョンで操作を実行します |
23.5.4.1. メソッド onInstance
署名:
- org.hl7.fhir.instance.model.api.IBaseBundle onInstance(org.hl7.fhir.instance.model.api.IIdType id, Class<org.hl7.fhir.instance.model.api.IBaseBundle> returnType, Integer count, java.util.Date cutoff, org.hl7.fhir.instance.model.api.IPrimitiveType<java.util.Date> iCutoff, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
fhir/onInstance API メソッドには、次の表に示すパラメーターがあります。
パラメーター | 説明 | タイプ |
---|---|---|
count | サーバーが theCount 数までのリソースのみを返すように要求します。NULL の場合があります | Integer |
cutoff | 指定された時間以降に作成されたリソースバージョンのみをサーバーが返すように要求します。NULL の場合があります。 | 日付 |
extraParameters | 渡すことができるパラメーターの完全なリストについては、ExtraParameters を参照してください。NULL の場合があります。 | マップ |
iCutoff | 指定された時間以降に作成されたリソースバージョンのみをサーバーが返すように要求します。NULL の場合があります。 | IPrimitiveType |
id | リソースタイプとリソース ID の両方を入力する必要がある IIdType | IIdType |
returnType | メソッドが Bundle リソース (ca.uhn.fhir.model.dstu2.resource.Bundle など) を返すように要求します。DSTU2 サーバーにアクセスしている場合は、この方法を使用します。 | クラス |
23.5.4.2. メソッド onServer
署名:
- org.hl7.fhir.instance.model.api.IBaseBundle onServer(Class<org.hl7.fhir.instance.model.api.IBaseBundle> returnType, Integer count, java.util.Date cutoff, org.hl7.fhir.instance.model.api.IPrimitiveType<java.util.Date> iCutoff, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
fhir/onServer API メソッドには、次の表に示すパラメーターがあります。
パラメーター | 説明 | タイプ |
---|---|---|
count | サーバーが theCount 数までのリソースのみを返すように要求します。NULL の場合があります | Integer |
cutoff | 指定された時間以降に作成されたリソースバージョンのみをサーバーが返すように要求します。NULL の場合があります。 | 日付 |
extraParameters | 渡すことができるパラメーターの完全なリストについては、ExtraParameters を参照してください。NULL の場合があります。 | マップ |
iCutoff | 指定された時間以降に作成されたリソースバージョンのみをサーバーが返すように要求します。NULL の場合があります。 | IPrimitiveType |
returnType | メソッドが Bundle リソース (ca.uhn.fhir.model.dstu2.resource.Bundle など) を返すように要求します。DSTU2 サーバーにアクセスしている場合は、この方法を使用します。 | クラス |
23.5.4.3. メソッド onType
署名:
- org.hl7.fhir.instance.model.api.IBaseBundle onType(Class<org.hl7.fhir.instance.model.api.IBaseResource> resourceType, Class<org.hl7.fhir.instance.model.api.IBaseBundle> returnType, Integer count, java.util.Date cutoff, org.hl7.fhir.instance.model.api.IPrimitiveType<java.util.Date> iCutoff, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
fhir/onType API メソッドには、次の表に示すパラメーターがあります。
パラメーター | 説明 | タイプ |
---|---|---|
count | サーバーが theCount 数までのリソースのみを返すように要求します。NULL の場合があります | Integer |
cutoff | 指定された時間以降に作成されたリソースバージョンのみをサーバーが返すように要求します。NULL の場合があります。 | 日付 |
extraParameters | 渡すことができるパラメーターの完全なリストについては、ExtraParameters を参照してください。NULL の場合があります。 | マップ |
iCutoff | 指定された時間以降に作成されたリソースバージョンのみをサーバーが返すように要求します。NULL の場合があります。 | IPrimitiveType |
resourceType | 検索するリソースの種類 | クラス |
returnType | メソッドが Bundle リソース (ca.uhn.fhir.model.dstu2.resource.Bundle など) を返すように要求します。DSTU2 サーバーにアクセスしている場合は、この方法を使用します。 | クラス |
上記のパラメーターに加えて、fhir API は任意の クエリーパラメーター も使用できます。
いずれのパラメーターも、エンドポイント URI で指定するか、メッセージヘッダーで動的に指定できます。メッセージヘッダー名は CamelFhir.parameter
の形式である必要があります。inBody
パラメーターはメッセージヘッダーをオーバーライドします。つまり、エンドポイントパラメーター inBody=myParameterNameHere
は CamelFhir.myParameterNameHere
ヘッダーをオーバーライドします。
23.5.5. API: ページの読み込み
producer と consumer の両方がサポート対象
ページ読み込み API は、次の構文で定義されます。
fhir:load-page/methodName?[parameters]
以下の表に 3 つのメソッドをリストし、その後に各メソッドの詳細な構文を示します。(API メソッドには、名前の代わりに構文で使用できる省略形の別名を付けることができます)
メソッド | 説明 |
---|---|
指定された URL とバンドルタイプを使用して結果のページを読み込み、DSTU1 Atom バンドルを返します | |
バンドル内のリレーション next のリンクを使用して、結果の次のページを読み込みます | |
バンドル内のリレーション prev のリンクを使用して、結果の前のページをロードします |
23.5.5.1. メソッド byUrl
署名:
- org.hl7.fhir.instance.model.api.IBaseBundle byUrl(String url, Class<org.hl7.fhir.instance.model.api.IBaseBundle> returnType, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
fhir/byUrl API メソッドには、次の表に示すパラメーターがあります。
パラメーター | 説明 | タイプ |
---|---|---|
extraParameters | 渡すことができるパラメーターの完全なリストについては、ExtraParameters を参照してください。NULL の場合があります。 | マップ |
returnType | リターンタイプ | クラス |
url | 検索 URL | String |
23.5.5.2. 次の方法
署名:
- org.hl7.fhir.instance.model.api.IBaseBundle next(org.hl7.fhir.instance.model.api.IBaseBundle bundle, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
fhir/next API メソッドには、次の表に示すパラメーターがあります。
パラメーター | 説明 | タイプ |
---|---|---|
bundle | IBaseBundle | IBaseBundle |
extraParameters | 渡すことができるパラメーターの完全なリストについては、ExtraParameters を参照してください。NULL の場合があります。 | マップ |
23.5.5.3. 前の方法
署名:
- org.hl7.fhir.instance.model.api.IBaseBundle previous(org.hl7.fhir.instance.model.api.IBaseBundle bundle, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
fhir/previous API メソッドには、次の表に示すパラメーターがあります。
パラメーター | 説明 | タイプ |
---|---|---|
bundle | IBaseBundle | IBaseBundle |
extraParameters | 渡すことができるパラメーターの完全なリストについては、ExtraParameters を参照してください。NULL の場合があります。 | マップ |
上記のパラメーターに加えて、fhir API は任意の クエリーパラメーター も使用できます。
いずれのパラメーターも、エンドポイント URI で指定するか、メッセージヘッダーで動的に指定できます。メッセージヘッダー名は CamelFhir.parameter
の形式である必要があります。inBody
パラメーターはメッセージヘッダーをオーバーライドします。つまり、エンドポイントパラメーター inBody=myParameterNameHere
は CamelFhir.myParameterNameHere
ヘッダーをオーバーライドします。
23.5.6. API: メタ
producer と consumer の両方がサポート対象
メタ API は、次の構文で定義されます。
fhir:meta/methodName?[parameters]
以下の表に 5 つのメソッドをリストし、その後に各メソッドの詳細な構文を示します。(API メソッドには、名前の代わりに構文で使用できる省略形の別名を付けることができます)
メソッド | 説明 |
---|---|
指定されたメタデータの要素を既存のセットに追加します (削除しないでください)。 | |
指定された ID から指定されたメタデータの要素を削除します | |
特定のリソースから現在のメタデータを取得する | |
サーバー全体から現在のメタデータを取得する | |
特定のタイプから現在のメタデータをフェッチする |
23.5.6.1. メソッドの追加
署名:
- org.hl7.fhir.instance.model.api.IBaseMetaType add(org.hl7.fhir.instance.model.api.IBaseMetaType meta, org.hl7.fhir.instance.model.api.IIdType id, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
fhir/add API メソッドには、次の表に示すパラメーターがあります。
パラメーター | 説明 | タイプ |
---|---|---|
extraParameters | 渡すことができるパラメーターの完全なリストについては、ExtraParameters を参照してください。NULL の場合があります。 | マップ |
id | ID | IIdType |
meta | IBaseMetaType クラス | IBaseMetaType |
23.5.6.2. メソッド: DELETE
署名:
- org.hl7.fhir.instance.model.api.IBaseMetaType delete(org.hl7.fhir.instance.model.api.IBaseMetaType meta, org.hl7.fhir.instance.model.api.IIdType id, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
fhir/delete API メソッドには、次の表に示すパラメーターがあります。
パラメーター | 説明 | タイプ |
---|---|---|
extraParameters | 渡すことができるパラメーターの完全なリストについては、ExtraParameters を参照してください。NULL の場合があります。 | マップ |
id | ID | IIdType |
meta | IBaseMetaType クラス | IBaseMetaType |
23.5.6.3. メソッド getFromResource
署名:
- org.hl7.fhir.instance.model.api.IBaseMetaType getFromResource(Class<org.hl7.fhir.instance.model.api.IBaseMetaType> metaType, org.hl7.fhir.instance.model.api.IIdType id, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
fhir/getFromResource API メソッドには、次の表に示すパラメーターがあります。
パラメーター | 説明 | タイプ |
---|---|---|
extraParameters | 渡すことができるパラメーターの完全なリストについては、ExtraParameters を参照してください。NULL の場合があります。 | マップ |
id | ID | IIdType |
metaType | IBaseMetaType クラス | クラス |
23.5.6.4. メソッド: getFromServer
署名:
- org.hl7.fhir.instance.model.api.IBaseMetaType getFromServer(Class<org.hl7.fhir.instance.model.api.IBaseMetaType> metaType, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
fhir/getFromServer API メソッドには、次の表に示すパラメーターがあります。
パラメーター | 説明 | タイプ |
---|---|---|
extraParameters | 渡すことができるパラメーターの完全なリストについては、ExtraParameters を参照してください。NULL の場合があります。 | マップ |
metaType | 特定の FHIR モデルバージョンのメタデータ型のタイプ (MetaDt.class または MetaType.class である必要があります) | クラス |
23.5.6.5. メソッド getFromType
署名:
- org.hl7.fhir.instance.model.api.IBaseMetaType getFromType(Class<org.hl7.fhir.instance.model.api.IBaseMetaType> metaType, String resourceType, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
fhir/getFromType API メソッドには、次の表に示すパラメーターがあります。
パラメーター | 説明 | タイプ |
---|---|---|
extraParameters | 渡すことができるパラメーターの完全なリストについては、ExtraParameters を参照してください。NULL の場合があります。 | マップ |
metaType | IBaseMetaType クラス | クラス |
resourceType | リソースの種類 (患者など) | String |
上記のパラメーターに加えて、fhir API は任意の クエリーパラメーター も使用できます。
いずれのパラメーターも、エンドポイント URI で指定するか、メッセージヘッダーで動的に指定できます。メッセージヘッダー名は CamelFhir.parameter
の形式である必要があります。inBody
パラメーターはメッセージヘッダーをオーバーライドします。つまり、エンドポイントパラメーター inBody=myParameterNameHere
は CamelFhir.myParameterNameHere
ヘッダーをオーバーライドします。
23.5.7. API: 操作
producer と consumer の両方がサポート対象
操作 API は、次の構文で定義されます。
fhir:operation/methodName?[parameters]
以下の表に 5 つのメソッドをリストし、その後に各メソッドの詳細な構文を示します。(API メソッドには、名前の代わりに構文で使用できる省略形の別名を付けることができます)
メソッド | 説明 |
---|---|
サーバー上の特定のリソースのすべてのバージョンに対して (ID とタイプによって) 操作を実行します | |
この操作は、リソースの特定のバージョンで動作します | |
サーバー上のすべてのタイプのすべてのリソースのすべてのバージョンで操作を実行します | |
サーバー上の指定されたタイプのすべてのリソースのすべてのバージョンで操作を実行します | |
この操作は、FHIR 仕様で定義されているように $process-message と呼ばれます |
23.5.7.1. メソッド onInstance
署名:
- org.hl7.fhir.instance.model.api.IBaseResource onInstance(org.hl7.fhir.instance.model.api.IIdType id, String name, org.hl7.fhir.instance.model.api.IBaseParameters parameters, Class<org.hl7.fhir.instance.model.api.IBaseParameters> outputParameterType, boolean useHttpGet, Class<org.hl7.fhir.instance.model.api.IBaseResource> returnType, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
fhir/onInstance API メソッドには、次の表に示すパラメーターがあります。
パラメーター | 説明 | タイプ |
---|---|---|
extraParameters | 渡すことができるパラメーターの完全なリストについては、ExtraParameters を参照してください。NULL の場合があります。 | マップ |
id | リソース (バージョンは削除されます) | IIdType |
name | 操作名 | String |
outputParameterType | 出力パラメーターに使用する型 (これは、使用している FHIR 構造のバージョンから引き出された Parameters.class に設定する必要があります) は、NULL の場合があります。 | クラス |
parameters | 入力として使用するパラメーター。操作に入力パラメーターが必要ない場合は、null になることもあります。 | IBaseParameters |
returnType | このオペレーションが、Parameters リソースではなく、単一のリソースボディを戻り値の型として返す場合は、このメソッドを使用してそのリソースの型を指定します。これは、Parameters リソースの代わりにバンドルを返す特定の操作 (Patient/NNN/$everything など) に役立ちます。NULL の場合があります。 | クラス |
useHttpGet | HTTP GET 動詞を使用する | Boolean |
23.5.7.2. メソッド onInstanceVersion
署名:
- org.hl7.fhir.instance.model.api.IBaseResource onInstanceVersion(org.hl7.fhir.instance.model.api.IIdType id, String name, org.hl7.fhir.instance.model.api.IBaseParameters parameters, Class<org.hl7.fhir.instance.model.api.IBaseParameters> outputParameterType, boolean useHttpGet, Class<org.hl7.fhir.instance.model.api.IBaseResource> returnType, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
fhir/onInstanceVersion API メソッドには、次の表に示すパラメーターがあります。
パラメーター | 説明 | タイプ |
---|---|---|
extraParameters | 渡すことができるパラメーターの完全なリストについては、ExtraParameters を参照してください。NULL の場合があります。 | マップ |
id | リソースのバージョン | IIdType |
name | 操作名 | String |
outputParameterType | 出力パラメーターに使用する型 (これは、使用している FHIR 構造のバージョンから引き出された Parameters.class に設定する必要があります) は、NULL の場合があります。 | クラス |
parameters | 入力として使用するパラメーター。操作に入力パラメーターが必要ない場合は、null になることもあります。 | IBaseParameters |
returnType | このオペレーションが、Parameters リソースではなく、単一のリソースボディを戻り値の型として返す場合は、このメソッドを使用してそのリソースの型を指定します。これは、Parameters リソースの代わりにバンドルを返す特定の操作 (Patient/NNN/$everything など) に役立ちます。NULL の場合があります。 | クラス |
useHttpGet | HTTP GET 動詞を使用する | Boolean |
23.5.7.3. メソッド onServer
署名:
- org.hl7.fhir.instance.model.api.IBaseResource onServer(String name, org.hl7.fhir.instance.model.api.IBaseParameters parameters, Class<org.hl7.fhir.instance.model.api.IBaseParameters> outputParameterType, boolean useHttpGet, Class<org.hl7.fhir.instance.model.api.IBaseResource> returnType, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
fhir/onServer API メソッドには、次の表に示すパラメーターがあります。
パラメーター | 説明 | タイプ |
---|---|---|
extraParameters | 渡すことができるパラメーターの完全なリストについては、ExtraParameters を参照してください。NULL の場合があります。 | マップ |
name | 操作名 | String |
outputParameterType | 出力パラメーターに使用する型 (これは、使用している FHIR 構造のバージョンから引き出された Parameters.class に設定する必要があります) は、NULL の場合があります。 | クラス |
parameters | 入力として使用するパラメーター。操作に入力パラメーターが必要ない場合は、null になることもあります。 | IBaseParameters |
returnType | このオペレーションが、Parameters リソースではなく、単一のリソースボディを戻り値の型として返す場合は、このメソッドを使用してそのリソースの型を指定します。これは、Parameters リソースの代わりにバンドルを返す特定の操作 (Patient/NNN/$everything など) に役立ちます。NULL の場合があります。 | クラス |
useHttpGet | HTTP GET 動詞を使用する | Boolean |
23.5.7.4. メソッド onType
署名:
- org.hl7.fhir.instance.model.api.IBaseResource onType(Class<org.hl7.fhir.instance.model.api.IBaseResource> resourceType, String name, org.hl7.fhir.instance.model.api.IBaseParameters parameters, Class<org.hl7.fhir.instance.model.api.IBaseParameters> outputParameterType, boolean useHttpGet, Class<org.hl7.fhir.instance.model.api.IBaseResource> returnType, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
fhir/onType API メソッドには、次の表に示すパラメーターがあります。
パラメーター | 説明 | タイプ |
---|---|---|
extraParameters | 渡すことができるパラメーターの完全なリストについては、ExtraParameters を参照してください。NULL の場合があります。 | マップ |
name | 操作名 | String |
outputParameterType | 出力パラメーターに使用する型 (これは、使用している FHIR 構造のバージョンから引き出された Parameters.class に設定する必要があります) は、NULL の場合があります。 | クラス |
parameters | 入力として使用するパラメーター。操作に入力パラメーターが必要ない場合は、null になることもあります。 | IBaseParameters |
resourceType | 操作するリソースの種類 | クラス |
returnType | このオペレーションが、Parameters リソースではなく、単一のリソースボディを戻り値の型として返す場合は、このメソッドを使用してそのリソースの型を指定します。これは、Parameters リソースの代わりにバンドルを返す特定の操作 (Patient/NNN/$everything など) に役立ちます。NULL の場合があります。 | クラス |
useHttpGet | HTTP GET 動詞を使用する | Boolean |
23.5.7.5. メソッド processMessage
署名:
- org.hl7.fhir.instance.model.api.IBaseBundle processMessage(String respondToUri, org.hl7.fhir.instance.model.api.IBaseBundle msgBundle, boolean asynchronous, Class<org.hl7.fhir.instance.model.api.IBaseBundle> responseClass, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
fhir/processMessage API メソッドには、次の表に示すパラメーターがあります。
パラメーター | 説明 | タイプ |
---|---|---|
非同期 | メッセージを非同期または同期のどちらで処理するか。デフォルトは同期です。 | Boolean |
extraParameters | 渡すことができるパラメーターの完全なリストについては、ExtraParameters を参照してください。NULL の場合があります。 | マップ |
msgBundle | メッセージバンドルをメッセージングサーバーへの POST に設定します。 | IBaseBundle |
respondToUri | 受信サーバーからの応答をこの URI に送信する必要があることを示すオプションのクエリーパラメーター。NULL の場合があります。 | String |
responseClass | 応答クラス | クラス |
上記のパラメーターに加えて、fhir API は任意の クエリーパラメーター も使用できます。
いずれのパラメーターも、エンドポイント URI で指定するか、メッセージヘッダーで動的に指定できます。メッセージヘッダー名は CamelFhir.parameter
の形式である必要があります。inBody
パラメーターはメッセージヘッダーをオーバーライドします。つまり、エンドポイントパラメーター inBody=myParameterNameHere
は CamelFhir.myParameterNameHere
ヘッダーをオーバーライドします。
23.5.8. API: パッチ
producer と consumer の両方がサポート対象
パッチ API は、次の構文で定義されます。
fhir:patch/methodName?[parameters]
以下の表に 2 つのメソッドをリストし、その後に各メソッドの詳細な構文を示します。(API メソッドには、名前の代わりに構文で使用できる省略形の別名を付けることができます)
メソッド | 説明 |
---|---|
指定されたリソース ID にパッチを適用します | |
特定の検索 URL に対して条件付きの作成として更新を実行する必要があることを指定します。 |
23.5.8.1. メソッド patchById
署名:
- ca.uhn.fhir.rest.api.MethodOutcome patchById(String patchBody, String stringId, ca.uhn.fhir.rest.api.PreferReturnEnum preferReturn, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
- ca.uhn.fhir.rest.api.MethodOutcome patchById(String patchBody, org.hl7.fhir.instance.model.api.IIdType id, ca.uhn.fhir.rest.api.PreferReturnEnum preferReturn, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
fhir/patchById API メソッドには、次の表に示すパラメーターがあります。
パラメーター | 説明 | タイプ |
---|---|---|
extraParameters | 渡すことができるパラメーターの完全なリストについては、ExtraParameters を参照してください。NULL の場合があります。 | マップ |
id | パッチを適用するリソース ID | IIdType |
patchBody | に準拠する XML または JSON でシリアル化されたパッチドキュメントの本文 | String |
preferReturn | リクエストに Prefer ヘッダーを追加します。これは、サーバーが結果の一部としてリソース本文を含めるか抑制することを要求します。リソースがサーバーによって返された場合、それは解析され、MethodOutcome#getResource () を介してクライアントにアクセス可能になります。 | PreferReturnEnum |
stringId | パッチを適用するリソース ID | String |
23.5.8.2. メソッド patchByUrl
署名:
- ca.uhn.fhir.rest.api.MethodOutcome patchByUrl(String patchBody, String url, ca.uhn.fhir.rest.api.PreferReturnEnum preferReturn, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
fhir/patchByUrl API メソッドには、次の表に示すパラメーターがあります。
パラメーター | 説明 | タイプ |
---|---|---|
extraParameters | 渡すことができるパラメーターの完全なリストについては、ExtraParameters を参照してください。NULL の場合があります。 | マップ |
patchBody | に準拠する XML または JSON でシリアル化されたパッチドキュメントの本文 | String |
preferReturn | リクエストに Prefer ヘッダーを追加します。これは、サーバーが結果の一部としてリソース本文を含めるか抑制することを要求します。リソースがサーバーによって返された場合、それは解析され、MethodOutcome#getResource () を介してクライアントにアクセス可能になります。 | PreferReturnEnum |
url | 使用する検索 URL。この URL の形式は、ResourceTypeParameters の形式にする必要があります。たとえば、Patientname=Smith&identifier=13.2.4.11.4%7C847366 です。 | String |
上記のパラメーターに加えて、fhir API は任意の クエリーパラメーター も使用できます。
いずれのパラメーターも、エンドポイント URI で指定するか、メッセージヘッダーで動的に指定できます。メッセージヘッダー名は CamelFhir.parameter
の形式である必要があります。inBody
パラメーターはメッセージヘッダーをオーバーライドします。つまり、エンドポイントパラメーター inBody=myParameterNameHere
は CamelFhir.myParameterNameHere
ヘッダーをオーバーライドします。
23.5.9. API: 読み取り
producer と consumer の両方がサポート対象
読み取り API は、次の構文で定義されます。
fhir:read/methodName?[parameters]
以下の表に 2 つのメソッドをリストし、その後に各メソッドの詳細な構文を示します。(API メソッドには、名前の代わりに構文で使用できる省略形の別名を付けることができます)
メソッド | 説明 |
---|---|
サーバー上の IBaseResource を ID で読み取ります | |
サーバー上の IBaseResource を URL で読み取ります |
23.5.9.1. メソッド resourceById
署名:
- org.hl7.fhir.instance.model.api.IBaseResource resourceById(Class<org.hl7.fhir.instance.model.api.IBaseResource> resource, Long longId, String ifVersionMatches, Boolean returnNull, org.hl7.fhir.instance.model.api.IBaseResource returnResource, Boolean throwError, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
- org.hl7.fhir.instance.model.api.IBaseResource resourceById(Class<org.hl7.fhir.instance.model.api.IBaseResource> resource, String stringId, String version, String ifVersionMatches, Boolean returnNull, org.hl7.fhir.instance.model.api.IBaseResource returnResource, Boolean throwError, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
- org.hl7.fhir.instance.model.api.IBaseResource resourceById(Class<org.hl7.fhir.instance.model.api.IBaseResource> resource, org.hl7.fhir.instance.model.api.IIdType id, String ifVersionMatches, Boolean returnNull, org.hl7.fhir.instance.model.api.IBaseResource returnResource, Boolean throwError, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
- org.hl7.fhir.instance.model.api.IBaseResource resourceById(String resourceClass, Long longId, String ifVersionMatches, Boolean returnNull, org.hl7.fhir.instance.model.api.IBaseResource returnResource, Boolean throwError, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
- org.hl7.fhir.instance.model.api.IBaseResource resourceById(String resourceClass, String stringId, String ifVersionMatches, String version, Boolean returnNull, org.hl7.fhir.instance.model.api.IBaseResource returnResource, Boolean throwError, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
- org.hl7.fhir.instance.model.api.IBaseResource resourceById(String resourceClass, org.hl7.fhir.instance.model.api.IIdType id, String ifVersionMatches, Boolean returnNull, org.hl7.fhir.instance.model.api.IBaseResource returnResource, Boolean throwError, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
fhir/resourceById API メソッドには、次の表に示すパラメーターがあります。
パラメーター | 説明 | タイプ |
---|---|---|
extraParameters | 渡すことができるパラメーターの完全なリストについては、ExtraParameters を参照してください。NULL の場合があります。 | マップ |
id | リソースを参照する IIdType | IIdType |
ifVersionMatches | サーバー上の最新バージョンと照合するバージョン | String |
longId | リソース ID | Long |
resource | 読み取るリソース (Patient など) | クラス |
resourceClass | 読み取るリソース (Patient など) | String |
returnNull | バージョンが一致する場合は null を返す | Boolean |
returnResource | バージョンが一致する場合はリソースを返します | IBaseResource |
stringId | リソース ID | String |
throwError | バージョンが一致する場合はエラーを出力します | Boolean |
version | リソースのバージョン | String |
23.5.9.2. メソッド resourceByUrl
署名:
- org.hl7.fhir.instance.model.api.IBaseResource resourceByUrl(Class<org.hl7.fhir.instance.model.api.IBaseResource> resource, String url, String ifVersionMatches, Boolean returnNull, org.hl7.fhir.instance.model.api.IBaseResource returnResource, Boolean throwError, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
- org.hl7.fhir.instance.model.api.IBaseResource resourceByUrl(Class<org.hl7.fhir.instance.model.api.IBaseResource> resource, org.hl7.fhir.instance.model.api.IIdType iUrl, String ifVersionMatches, Boolean returnNull, org.hl7.fhir.instance.model.api.IBaseResource returnResource, Boolean throwError, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
- org.hl7.fhir.instance.model.api.IBaseResource resourceByUrl(String resourceClass, String url, String ifVersionMatches, Boolean returnNull, org.hl7.fhir.instance.model.api.IBaseResource returnResource, Boolean throwError, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
- org.hl7.fhir.instance.model.api.IBaseResource resourceByUrl(String resourceClass, org.hl7.fhir.instance.model.api.IIdType iUrl, String ifVersionMatches, Boolean returnNull, org.hl7.fhir.instance.model.api.IBaseResource returnResource, Boolean throwError, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
fhir/resourceByUrl API メソッドには、次の表に示すパラメーターがあります。
パラメーター | 説明 | タイプ |
---|---|---|
extraParameters | 渡すことができるパラメーターの完全なリストについては、ExtraParameters を参照してください。NULL の場合があります。 | マップ |
iUrl | 絶対 URL でリソースを参照する IIdType | IIdType |
ifVersionMatches | サーバー上の最新バージョンと照合するバージョン | String |
resource | 読み取るリソース (Patient など) | クラス |
resourceClass | 読み取るリソース (Patient.class など) | String |
returnNull | バージョンが一致する場合は null を返す | Boolean |
returnResource | バージョンが一致する場合はリソースを返します | IBaseResource |
throwError | バージョンが一致する場合はエラーを出力します | Boolean |
url | 絶対 URL によるリソースの参照 | String |
上記のパラメーターに加えて、fhir API は任意の クエリーパラメーター も使用できます。
いずれのパラメーターも、エンドポイント URI で指定するか、メッセージヘッダーで動的に指定できます。メッセージヘッダー名は CamelFhir.parameter
の形式である必要があります。inBody
パラメーターはメッセージヘッダーをオーバーライドします。つまり、エンドポイントパラメーター inBody=myParameterNameHere
は CamelFhir.myParameterNameHere
ヘッダーをオーバーライドします。
23.5.10. API: 検索
producer と consumer の両方がサポート対象
検索 API は、次の構文で定義されます。
fhir:search/methodName?[parameters]
以下の表に 1 つのメソッドをリストし、その後に各メソッドの詳細な構文を示します。(API メソッドには、名前の代わりに構文で使用できる省略形の別名を付けることができます)
メソッド | 説明 |
---|---|
URL で直接検索を実行する |
23.5.10.1. メソッド searchByUrl
署名:
- org.hl7.fhir.instance.model.api.IBaseBundle searchByUrl(String url, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
fhir/searchByUrl API メソッドには、次の表に示すパラメーターがあります。
パラメーター | 説明 | タイプ |
---|---|---|
extraParameters | 渡すことができるパラメーターの完全なリストについては、ExtraParameters を参照してください。NULL の場合があります。 | マップ |
url | 検索する URL。この URL が完全である場合があることに注意してください (例:)。その場合、クライアントのベース URL は無視されます。または、クライアントのベース URL が使用される場合に相対 (Patientname=foo など) にすることもできます。 | String |
上記のパラメーターに加えて、fhir API は任意の クエリーパラメーター も使用できます。
いずれのパラメーターも、エンドポイント URI で指定するか、メッセージヘッダーで動的に指定できます。メッセージヘッダー名は CamelFhir.parameter
の形式である必要があります。inBody
パラメーターはメッセージヘッダーをオーバーライドします。つまり、エンドポイントパラメーター inBody=myParameterNameHere
は CamelFhir.myParameterNameHere
ヘッダーをオーバーライドします。
23.5.11. API: トランザクション
producer と consumer の両方がサポート対象
トランザクション API は、次の構文で定義されます。
fhir:transaction/methodName?[parameters]
以下の表に 2 つのメソッドをリストし、その後に各メソッドの詳細な構文を示します。(API メソッドには、名前の代わりに構文で使用できる省略形の別名を付けることができます)
メソッド | 説明 |
---|---|
指定された生のテキスト (バンドルリソースである必要があります) をトランザクション入力として使用します | |
リソースのリストをトランザクション入力として使用する |
23.5.11.1. メソッド withBundle
署名:
- String withBundle(String stringBundle, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
- org.hl7.fhir.instance.model.api.IBaseBundle withBundle(org.hl7.fhir.instance.model.api.IBaseBundle bundle, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
fhir/withBundle API メソッドには、次の表に示すパラメーターがあります。
パラメーター | 説明 | タイプ |
---|---|---|
bundle | トランザクションで使用するバンドル | IBaseBundle |
extraParameters | 渡すことができるパラメーターの完全なリストについては、ExtraParameters を参照してください。NULL の場合があります。 | マップ |
stringBundle | トランザクションで使用するバンドル | String |
23.5.11.2. メソッド withResources
署名:
- java.util.List<org.hl7.fhir.instance.model.api.IBaseResource> withResources(java.util.List<org.hl7.fhir.instance.model.api.IBaseResource> resources, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
fhir/withResources API メソッドには、次の表に示すパラメーターがあります。
パラメーター | 説明 | タイプ |
---|---|---|
extraParameters | 渡すことができるパラメーターの完全なリストについては、ExtraParameters を参照してください。NULL の場合があります。 | マップ |
resources | トランザクションで使用するリソース | リスト |
上記のパラメーターに加えて、fhir API は任意の クエリーパラメーター も使用できます。
いずれのパラメーターも、エンドポイント URI で指定するか、メッセージヘッダーで動的に指定できます。メッセージヘッダー名は CamelFhir.parameter
の形式である必要があります。inBody
パラメーターはメッセージヘッダーをオーバーライドします。つまり、エンドポイントパラメーター inBody=myParameterNameHere
は CamelFhir.myParameterNameHere
ヘッダーをオーバーライドします。
23.5.12. API: 更新
producer と consumer の両方がサポート対象
更新 API は、次の構文で定義されます。
fhir:update/methodName?[parameters]
以下の表に 2 つのメソッドをリストし、その後に各メソッドの詳細な構文を示します。(API メソッドには、名前の代わりに構文で使用できる省略形の別名を付けることができます)
メソッド | 説明 |
---|---|
サーバー上の IBaseResource を ID で更新します | |
検索 URL によってサーバー上の IBaseResource を更新します |
23.5.12.1. メソッドリソース
署名:
- ca.uhn.fhir.rest.api.MethodOutcome resource(String resourceAsString, String stringId, ca.uhn.fhir.rest.api.PreferReturnEnum preferReturn, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
- ca.uhn.fhir.rest.api.MethodOutcome resource(String resourceAsString, org.hl7.fhir.instance.model.api.IIdType id, ca.uhn.fhir.rest.api.PreferReturnEnum preferReturn, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
- ca.uhn.fhir.rest.api.MethodOutcome resource(org.hl7.fhir.instance.model.api.IBaseResource resource, String stringId, ca.uhn.fhir.rest.api.PreferReturnEnum preferReturn, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
- ca.uhn.fhir.rest.api.MethodOutcome resource(org.hl7.fhir.instance.model.api.IBaseResource resource, org.hl7.fhir.instance.model.api.IIdType id, ca.uhn.fhir.rest.api.PreferReturnEnum preferReturn, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
fhir/resource API メソッドには、次の表に示すパラメーターがあります。
パラメーター | 説明 | タイプ |
---|---|---|
extraParameters | 渡すことができるパラメーターの完全なリストについては、ExtraParameters を参照してください。NULL の場合があります。 | マップ |
id | リソースを参照する IIdType | IIdType |
preferReturn | サーバーが結果の一部としてリソース本体を含めるか抑制するか | PreferReturnEnum |
resource | 更新するリソース (患者など) | IBaseResource |
resourceAsString | 更新するリソース本体 | String |
stringId | リソースを参照する ID | String |
23.5.12.2. メソッド resourceBySearchUrl
署名:
- ca.uhn.fhir.rest.api.MethodOutcome resourceBySearchUrl(String resourceAsString, String url, ca.uhn.fhir.rest.api.PreferReturnEnum preferReturn, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
- ca.uhn.fhir.rest.api.MethodOutcome resourceBySearchUrl(org.hl7.fhir.instance.model.api.IBaseResource resource, String url, ca.uhn.fhir.rest.api.PreferReturnEnum preferReturn, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
fhir/resourceBySearchUrl API メソッドには、次の表に示すパラメーターがあります。
パラメーター | 説明 | タイプ |
---|---|---|
extraParameters | 渡すことができるパラメーターの完全なリストについては、ExtraParameters を参照してください。NULL の場合があります。 | マップ |
preferReturn | サーバーが結果の一部としてリソース本体を含めるか抑制するか | PreferReturnEnum |
resource | 更新するリソース (患者など) | IBaseResource |
resourceAsString | 更新するリソース本体 | String |
url | 特定の検索 URL に対して条件付きの作成として更新を実行する必要があることを指定します。 | String |
上記のパラメーターに加えて、fhir API は任意の クエリーパラメーター も使用できます。
いずれのパラメーターも、エンドポイント URI で指定するか、メッセージヘッダーで動的に指定できます。メッセージヘッダー名は CamelFhir.parameter
の形式である必要があります。inBody
パラメーターはメッセージヘッダーをオーバーライドします。つまり、エンドポイントパラメーター inBody=myParameterNameHere
は CamelFhir.myParameterNameHere
ヘッダーをオーバーライドします。
23.5.13. API: 検証
producer と consumer の両方がサポート対象
検証 API は、構文で次のように定義されます。
fhir:validate/methodName?[parameters]
以下の表に 1 つのメソッドをリストし、その後に各メソッドの詳細な構文を示します。(API メソッドには、名前の代わりに構文で使用できる省略形の別名を付けることができます)
メソッド | 説明 |
---|---|
リソースを検証します |
23.5.13.1. メソッドリソース
署名:
- ca.uhn.fhir.rest.api.MethodOutcome resource(String resourceAsString, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
- ca.uhn.fhir.rest.api.MethodOutcome resource(org.hl7.fhir.instance.model.api.IBaseResource resource, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
fhir/resource API メソッドには、次の表に示すパラメーターがあります。
パラメーター | 説明 | タイプ |
---|---|---|
extraParameters | 渡すことができるパラメーターの完全なリストについては、ExtraParameters を参照してください。NULL の場合があります。 | マップ |
resource | 検証する IBaseResource | IBaseResource |
resourceAsString | 検証する生のリソース | String |
上記のパラメーターに加えて、fhir API は任意の クエリーパラメーター も使用できます。
いずれのパラメーターも、エンドポイント URI で指定するか、メッセージヘッダーで動的に指定できます。メッセージヘッダー名は CamelFhir.parameter
の形式である必要があります。inBody
パラメーターはメッセージヘッダーをオーバーライドします。つまり、エンドポイントパラメーター inBody=myParameterNameHere
は CamelFhir.myParameterNameHere
ヘッダーをオーバーライドします。
23.6. Spring Boot Auto-Configuration
Spring Boot で fhir を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-fhir-starter</artifactId> </dependency>
コンポーネントは、以下に記載される 56 オプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.component.fhir.access-token | OAuth アクセストークン。 | String | |
camel.component.fhir.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.fhir.bridge-error-handler | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | Boolean |
camel.component.fhir.client | カスタムクライアントを使用します。オプションは ca.uhn.fhir.rest.client.api.IGenericClient タイプです。 | IGenericClient | |
camel.component.fhir.client-factory | カスタムクライアントファクトリーを使用します。オプションは ca.uhn.fhir.rest.client.api.IRestfulClientFactory タイプです。 | IRestfulClientFactory | |
camel.component.fhir.compress | 発信 (POST/PUT) コンテンツを GZIP 形式に圧縮します。 | false | Boolean |
camel.component.fhir.configuration | 共有設定を使用するには、以下を行います。オプションは org.apache.camel.component.fhir.FhirConfiguration タイプです。 | FhirConfiguration | |
camel.component.fhir.connection-timeout | 初期 TCP 接続の試行と確立にかかる時間 (ミリ秒)。 | 10000 | Integer |
camel.component.fhir.defer-model-scanning | このオプションが設定されている場合は、指定されたタイプの子リストが実際にアクセスされるまで、モデルクラスの子はスキャンされません。 | false | Boolean |
camel.component.fhir.enabled | fhir コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.fhir.encoding | すべてのリクエストに使用するエンコーディング。 | String | |
camel.component.fhir.fhir-context | FhirContext は、作成するのにコストのかかるオブジェクトです。複数のインスタンスを作成しないようにするために、直接設定できます。オプションは ca.uhn.fhir.context.FhirContext タイプです。 | FhirContext | |
camel.component.fhir.fhir-version | 使用する FHIR バージョン。 | R4 | String |
camel.component.fhir.force-conformance-check | 適合性チェックを強制します。 | false | Boolean |
camel.component.fhir.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
camel.component.fhir.log | リクエストとレスポンスをすべてログに記録します。 | false | Boolean |
camel.component.fhir.password | Basic 認証に使用するユーザー名。 | String | |
camel.component.fhir.pretty-print | すべてのリクエストをきれいに印刷します。 | false | Boolean |
camel.component.fhir.proxy-host | プロキシーホスト。 | String | |
camel.component.fhir.proxy-password | プロキシーパスワード。 | String | |
camel.component.fhir.proxy-port | プロキシーポート。 | Integer | |
camel.component.fhir.proxy-user | プロキシーのユーザー名。 | String | |
camel.component.fhir.server-url | FHIR サーバーのベース URL。 | String | |
camel.component.fhir.session-cookie | すべてのリクエストに追加する HTTP セッション Cookie。 | String | |
camel.component.fhir.socket-timeout | 個々の読み取り/書き込み操作をブロックする時間 (ミリ秒単位)。 | 10000 | Integer |
camel.component.fhir.summary | _summary パラメーターを使用して、サーバーが応答を変更するように要求します。 | String | |
camel.component.fhir.username | Basic 認証に使用するユーザー名。 | String | |
camel.component.fhir.validation-mode | Camel が FHIR Server の適合ステートメントをいつ検証する必要があるか。 | ONCE | String |
camel.dataformat.fhirjson.content-type-header | データ形式が Content-Type ヘッダーにデータ形式のタイプを設定する必要があるかどうか。たとえば、XML にマーシャリングするデータ形式の場合は application/xml、JSON にマーシャリングするデータ形式の場合は application/json です。 | true | Boolean |
camel.dataformat.fhirjson.dont-encode-elements | 提供されている場合、エンコードしてはならない要素を指定します。このフィールドの有効な値には以下が含まれます。 Patient.name - Don't encode everyone and its children Patient.name - Don't encode the shortcut's name Patient.name.family - Don't encode the shortcut's family name .text - Don't encode the text element on any resource (最初の位置にはワイルドカードが含まれる可能性がある)DSTU2 note: Patient.meta などの meta の値は DSTU2 パーサーで機能しますが、Patient.meta.lastUpdated などのメタのサブ要素を持つ値は DSTU3 モードでのみ機能することに注意してください。 | Set | |
camel.dataformat.fhirjson.dont-strip-versions-from-references-at-paths | 指定された値の場合、指定されたパスのリソース参照には、エンコーディングプロセス中に自動的に削除されるのではなく、リソースバージョンがエンコードされます。この設定は、解析プロセスには影響しません。このメソッドは、setStripVersionsFromReferences(String)よりも詳細な制御レベルを提供し、setStripVersionsFromReferences(String)が true (デフォルト)に設定されている場合でも、このメソッドで指定されたパスはエンコードされます。 | リスト | |
camel.dataformat.fhirjson.enabled | fhirJson データ形式の自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.dataformat.fhirjson.encode-elements | 提供されている場合は、エンコードする必要がある要素を指定し、その他すべてを除外します。このフィールドの有効な値には、Patient - Encode proent とそのすべての子 Patient.name - Encode only the recipient's name Patient.name.family - Encode only the worker's family name .text - Encode only the text element on any resource (最初の位置のみ). (必須)- これは、必須フィールド(min 0)をエンコードさせる特別なケースです。 | Set | |
camel.dataformat.fhirjson.encode-elements-applies-to-child-resources-only | true (デフォルトが false)に設定すると、setEncodeElements (Set)に提供された値はルートリソース(通常は Bundle)には適用されませんが、その中に含まれるサブリソース(つまり、そのバンドル内の検索結果リソース)に適用されます。 | false | Boolean |
camel.dataformat.fhirjson.fhir-version | 使用する FHIR のバージョン。可能な値は、DSTU2、DSTU2_HL7ORG、DSTU2_1、DSTU3、R4 です。 | DSTU3 | String |
camel.dataformat.fhirjson.omit-resource-id | true に設定すると (デフォルトは false)、エンコードされるリソースの ID は出力に含まれません。これは含まれるリソースには適用されず、ルートリソースにのみ適用されることに注意してください。つまり、これが true に設定されている場合、含まれるリソースには引き続きローカル ID がありますが、外部/包含 ID には ID がありません。 | false | Boolean |
camel.dataformat.fhirjson.override-resource-id-with-bundle-entry-full-url | true (デフォルト)に設定すると、fullUrl が定義されている場合には Bundle.entry.fullUrl は Bundle.entry.resource のリソース ID を上書きします。この動作は、ソースデータをバンドルオブジェクトに解析するときに発生します。これが望ましい動作でない場合は、これを false に設定します (たとえば、クライアントコードが fullUrl とリソース ID の間で追加の検証チェックを実行する場合)。 | false | Boolean |
camel.dataformat.fhirjson.pretty-print | プリティプリントフラグを設定します。これは、パーサーが、出力を可能な限り圧縮するのではなく、人間が読めるスペースと要素間の改行でリソースをエンコードすることを意味します。 | false | Boolean |
camel.dataformat.fhirjson.server-base-url | このパーサーが使用するサーバーのベース URL を設定します。値が設定されている場合、リソース参照が絶対 URL として提供されているが、指定されたベースと一致するベースを持っている場合、リソース参照は相対参照に変換されます。 | String | |
camel.dataformat.fhirjson.strip-versions-from-references | true (デフォルト) に設定すると、バージョンを含むリソース参照は、リソースがエンコードされるときにバージョンが削除されます。ほとんどの場合、あるリソースから別のリソースへの参照は、ID とバージョンではなく、ID によってリソースを参照する必要があるため、これは通常は適切な動作です。ただし、場合によっては、リソースリンクでバージョンを保持することが望ましい場合があります。その場合、この値は false に設定する必要があります。このメソッドは、参照エンコーディングをグローバルに無効にする機能を提供します。より細かい制御が必要な場合は、setDontStripVersionsFromReferencesAtPaths(List) を使用します。 | false | Boolean |
camel.dataformat.fhirjson.summary-mode | true に設定すると (デフォルトは false)、FHIR 仕様によって要約要素としてマークされた要素のみが含まれます。 | false | Boolean |
camel.dataformat.fhirjson.suppress-narratives | true に設定すると (デフォルトは false)、物語はエンコードされた値に含まれません。 | false | Boolean |
camel.dataformat.fhirxml.content-type-header | データ形式が Content-Type ヘッダーにデータ形式のタイプを設定する必要があるかどうか。たとえば、XML にマーシャリングするデータ形式の場合は application/xml、JSON にマーシャリングするデータ形式の場合は application/json です。 | true | Boolean |
camel.dataformat.fhirxml.dont-encode-elements | 提供されている場合、エンコードしてはならない要素を指定します。このフィールドの有効な値には以下が含まれます。 Patient.name - Don't encode everyone and its children Patient.name - Don't encode the shortcut's name Patient.name.family - Don't encode the shortcut's family name .text - Don't encode the text element on any resource (最初の位置にはワイルドカードが含まれる可能性がある)DSTU2 note: Patient.meta などの meta の値は DSTU2 パーサーで機能しますが、Patient.meta.lastUpdated などのメタのサブ要素を持つ値は DSTU3 モードでのみ機能することに注意してください。 | Set | |
camel.dataformat.fhirxml.dont-strip-versions-from-references-at-paths | 指定された値の場合、指定されたパスのリソース参照には、エンコーディングプロセス中に自動的に削除されるのではなく、リソースバージョンがエンコードされます。この設定は、解析プロセスには影響しません。このメソッドは、setStripVersionsFromReferences(String)よりも詳細な制御レベルを提供し、setStripVersionsFromReferences(String)が true (デフォルト)に設定されている場合でも、このメソッドで指定されたパスはエンコードされます。 | リスト | |
camel.dataformat.fhirxml.enabled | fhirXml データ形式の自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.dataformat.fhirxml.encode-elements | 提供されている場合は、エンコードする必要がある要素を指定し、その他すべてを除外します。このフィールドの有効な値には、Patient - Encode proent とそのすべての子 Patient.name - Encode only the recipient's name Patient.name.family - Encode only the worker's family name .text - Encode only the text element on any resource (最初の位置のみ). (必須)- これは、必須フィールド(min 0)をエンコードさせる特別なケースです。 | Set | |
camel.dataformat.fhirxml.encode-elements-applies-to-child-resources-only | true (デフォルトが false)に設定すると、setEncodeElements (Set)に提供された値はルートリソース(通常は Bundle)には適用されませんが、その中に含まれるサブリソース(つまり、そのバンドル内の検索結果リソース)に適用されます。 | false | Boolean |
camel.dataformat.fhirxml.fhir-version | 使用する FHIR のバージョン。可能な値は、DSTU2、DSTU2_HL7ORG、DSTU2_1、DSTU3、R4 です。 | DSTU3 | String |
camel.dataformat.fhirxml.omit-resource-id | true に設定すると (デフォルトは false)、エンコードされるリソースの ID は出力に含まれません。これは含まれるリソースには適用されず、ルートリソースにのみ適用されることに注意してください。つまり、これが true に設定されている場合、含まれるリソースには引き続きローカル ID がありますが、外部/包含 ID には ID がありません。 | false | Boolean |
camel.dataformat.fhirxml.override-resource-id-with-bundle-entry-full-url | true (デフォルト)に設定すると、fullUrl が定義されている場合には Bundle.entry.fullUrl は Bundle.entry.resource のリソース ID を上書きします。この動作は、ソースデータをバンドルオブジェクトに解析するときに発生します。これが望ましい動作でない場合は、これを false に設定します (たとえば、クライアントコードが fullUrl とリソース ID の間で追加の検証チェックを実行する場合)。 | false | Boolean |
camel.dataformat.fhirxml.pretty-print | プリティプリントフラグを設定します。これは、パーサーが、出力を可能な限り圧縮するのではなく、人間が読めるスペースと要素間の改行でリソースをエンコードすることを意味します。 | false | Boolean |
camel.dataformat.fhirxml.server-base-url | このパーサーが使用するサーバーのベース URL を設定します。値が設定されている場合、リソース参照が絶対 URL として提供されているが、指定されたベースと一致するベースを持っている場合、リソース参照は相対参照に変換されます。 | String | |
camel.dataformat.fhirxml.strip-versions-from-references | true (デフォルト) に設定すると、バージョンを含むリソース参照は、リソースがエンコードされるときにバージョンが削除されます。ほとんどの場合、あるリソースから別のリソースへの参照は、ID とバージョンではなく、ID によってリソースを参照する必要があるため、これは通常は適切な動作です。ただし、場合によっては、リソースリンクでバージョンを保持することが望ましい場合があります。その場合、この値は false に設定する必要があります。このメソッドは、参照エンコーディングをグローバルに無効にする機能を提供します。より細かい制御が必要な場合は、setDontStripVersionsFromReferencesAtPaths(List) を使用します。 | false | Boolean |
camel.dataformat.fhirxml.summary-mode | true に設定すると (デフォルトは false)、FHIR 仕様によって要約要素としてマークされた要素のみが含まれます。 | false | Boolean |
camel.dataformat.fhirxml.suppress-narratives | true に設定すると (デフォルトは false)、物語はエンコードされた値に含まれません。 | false | Boolean |
第24章 File
producer と consumer の両方がサポート対象
File コンポーネントはファイルシステムへのアクセスを提供します。これにより、ファイルを他の Camel コンポーネントで処理したり、他のコンポーネントからのメッセージをディスクに保存したりできます。
24.1. URI 形式
file:directoryName[?options]
directoryName は基礎となるファイルディレクトリーを表します。
ディレクトリーのみ
Camel は、開始ディレクトリーで設定されたエンドポイントのみをサポートします。そのため、directoryName はディレクトリーである必要があります。1 つのファイルのみ使用する場合は、fileName オプションを使用できます (例: fileName=thefilename
)。また、開始ディレクトリーに ${ }
プレースホルダーを使用した動的な式を含めることはできません。ここでも、fileName
オプションを使用してファイル名の動的部分を指定します。
別のアプリケーションによって書き込まれている最中のファイルの読み取りは回避してください。
JDK File IO API は、別のアプリケーションがファイルに対して書き込み/コピーを実行している最中かどうかの検出に少し制限があることに注意してください。実装は、OS プラットフォームによっても異なる場合があります。これにより、別のプロセスでロックされていないと Camel が判断して消費を開始する可能性があります。したがって、お使いの環境に何が適しているかを独自に調査する必要があります。これを支援するために、Camel では、使用できるさまざまな readLock
オプションと doneFileName
オプションを提供しています。Consuming files from folders where others drop files directly セクションも参照してください。
24.2. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
24.2.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
24.2.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
24.3. コンポーネントオプション
File コンポーネントは、以下に示す 3 つのオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
24.4. エンドポイントオプション
File エンドポイントは、URI 構文を使用して設定されます。
file:directoryName
パスおよびクエリーパラメーターを使用します。
24.4.1. パスパラメーター(1 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
directoryName (共通) | 必須: 開始ディレクトリー | File |
24.4.2. クエリーパラメーター (94 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
charset (共通) | このオプションは、ファイルのエンコーディングを指定するために使用されます。consumer でこれを使用して、ファイルのエンコーディングを指定できます。これにより、Camel は、ファイルコンテンツがアクセスされている場合にファイルコンテンツをロードする必要がある charset を知ることができます。ファイルを書き込む場合も同様に、このオプションを使用して、ファイルを書き込む charset を指定できます。ファイルを書き込むとき、Camel はメッセージの内容をメモリーに読み込んで、データを設定された charset に変換できるようにする必要があることに注意してください。つまり、メッセージが大きい場合は、これを使用しないでください。 | String | |
doneFileName (共通) | Producer: 指定された場合、元のファイルが書き込まれると、Camel は 2 番目の完了ファイルを書き込みます。完了ファイルは空になります。このオプションは、使用するファイル名を設定します。固定の名前を指定できます。または、動的プレースホルダーを使用することもできます。完了ファイルは、常に元のファイルと同じフォルダーに書き込まれます。Consumer: 指定すると、Camel は完了ファイルが存在する場合にのみファイルを消費します。このオプションは、使用するファイル名を設定します。固定の名前を指定できます。または、動的なプレースホルダーを使用できます。完了ファイルは、常に元のファイルと同じフォルダーにあると想定されます。$\\{file.name} と $\\{file.name.next} のみが動的プレースホルダーとしてサポートされています。 | String | |
fileName (共通) | File Language などの式を使用して、ファイル名を動的に設定します。consumer の場合は、ファイル名フィルターとして使用されます。producer の場合、書き込むファイル名を評価するために使用されます。式が設定されている場合は、CamelFileName ヘッダーよりも優先されます。(注: ヘッダー自体を式にすることもできます)。式オプションは String タイプと Expression タイプの両方をサポートします。式が String タイプである場合、これは常にファイル言語を使用して評価されます。式が Expression タイプである場合、指定された Expression タイプが使用されます。これにより、たとえば OGNL 式を使用できます。consumer の場合、これを使用してファイル名をフィルターリングできるため、たとえば、ファイル言語構文 mydata-$\\{date:now:yyyyMMdd}.txt を使用して今日のファイルを消費できます。producer は、既存の CamelFileName ヘッダーよりも優先される CamelOverruleFileName ヘッダーをサポートします。CamelOverruleFileName は一度だけ使用されるヘッダーであり、CamelFileName を一時的に保存して後で復元する必要がなくなるため、簡単になります。 | String | |
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
delete (consumer) | true の場合、ファイルは正常に処理された後に削除されます。 | false | boolean |
moveFailed (consumer) | Simple 言語に基づいて move failure 式を設定します。たとえば、ファイルを .error サブディレクトリーに移動するには、.error を使用します。注: ファイルを失敗したロケーションに移動すると、Camel はエラーを処理し、ファイルを再度取得しません。 | String | |
noop (consumer) | true の場合、ファイルは移動または削除されません。このオプションは、読み取り専用データまたは ETL タイプの要件に適しています。noop=true の場合、Camel は idempotent=true も設定し、同じファイルを繰り返し消費しないようにします。 | false | boolean |
preMove (consumer) | 処理前に移動する場合にファイル名を動的に設定するために使用される式 (File 言語など)。たとえば、進行中のファイルを order ディレクトリーに移動するには、この値を order に設定します。 | String | |
preSort (consumer) | pre-sort が有効になっている場合、consumer はポーリング中に、ファイルシステムから取得されたファイル名とディレクトリー名を並べ替えます。ソートされた順序でファイルを操作する必要がある場合に、これを行うことができます。pre-sort は、consumer がフィルターリングを開始する前に実行され、Camel によって処理されるファイルを受け入れます。このオプション default=false で無効になっています。 | false | boolean |
recursive (consumer) | ディレクトリーの場合は、すべてのサブディレクトリー内のファイルも検索します。 | false | boolean |
sendEmptyMessageWhenIdle (consumer) | ポーリング consumer がファイルをポーリングしなかった場合、このオプションを有効にして、代わりに空のメッセージ (ボディーなし) を送信できます。 | false | boolean |
directoryMustExist (consumer (上級)) | startingDirectoryMustExist オプションと同様ですが、これはポーリング中に適用されます (consumer の起動後)。 | false | boolean |
exceptionHandler (consumer (上級)) | consumer によるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、consumer は例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
exchangePattern (consumer (上級)) | consumer がエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
extendedAttributes (consumer (上級)) | 対象のファイル属性を定義します。posix:permissions,posix:owner,basic:lastAccessTime と同様に、posix:、basic:lastAccessTime などの基本的なワイルドカードをサポートします。 | String | |
inProgressRepository (consumer (上級)) | プラグ可能な in-progress リポジトリー org.apache.camel.spi.IdempotentRepository。in-progress リポジトリーは、現在進行中のファイルが消費されていることを示すために使用されます。デフォルトでは、メモリーベースのリポジトリーが使用されます。 | IdempotentRepository | |
localWorkDirectory (consumer (上級)) | 使用する場合、ローカルの作業ディレクトリーを使用して、リモートファイルのコンテンツをローカルファイルに直接保存し、コンテンツがメモリーに読み込まれないようにできます。これは、非常に大きなリモートファイルを使用している場合に、メモリーを節約するために役立ちます。 | String | |
onCompletionExceptionHandler (consumer (上級)) | カスタム org.apache.camel.spi.ExceptionHandler を使用して、consumer がコミットまたはロールバックを実行する完了プロセスのファイル中に出力される例外を処理します。デフォルトの実装は、WARN レベルですべての例外をログに記録し、無視します。 | ExceptionHandler | |
pollStrategy (consumer (上級)) | プラグ可能な org.apache.camel.PollingConsumerPollingStrategy を使用すると、エクスチェンジが作成され、Camel でルーティングされる前に、通常はポーリング操作中に発生するエラー処理を制御するカスタム実装が提供できます。 | PollingConsumerPollStrategy | |
probeContentType (consumer (上級)) | コンテンツタイプのプローブを有効にするかどうか。有効な場合、consumer は Files#probeContentType(java.nio.file.Path) を使用してファイルのコンテンツタイプを判断し、それをキー Exchange#FILE_CONTENT_TYPE を持つヘッダーとしてメッセージに格納します。 | false | boolean |
processStrategy (consumer (上級)) | プラグ可能な org.apache.camel.component.file.GenericFileProcessStrategy を使用すると、独自の readLock オプションまたは同様のものを実装できます。特別な準備完了ファイルが存在するなど、ファイルを使用する前に特別な条件を満たす必要がある場合にも使用できます。このオプションを設定すると、readLock オプションは適用されません。 | GenericFileProcessStrategy | |
resumeStrategy (consumer (上級)) | ファイルの再開戦略を設定します。これにより、アプリケーションを停止する前に、最後のポイントの後にファイルの読み取りを再開するための戦略を定義できます。実装の詳細については、FileConsumerResumeStrategy を参照してください。 | FileConsumerResumeStrategy | |
startingDirectoryMustExist (consumer (上級)) | 開始ディレクトリーの存在が必要かどうか。autoCreate オプションがデフォルトで有効になっていることに注意してください。これは、開始ディレクトリーが存在しない場合、通常は自動作成されることを意味します。autoCreate を無効にして有効にすると、開始ディレクトリーの存在が必要なことを確認できます。ディレクトリーが存在しない場合は例外が発生します。 | false | boolean |
startingDirectoryMustHaveAccess (consumer (上級)) | 開始ディレクトリーにアクセス権があるかどうか。ディレクトリーが存在することを確認するには、startDirectoryMustExist パラメーターを true に設定する必要があります。ディレクトリーに読み取りおよび書き込みパーミッションがない場合は例外が発生します。 | false | boolean |
appendChars (producer) | ファイルの書き込み後に文字 (テキスト) を追加するために使用されます。たとえば、新規ファイルや既存ファイルを書き込んで追加する際に、新しい行やその他のセパレーターを追加するために使用できます。改行 (slash-n または slash-r) またはタブ (slash-t) 文字を指定するには、slash-slash-n のように追加のスラッシュでエスケープします。 | String | |
fileExist (producer) | 同じ名前のファイルがすでに存在する場合のアクション。デフォルトの上書きは、既存のファイルを置き換えます。- 追加 - 既存のファイルにコンテンツを追加します。- 失敗 - 既存のファイルがすでに存在することを示す GenericFileOperationException を出力します。- 無視 - 問題を黙って無視し、既存のファイルを上書きしませんが、すべて問題ないと想定します。- 移動 - オプションを設定するには、moveExisting オプションも使用する必要があります。オプション eagerDeleteTargetFile を使用して、ファイルを移動する際に既存ファイルが存在する場合に何をすべきか制御でき、そうでない場合は移動操作が失敗します。移動オプションは、ターゲットファイルを書き込む前に、既存のファイルを移動します。- TryRename は、tempFileName オプションが使用されている場合にのみ適用されます。これにより、存在チェックを実行せずに、一時的なファイル名から実際のファイル名への変更を試みることができます。このチェックは、一部のファイルシステム、特に FTP サーバーでは高速になる場合があります。 列挙値:
| オーバーライド | GenericFileExist |
flatten (producer) | flatten は、ファイル名パスをフラット化して先頭のパスを削除するために使用されるので、ファイル名だけになります。これにより、サブディレクトリーに再帰的に使用できますが、たとえばファイルを別のディレクトリーに書き込む場合、ファイルは単一のディレクトリーに書き込まれます。これを producer で true に設定すると、CamelFileName ヘッダーのファイル名が先頭パスから削除されます。 | false | boolean |
jailStartingDirectory (producer) | ファイルの書き込みを開始ディレクトリー (およびサブ) のみに拘束 (制限) するために使用されます。これはデフォルトで有効になっており、Camel は外部ディレクトリーにファイルを書き込むことができません (そのままでセキュアにするため)。無効にすると、親フォルダーやルートフォルダーなど、開始ディレクトリー以外のディレクトリーにファイルを書き込むことができます。 | true | boolean |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
moveExisting (producer) | fileExist=Move が設定されている場合に使用するファイル名の計算に使用される式 (File 言語など)。ファイルをバックアップサブディレクトリーに移動するには、backup と入力します。このオプションは、file:name、file:name.ext、file:name.noext、file:onlyname、file:onlyname.noext、file:ext、および file:parent の File Language トークンのみをサポートします。FTP コンポーネントでは file:parent がサポートされていないことに注意してください。FTP コンポーネントは、既存のファイルを現在のディレクトリーをベースとする相対ディレクトリーにしか移動できないためです。 | String | |
tempFileName (producer) | tempPrefix オプションと同じですが、ファイル言語を使用するため、一時ファイル名の命名をより細かく制御できます。tempFilename の場所は、ベース uri のターゲットディレクトリーではなく、オプション 'fileName' の最終的なファイルの場所に相対的です。たとえば、オプション fileName にディレクトリー 接頭辞が含まれている場合: dir/finalFilename の場合、tempFileName はそのサブディレクトリー dir に対して相対的です。 | String | |
tempPrefix (producer) | このオプションは、一時的な名前を使用してファイルを書き込み、書き込みが完了した後に、その名前を実際の名前に変更するために使用されます。書き込み中のファイルを識別し、(排他的読み取りロックを使用せずに) consumer が進行中のファイルを読み取らないようにするために使用できます。大きなファイルをアップロードするときに FTP でよく使用されます。 | String | |
allowNullBody (producer (上級)) | ファイルの書き込み中に null の本文を許可するかどうかを指定するために使用されます。true に設定すると空のファイルが作成され、false に設定して null の本文をファイルコンポーネントに送信しようとすると、Cannot write null body to file.という GenericFileWriteException が出力されます。fileExist オプションを Override に設定するとファイルは切り捨てられ、append に設定するとファイルは変更されません。 | false | boolean |
chmod (producer (上級)) | producer によって送信されるファイルパーミッションを指定します。chmod の値は 000 から 777 の間の値である必要があります。0755 のように先頭に数字がある場合は無視します。 | String | |
chmodDirectory (producer (上級)) | 不足しているディレクトリーを producer が作成するときに使用するディレクトリーパーミッションを指定します。chmod 値は 000 から 777 の間である必要があります。0755 のように先頭に数字がある場合は無視します。 | String | |
eagerDeleteTargetFile (producer (上級)) | 既存のターゲットファイルを積極的に削除するかどうか。このオプションは、fileExists=Override および tempFileName オプションを使用している場合にのみ適用されます。これを使用して、一時ファイルが書き込まれる前にターゲットファイルを削除することを無効化 (false に設定) できます。たとえば、大きなファイルを書き込んで、一時ファイルの書き込み中にターゲットファイルを存在させたい場合があります。これにより、一時ファイルの名前がターゲットファイル名に変更される直前まで、ターゲットファイルは削除されません。このオプションは、fileExist=Move が有効で、既存のファイルが存在する場合に、既存のファイルを削除するかどうかを制御するためにも使用されます。このオプション copyAndDeleteOnRenameFails が false の場合、既存のファイルが存在する場合は例外が出力されます。true の場合、移動操作の前に既存のファイルが削除されます。 | true | boolean |
forceWrites (producer (上級)) | ファイルシステムへの書き込みを強制的に同期するかどうか。たとえばログや監査ログへの書き込みなど、このレベルの保証が必要ない場合はオフにすることでパフォーマンスが向上します。 | true | boolean |
keepLastModified (producer (上級)) | ソースファイル (存在する場合) からの最終変更のタイムスタンプを保持します。Exchange.FILE_LAST_MODIFIED ヘッダーを使用してタイムスタンプを見つけます。このヘッダーには、java.util.Date またはタイムスタンプ付きの long を含めることができます。タイムスタンプが存在し、オプションが有効な場合は、書き込まれたファイルにこのタイムスタンプが設定されます。注記: このオプションは、ファイル producer にのみ適用されます。このオプションは、ftp producer では使用できません。 | false | boolean |
moveExistingFileStrategy (producer (上級)) | fileExist=Move が設定されている場合に使用する特別な命名トークンを持つファイルを移動するために使用されるストラテジー (カスタムストラテジー)。デフォルトでは、カスタムストラテジーが指定されていない場合に使用される実装があります。 | FileMoveExistingStrategy | |
autoCreate (上級) | ファイルのパス名に不足しているディレクトリーを自動的に作成します。ファイル consumer の場合は、開始ディレクトリーを作成することを意味します。ファイル producer の場合、ファイルが書き込まれるディレクトリーを意味します。 | true | boolean |
bufferSize (上級) | ファイルの書き込みに使用されるバッファーサイズ (バイト単位) (または、ファイルのダウンロードとアップロードに使用される FTP の場合)。 | 131072 | int |
copyAndDeleteOnRenameFail (上級) | ファイルの名前を直接変更できなかった場合に、フォールバックしてファイルのコピーと削除を行うかどうか。このオプションは FTP コンポーネントでは使用できません。 | true | boolean |
renameUsingCopy (上級) | コピーおよび削除ストラテジーを使用して名前変更操作を実行します。これは主に、通常の名前変更操作が信頼できない環境で使用されます (たとえば、異なるファイルシステムまたはネットワーク間)。このオプションは、遅延が追加された後に限り、コピーおよび削除ストラテジーに自動的にフォールバックする copyAndDeleteOnRenameFail パラメーターよりも優先されます。 | false | boolean |
synchronous (上級) | 同期処理を厳密に使用するかどうかを設定します。 | false | boolean |
antExclude (filter) | ant スタイルのフィルターの除外。antInclude と antExclude の両方を使用する場合は、antInclude よりも antExclude が優先されます。コンマ区切り形式で複数の除外を指定できます。 | String | |
antFilterCaseSensitive (フィルター) | ant フィルターに大文字と小文字を区別するフラグを設定します | true | boolean |
antInclude (filter) | Ant スタイルフィルターの組み込み。コンマ区切り形式で複数の組み込みを指定できます。 | String | |
eagerMaxMessagesPerPoll (filter) | maxMessagesPerPoll の制限が eager かどうかを制御できます。eager の場合、ファイルのスキャン中に制限されます。false の場合、すべてのファイルをスキャンし、並び替えを実行します。このオプションを false に設定すると、すべてのファイルを最初にソートしてからポーリングを制限できます。ソートのためにすべてのファイルの詳細がメモリー内にあるため、メモリー使用量が大きくなることに注意してください。 | true | boolean |
exclude (filter) | ファイル名が正規表現パターンに一致する場合にファイルを除外するために使用されます (一致は大文字と小文字を区別しません)。プラス記号などのシンボルを使用する場合は、エンドポイント URI としてこれを設定する場合は RAW() 構文を使用して設定する必要があります。詳細はエンドポイント URI の設定を参照してください。 | String | |
excludeExt (フィルター) | ファイル拡張子名 (大文字と小文字を区別しない) に一致するファイルを除外するために使用されます。たとえば、bak ファイルを除外するには、excludeExt=bak を使用します。bak ファイルおよび dat ファイルを除外する場合など、複数の拡張子は excludeExt=bak,dat のようにコンマで区切ることができます。ファイル拡張子にはすべての部分が含まれています。たとえば、mydata.tar.gz という名前のファイルの場合、拡張子は tar.gz になります。より柔軟性を高めるには、include/exclude オプションを使用します。 | String | |
filter (filter) | org.apache.camel.component.file.GenericFileFilter クラスとしてのプラグ可能なフィルター。フィルターがその accept () メソッドで false を返す場合、ファイルをスキップします。 | GenericFileFilter | |
filterDirectory (filter) | Simple 言語に基づいてディレクトリーをフィルターリングします。たとえば、現在の日付でフィルターリングするには、$\\{date:now:yyyMMdd} などの単純な日付パターンを使用できます。 | String | |
filterFile (filter) | Simple 言語に基づいてファイルをフィルターリングします。たとえば、ファイルサイズでフィルターリングするには、$\\{file:size} 5000 を使用できます。 | String | |
idempotent (filter) | Camel が既に処理されたファイルをスキップできるように、Idempotent Consumer EIP パターンを使用するオプション。デフォルトでは、1000 エントリーを保持するメモリーベースの LRUCache を使用します。noop=true の場合は、同じファイルを何度も使用することを回避するため、べき等性も有効になります。 | false | Boolean |
idempotentKey (filter) | カスタムのべき等性キーを使用するには、以下を行います。デフォルトでは、ファイルの絶対パスが使用されます。File 言語を使用できます。たとえば、ファイル名とファイルサイズを使用するには idempotentKey=$\\{file:name}-$\\{file:size} となります。 | String | |
idempotentRepository (フィルター) | プラグイン可能なリポジトリー org.apache.camel.spi.IdempotentRepository は、何も指定されておらずべき等が true の場合、デフォルトで MemoryIdempotentRepository を使用します。 | IdempotentRepository | |
include (filter) | ファイル名が正規表現パターンに一致する場合にファイルを含めるために使用されます (照合では大文字と小文字を区別します)。プラス記号などのシンボルを使用する場合は、エンドポイント URI としてこれを設定する場合は RAW() 構文を使用して設定する必要があります。詳細はエンドポイント URI の設定を参照してください。 | String | |
includeExt (フィルター) | ファイル拡張子名 (大文字と小文字を区別しない) に一致するファイルを含めるために使用されます。たとえば、txt ファイルを含めるには includeExt=txt を使用します。複数の拡張子はコンマで区切ることができます。たとえば、txt ファイルと xml ファイルを含める場合は、includeExt=txt,xml を使用します。ファイル拡張子にはすべての部分が含まれています。たとえば、mydata.tar.gz という名前のファイルの場合、拡張子は tar.gz になります。より柔軟性を高めるには、include/exclude オプションを使用します。 | String | |
maxDepth (filter) | ディレクトリーを再帰的に処理する際にトラバースする最大深度。 | 2147483647 | int |
maxMessagesPerPoll (filter) | ポーリングごとに収集する最大メッセージを定義します。デフォルトでは最大値は設定されていません。たとえば制限を 1000 などに設定して、数千のファイルがあるサーバーの起動を回避できます。無効にするには、0 または負の値を設定します。注記: このオプションが使用されている場合、File および FTP コンポーネントはソート前に制限されます。たとえば、100000 個のファイルがある場合に maxMessagesPerPoll=500 を使用すると、最初の 500 個のファイルのみ選択され、ソートされます。eagerMaxMessagesPerPoll オプションを使用して、これを false に設定すると、最初にすべてのファイルをスキャンし、後でソートできます。 | int | |
minDepth (filter) | ディレクトリーを再帰的に処理する際に処理を開始する最小深度。minDepth=1 はベースディレクトリーを意味します。minDepth=2 は最初のサブディレクトリーを意味します。 | int | |
move (filter) | 処理後に移動する場合にファイル名を動的に設定するために使用される式 (Simple 言語など)。ファイルを .done サブディレクトリーに移動するには、.done と入力します。 | String | |
exclusiveReadLockStrategy (lock) | org.apache.camel.component.file.GenericFileExclusiveReadLockStrategy 実装としてのプラグ可能な読み取りロック。 | GenericFileExclusiveReadLockStrategy | |
readLock (ロック) | ファイルに排他的な読み取りロックがある (つまり、ファイルが進行中または書き込み中ではない) 場合にのみファイルをポーリングするために、consumer が使用します。Camel はファイルロックが許可されるまで待機します。このオプションは、ストラテジーでビルドを提供します。none: 読み取りロックは使用されていません。markerFile: Camel はマーカーファイル (fileName.camelLock) を作成してロックを保持します。このオプションは、FTP コンポーネント changed では使用できません。changed は、ファイルの長さ/変更のタイムスタンプを使用して、ファイルが現在コピーされているかどうかを検出します。この判断には 1 秒以上かかるため、このオプションは他のオプションほど速くファイルを消費できませんが、JDK IO API はファイルが別のプロセスで使用中かどうか判断できないため、信頼性が高くなります。readLockCheckInterval オプションを使用してチェック頻度を設定できます。fileLock は java.nio.channels.FileLock 用です。このオプションは、Windows OS および FTP コンポーネントでは使用できません。ファイルシステムが分散ファイルロックをサポートしていない限り、マウント/共有によりリモートファイルシステムにアクセスする場合、このアプローチは避ける必要があります。rename: 排他的な読み取りロックを取得できるかどうかのテストとしてファイル名の変更を試みるために使用します。idempotent: (ファイルコンポーネントのみ) 読み取りロックとして idempotentRepository を使用するためのものです。これにより、べき等性リポジトリーの実装がサポートする場合に、クラスターリングをサポートする読み取りロックを使用できます。idempotent-changed: (ファイルコンポーネントのみ) idempotentRepository および changed を結合された read-lock として使用するためのものです。これにより、べき等性リポジトリーの実装がサポートする場合に、クラスターリングをサポートする読み取りロックを使用できます。idempotent-rename: (ファイルコンポーネントのみ) idempotentRepository および rename を結合された読み取りロックとして使用するためのものです。これにより、べき等リポジトリー実装がクラスタリングをサポートする場合、クラスタリングをサポートする読み取りロックを使用できます。注意: さまざまな読み取りロックは、異なるノードの concurrent consumer が共有ファイルシステム上の同じファイルを求めて競合するクラスターモードでの動作にすべて適しているわけではありません。.アトミックに近い操作を使用して空のマーカーファイルを作成する markerFile ですが、クラスターでの動作は保証されていません。fileLock の方が良好に機能しますが、ファイルシステムは分散ファイルロックなどに対応する必要があります。べき等性リポジトリーが Hazelcast コンポーネントや Infinispan などのクラスターリングに対応している場合、べき等性等読み取りロックを使用できます。 列挙値:
| none | String |
readLockCheckInterval (lock) | 読み取りロックでサポートされている場合、読み取りロックの間隔 (ミリ単位)。この間隔は、読み取りロックを取得する試行間のスリープに使用されます。たとえば、changed 読み取りロックを使用する場合、遅い書き込みに対応するために間隔を長く設定できます。デフォルトは 1 秒ですが、producer によるファイルの書き込みが非常に遅い場合は短すぎる可能性があります。注記: FTP の場合、デフォルトの readLockCheckInterval は 5000 です。readLockTimeout の値は readLockCheckInterval よりも大きくする必要がありますが、thumb のルールではタイムアウトは readLockCheckInterval の 2 倍以上にする必要があります。これは、タイムアウトに達する前に読み取りロックプロセスがロックを取得しようとするためのアンブル時間を確保するために必要です。 | 1000 | long |
readLockDeleteOrphanLockFiles (lock) | Camel が適切にシャットダウンされなかった場合 (JVM クラッシュなど)、マーカーファイルを使用した読み取りロックが、ファイルシステムに残っている可能性のある孤立した読み取りロックファイルを起動時に削除する必要があるかどうか。このオプションを false にすると、孤立したロックファイルがあると Camel はそのファイルを取得しようとしなくなります。これは、別のノードが同じ共有ディレクトリーから同時にファイルを読み取っているが原因である可能性もあります。 | true | boolean |
readLockIdempotentReleaseAsync (lock) | 遅延リリースタスクを同期と非同期のどちらにするか。詳細は、readLockIdempotentReleaseDelay オプションを参照してください。 | false | boolean |
readLockIdempotentReleaseAsyncPoolSize (lock) | 非同期リリースタスクを使用する場合の、スケジュール済みスレッドプール内のスレッドの数。デフォルトの 1 コアスレッドの使用で、ほとんどすべてのユースケースに対応できます。べき等リポジトリーの更新が遅い場合、または処理するファイルが多い場合にのみ、より高い値に設定してください。readLockIdempotentReleaseExecutorService オプションを設定して共有スレッドプールを使用する場合、このオプションは使用されません。詳細は、readLockIdempotentReleaseDelay オプションを参照してください。 | int | |
readLockIdempotentReleaseDelay (lock) | リリースタスクをミリ秒遅らせるかどうか。これを使用して、共有べき等性リポジトリーを使用するアクティブ/アクティブクラスターシナリオで、ファイルに読み取りロックが適用されていると見なされる場合にウィンドウを拡張するリリースタスクを遅らせることができます。そうすることで、競合条件により、他のノードは同じファイルをスキャンして取得できくなります。リリースタスクの期間を拡張することで、このような状況を防ぐことができます。readLockRemoveOnCommit を true に設定した場合にのみ、遅延が必要になることに注意してください。 | int | |
readLockIdempotentReleaseExecutorService (lock) | 非同期リリースタスクにカスタムおよび共有スレッドプールを使用します。詳細は、readLockIdempotentReleaseDelay オプションを参照してください。 | ScheduledExecutorService | |
readLockLoggingLevel (lock) | 読み取りロックを取得できなかったときに使用されるロギングレベル。デフォルトでは、DEBUG がログに記録されます。このレベルを変更できます。たとえば、ログを記録しないように OFF に設定できます。このオプションを適用できる readLock タイプは、changed、fileLock、idempotent、idempotent-changed、idempotent-rename、rename のみです。 列挙値:
| DEBUG | LoggingLevel |
readLockMarkerFile (lock) | changed、rename、exclusive の読み取りロックタイプでマーカーファイルを使用するかどうか。デフォルトでは、他のプロセスが同じファイルを取得するのを防ぐために、マーカーファイルも使用されます。このオプションを false に設定すると、この動作をオフにできます。たとえば、Camel アプリケーションによってマーカーファイルをファイルシステムに書き込みたくない場合などです。 | true | boolean |
readLockMinAge (lock) | このオプションは、readLock=changed の場合にのみ適用されます。読み取りロックを取得しようとする前に、ファイルが経過しなければならない最小期間を指定できます。たとえば、readLockMinAge=300s を使用して、ファイルに 5 分以上の経過を要求します。これにより、指定された期間以上のファイルの取得を試みるため、changed 読み取りロックが高速化されます。 | 0 | long |
readLockMinLength (lock) | このオプションは、readLock=changed の場合にのみ適用されます。最小ファイル長を設定できます。デフォルトで Camel はファイルにデータが含まれていると想定するため、デフォルト値は 1 です。このオプションをゼロに設定すると、長さがゼロのファイルを使用できます。 | 1 | long |
readLockRemoveOnCommit (lock) | このオプションは、readLock=idempotent にのみ適用されます。ファイル処理に成功し、コミットが行われるときに、べき等性リポジトリーからファイル名のエントリーを削除するかどうかを指定できます。デフォルトはファイルは削除されないため、競合状態が発生せず、別のアクティブなノードがファイルを取得しようとする可能性があります。代わりにべき等性リポジトリーは、X 分後にファイル名のエントリーをエビクトするように設定するエビクションストラテジーをサポートする場合があります。これにより、競合状態の問題がなくなります。詳細は、readLockIdempotentReleaseDelay オプションを参照してください。 | false | boolean |
readLockRemoveOnRollback (lock) | このオプションは、readLock=idempotent にのみ適用されます。ファイル処理に失敗し、ロールバックが発生するときに、べき等性リポジトリーからファイル名のエントリーを削除するかどうかを指定できます。このオプションが false の場合、ファイル名のエントリーが (ファイルがコミットされたかのように) 確認されます。 | true | boolean |
readLockTimeout (lock) | 読み取りロックでサポートされている場合、読み取りロックのオプションのタイムアウト (ミリ秒単位)。読み取りロックを許可できず、タイムアウトがトリガーされた場合、Camel はファイルをスキップします。次のポーリングで、Camel はファイルを再試行します。このときに、読み取りロックが許可される可能性があります。無期限を指定するには、0 以下の値を使用します。現在、fileLock、changed、および rename がタイムアウトに対応しています。注記: FTP の場合、デフォルトの readLockTimeout 値は 10000 ではなく 20000 です。readLockTimeout の値は readLockCheckInterval よりも大きくする必要がありますが、thumb のルールではタイムアウトは readLockCheckInterval の 2 倍以上にする必要があります。これは、タイムアウトに達する前に読み取りロックプロセスがロックを取得しようとするためのアンブル時間を確保するために必要です。 | 10000 | long |
backoffErrorThreshold (scheduler) | backoffMultipler が開始する前に発生する必要がある後続のエラーポーリング (エラーによって失敗した) の数。 | int | |
backoffIdleThreshold (scheduler) | backoffMultipler が開始する前に発生する必要がある後続のアイドルポーリングの数。 | int | |
backoffMultiplier (scheduler) | 後続のアイドル状態/エラーが連続して発生した場合に、スケジュールされたポーリング consumer のバックオフを許可します。乗数は、実際に次の試行が行われる前にスキップされるポーリングの数です。このオプションが使用されている場合は、backoffIdleThreshold や backoffErrorThreshold も設定する必要があります。 | int | |
delay (scheduler) | 次のポーリングまでの時間 (ミリ秒単位)。 | 500 | long |
greedy (scheduler) | greedy が有効で、以前の実行が 1 つ以上のメッセージをポーリングした場合、ScheduledPollConsumer は即座に再度実行されます。 | false | boolean |
initialDelay (scheduler) | 最初のポーリングが開始されるまでの時間 (ミリ秒単位)。 | 1000 | long |
repeatCount (スケジューラー) | 実行の最大数を指定します。そのため、これを 1 に設定するとスケジューラーは 1 度だけ実行されます。これを 5 に設定した場合、5 回だけ実行されます。0 または負の値を設定すると、無制限に実行されます。 | 0 | long |
runLoggingLevel (scheduler) | consumer はポーリング時に開始/完了のログ行を記録します。このオプションを使用すると、ログレベルを設定できます。 列挙値:
| TRACE | LoggingLevel |
scheduledExecutorService (scheduler) | consumer に使用するカスタム/共有スレッドプールを設定できます。デフォルトでは、各 consumer に独自の単一スレッドのスレッドプールがあります。 | ScheduledExecutorService | |
scheduler (スケジューラー) | camel-spring または camel-quartz コンポーネントから cron スケジューラーを使用します。スケジューラーにビルドされた値 spring または quartz を使用。 | none | オブジェクト |
schedulerProperties (スケジューラー) | カスタムスケジューラーまたは Quartz や Spring ベースのスケジューラーを使用する場合に、追加のプロパティーを設定します。 | マップ | |
startScheduler (scheduler) | スケジューラーを自動起動するかどうか。 | true | boolean |
timeUnit (scheduler) | initialDelay および delay オプションの時間単位。 列挙値:
| MILLISECONDS | TimeUnit |
useFixedDelay (scheduler) | 固定遅延または固定レートを使用するかどうかを制御します。詳細は、JDK の ScheduledExecutorService を参照してください。 | true | boolean |
シャッフル (並べ替え) | ファイルの一覧をシャッフルします (ランダムな順序でのソート) | false | boolean |
sortBy (sort) | File 言語を使用したビルトインソート。ネストされたソートをサポートしているため、ファイル名でのソートと、2 つ目のグループとして変更日でソートできます。 | String | |
sorter (sort) | java.util.Comparator クラスとしてのプラグ可能なソーター。 | Comparator |
ファイル producer のデフォルト動作
デフォルトでは、同じ名前の既存ファイルが存在する場合は、既存ファイルをオーバーライドします。
24.5. 移動および削除操作
移動または削除操作は、ルーティングが完了した後 (ポストコマンド) に実行されます。そのため、Exchange
の処理中、ファイルはまだ受信トレイフォルダーにあります。
これを例で説明しましょう。
from("file://inbox?move=.done").to("bean:handleOrder");
ファイルが inbox
フォルダーにドロップされると、ファイルconsumer はこれに気づき、handleOrder
Bean にルーティングされる新しい FileExchange
を作成します。次に、Bean は File
オブジェクトを処理します。この時点で、ファイルはまだ inbox
フォルダーにあります。Bean が完了してルートが完了すると、file consumer は移動操作を実行し、ファイルを .done
サブフォルダーに移動します。
move および preMove オプションは、ディレクトリー名と見なされます (ただし、File 言語 や Simple などの式を使用する場合は、式の評価結果が使用されるファイル名になります。たとえば、以下を設定する場合、
move=../backup/copy-of-${file:name}
次に、使用する File 言語で、使用するファイル名を返します)。これは、相対または絶対パスのいずれかです。相対の場合、ディレクトリーは、ファイルが消費されたフォルダー内のサブフォルダーとして作成されます。
デフォルトでは、Camel は消費されたファイルを、ファイルが消費されたディレクトリーに相対的な .camel
サブフォルダーに移動します。
処理後にファイルを削除する場合、ルートは次のようになります。
from("file://inbox?delete=true").to("bean:handleOrder");
処理 前 にファイルを移動する 事前 移動操作が導入されました。これにより、処理される前にこのサブフォルダーに移動されるときに、どのファイルがスキャンされたかをマークできます。
from("file://inbox?preMove=inprogress").to("bean:handleOrder");
pre の動きと通常の動きを組み合わせることができます。
from("file://inbox?preMove=inprogress&move=.done").to("bean:handleOrder");
したがって、この状況では、ファイルは処理中は inprogress
フォルダーにあり、処理後は .done
フォルダーに移動されます。
24.6. Move および PreMove オプションのきめ細かな制御
move および preMove オプションは式ベースであるため、ディレクトリーおよび名前パターンの高度な設定を行う File 言語の機能をフルに活用できます。
実際、Camel は、入力したディレクトリー名を File 言語式に内部的に変換します。したがって、move=.done
と入力すると、Camel はこれを ${file:parent}/.done/${file:onlyname}
に変換します。これは、オプション値に $\{ } を指定していないことを Camel が検出した場合にのみ行われます。したがって、$\{ } を入力すると Camel はそれを変換し ない ため、フルパワーを使用できます。
そのため、ファイルを今日の日付をパターンとしてバックアップフォルダーに移動する場合は、次のようにします。
move=backup/${date:now:yyyyMMdd}/${file:name}
24.7. moveFailed について
moveFailed
オプションを使用すると、正常に処理 できなかった ファイルを別の場所 (選択したエラーフォルダーなど) に移動できます。たとえば、エラーフォルダー内のファイルをタイムスタンプ付きで移動するには、moveFailed=/error/${
} を使用できます。
file:name.noext
}-${date:now:yyyyMMddHHmmssSSS}.${\'\'file:ext
で他の例を参照してください
24.8. メッセージヘッダー
このコンポーネントでは、次のヘッダーがサポートされています。
24.8.1. ファイル producer のみ
ヘッダー | 説明 |
---|---|
|
書き込むファイルの名前を指定します (エンドポイントディレクトリーに相対的)。この名前は |
| 書き込まれた出力ファイルの実際の絶対ファイルパス (パス + 名前)。このヘッダーは Camel によって設定され、その目的は、書き込まれたファイルの名前をエンドユーザーに提供することです。 |
|
|
24.8.2. file consumer のみ
ヘッダー | 説明 |
---|---|
| エンドポイントで設定された開始ディレクトリーからのオフセットを含む相対ファイルパスとしての使用済みファイルの名前。 |
| ファイル名のみ (先行パスを含まない名前)。 |
|
消費されたファイルが絶対パスを示すかどうかを指定する |
| ファイルへの絶対パス。相対ファイルの場合、このパスは代わりに相対パスを保持します。 |
| ファイルパス。相対ファイルの場合、これは開始ディレクトリー + 相対ファイル名です。絶対ファイルの場合、これは絶対パスです。 |
| 相対パス。 |
| 親パス。 |
|
ファイルサイズを含む |
|
ファイルの最終変更タイムスタンプを含む |
24.9. バッチ consumer
このコンポーネントは、Batch Consumer を実装します。
24.10. Exchange プロパティー (file consumer のみ)
file consumer は BatchConsumer
を実装するため、ポーリングするファイルのバッチ処理をサポートします。バッチ処理とは、Camel が次の追加プロパティーを Exchange に追加することを意味します。これにより、ポーリングされたファイルの数、現在のインデックス、およびバッチがすでに完了しているかどうかがわかります。
プロパティー | 説明 |
---|---|
| このバッチでポーリングされたファイルの総数。 |
| バッチの現在のインデックス。0 から始まります。 |
|
バッチ内の最後の Exchange を示す |
これにより、たとえば、このバッチに存在するファイルの数を知ることができ、たとえば、Aggregator2 にこの数のファイルを集約させることができます。
24.11. 文字セットの使用
charset オプションを使用すると、producer エンドポイントと consumer エンドポイントの両方でファイルのエンコードを設定できます。たとえば、utf-8 ファイルを読み込んで、ファイルを iso-8859-1 に変換する場合は、次のようにします。
from("file:inbox?charset=utf-8") .to("file:outbox?charset=iso-8859-1")
ルートで convertBodyTo
を使用することもできます。以下の例では、まだ utf-8 形式の入力ファイルがありますが、ファイルの内容を iso-8859-1 形式のバイト配列に変換します。そして、Bean にデータを処理させます。現在の文字セットを使用して送信トレイフォルダーにコンテンツを書き込む前。
from("file:inbox?charset=utf-8") .convertBodyTo(byte[].class, "iso-8859-1") .to("bean:myBean") .to("file:outbox");
consumer エンドポイントで文字セットを省略した場合、Camel はファイルの文字セットを認識せず、デフォルトで UTF-8 を使用します。ただし、キー org.apache.camel.default.charset
を使用して、JVM システムプロパティーをオーバーライドし、別のデフォルトエンコーディングを使用するように設定できます。
以下の例では、ファイルが UTF-8 エンコーディングでない場合、これが問題になる可能性があります。これは、ファイルを読み取るためのデフォルトのエンコーディングです。
この例では、ファイルを書き込むときに、コンテンツはすでにバイト配列に変換されているため、コンテンツをそのまま (さらにエンコーディングせずに) 直接書き込みます。
from("file:inbox") .convertBodyTo(byte[].class, "iso-8859-1") .to("bean:myBean") .to("file:outbox");
キー Exchange.CHARSET_NAME
を使用してエクスチェンジのプロパティーを設定することにより、ファイルの書き込み時に動的なエンコーディングをオーバーライドして制御することもできます。たとえば、以下のルートでは、メッセージヘッダーの値を使用してプロパティーを設定します。
from("file:inbox") .convertBodyTo(byte[].class, "iso-8859-1") .to("bean:myBean") .setProperty(Exchange.CHARSET_NAME, header("someCharsetHeader")) .to("file:outbox");
より単純にすることをお勧めします。同じエンコーディングのファイルをピックアップし、特定のエンコーディングでファイルを書き込みたい場合は、エンドポイントで charset
オプションを使用することをお勧めします。
エンドポイントで charset
オプションを明示的に設定した場合は、Exchange.CHARSET_NAME
プロパティーに関係なく、その設定が使用されることに注意してください。
いくつかの問題がある場合は、org.apache.camel.component.file
で DEBUG ロギングを有効にし、特定の文字セットを使用してファイルを読み書きするときに Camel ログを有効にすることができます。
たとえば、以下のルートでは次のログが記録されます。
from("file:inbox?charset=utf-8") .to("file:outbox?charset=iso-8859-1")
そしてログ:
DEBUG GenericFileConverter - Read file /Users/davsclaus/workspace/camel/camel-core/target/charset/input/input.txt with charset utf-8 DEBUG FileOperations - Using Reader to write file: target/charset/output.txt with charset: iso-8859-1
24.12. フォルダーとファイル名に関するよくある問題
Camel がファイルを生成する (ファイルを書き込む) 場合、選択したファイル名を設定する方法に影響するいくつかの問題があります。デフォルトでは、Camel はメッセージ ID をファイル名として使用します。メッセージ ID は通常、一意に生成された ID であるため、ID-MACHINENAME-2443-1211718892437-1-0
のようなファイル名になります。そのようなファイル名が望ましくない場合は、CamelFileName
メッセージヘッダーにファイル名を指定する必要があります。定数 Exchange.FILE_NAME
も使用できます。
以下のサンプルコードは、メッセージ ID をファイル名として使用してファイルを生成します。
from("direct:report").to("file:target/reports");
report.txt
をファイル名として使用するには、次の手順を実行する必要があります。
from("direct:report").setHeader(Exchange.FILE_NAME, constant("report.txt")).to( "file:target/reports");
-
上記と同じですが、
CamelFileName
を使用します:
from("direct:report").setHeader("CamelFileName", constant("report.txt")).to( "file:target/reports");
そして、fileName URI オプションを使用してエンドポイントにファイル名を設定する構文。
from("direct:report").to("file:target/reports/?fileName=report.txt");
24.13. ファイル名式
ファイル名は、expression オプションを使用するか、CamelFileName
ヘッダーの文字列ベースの File 言語式として設定できます。構文とサンプルについては、File 言語を参照してください。
24.14. 他のユーザーがファイルを直接ドロップしたフォルダーからファイルを消費する
他のアプリケーションがファイルを直接書き込むフォルダーからファイルを使用する場合は注意してください。さまざまな readLock オプションを見て、ユースケースに適したオプションを確認してください。ただし、最善の方法は、別のフォルダーに書き込み、書き込み後にファイルをドロップフォルダーに移動することです。ただし、ファイルをドロップフォルダーに直接書き込む場合、変更されたオプションは、ファイルサイズ/変更が一定期間にわたって変更されたかどうかを確認するためにファイル変更アルゴリズムを使用するため、ファイルが現在書き込み/コピーされているかどうかをより適切に検出できます。他の readLock オプションは Java File API に依存していますが、残念ながら、これは必ずしもこれを検出するのに適しているとは限りません。また、doneFileName オプションを確認することもできます。これは、マーカーファイル (完了ファイル) を使用して、ファイルが完了し、使用する準備が整ったときに通知します。
24.15. 完了ファイルの使用
以下のセクション 書き込み完了ファイル も参照してください。
完了ファイルが存在する場合にのみファイルを使用する場合は、エンドポイントで doneFileName
オプションを使用できます。
from("file:bar?doneFileName=done");
完了した ファイル がターゲットファイルと同じディレクトリーに存在する場合、bar フォルダーのファイルのみを消費します。Camel は、ファイルの消費が完了すると、完了した ファイルを自動的に削除します。noop=true
が設定されている場合、Camel は 完了した ファイルを自動的に削除しません。
ただし、ターゲットファイルごとに 1 つの 完了ファイル を作成する方が一般的です。これは、1:1 の相関があることを意味します。これを行うには、doneFileName
オプションで動的プレースホルダーを使用する必要があります。現在、Camel は次の 2 つの動的トークンをサポートしています: file:name
と file:name.noext
は $\{ } で囲む必要があります。consumer は、done ファイル 名の静的部分のみを接頭辞または接尾辞 (両方ではない) としてサポートします。
from("file:bar?doneFileName=${file:name}.done");
この例では、ファイル名 が .done の完了ファイルが存在する場合にのみ、ファイルがポーリングされます。以下に例を示します。
-
hello.txt
- 使用するファイルです -
hello.txt.done
- 関連する完了ファイルです
次のように、done ファイルの接頭辞を使用することもできます。
from("file:bar?doneFileName=ready-${file:name}");
-
hello.txt
- 使用するファイルです -
ready-hello.txt
- 関連する完了ファイルです
24.16. 完了ファイルの書き込み
ファイルを書き終わったら、ファイルが完成して書き終わったことを他の人に示すために、一種のマーカーとして追加の 完了ファイル を書きたいと思うかもしれません。これを行うには、ファイル producer エンドポイントで doneFileName
オプションを使用できます。
.to("file:bar?doneFileName=done");
ターゲットファイルと同じディレクトリーに done
という名前のファイルを作成するだけです。
ただし、ターゲットファイルごとに 1 つの完了ファイルを作成する方が一般的です。これは、1:1 の相関があることを意味します。これを行うには、doneFileName
オプションで動的プレースホルダーを使用する必要があります。現在、Camel は次の 2 つの動的トークンをサポートしています: file:name
と file:name.noext
は $\{ } で囲む必要があります。
.to("file:bar?doneFileName=done-${file:name}");
たとえば、ターゲットファイルがターゲットファイルと同じディレクトリーにある foo.txt
の場合、done-foo.txt
という名前のファイルを作成します。
.to("file:bar?doneFileName=${file:name}.done");
たとえば、ターゲットファイルがターゲットファイルと同じディレクトリーにある foo.txt
の場合、foo.txt.done
という名前のファイルを作成します。
.to("file:bar?doneFileName=${file:name.noext}.done");
たとえば、ターゲットファイルがターゲットファイルと同じディレクトリーにある foo.txt
の場合、foo.done
という名前のファイルが作成されます。
24.17. サンプル
24.17.1. ディレクトリーから読み取り、別のディレクトリーに書き込む
from("file://inputdir/?delete=true").to("file://outputdir")
24.17.2. オーバーライド動的名を使用して、ディレクトリーから読み取り、別のディレクトリーに書き込みます
from("file://inputdir/?delete=true").to("file://outputdir?overruleFile=copy-of-${file:name}")
ディレクトリーをリッスンし、そこにドロップされた各ファイルのメッセージを作成します。内容を outputdir
にコピーし、inputdir
内のファイルを削除します。
24.17.3. ディレクトリーから再帰的に読み取り、別のディレクトリーに書き込む
from("file://inputdir/?recursive=true&delete=true").to("file://outputdir")
ディレクトリーをリッスンし、そこにドロップされた各ファイルのメッセージを作成します。内容を outputdir
にコピーし、inputdir
内のファイルを削除します。サブディレクトリーに再帰的にスキャンします。サブディレクトリーを含めて、outputdir
内の inputdir
と同じディレクトリー構造にファイルを配置します。
inputdir/foo.txt inputdir/sub/bar.txt
次の出力レイアウトになります。
outputdir/foo.txt outputdir/sub/bar.txt
24.18. フラット化の使用
ファイルを同じディレクトリーの outputdir ディレクトリーに保存する場合に、ソースディレクトリーのレイアウトを無視して (パスをフラット化するなど)、ファイル producer 側で flatten=true
オプションを追加するだけです。
from("file://inputdir/?recursive=true&delete=true").to("file://outputdir?flatten=true")
次の出力レイアウトになります。
outputdir/foo.txt outputdir/bar.txt
24.19. ディレクトリーからの読み取りとデフォルトの移動操作
Camel はデフォルトで、処理されたファイルをファイルが消費されたディレクトリーの .camel
サブディレクトリーに移動します。
from("file://inputdir/?recursive=true&delete=true").to("file://outputdir")
次のようにレイアウトに影響します。
前
inputdir/foo.txt inputdir/sub/bar.txt
after
inputdir/.camel/foo.txt inputdir/sub/.camel/bar.txt outputdir/foo.txt outputdir/sub/bar.txt
24.20. ディレクトリーから読み取り、Java でメッセージを処理する
from("file://inputdir/").process(new Processor() { public void process(Exchange exchange) throws Exception { Object body = exchange.getIn().getBody(); // do some business logic with the input body } });
本文は、inputdir
ディレクトリーにドロップされたばかりのファイルを指す File
オブジェクトになります。
24.21. ファイルへの書き込み
もちろん、Camel はファイルを書き込むこともできます。つまり、ファイルを生成します。以下のサンプルでは、ディレクトリーに書き込まれる前に処理する SEDA キューに関するいくつかのレポートを受け取ります。
24.21.1. Exchange.FILE_NAME
を使用してサブディレクトリーに書き込む
単一のルートを使用して、任意の数のサブディレクトリーにファイルを書き込むことができます。そのようなルート設定がある場合:
<route> <from uri="bean:myBean"/> <to uri="file:/rootDirectory"/> </route>
myBean
でヘッダー Exchange.FILE_NAME
を次のような値に設定できます。
Exchange.FILE_NAME = hello.txt => /rootDirectory/hello.txt Exchange.FILE_NAME = foo/bye.txt => /rootDirectory/foo/bye.txt
これにより、単一のルートでファイルを複数の宛先に書き込むことができます。
24.21.2. 最終宛先に相対的な一時ディレクトリーを介してファイルを書き込む
宛先ディレクトリーからの相対ディレクトリーにファイルを一時的に書き込む必要がある場合があります。このような状況は通常、フィルタリング機能が制限された外部プロセスが、書き込み先のディレクトリーから読み取っているときに発生します。以下の例では、ファイルは /var/myapp/filesInProgress
ディレクトリーに書き込まれ、データ転送が完了すると、原子的に/var/myapp/finalDirectory ディレクトリーに移動されます。
from("direct:start"). to("file:///var/myapp/finalDirectory?tempPrefix=/../filesInProgress/");
24.22. ファイル名に式を使用する
このサンプルでは、今日の日付をサブフォルダー名として使用して、消費されたファイルをバックアップフォルダーに移動します。
from("file://inbox?move=backup/${date:now:yyyyMMdd}/${file:name}").to("...");
その他のサンプルについては、File言語 を参照してください。
24.23. 同じファイルを複数回読み取ることを避ける (べき等 consumer)
Camel は Idempotent Consumer をコンポーネント内で直接サポートしているため、すでに処理されたファイルはスキップされます。この機能は、idempotent=true
オプションを設定することで有効にできます。
from("file://inbox?idempotent=true").to("...");
Camel は絶対ファイル名を冪等キーとして使用して、重複ファイルを検出します。このキーは、idempotentKey オプションで式を使用してカスタマイズできます。たとえば、名前とファイルサイズの両方をキーとして使用するには
<route> <from uri="file://inbox?idempotent=true&idempotentKey=${file:name}-${file:size}"/> <to uri="bean:processInbox"/> </route>
デフォルトでは、Camel は消費されたファイルを追跡するためにインメモリーベースのストアを使用し、最大 1000 エントリーを保持する最も使用頻度の低いキャッシュを使用します。値に # 記号を使用して idempotentRepository
オプションを使用して、指定された id
を持つレジストリー内の Bean を参照していることを示すことにより、このストアの独自の実装をプラグインできます。
<!-- define our store as a plain spring bean --> <bean id="myStore" class="com.mycompany.MyIdempotentStore"/> <route> <from uri="file://inbox?idempotent=true&idempotentRepository=#myStore"/> <to uri="bean:processInbox"/> </route>
以前に消費されたためにファイルをスキップした場合、Camel は DEBUG
レベルでログを記録します。
DEBUG FileConsumer is idempotent and the file has been consumed before. Will skip this file: target\idempotent\report.txt
24.24. ファイルベースの冪等リポジトリーの使用
このセクションでは、デフォルトとして使用されるメモリー内ベースの代わりに、ファイルベースのべき等リポジトリー org.apache.camel.processor.idempotent.FileIdempotentRepository
を使用します。
このリポジトリーは、ファイルリポジトリーの読み取りを回避するために、第 1 レベルのキャッシュを使用します。ファイルリポジトリーのみを使用して、第 1 レベルのキャッシュのコンテンツを格納します。これにより、リポジトリーはサーバーの再起動後も存続できます。起動時にファイルのコンテンツを第 1 レベルのキャッシュにロードします。ファイル内の別々の行にキーを格納するため、ファイル構造は非常に単純です。デフォルトでは、ファイルストアのサイズ制限は 1MB です。ファイルが大きくなると、Camel はファイルストアを切り詰め、第 1 レベルのキャッシュを新しい空のファイルにフラッシュしてコンテンツを再構築します。
ファイルべき等リポジトリーを作成する Spring XML を使用してリポジトリーを設定し、# 記号を使用して idempotentRepository
でリポジトリーを使用するように file consumerを定義して、レジストリールックアップを示します。
24.25. JPA ベースのべき等リポジトリーの使用
このセクションでは、デフォルトとして使用されるメモリー内ベースの代わりに、JPA ベースのべき等リポジトリーを使用します。
まず、クラス org.apache.camel.processor.idempotent.jpa.MessageProcessed
をモデルとして使用する必要がある META-INF/persistence.xml
に persistence-unit が必要です。
<persistence-unit name="idempotentDb" transaction-type="RESOURCE_LOCAL"> <class>org.apache.camel.processor.idempotent.jpa.MessageProcessed</class> <properties> <property name="openjpa.ConnectionURL" value="jdbc:derby:target/idempotentTest;create=true"/> <property name="openjpa.ConnectionDriverName" value="org.apache.derby.jdbc.EmbeddedDriver"/> <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema"/> <property name="openjpa.Log" value="DefaultLevel=WARN, Tool=INFO"/> <property name="openjpa.Multithreaded" value="true"/> </properties> </persistence-unit>
次に、Spring XML ファイルにも JPA べき等リポジトリーを作成できます。
<!-- we define our jpa based idempotent repository we want to use in the file consumer --> <bean id="jpaStore" class="org.apache.camel.processor.idempotent.jpa.JpaMessageIdRepository"> <!-- Here we refer to the entityManagerFactory --> <constructor-arg index="0" ref="entityManagerFactory"/> <!-- This 2nd parameter is the name (= a category name). You can have different repositories with different names --> <constructor-arg index="1" value="FileConsumer"/> </bean>
はい、# 構文オプションを使用して idempotentRepository
を使用して、file consumerエンドポイントで jpaStore Bean を参照する必要があります。
<route> <from uri="file://inbox?idempotent=true&idempotentRepository=#jpaStore"/> <to uri="bean:processInbox"/> </route>
24.26. org.apache.camel.component.file.GenericFileFilter を使用するフィルター
Camel は、プラグイン可能なフィルタリング戦略をサポートしています。次に、そのようなフィルターを使用してエンドポイントを設定し、処理中の特定のファイルをスキップできます。
サンプルでは、ファイル名が skip
で始まるファイルをスキップする独自のフィルターを作成しました。
そして、フィルター 属性を使用してルートを設定し、Spring XML ファイルで定義したフィルターを (# 表記を使用して) 参照できます。
<!-- define our filter as a plain spring bean --> <bean id="myFilter" class="com.mycompany.MyFileFilter"/> <route> <from uri="file://inbox?filter=#myFilter"/> <to uri="bean:processInbox"/> </route>
24.27. ANT パスマッチャーを使用したフィルタリング
ANT パスマッチャーは AntPathMatcher に基づいています。
ファイルパスは、次のルールに一致します。
-
?
1 文字に一致 -
*
0 個以上の文字に一致 -
**
パス内の 0 個以上のディレクトリーに一致
antInclude
および antExclude
オプションを使用すると、フィルターを定義することなく、ANT スタイルの包含/除外を簡単に指定できます。詳細については、上記の URI オプションを参照してください。
以下のサンプルは、その使用方法を示しています。
24.27.1. コンパレータを使用した並べ替え
Camel は、プラグイン可能な並べ替え戦略をサポートしています。この戦略は、Java の java.util.Comparator
でビルドを使用することです。次に、このようなコンパレーターを使用してエンドポイントを設定し、処理する前に Camel にファイルをソートさせることができます。
サンプルでは、ファイル名でソートする独自のコンパレータを作成しました。
次に、sorter オプションを使用してルートを設定し、Spring XML ファイルで定義したソーター (mySorter
) を参照できます。
<!-- define our sorter as a plain spring bean --> <bean id="mySorter" class="com.mycompany.MyFileSorter"/> <route> <from uri="file://inbox?sorter=#mySorter"/> <to uri="bean:processInbox"/> </route>
URI オプションは、# 構文を使用して Bean を参照できます。
上記の Spring DSL アプリケーションでは、id の前に # を付けることで、レジストリー内の Bean を参照できます。したがって、sorter=#mySorter
と記述すると、Camel はレジストリーで ID が mySorter
の Bean を探すように指示されます。
24.27.2. sortBy を使用した並べ替え
Camel は、プラグイン可能な並べ替え戦略をサポートしています。このストラテジーは、File 言語を使用して並べ替えを設定することです。sortBy
オプションは次のように設定されます。
sortBy=group 1;group 2;group 3;...
各グループはセミコロンで区切ります。単純な状況では、1 つのグループのみを使用するため、単純な例は次のようになります。
sortBy=file:name
これはファイル名でソートされます。グループの先頭に reverse:
を付けることで順序を逆にすることができるため、ソートは Z..A: になります。
sortBy=reverse:file:name
File 言語の全機能を使用できるので、他のパラメーターの一部を使用できるので、ファイルサイズで並べ替える場合は、次のようにします。
sortBy=file:length
文字列の比較に ignoreCase:
を使用して、大文字と小文字を区別しないように設定できます。そのため、ファイル名の並べ替えを使用したいが大文字と小文字を区別したくない場合は、次のようにします。
sortBy=ignoreCase:file:name
ignore case と reverse を組み合わせることができますが、reverse を最初に指定する必要があります。
sortBy=reverse:ignoreCase:file:name
以下のサンプルでは、最後に変更されたファイルで並べ替えたいので、次のようにします。
sortBy=file:modified
次に、2 番目のオプションとして名前でグループ化し、同じ変更を含むファイルが名前でソートされるようにします。
sortBy=file:modified;file:name
ここで問題が発生しました。それを見つけることができますか?ファイルの変更されたタイムスタンプはミリ秒単位なので細かすぎますが、日付のみで並べ替えてから名前でサブグループ化したい場合はどうすればよいでしょうか?
File 言語の実際の機能で、パターンをサポートする date コマンドを使用できます。したがって、これは次のように解決できます。
sortBy=date:file:yyyyMMdd;file:name
ええ、それは非常に強力です。ちなみに、グループごとにリバースを使用することもできるので、ファイル名を逆にすることができます。
sortBy=date:file:yyyyMMdd;reverse:file:name
24.28. GenericFileProcessStrategy の使用
オプション processStrategy
を使用して、独自の begin、commit、および rollback ロジックを実装できるカスタム GenericFileProcessStrategy
を使用できます。
たとえば、システムが、使用する必要があるフォルダーにファイルを書き込むと仮定します。ただし、別の 準備完了 ファイルが同様に書き込まれる前に、ファイルの使用を開始しないでください。
したがって、独自の GenericFileProcessStrategy
を実装することで、これを次のように実装できます。
-
begin ()
メソッドでは、特別な 準備完了 ファイルが存在するかどうかをテストできます。begin メソッドはブール値
を返し、ファイルを使用できるかどうかを示します。 -
abort ()
メソッドでは、begin
オペレーションがfalse
を返した場合に、リソースのクリーンアップなどの特別なロジックを実行できます。 -
commit ()
メソッドでは、実際のファイルを移動し、準備完了 ファイルを削除することもできます。
24.29. フィルターの使用
filter
オプションを使用すると、org.apache.camel.component.file.GenericFileFilter
インターフェイスを実装することにより、Java コードでカスタムフィルターを実装できます。このインターフェイスには、ブール値を返す accept
メソッドがあります。ファイルを含めるには true
を返し、ファイルをスキップするには false
を返します。ファイルがディレクトリーであるかどうかにかかわらず、GenericFile
には isDirectory
メソッドがあります。これにより、不要なディレクトリーをフィルタリングして、不要なディレクトリーをたどることを回避できます。
たとえば、名前が "skip"
で始まるディレクトリーをスキップするには、次のように実装できます。
24.30. bridgeErrorHandler の使用
Camel エラーハンドラーを使用して file consumer で発生した例外を処理する場合は、以下に示すように bridgeErrorHandler
オプションを有効にできます。
// to handle any IOException being thrown onException(IOException.class) .handled(true) .log("IOException occurred due: ${exception.message}") .transform().simple("Error ${exception.message}") .to("mock:error"); // this is the file route that pickup files, notice how we bridge the consumer to use the Camel routing error handler // the exclusiveReadLockStrategy is only configured because this is from an unit test, so we use that to simulate exceptions from("file:target/nospace?bridgeErrorHandler=true") .convertBodyTo(String.class) .to("mock:result");
したがって、このオプションを有効にするだけで、ルート内のエラーハンドラーがそこから取得します。
bridgeErrorHandler を使用する場合
bridgeErrorHandler、次にインターセプターを使用する場合、OnCompletions は適用 されません。Exchange は Camel エラーハンドラーによって直接処理され、インターセプターや onCompletion などの前のアクションがアクションを実行することを許可しません。
24.31. デバッグロギング
このコンポーネントには、問題が発生した場合に役立つログレベル TRACE があります。
24.32. Spring Boot Auto-Configuration
Spring Boot でファイルを使用する場合は、自動設定をサポートするために次の Maven 依存関係を使用してください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-file-starter</artifactId> </dependency>
コンポーネントは、以下に記載される 11 のオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.cluster.file.acquire-lock-delay | ロックの取得を開始するまでの待機時間。 | String | |
camel.cluster.file.acquire-lock-interval | ロックの取得を試みるまでの待機時間。 | String | |
camel.cluster.file.attributes | カスタムサービス属性。 | マップ | |
camel.cluster.file.enabled | ファイルクラスターサービスを有効にするかどうかを設定します。デフォルトは false です。 | false | Boolean |
camel.cluster.file.id | クラスターサービス ID。 | String | |
camel.cluster.file.order | サービスルックアップの順序/優先度。 | Integer | |
camel.cluster.file.root | ルートパス。 | String | |
camel.component.file.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.file.bridge-error-handler | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | Boolean |
camel.component.file.enabled | ファイルコンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.file.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
第25章 FTP
producer と consumer の両方がサポート対象
このコンポーネントは、FTP および SFTP プロトコルを介したリモートファイルシステムへのアクセスを提供します。
リモート FTP サーバーから使用する場合は、ファイルの使用に関する詳細について、さらに下の ファイルを使用する場合のデフォルト というタイトルのセクションを必ずお読みください。
絶対パスはサポートされて いません。Camel は、directoryname
から先頭のスラッシュをすべて削除することにより、絶対パスを相対パスに変換します。ログに WARN メッセージが出力されます。
Maven ユーザーは、このコンポーネントの pom.xml
に以下の依存関係を追加する必要があります。
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-ftp</artifactId> <version>{CamelSBVersion}</version>See the documentation of the Apache Commons <!-- use the same version as your Camel core version --> </dependency>
25.1. URI 形式
ftp://[username@]hostname[:port]/directoryname[?options] sftp://[username@]hostname[:port]/directoryname[?options] ftps://[username@]hostname[:port]/directoryname[?options]
directoryname は、基礎となるディレクトリーを表します。ディレクトリー名は相対パスです。絶対パスはサポートされて いません。相対パスには、/inbox/us などのネストされたフォルダーを含めることができます。
autoCreate
オプションがサポートされています。consumer が開始すると、ポーリングがスケジュールされる前に、エンドポイント用に設定されたディレクトリーを作成するために追加の FTP 操作が実行されます。autoCreate
のデフォルト値は true
です。
ユーザー名 が指定されていない場合、パスワードを使用せずに 匿名
ログインが試行されます。
ポート 番号が指定されていない場合、Camel はプロトコル (ftp = 21、sftp = 22、ftps = 2222) に従ってデフォルト値を提供します。
URI には、?option=value&option=value&…
の形式でクエリーオプションを追加できます。
このコンポーネントは、実際の FTP 作業に 2 つの異なるライブラリーを使用します。FTP と FTPS は Apache Commons Net を使用し、SFTP は JCraft JSCH を使用します。
FTPS (FTP セキュアとも呼ばれる) は、Transport Layer Security (TLS) および Secure Sockets Layer (SSL) 暗号化プロトコルのサポートを追加する FTP の拡張機能です。
25.2. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
25.2.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
25.2.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
25.3. コンポーネントオプション
FTP コンポーネントは、以下に示す 3 つのオプションをサポートしています。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
25.4. エンドポイントオプション
MLLP エンドポイントは、URI 構文を使用して設定されます。
ftp:host:port/directoryName
パスおよびクエリーパラメーターを使用します。
25.4.1. パスパラメーター (3 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
host (共通) | 必須 FTP サーバーのホスト名。 | String | |
port (共通) | FTP サーバーのポート | int | |
directoryName (共通) | 開始ディレクトリー | String |
25.4.2. クエリーパラメーター (111 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
binary (共通) | ファイル転送モードを BINARY または ASCII で指定します。デフォルトは ASCII (false) です。 | false | boolean |
charset (共通) | このオプションは、ファイルのエンコーディングを指定するために使用されます。consumer でこれを使用して、ファイルのエンコーディングを指定できます。これにより、Camel は、ファイルコンテンツがアクセスされている場合にファイルコンテンツをロードする必要がある charset を知ることができます。ファイルを書き込む場合も同様に、このオプションを使用して、ファイルを書き込む charset を指定できます。ファイルを書き込むとき、Camel はメッセージの内容をメモリーに読み込んで、データを設定された charset に変換できるようにする必要があることに注意してください。つまり、メッセージが大きい場合は、これを使用しないでください。 | String | |
disconnect (共通) | 使用直後にリモート FTP サーバーから切断するかどうか。切断は、FTP サーバーへの現在の接続のみを切断します。停止したい consumer がある場合は、代わりに consumer/ルートを停止する必要があります。 | false | boolean |
doneFileName (共通) | Producer: 指定された場合、元のファイルが書き込まれると、Camel は 2 番目の完了ファイルを書き込みます。完了ファイルは空になります。このオプションは、使用するファイル名を設定します。固定の名前を指定できます。または、動的プレースホルダーを使用することもできます。完了ファイルは、常に元のファイルと同じフォルダーに書き込まれます。Consumer: 指定すると、Camel は完了ファイルが存在する場合にのみファイルを消費します。このオプションは、使用するファイル名を設定します。固定の名前を指定できます。または、動的なプレースホルダーを使用できます。完了ファイルは、常に元のファイルと同じフォルダーにあると想定されます。$\\{file.name} と $\\{file.name.next} のみが動的プレースホルダーとしてサポートされています。 | String | |
fileName (共通) | File Language などの式を使用して、ファイル名を動的に設定します。consumer の場合は、ファイル名フィルターとして使用されます。producer の場合、書き込むファイル名を評価するために使用されます。式が設定されている場合は、CamelFileName ヘッダーよりも優先されます。(注: ヘッダー自体を式にすることもできます)。式オプションは String タイプと Expression タイプの両方をサポートします。式が String タイプである場合、これは常にファイル言語を使用して評価されます。式が Expression タイプである場合、指定された Expression タイプが使用されます。これにより、たとえば OGNL 式を使用できます。consumer の場合、これを使用してファイル名をフィルターリングできるため、たとえば、ファイル言語構文 mydata-$\\{date:now:yyyyMMdd}.txt を使用して今日のファイルを消費できます。producer は、既存の CamelFileName ヘッダーよりも優先される CamelOverruleFileName ヘッダーをサポートします。CamelOverruleFileName は一度だけ使用されるヘッダーであり、CamelFileName を一時的に保存して後で復元する必要がなくなるため、簡単になります。 | String | |
passiveMode (共通) | パッシブモード接続の設定デフォルトはアクティブモード接続です。 | false | boolean |
separator (共通) | 使用するパス区切りを設定します。UNIX = UNIX スタイルのパス区切りを使用 Windows = Windows スタイルのパス区切りを使用 Auto = (デフォルト) ファイル名に既存のパス区切りを使用します。 列挙値:
| UNIX | PathSeparator |
transferLoggingIntervalSeconds (共通) | 進行中のアップロードおよびダウンロード操作の進行状況をログに記録するときに使用する間隔を秒単位で設定します。これは、操作に時間がかかる場合に進行状況を記録するために使用されます。 | 5 | int |
transferLoggingLevel (共通) | アップロードおよびダウンロード操作の進行状況をログに記録するときに使用するログレベルを設定します。 列挙値:
| DEBUG | LoggingLevel |
transferLoggingVerbose (共通) | がアップロードおよびダウンロード操作の進行状況の詳細な (詳細な) ログを実行するかどうかを設定します。 | false | boolean |
fastExistsCheck (common (上級)) | このオプションを true に設定すると、camel-ftp はリストファイルを直接使用して、ファイルが存在するかどうかを確認します。一部の FTP サーバーはファイルを直接一覧表示することをサポートしていない可能性があるため、オプションが false の場合、camel-ftp は古い方法を使用してディレクトリーを一覧表示し、ファイルが存在するかどうかを確認します。このオプションは、readLock=changed にも影響を与え、ファイル情報を更新するための高速チェックを実行するかどうかを制御します。これは、FTP サーバーに多くのファイルがある場合にプロセスを高速化するために使用できます。 | false | boolean |
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
delete (consumer) | true の場合、ファイルは正常に処理された後に削除されます。 | false | boolean |
moveFailed (consumer) | Simple 言語に基づいて move failure 式を設定します。たとえば、ファイルを .error サブディレクトリーに移動するには、.error を使用します。注: ファイルを失敗したロケーションに移動すると、Camel はエラーを処理し、ファイルを再度取得しません。 | String | |
noop (consumer) | true の場合、ファイルは移動または削除されません。このオプションは、読み取り専用データまたは ETL タイプの要件に適しています。noop=true の場合、Camel は idempotent=true も設定し、同じファイルを繰り返し消費しないようにします。 | false | boolean |
preMove (consumer) | 処理前に移動する場合にファイル名を動的に設定するために使用される式 (File 言語など)。たとえば、進行中のファイルを order ディレクトリーに移動するには、この値を order に設定します。 | String | |
preSort (consumer) | pre-sort が有効になっている場合、consumer はポーリング中に、ファイルシステムから取得されたファイル名とディレクトリー名を並べ替えます。ソートされた順序でファイルを操作する必要がある場合に、これを行うことができます。pre-sort は、consumer がフィルターリングを開始する前に実行され、Camel によって処理されるファイルを受け入れます。このオプション default=false で無効になっています。 | false | boolean |
recursive (consumer) | ディレクトリーの場合は、すべてのサブディレクトリー内のファイルも検索します。 | false | boolean |
resumeDownload (consumer) | ダウンロードの再開を有効にするかどうかを設定します。これは、FTP サーバーでサポートされている必要があります (ほとんどすべての FTP サーバーがサポートしています)。さらに、オプション localWorkDirectory を設定して、ダウンロードしたファイルがローカルディレクトリーに保存されるようにし、オプションバイナリーを有効にする必要があります。これは、ダウンロードの再開をサポートするために必要です。 | false | boolean |
sendEmptyMessageWhenIdle (consumer) | ポーリング consumer がファイルをポーリングしなかった場合、このオプションを有効にして、代わりに空のメッセージ (ボディーなし) を送信できます。 | false | boolean |
streamDownload (consumer) | ローカル作業ディレクトリーを使用しない場合に使用するダウンロード方法を設定します。true に設定すると、リモートファイルは読み取られるときにルートにストリーミングされます。false に設定すると、リモートファイルはルートに送信される前にメモリーにロードされます。このオプションを有効にする場合、両方を同時に有効にすることはできないため、stepwise=false を設定する必要があります。 | false | boolean |
download (consumer (上級)) | FTP consumer がファイルをダウンロードする必要があるかどうか。このオプションが false に設定されている場合、メッセージ本文は null になりますが、consumer はファイル名、ファイルサイズなどのファイルに関する詳細を含む Camel Exchange を引き続きトリガーします。ファイルがダウンロードされないだけです。 | false | boolean |
exceptionHandler (consumer (上級)) | consumer によるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、consumer は例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
exchangePattern (consumer (上級)) | consumer がエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
handleDirectoryParserAbsoluteResult (consumer (上級)) | ディレクトリーパーサーの結果が絶対パスである場合に、consumer がパス内のサブフォルダーとファイルを処理する方法を設定できます。この理由は、一部の FTP サーバーが絶対パスでファイル名を返す場合があるためです。その場合、FTP コンポーネントは返されたパスを相対パスに変換することでこれを処理します。 | false | boolean |
ignoreFileNotFoundOrPermissionError (consumer (上級)) | (ディレクトリー内のファイルを一覧表示しようとするとき、またはファイルをダウンロードするとき)、存在しない場合、またはアクセス許可エラーが原因である場合に無視するかどうか。デフォルトでは、ディレクトリーまたはファイルが存在しないか、権限が不十分な場合、例外が出力されます。このオプションを true に設定すると、代わりにそれを無視できます。 | false | boolean |
inProgressRepository (consumer (上級)) | プラグ可能な in-progress リポジトリー org.apache.camel.spi.IdempotentRepository。in-progress リポジトリーは、現在進行中のファイルが消費されていることを示すために使用されます。デフォルトでは、メモリーベースのリポジトリーが使用されます。 | IdempotentRepository | |
localWorkDirectory (consumer (上級)) | 使用する場合、ローカルの作業ディレクトリーを使用して、リモートファイルのコンテンツをローカルファイルに直接保存し、コンテンツがメモリーに読み込まれないようにできます。これは、非常に大きなリモートファイルを使用している場合に、メモリーを節約するために役立ちます。 | String | |
onCompletionExceptionHandler (consumer (上級)) | カスタム org.apache.camel.spi.ExceptionHandler を使用して、consumer がコミットまたはロールバックを実行する完了プロセスのファイル中に出力される例外を処理します。デフォルトの実装は、WARN レベルですべての例外をログに記録し、無視します。 | ExceptionHandler | |
pollStrategy (consumer (上級)) | プラグ可能な org.apache.camel.PollingConsumerPollingStrategy を使用すると、エクスチェンジが作成され、Camel でルーティングされる前に、通常はポーリング操作中に発生するエラー処理を制御するカスタム実装が提供できます。 | PollingConsumerPollStrategy | |
processStrategy (consumer (上級)) | プラグ可能な org.apache.camel.component.file.GenericFileProcessStrategy を使用すると、独自の readLock オプションまたは同様のものを実装できます。特別な準備完了ファイルが存在するなど、ファイルを使用する前に特別な条件を満たす必要がある場合にも使用できます。このオプションを設定すると、readLock オプションは適用されません。 | GenericFileProcessStrategy | |
useList (consumer (上級)) | ファイルのダウンロード時に LIST コマンドの使用を許可するかどうか。デフォルトは true です。場合によっては、特定のファイルをダウンロードする必要があり、LIST コマンドの使用が許可されていない場合があるため、このオプションを false に設定できます。このオプションを使用する場合、ダウンロードする特定のファイルには、ファイルサイズ、タイムスタンプ、権限などのメタデータ情報が含まれないことに注意してください。これらの情報は、LIST コマンドを使用している場合にのみ取得できるためです。 | true | boolean |
fileExist (producer) | 同じ名前のファイルがすでに存在する場合のアクション。デフォルトの上書きは、既存のファイルを置き換えます。- 追加 - 既存のファイルにコンテンツを追加します。- 失敗 - 既存のファイルがすでに存在することを示す GenericFileOperationException を出力します。- 無視 - 問題を黙って無視し、既存のファイルを上書きしませんが、すべて問題ないと想定します。- 移動 - オプションを設定するには、moveExisting オプションも使用する必要があります。オプション eagerDeleteTargetFile を使用して、ファイルを移動する際に既存ファイルが存在する場合に何をすべきか制御でき、そうでない場合は移動操作が失敗します。移動オプションは、ターゲットファイルを書き込む前に、既存のファイルを移動します。- TryRename は、tempFileName オプションが使用されている場合にのみ適用されます。これにより、存在チェックを実行せずに、一時的なファイル名から実際のファイル名への変更を試みることができます。このチェックは、一部のファイルシステム、特に FTP サーバーでは高速になる場合があります。 列挙値:
| オーバーライド | GenericFileExist |
flatten (producer) | flatten は、ファイル名パスをフラット化して先頭のパスを削除するために使用されるので、ファイル名だけになります。これにより、サブディレクトリーに再帰的に使用できますが、たとえばファイルを別のディレクトリーに書き込む場合、ファイルは単一のディレクトリーに書き込まれます。これを producer で true に設定すると、CamelFileName ヘッダーのファイル名が先頭パスから削除されます。 | false | boolean |
jailStartingDirectory (producer) | ファイルの書き込みを開始ディレクトリー (およびサブ) のみに拘束 (制限) するために使用されます。これはデフォルトで有効になっており、Camel は外部ディレクトリーにファイルを書き込むことができません (そのままでセキュアにするため)。無効にすると、親フォルダーやルートフォルダーなど、開始ディレクトリー以外のディレクトリーにファイルを書き込むことができます。 | true | boolean |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
moveExisting (producer) | fileExist=Move が設定されている場合に使用するファイル名の計算に使用される式 (File 言語など)。ファイルをバックアップサブディレクトリーに移動するには、backup と入力します。このオプションは、file:name、file:name.ext、file:name.noext、file:onlyname、file:onlyname.noext、file:ext、および file:parent の File Language トークンのみをサポートします。FTP コンポーネントでは file:parent がサポートされていないことに注意してください。FTP コンポーネントは、既存のファイルを現在のディレクトリーをベースとする相対ディレクトリーにしか移動できないためです。 | String | |
tempFileName (producer) | tempPrefix オプションと同じですが、ファイル言語を使用するため、一時ファイル名の命名をより細かく制御できます。tempFilename の場所は、ベース uri のターゲットディレクトリーではなく、オプション 'fileName' の最終的なファイルの場所に相対的です。たとえば、オプション fileName にディレクトリー 接頭辞が含まれている場合: dir/finalFilename の場合、tempFileName はそのサブディレクトリー dir に対して相対的です。 | String | |
tempPrefix (producer) | このオプションは、一時的な名前を使用してファイルを書き込み、書き込みが完了した後に、その名前を実際の名前に変更するために使用されます。書き込み中のファイルを識別し、(排他的読み取りロックを使用せずに) consumer が進行中のファイルを読み取らないようにするために使用できます。大きなファイルをアップロードするときに FTP でよく使用されます。 | String | |
allowNullBody (producer (上級)) | ファイルの書き込み中に null の本文を許可するかどうかを指定するために使用されます。true に設定すると空のファイルが作成され、false に設定して null の本文をファイルコンポーネントに送信しようとすると、Cannot write null body to file.という GenericFileWriteException が出力されます。fileExist オプションを Override に設定するとファイルは切り捨てられ、append に設定するとファイルは変更されません。 | false | boolean |
chmod (producer (上級)) | 保存されたファイルに chmod を設定できます。たとえば、chmod=640 です。 | String | |
disconnectOnBatchComplete (producer (上級)) | バッチアップロードが完了した直後にリモート FTP サーバーから切断するかどうか。disconnectOnBatchComplete は、FTP サーバーへの現在の接続のみを切断します。 | false | boolean |
eagerDeleteTargetFile (producer (上級)) | 既存のターゲットファイルを積極的に削除するかどうか。このオプションは、fileExists=Override および tempFileName オプションを使用している場合にのみ適用されます。これを使用して、一時ファイルが書き込まれる前にターゲットファイルを削除することを無効化 (false に設定) できます。たとえば、大きなファイルを書き込んで、一時ファイルの書き込み中にターゲットファイルを存在させたい場合があります。これにより、一時ファイルの名前がターゲットファイル名に変更される直前まで、ターゲットファイルは削除されません。このオプションは、fileExist=Move が有効で、既存のファイルが存在する場合に、既存のファイルを削除するかどうかを制御するためにも使用されます。このオプション copyAndDeleteOnRenameFails が false の場合、既存のファイルが存在する場合は例外が出力されます。true の場合、移動操作の前に既存のファイルが削除されます。 | true | boolean |
keepLastModified (producer (上級)) | ソースファイル (存在する場合) からの最終変更のタイムスタンプを保持します。Exchange.FILE_LAST_MODIFIED ヘッダーを使用してタイムスタンプを見つけます。このヘッダーには、java.util.Date またはタイムスタンプ付きの long を含めることができます。タイムスタンプが存在し、オプションが有効な場合は、書き込まれたファイルにこのタイムスタンプが設定されます。注記: このオプションは、ファイル producer にのみ適用されます。このオプションは、ftp producer では使用できません。 | false | boolean |
moveExistingFileStrategy (producer (上級)) | fileExist=Move が設定されている場合に使用する特別な命名トークンを持つファイルを移動するために使用されるストラテジー (カスタムストラテジー)。デフォルトでは、カスタムストラテジーが指定されていない場合に使用される実装があります。 | FileMoveExistingStrategy | |
sendNoop (producer (上級)) | ファイルを FTP サーバーにアップロードする前に書き込み前チェックとして noop コマンドを送信するかどうか。接続の検証がまだ有効であるため、これはデフォルトで有効になっています。これにより、サイレントに再接続してファイルをアップロードできるようになります。ただし、これにより問題が発生する場合は、このオプションをオフにすることができます。 | true | boolean |
activePortRange (上級) | アクティブモードでクライアント側のポート範囲を設定します。構文は minPort-maxPort です。両方のポート番号が含まれます。たとえば、すべての 1xxxx ポートを含めるには 10000-19999 です。 | String | |
autoCreate (上級) | ファイルのパス名に不足しているディレクトリーを自動的に作成します。ファイル consumer の場合は、開始ディレクトリーを作成することを意味します。ファイル producer の場合、ファイルが書き込まれるディレクトリーを意味します。 | true | boolean |
bufferSize (上級) | ファイルの書き込みに使用されるバッファーサイズ (バイト単位) (または、ファイルのダウンロードとアップロードに使用される FTP の場合)。 | 131072 | int |
connectTimeout (上級) | 接続が確立されるのを待つための接続タイムアウトを設定します。FTPClient と JSCH の両方で使用されます。 | 10000 | int |
ftpClient (上級) | FTPClient のカスタムインスタンスを使用します。 | FTPClient | |
ftpClientConfig (上級) | FTPClientConfig のカスタムインスタンスを使用して、エンドポイントが使用する FTP クライアントを設定するには。 | FTPClientConfig | |
ftpClientConfigParameters (上級) | FtpClientConfig. に追加パラメーターを提供するために FtpComponent によって使用されます。 | マップ | |
ftpClientParameters (上級) | FTPClient に追加のパラメーターを提供するために FtpComponent によって使用されます。 | マップ | |
maximumReconnectAttempts (上級) | Camel がリモート FTP サーバーへの接続を試行するときに実行する再接続の最大試行回数を指定します。この動作を無効にするには、0 を使用します。 | int | |
reconnectDelay (上級) | ミリ秒単位の遅延 Camel は、再接続試行を実行する前に待機します。 | 1000 | long |
siteCommand (上級) | ログインの成功後に実行されるオプションのサイトコマンドを設定します。複数のサイトコマンドは、改行文字を使用して区切ることができます。 | String | |
soTimeout (上級) | SO タイムアウトを設定します FTP および FTPS ミリ秒単位の SocketOptions.SO_TIMEOUT 値です。接続がハングしないように、これを 300000 に設定することをお勧めします。SFTP では、このオプションは JSCH セッションインスタンスのタイムアウトとして設定されます。 | 300000 | int |
stepwise (上級) | ファイルをダウンロードするとき、またはファイルをディレクトリーにアップロードするときに、ファイル構造をトラバースしながらディレクトリーを段階的に変更するかどうかを設定します。たとえば、セキュリティー上の理由で FTP サーバーのディレクトリーを変更できない場合は、これを無効にすることができます。Stepwise は、streamDownload と一緒に使用することはできません。 | true | boolean |
synchronous (上級) | 同期処理を厳密に使用するかどうかを設定します。 | false | boolean |
throwExceptionOnConnectFailed (上級) | 接続が失敗した (使い果たされた) 場合に例外を出力する必要があります。デフォルトでは、例外は出力されず、WARN がログに記録されます。これを使用して、例外の出力を有効にし、org.apache.camel.spi.PollingConsumerPollStrategy ロールバックメソッドから出力された例外を処理できます。 | false | boolean |
timeout (上級) | 応答を待つためのデータタイムアウトを設定します。FTPClient だけが使用します。 | 30000 | int |
antExclude (filter) | ant スタイルのフィルターの除外。antInclude と antExclude の両方を使用する場合は、antInclude よりも antExclude が優先されます。コンマ区切り形式で複数の除外を指定できます。 | String | |
antFilterCaseSensitive (フィルター) | ant フィルターに大文字と小文字を区別するフラグを設定します | true | boolean |
antInclude (filter) | Ant スタイルフィルターの組み込み。コンマ区切り形式で複数の組み込みを指定できます。 | String | |
eagerMaxMessagesPerPoll (filter) | maxMessagesPerPoll の制限が eager かどうかを制御できます。eager の場合、ファイルのスキャン中に制限されます。false の場合、すべてのファイルをスキャンし、並び替えを実行します。このオプションを false に設定すると、すべてのファイルを最初にソートしてからポーリングを制限できます。ソートのためにすべてのファイルの詳細がメモリー内にあるため、メモリー使用量が大きくなることに注意してください。 | true | boolean |
exclude (filter) | ファイル名が正規表現パターンに一致する場合にファイルを除外するために使用されます (一致は大文字と小文字を区別しません)。プラス記号などのシンボルを使用する場合は、エンドポイント URI としてこれを設定する場合は RAW() 構文を使用して設定する必要があります。詳細はエンドポイント URI の設定を参照してください。 | String | |
excludeExt (フィルター) | ファイル拡張子名 (大文字と小文字を区別しない) に一致するファイルを除外するために使用されます。たとえば、bak ファイルを除外するには、excludeExt=bak を使用します。bak ファイルおよび dat ファイルを除外する場合など、複数の拡張子は excludeExt=bak,dat のようにコンマで区切ることができます。ファイル拡張子にはすべての部分が含まれています。たとえば、mydata.tar.gz という名前のファイルの場合、拡張子は tar.gz になります。より柔軟性を高めるには、include/exclude オプションを使用します。 | String | |
filter (filter) | org.apache.camel.component.file.GenericFileFilter クラスとしてのプラグ可能なフィルター。フィルターがその accept () メソッドで false を返す場合、ファイルをスキップします。 | GenericFileFilter | |
filterDirectory (filter) | Simple 言語に基づいてディレクトリーをフィルターリングします。たとえば、現在の日付でフィルターリングするには、$\\{date:now:yyyMMdd} などの単純な日付パターンを使用できます。 | String | |
filterFile (filter) | Simple 言語に基づいてファイルをフィルターリングします。たとえば、ファイルサイズでフィルターリングするには、$\\{file:size} 5000 を使用できます。 | String | |
idempotent (filter) | Camel が既に処理されたファイルをスキップできるように、Idempotent Consumer EIP パターンを使用するオプション。デフォルトでは、1000 エントリーを保持するメモリーベースの LRUCache を使用します。noop=true の場合は、同じファイルを何度も使用することを回避するため、べき等性も有効になります。 | false | Boolean |
idempotentKey (filter) | カスタムのべき等性キーを使用するには、以下を行います。デフォルトでは、ファイルの絶対パスが使用されます。File 言語を使用できます。たとえば、ファイル名とファイルサイズを使用するには idempotentKey=$\\{file:name}-$\\{file:size} となります。 | String | |
idempotentRepository (フィルター) | プラグイン可能なリポジトリー org.apache.camel.spi.IdempotentRepository は、何も指定されておらずべき等が true の場合、デフォルトで MemoryIdempotentRepository を使用します。 | IdempotentRepository | |
include (filter) | ファイル名が正規表現パターンに一致する場合にファイルを含めるために使用されます (照合では大文字と小文字を区別します)。プラス記号などのシンボルを使用する場合は、エンドポイント URI としてこれを設定する場合は RAW() 構文を使用して設定する必要があります。詳細はエンドポイント URI の設定を参照してください。 | String | |
includeExt (フィルター) | ファイル拡張子名 (大文字と小文字を区別しない) に一致するファイルを含めるために使用されます。たとえば、txt ファイルを含めるには includeExt=txt を使用します。複数の拡張子はコンマで区切ることができます。たとえば、txt ファイルと xml ファイルを含める場合は、includeExt=txt,xml を使用します。ファイル拡張子にはすべての部分が含まれています。たとえば、mydata.tar.gz という名前のファイルの場合、拡張子は tar.gz になります。より柔軟性を高めるには、include/exclude オプションを使用します。 | String | |
maxDepth (filter) | ディレクトリーを再帰的に処理する際にトラバースする最大深度。 | 2147483647 | int |
maxMessagesPerPoll (filter) | ポーリングごとに収集する最大メッセージを定義します。デフォルトでは最大値は設定されていません。たとえば制限を 1000 などに設定して、数千のファイルがあるサーバーの起動を回避できます。無効にするには、0 または負の値を設定します。注記: このオプションが使用されている場合、File および FTP コンポーネントはソート前に制限されます。たとえば、100000 個のファイルがある場合に maxMessagesPerPoll=500 を使用すると、最初の 500 個のファイルのみ選択され、ソートされます。eagerMaxMessagesPerPoll オプションを使用して、これを false に設定すると、最初にすべてのファイルをスキャンし、後でソートできます。 | int | |
minDepth (filter) | ディレクトリーを再帰的に処理する際に処理を開始する最小深度。minDepth=1 はベースディレクトリーを意味します。minDepth=2 は最初のサブディレクトリーを意味します。 | int | |
move (filter) | 処理後に移動する場合にファイル名を動的に設定するために使用される式 (Simple 言語など)。ファイルを .done サブディレクトリーに移動するには、.done と入力します。 | String | |
exclusiveReadLockStrategy (lock) | org.apache.camel.component.file.GenericFileExclusiveReadLockStrategy 実装としてのプラグ可能な読み取りロック。 | GenericFileExclusiveReadLockStrategy | |
readLock (ロック) | ファイルに排他的な読み取りロックがある (つまり、ファイルが進行中または書き込み中ではない) 場合にのみファイルをポーリングするために、consumer が使用します。Camel はファイルロックが許可されるまで待機します。このオプションは、ストラテジーでビルドを提供します。none: 読み取りロックは使用されていません。markerFile: Camel はマーカーファイル (fileName.camelLock) を作成してロックを保持します。このオプションは、FTP コンポーネント changed では使用できません。changed は、ファイルの長さ/変更のタイムスタンプを使用して、ファイルが現在コピーされているかどうかを検出します。この判断には 1 秒以上かかるため、このオプションは他のオプションほど速くファイルを消費できませんが、JDK IO API はファイルが別のプロセスで使用中かどうか判断できないため、信頼性が高くなります。readLockCheckInterval オプションを使用してチェック頻度を設定できます。fileLock は java.nio.channels.FileLock 用です。このオプションは、Windows OS および FTP コンポーネントでは使用できません。ファイルシステムが分散ファイルロックをサポートしていない限り、マウント/共有によりリモートファイルシステムにアクセスする場合、このアプローチは避ける必要があります。rename: 排他的な読み取りロックを取得できるかどうかのテストとしてファイル名の変更を試みるために使用します。idempotent: (ファイルコンポーネントのみ) 読み取りロックとして idempotentRepository を使用するためのものです。これにより、べき等性リポジトリーの実装がサポートする場合に、クラスターリングをサポートする読み取りロックを使用できます。idempotent-changed: (ファイルコンポーネントのみ) idempotentRepository および changed を結合された read-lock として使用するためのものです。これにより、べき等性リポジトリーの実装がサポートする場合に、クラスターリングをサポートする読み取りロックを使用できます。idempotent-rename: (ファイルコンポーネントのみ) idempotentRepository および rename を結合された読み取りロックとして使用するためのものです。これにより、べき等リポジトリー実装がクラスタリングをサポートする場合、クラスタリングをサポートする読み取りロックを使用できます。注意: さまざまな読み取りロックは、異なるノードの concurrent consumer が共有ファイルシステム上の同じファイルを求めて競合するクラスターモードでの動作にすべて適しているわけではありません。.アトミックに近い操作を使用して空のマーカーファイルを作成する markerFile ですが、クラスターでの動作は保証されていません。fileLock の方が良好に機能しますが、ファイルシステムは分散ファイルロックなどに対応する必要があります。べき等性リポジトリーが Hazelcast コンポーネントや Infinispan などのクラスターリングに対応している場合、べき等性等読み取りロックを使用できます。 列挙値:
| none | String |
readLockCheckInterval (lock) | 読み取りロックでサポートされている場合、読み取りロックの間隔 (ミリ単位)。この間隔は、読み取りロックを取得する試行間のスリープに使用されます。たとえば、changed 読み取りロックを使用する場合、遅い書き込みに対応するために間隔を長く設定できます。デフォルトは 1 秒ですが、producer によるファイルの書き込みが非常に遅い場合は短すぎる可能性があります。注記: FTP の場合、デフォルトの readLockCheckInterval は 5000 です。readLockTimeout の値は readLockCheckInterval よりも大きくする必要がありますが、thumb のルールではタイムアウトは readLockCheckInterval の 2 倍以上にする必要があります。これは、タイムアウトに達する前に読み取りロックプロセスがロックを取得しようとするためのアンブル時間を確保するために必要です。 | 1000 | long |
readLockDeleteOrphanLockFiles (lock) | Camel が適切にシャットダウンされなかった場合 (JVM クラッシュなど)、マーカーファイルを使用した読み取りロックが、ファイルシステムに残っている可能性のある孤立した読み取りロックファイルを起動時に削除する必要があるかどうか。このオプションを false にすると、孤立したロックファイルがあると Camel はそのファイルを取得しようとしなくなります。これは、別のノードが同じ共有ディレクトリーから同時にファイルを読み取っているが原因である可能性もあります。 | true | boolean |
readLockLoggingLevel (lock) | 読み取りロックを取得できなかったときに使用されるロギングレベル。デフォルトでは、DEBUG がログに記録されます。このレベルを変更できます。たとえば、ログを記録しないように OFF に設定できます。このオプションを適用できる readLock タイプは、changed、fileLock、idempotent、idempotent-changed、idempotent-rename、rename のみです。 列挙値:
| DEBUG | LoggingLevel |
readLockMarkerFile (lock) | changed、rename、exclusive の読み取りロックタイプでマーカーファイルを使用するかどうか。デフォルトでは、他のプロセスが同じファイルを取得するのを防ぐために、マーカーファイルも使用されます。このオプションを false に設定すると、この動作をオフにできます。たとえば、Camel アプリケーションによってマーカーファイルをファイルシステムに書き込みたくない場合などです。 | true | boolean |
readLockMinAge (lock) | このオプションは、readLock=changed の場合にのみ適用されます。読み取りロックを取得しようとする前に、ファイルが経過しなければならない最小期間を指定できます。たとえば、readLockMinAge=300s を使用して、ファイルに 5 分以上の経過を要求します。これにより、指定された期間以上のファイルの取得を試みるため、changed 読み取りロックが高速化されます。 | 0 | long |
readLockMinLength (lock) | このオプションは、readLock=changed の場合にのみ適用されます。最小ファイル長を設定できます。デフォルトで Camel はファイルにデータが含まれていると想定するため、デフォルト値は 1 です。このオプションをゼロに設定すると、長さがゼロのファイルを使用できます。 | 1 | long |
readLockRemoveOnCommit (lock) | このオプションは、readLock=idempotent にのみ適用されます。ファイル処理に成功し、コミットが行われるときに、べき等性リポジトリーからファイル名のエントリーを削除するかどうかを指定できます。デフォルトはファイルは削除されないため、競合状態が発生せず、別のアクティブなノードがファイルを取得しようとする可能性があります。代わりにべき等性リポジトリーは、X 分後にファイル名のエントリーをエビクトするように設定するエビクションストラテジーをサポートする場合があります。これにより、競合状態の問題がなくなります。詳細は、readLockIdempotentReleaseDelay オプションを参照してください。 | false | boolean |
readLockRemoveOnRollback (lock) | このオプションは、readLock=idempotent にのみ適用されます。ファイル処理に失敗し、ロールバックが発生するときに、べき等性リポジトリーからファイル名のエントリーを削除するかどうかを指定できます。このオプションが false の場合、ファイル名のエントリーが (ファイルがコミットされたかのように) 確認されます。 | true | boolean |
readLockTimeout (lock) | 読み取りロックでサポートされている場合、読み取りロックのオプションのタイムアウト (ミリ秒単位)。読み取りロックを許可できず、タイムアウトがトリガーされた場合、Camel はファイルをスキップします。次のポーリングで、Camel はファイルを再試行します。このときに、読み取りロックが許可される可能性があります。無期限を指定するには、0 以下の値を使用します。現在、fileLock、changed、および rename がタイムアウトに対応しています。注記: FTP の場合、デフォルトの readLockTimeout 値は 10000 ではなく 20000 です。readLockTimeout の値は readLockCheckInterval よりも大きくする必要がありますが、thumb のルールではタイムアウトは readLockCheckInterval の 2 倍以上にする必要があります。これは、タイムアウトに達する前に読み取りロックプロセスがロックを取得しようとするためのアンブル時間を確保するために必要です。 | 10000 | long |
backoffErrorThreshold (scheduler) | backoffMultipler が開始する前に発生する必要がある後続のエラーポーリング (エラーによって失敗した) の数。 | int | |
backoffIdleThreshold (scheduler) | backoffMultipler が開始する前に発生する必要がある後続のアイドルポーリングの数。 | int | |
backoffMultiplier (scheduler) | 後続のアイドル状態/エラーが連続して発生した場合に、スケジュールされたポーリング consumer のバックオフを許可します。乗数は、実際に次の試行が行われる前にスキップされるポーリングの数です。このオプションが使用されている場合は、backoffIdleThreshold や backoffErrorThreshold も設定する必要があります。 | int | |
delay (scheduler) | 次のポーリングまでの時間 (ミリ秒単位)。 | 500 | long |
greedy (scheduler) | greedy が有効で、以前の実行が 1 つ以上のメッセージをポーリングした場合、ScheduledPollConsumer は即座に再度実行されます。 | false | boolean |
initialDelay (scheduler) | 最初のポーリングが開始されるまでの時間 (ミリ秒単位)。 | 1000 | long |
repeatCount (スケジューラー) | 実行の最大数を指定します。そのため、これを 1 に設定するとスケジューラーは 1 度だけ実行されます。これを 5 に設定した場合、5 回だけ実行されます。0 または負の値を設定すると、無制限に実行されます。 | 0 | long |
runLoggingLevel (scheduler) | consumer はポーリング時に開始/完了のログ行を記録します。このオプションを使用すると、ログレベルを設定できます。 列挙値:
| TRACE | LoggingLevel |
scheduledExecutorService (scheduler) | consumer に使用するカスタム/共有スレッドプールを設定できます。デフォルトでは、各 consumer に独自の単一スレッドのスレッドプールがあります。 | ScheduledExecutorService | |
scheduler (スケジューラー) | camel-spring または camel-quartz コンポーネントから cron スケジューラーを使用します。スケジューラーにビルドされた値 spring または quartz を使用。 | none | オブジェクト |
schedulerProperties (スケジューラー) | カスタムスケジューラーまたは Quartz や Spring ベースのスケジューラーを使用する場合に、追加のプロパティーを設定します。 | マップ | |
startScheduler (scheduler) | スケジューラーを自動起動するかどうか。 | true | boolean |
timeUnit (scheduler) | initialDelay および delay オプションの時間単位。 列挙値:
| MILLISECONDS | TimeUnit |
useFixedDelay (scheduler) | 固定遅延または固定レートを使用するかどうかを制御します。詳細は、JDK の ScheduledExecutorService を参照してください。 | true | boolean |
アカウント (セキュリティー) | ログインに使用するアカウント。 | String | |
password (セキュリティー) | ログインに使用するパスワード。 | String | |
username (セキュリティー) | ログインに使用するユーザー名。 | String | |
シャッフル (並べ替え) | ファイルの一覧をシャッフルします (ランダムな順序でのソート) | false | boolean |
sortBy (sort) | File 言語を使用したビルトインソート。ネストされたソートをサポートしているため、ファイル名でのソートと、2 つ目のグループとして変更日でソートできます。 | String | |
sorter (sort) | java.util.Comparator クラスとしてのプラグ可能なソーター。 | Comparator |
25.5. FTPS コンポーネントのデフォルトの信頼ストア
ftpClient.
を使用する場合。トラストストアはすべての証明書を受け入れます。トラスト選択証明書のみが必要な場合は、ftpClient.trustStore.xxx
オプションを使用するか、カスタム ftpClient
を設定して、トラストストアを設定する必要があります。
sslContextParameters
を使用する場合、トラストストアは提供された SSLContextParameters インスタンスの設定によって管理されます。
ftpClient
を使用して、URI から直接 ftpClient
および ftpClientConfig
の追加オプションを設定できます。または ftpClientConfig.
接頭辞。
たとえば、FTPClient
の setDataTimeout
を 30 秒に設定するには、次のようにします。
from("ftp://foo@myserver?password=secret&ftpClient.dataTimeout=30000").to("bean:foo");
たとえば、日付形式やタイムゾーンを設定するために、両方の接頭辞を組み合わせて使用することができます。
from("ftp://foo@myserver?password=secret&ftpClient.dataTimeout=30000&ftpClientConfig.serverLanguageCode=fr").to("bean:foo");
これらのオプションはいくつでも使用できます。
可能なオプションと詳細については、Apache Commons FTP FTPClientConfig のドキュメントを参照してください。Apache Commons FTP FTPClient についても同様です。
URL に多くの長い設定を含めるのが気に入らない場合は、キャメルがレジストリーで検索できるようにすることで、使用する ftpClient
または ftpClientConfig
を参照できます。
以下に例を示します。
<bean id="myConfig" class="org.apache.commons.net.ftp.FTPClientConfig"> <property name="lenientFutureDates" value="true"/> <property name="serverLanguageCode" value="fr"/> </bean>
そして、URL で # 表記を使用すると、Camel がこの Bean をルックアップします。
from("ftp://foo@myserver?password=secret&ftpClientConfig=#myConfig").to("bean:foo");
25.6. 例
ftp://someone@someftpserver.com/public/upload/images/holiday2008?password=secret&binary=true ftp://someoneelse@someotherftpserver.co.uk:12049/reports/2008/password=secret&binary=false ftp://publicftpserver.com/download
25.7. 並行処理性
FTP consumer は同時実行をサポートしていません
FTP consumer (同じエンドポイントを持つ) は同時実行をサポートしません (バッキング FTP クライアントはスレッドセーフではありません)。
複数の FTP consumerを使用して、異なるエンドポイントからポーリングできます。concurrent consumer をサポートしないのは、単一のエンドポイントのみです。
FTP producer にはこの問題は なく、並行性がサポートされています。
25.8. 補足情報
このコンポーネントは、File コンポーネントの拡張です。そのため、ファイルコンポーネントページには、より多くのサンプルと詳細があります。
25.9. ファイルを使用するときのデフォルト
FTP consumer は、デフォルトで、消費されたファイルをリモート FTP サーバーにそのまま残します。ファイルを削除したり、別のロケーションに移動したりする場合は、明示的に設定する必要があります。たとえば、delete=true
を使用してファイルを削除したり、move=.done
を使用してファイルを非表示の done サブディレクトリーに移動したりできます。
デフォルトでファイルを .camel
サブディレクトリーに移動するため、通常の File consumer は異なります。Camel が FTP consumer に対してデフォルトでこれを行わ ない 理由は、ファイルを移動または削除できる権限がデフォルトで不足している可能性があるためです。
25.9.1. limitations
オプション readLock を使用して、Camel が現在書き込み中のファイルを消費し ない ようにすることができます。ただし、このオプションは、ユーザーが書き込みアクセス権を持っている必要があるため、デフォルトではオフになっています。読み取りロックの詳細については、File2 のオプションテーブルを参照してください。
現在 FTP 経由で書き込まれているファイルを消費しないようにするための解決策は他にもあります。たとえば、一時的な宛先に書き込み、書き込み後にファイルを移動できます。
move
または preMove
オプションを使用してファイルを移動する場合、ファイルは FTP_ROOT フォルダーに制限されます。これにより、FTP 領域外にファイルを移動できなくなります。ファイルを別の領域に移動する場合は、ソフトリンクを使用してファイルをソフトリンクフォルダーに移動できます。
25.10. メッセージヘッダー
次のメッセージヘッダーを使用して、コンポーネントの動作に影響を与えることができます。
ヘッダー | 説明 |
---|---|
| エンドポイントへの送信時に出力メッセージに使用される出力ファイル名 (エンドポイントディレクトリーに関連する) を指定します。これが存在せず、式もない場合は、代わりに生成されたメッセージ ID がファイル名として使用されます。 |
| 書き込まれた出力ファイルの実際のファイルパス (パス + 名前)。このヘッダーは Camel によって設定され、その目的は、書き込まれたファイルの名前をエンドユーザーに提供することです。 |
| 消費されたファイルのファイル名 |
| リモートホスト名。 |
| ローカル作業ディレクトリーが使用されている場合は、ローカル作業ファイルへのパス。 |
さらに、FTP/FTPS の consumer と producer は、次のヘッダーを使用してキャメル Message
を強化します。
ヘッダー | 説明 |
---|---|
| FTP クライアントの応答コード (型は整数) |
| FTP クライアントの応答文字列 |
25.10.1. エクスチェンジプロパティー
Camel は次の交換プロパティーを設定します
ヘッダー | 説明 |
---|---|
| このバッチで消費されているファイルの総数に対する現在のインデックス。 |
| このバッチで消費されているファイルの総数。 |
| このバッチにこれ以上ファイルがない場合は true。 |
25.11. タイムアウトについて
ライブラリーの 2 つのセット (上を参照) には、タイムアウトを設定するための異なる API があります。どちらにも connectTimeout
オプションを使用して、ミリ秒単位でタイムアウトを設定し、ネットワーク接続を確立できます。個々の soTimeout
は、FTP/FTPS で設定することもできます。これは、ftpClient.soTimeout
の使用に対応します。SFTP は自動的に connectTimeout
を soTimeout
として使用することに注意してください。timeout
オプションは、ftpClient.dataTimeout
値に対応するデータタイムアウトとして FTP/FTPS にのみ適用されます。すべてのタイムアウト値はミリ単位です。
25.12. ローカル作業ディレクトリーの使用
Camel は、リモート FTP サーバーからの消費と、ローカルの作業ディレクトリーへのファイルの直接ダウンロードをサポートしています。これにより、FileOutputStream
を使用してローカルファイルに直接ストリーミングされるため、リモートファイルのコンテンツ全体がメモリーに読み込まれるのを回避できます。
Camel はリモートファイルと同じ名前のローカルファイルに保存しますが、ファイルのダウンロード中は拡張子 .inprogress
が付きます。その後、ファイルの名前が変更され、.inprogress
接尾辞が削除されます。最後に、Exchange が完了すると、ローカルファイルが削除されます。
したがって、リモート FTP サーバーからファイルをダウンロードしてファイルとして保存する場合は、次のようなファイルエンドポイントにルーティングする必要があります。
from("ftp://someone@someserver.com?password=secret&localWorkDirectory=/tmp").to("file://inbox");
上記のルートは、ファイルの内容全体をメモリーに読み込まないようにするため、非常に効率的です。リモートファイルをローカルファイルストリームに直接ダウンロードします。次に、java.io.File
ハンドルが Exchange 本文として使用されます。ファイル producer はこの事実を利用して、作業ファイルの java.io.File
ハンドルを直接操作し、ターゲットファイル名に対して java.io.File.rename
を実行できます。Camel はそれがローカルの作業ファイルであることを認識しているため、作業ファイルはとにかく削除することを意図しているため、最適化してファイルのコピーの代わりに名前の変更を使用できます。
25.13. ディレクトリーを段階的に変更する
Camel FTP は、ファイルの消費時 (ダウンロードなど) またはファイルの生成時 (アップロードなど) にディレクトリーをトラバースするという点で、2 つのモードで動作できます。
- stepwise
- 段階的ではない
状況とセキュリティーの問題に応じて、どちらかを選択することをお勧めします。ステップワイズを使用する場合にのみファイルをダウンロードできる Camel エンドユーザーもいれば、そうでない場合にのみダウンロードできる Camel エンドユーザーもいます。
stepwise
オプションを使用して動作を制御できます。
ディレクトリーの段階的な変更は、ほとんどの場合、ユーザーがそのホームディレクトリーに限定されていて、ホームディレクトリーが "/"
として報告されている場合にのみ機能することに注意してください。
それらの 2 つの違いは、例を使用して最もよく説明されています。ファイルをトラバースしてダウンロードする必要があるリモート FTP サーバーに次のディレクトリー構造があるとします。
/ /one /one/two /one/two/sub-a /one/two/sub-b
そして、サブ a (a.txt) とサブ b (b.txt) フォルダーのそれぞれにファイルがあることを確認します。
25.14. stepwise=true の使用 (デフォルトモード)
TYPE A 200 Type set to A PWD 257 "/" is current directory. CWD one 250 CWD successful. "/one" is current directory. CWD two 250 CWD successful. "/one/two" is current directory. SYST 215 UNIX emulated by FileZilla PORT 127,0,0,1,17,94 200 Port command successful LIST 150 Opening data channel for directory list. 226 Transfer OK CWD sub-a 250 CWD successful. "/one/two/sub-a" is current directory. PORT 127,0,0,1,17,95 200 Port command successful LIST 150 Opening data channel for directory list. 226 Transfer OK CDUP 200 CDUP successful. "/one/two" is current directory. CWD sub-b 250 CWD successful. "/one/two/sub-b" is current directory. PORT 127,0,0,1,17,96 200 Port command successful LIST 150 Opening data channel for directory list. 226 Transfer OK CDUP 200 CDUP successful. "/one/two" is current directory. CWD / 250 CWD successful. "/" is current directory. PWD 257 "/" is current directory. CWD one 250 CWD successful. "/one" is current directory. CWD two 250 CWD successful. "/one/two" is current directory. PORT 127,0,0,1,17,97 200 Port command successful RETR foo.txt 150 Opening data channel for file transfer. 226 Transfer OK CWD / 250 CWD successful. "/" is current directory. PWD 257 "/" is current directory. CWD one 250 CWD successful. "/one" is current directory. CWD two 250 CWD successful. "/one/two" is current directory. CWD sub-a 250 CWD successful. "/one/two/sub-a" is current directory. PORT 127,0,0,1,17,98 200 Port command successful RETR a.txt 150 Opening data channel for file transfer. 226 Transfer OK CWD / 250 CWD successful. "/" is current directory. PWD 257 "/" is current directory. CWD one 250 CWD successful. "/one" is current directory. CWD two 250 CWD successful. "/one/two" is current directory. CWD sub-b 250 CWD successful. "/one/two/sub-b" is current directory. PORT 127,0,0,1,17,99 200 Port command successful RETR b.txt 150 Opening data channel for file transfer. 226 Transfer OK CWD / 250 CWD successful. "/" is current directory. QUIT 221 Goodbye disconnected.
stepwise が有効になるとわかるように、CD xxx を使用してディレクトリー構造をトラバースします。
25.15. stepwise=false の使用
230 Logged on TYPE A 200 Type set to A SYST 215 UNIX emulated by FileZilla PORT 127,0,0,1,4,122 200 Port command successful LIST one/two 150 Opening data channel for directory list 226 Transfer OK PORT 127,0,0,1,4,123 200 Port command successful LIST one/two/sub-a 150 Opening data channel for directory list 226 Transfer OK PORT 127,0,0,1,4,124 200 Port command successful LIST one/two/sub-b 150 Opening data channel for directory list 226 Transfer OK PORT 127,0,0,1,4,125 200 Port command successful RETR one/two/foo.txt 150 Opening data channel for file transfer. 226 Transfer OK PORT 127,0,0,1,4,126 200 Port command successful RETR one/two/sub-a/a.txt 150 Opening data channel for file transfer. 226 Transfer OK PORT 127,0,0,1,4,127 200 Port command successful RETR one/two/sub-b/b.txt 150 Opening data channel for file transfer. 226 Transfer OK QUIT 221 Goodbye disconnected.
stepwise を使用しない場合にわかるように、CD 操作はまったく呼び出されません。
25.16. サンプル
以下のサンプルでは、すべてのレポートを 1 時間 (60 分) ごとに FTP サーバーからバイナリーコンテンツとしてダウンロードし、ローカルファイルシステムにファイルとして保存するように Camel をセットアップします。
XML DSL を使用したルート:
<route> <from uri="ftp://scott@localhost/public/reports?password=tiger&binary=true&delay=60000"/> <to uri="file://target/test-reports"/> </route>
25.16.1. リモート FTPS サーバー (暗黙的 SSL) とクライアント認証の使用
from("ftps://admin@localhost:2222/public/camel?password=admin&securityProtocol=SSL&implicit=true &ftpClient.keyStore.file=./src/test/resources/server.jks &ftpClient.keyStore.password=password&ftpClient.keyStore.keyPassword=password") .to("bean:foo");
25.16.2. リモート FTPS サーバー (明示的な TLS) とカスタム信頼ストア設定の使用
from("ftps://admin@localhost:2222/public/camel?password=admin&ftpClient.trustStore.file=./src/test/resources/server.jks&ftpClient.trustStore.password=password") .to("bean:foo");
25.17. カスタムフィルタリング
Camel は、プラグイン可能なフィルタリング戦略をサポートしています。この戦略は、Java で org.apache.camel.component.file.GenericFileFilter
のビルドを使用することです。次に、そのようなフィルターを使用してエンドポイントを設定し、処理される前に特定のフィルターをスキップできます。
サンプルでは、ファイル名が report で始まるファイルのみを受け入れる独自のフィルターを作成しました。
そして、フィルター 属性を使用してルートを設定し、Spring XML ファイルで定義したフィルターを (# 表記を使用して) 参照できます。
<!-- define our sorter as a plain spring bean --> <bean id="myFilter" class="com.mycompany.MyFileFilter"/> <route> <from uri="ftp://someuser@someftpserver.com?password=secret&filter=#myFilter"/> <to uri="bean:processInbox"/> </route>
25.18. ANT パスマッチャーを使用したフィルタリング
ANT パスマッチャーは、camel-spring jar ですぐに使用できるフィルターです。したがって、Maven を使用している場合は camel-spring に依存する必要があります。
その理由は、Spring の AntPathMatcher を利用して実際のマッチングを行うためです。
ファイルパスは、次のルールに一致します。
-
?
1 文字に一致 -
*
0 個以上の文字に一致 -
**
パス内の 0 個以上のディレクトリーに一致
以下のサンプルは、その使用方法を示しています。
25.19. SFTP でプロキシーを使用する
HTTP プロキシーを使用してリモートホストに接続するには、次の方法でルートを設定できます。
<!-- define our sorter as a plain spring bean --> <bean id="proxy" class="com.jcraft.jsch.ProxyHTTP"> <constructor-arg value="localhost"/> <constructor-arg value="7777"/> </bean> <route> <from uri="sftp://localhost:9999/root?username=admin&password=admin&proxy=#proxy"/> <to uri="bean:processFile"/> </route>
必要に応じて、ユーザー名とパスワードをプロキシーに割り当てることもできます。すべてのオプションについては、com.jcraft.jsch.Proxy
のドキュメントを参照してください。
25.20. 優先 SFTP 認証方式の設定
sftp
コンポーネントで使用する認証方法のリストを明示的に指定する場合は、preferredAuthentications
オプションを使用します。たとえば、Camel にプライベート/パブリック SSH キーで認証を試みさせ、公開キーが利用できない場合にユーザー/パスワード認証にフォールバックさせたい場合は、次のルート設定を使用します。
from("sftp://localhost:9999/root?username=admin&password=admin&preferredAuthentications=publickey,password"). to("bean:processFile");
25.21. 固定名を使用して単一のファイルを使用する
単一のファイルをダウンロードする必要があり、ファイル名がわかっている場合は、fileName=myFileName.txt
を使用して、ダウンロードするファイルの名前を Camel に伝えることができます。デフォルトでは、consumer は引き続き FTP LIST コマンドを実行してディレクトリーのリストを作成し、次に fileName
オプションに基づいてこれらのファイルをフィルタリングします。ただし、このユースケースでは、useList=false
を設定してディレクトリーリストをオフにすることが望ましい場合があります。たとえば、FTP サーバーへのログインに使用されるユーザーアカウントには、FTP LIST コマンドを実行する権限がない場合があります。したがって、useList=false
でこれをオフにしてから、ダウンロードするファイルの固定名を fileName=myFileName.txt
で指定すると、FTP consumer は引き続きファイルをダウンロードできます。何らかの理由でファイルが存在しない場合、Camel はデフォルトで例外を出力します。これをオフにして、ignoreFileNotFoundOrPermissionError=true
を設定することでこれを無視できます。
たとえば、単一のファイルを取得し、使用後に削除する Camel ルートを作成するには、次のようにします。
from("ftp://admin@localhost:21/nolist/?password=admin&stepwise=false&useList=false&ignoreFileNotFoundOrPermissionError=true&fileName=report.txt&delete=true") .to("activemq:queue:report");
上で説明したすべてのオプションを使用したことに注意してください。
これは ConsumerTemplate
でも使用できます。たとえば、単一のファイル (存在する場合) をダウンロードし、ファイルの内容を文字列型として取得するには、次のようにします。
String data = template.retrieveBodyNoWait("ftp://admin@localhost:21/nolist/?password=admin&stepwise=false&useList=false&ignoreFileNotFoundOrPermissionError=true&fileName=report.txt&delete=true", String.class);
25.22. デバッグロギング
このコンポーネントには、問題が発生した場合に役立つログレベル TRACE があります。
25.23. Spring Boot Auto-Configuration
Spring Boot で ftp を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-ftp-starter</artifactId> </dependency>
このコンポーネントは、以下に示す 13 のオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.component.ftp.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.ftp.bridge-error-handler | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | Boolean |
camel.component.ftp.enabled | ftp コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.ftp.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
camel.component.ftps.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.ftps.bridge-error-handler | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | Boolean |
camel.component.ftps.enabled | ftps コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.ftps.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
camel.component.ftps.use-global-ssl-context-parameters | グローバル SSL コンテキストパラメーターの使用を有効にします。 | false | Boolean |
camel.component.sftp.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.sftp.bridge-error-handler | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | Boolean |
camel.component.sftp.enabled | sftp コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.sftp.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
第26章 Google BigQuery
Camel 2.20 以降
producer のみサポート対象。
Google Bigquery コンポーネントは、https://developers.google.com/api-client-library/java/apis/bigquery/v2 Google Client Services API のリンクを介して Cloud BigQuery インフラストラクチャー へのアクセスを提供します。
現在の実装では gRPC を使用していません。
現在の実装では、BigQuery のクエリーはサポートされていません。これは単なる producer です。
このコンポーネントの pom.xml
に次の依存関係を追加します。
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-google-bigquery</artifactId> <version>3.20.1.redhat-00031</version> <!-- use the same version as your Camel core version --> </dependency>
26.1. authentication-configuration
Google BigQuery コンポーネント認証は、GCP サービスアカウントでの使用を対象としています。詳細については、Google Cloud Platform Auth ガイド を参照してください。
Google のセキュリティー認証情報は、GCP 認証情報ファイルの場所へのパスを指定することで明示的に設定できます。
または、接続ファクトリーが Application Default Credentials にフォールバックする場合に暗黙的に設定されます。
サービスアカウントキー を取得したら、アプリケーションコードに認証認証情報を提供できます。Google のセキュリティー認証情報は、コンポーネントエンドポイントを介して設定できます。
String endpoint = "google-bigquery://project-id:datasetId[:tableId]?serviceAccountKey=/home/user/Downloads/my-key.json";
ファイルシステムパスを設定したくない場合は、認証認証情報ファイルの base64 でエンコードされたコンテンツを使用することもできます。
String endpoint = "google-bigquery://project-id:datasetId[:tableId]?serviceAccountKey=base64:<base64 encoded>";
または、環境変数 GOOGLE_APPLICATION_CREDENTIALS
を設定:
export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/my-key.json"
26.2. URI 形式
google-bigquery://project-id:datasetId[:tableId]?[options]
26.3. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
26.3.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
26.3.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
26.4. コンポーネントオプション
Google BigQuery コンポーネントは、以下に示す 5 個のオプションをサポートしています。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
connectionFactory (producer) | Bigquery Service への接続を取得する Autowired ConnectionFactory。指定されていないと、デフォルトのものが使用されます。 | GoogleBigQueryConnectionFactory | |
datasetId (producer) | BigQuery Dataset Id。 | 文字列 | |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
projectId (producer) | Google Cloud Project Id。 | 文字列 | |
autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
26.5. エンドポイントオプション
Google BigQuery エンドポイントは、URI 構文を使用して設定されます。
google-bigquery:projectId:datasetId:tableId
パスおよびクエリーパラメーターを使用します。
26.5.1. パスパラメーター (3 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
projectId (common) | 必須 Google Cloud プロジェクト ID | 文字列 | |
datasetId (common) | 必須 BigQuery データセット ID | 文字列 | |
tableId (common) | BigQuery テーブル ID。 | 文字列 |
26.5.2. クエリーパラメーター (4 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
connectionFactory (producer) | Bigquery Service への接続を取得する Autowired ConnectionFactory。指定されていないと、デフォルトのものが使用されます。 | GoogleBigQueryConnectionFactory | |
useAsInsertId (producer) | 挿入 ID として使用するフィールド名。 | 文字列 | |
lazyStartProducer (producer (上級)) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
serviceAccountKey (セキュリティー) | Google クラウドプラットフォームへのサービスアカウントとしてアプリケーションを認証するための json 形式のサービスアカウントキー。 | 文字列 |
26.6. メッセージヘッダー
Google BigQuery コンポーネントは、以下に示す 4 つのメッセージヘッダーをサポートしています。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
CamelGoogleBigQueryTableSuffix (producer) 定数: TABLE_SUFFIX | データを挿入するときに使用するテーブル接尾辞。 | 文字列 | |
CamelGoogleBigQueryTableId (producer) 定数: TABLE_ID | データが送信されるテーブル ID。指定すると、エンドポイント設定がオーバーライドされます。 | 文字列 | |
CamelGoogleBigQueryInsertId (producer) 定数: INSERT_ID | データの挿入時に使用する InsertId。 | 文字列 | |
CamelGoogleBigQueryPartitionDecorator (producer) | データの挿入時に使用するパーティションを示すパーティションデコレーター。 | 文字列 |
26.7. producer エンドポイント
producer エンドポイントは、BigQuery の個別のエクスチェンジとグループ化されたエクスチェンジを同様に受け入れて配信できます。グループ化された取引所には、Exchange.GROUPED_EXCHANGE
プロパティーセットがあります。
Google BigQuery producer は、異なるテーブル 接尾辞またはパーティションデコレータが指定されていない限り、グループ化されたエクスチェンジを 1 回の API 呼び出しで送信します。指定された場合は、データが正しい接尾辞またはパーティションデコレータで書き込まれるように分割されます。
Google BigQuery エンドポイントは、ペイロードがマップまたはマップのリストであると想定しています。マップを含むペイロードは単一の行を挿入し、マップのリストを含むペイロードはリスト内の各エントリーの行を挿入します。
26.8. テンプレートテーブル
テンプレート化されたテーブルは、GoogleBigQueryConstants.TABLE_SUFFIX
ヘッダーを使用して指定できます。たとえば、次のルートはテーブルを作成し、1 日ごとに分割されたレコードを挿入します。
from("direct:start") .header(GoogleBigQueryConstants.TABLE_SUFFIX, "_${date:now:yyyyMMdd}") .to("google-bigquery:sampleDataset:sampleTable")
このユースケースではパーティショニングを使用することを推奨します。
テンプレートテーブルの詳細については、テンプレートテーブル を参照してください。
26.9. パーティション設定
テーブルの作成時にパーティショニングを指定すると、設定されたデータは自動的に個別のテーブルにパーティショニングされます。データを挿入するときに、エクスチェンジで GoogleBigQueryConstants.PARTITION_DECORATOR
ヘッダーを設定することにより、特定のパーティションを指定できます。
パーティション化の詳細は、パーティション化されたテーブルの作成 を参照してください。
26.10. データの整合性の確保
挿入 ID は、ヘッダー GoogleBigQueryConstants.INSERT_ID
を使用するか、クエリーパラメーター useAsInsertId
を指定することによって、エクスチェンジに設定できます。挿入 ID は行ごとに指定する必要があるため、ペイロードがリストの場合、挿入された交換ヘッダーは使用できません。ペイロードがリストの場合、GoogleBigQueryConstants.INSERT_ID
は無視されます。その場合、クエリーパラメーター useAsInsertId
を使用します。
詳細は、データの一貫性 を参照してください
26.11. Spring Boot 自動設定
Spring Boot で google-bigquery を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-google-bigquery-starter</artifactId> </dependency>
コンポーネントは、以下に記載される 11 のオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.component.google-bigquery-sql.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.google-bigquery-sql.connection-factory | Bigquery Service への接続を取得するための ConnectionFactory。指定されていないと、デフォルトのものが使用されます。オプションは org.apache.camel.component.google.bigquery.GoogleBigQueryConnectionFactory タイプです。 | GoogleBigQueryConnectionFactory | |
camel.component.google-bigquery-sql.enabled | google-bigquery-sql コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.google-bigquery-sql.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
camel.component.google-bigquery-sql.project-id | Google Cloud Project Id。 | 文字列 | |
camel.component.google-bigquery.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.google-bigquery.connection-factory | Bigquery Service への接続を取得するための ConnectionFactory。指定されていないと、デフォルトのものが使用されます。オプションは org.apache.camel.component.google.bigquery.GoogleBigQueryConnectionFactory タイプです。 | GoogleBigQueryConnectionFactory | |
camel.component.google-bigquery.dataset-id | BigQuery Dataset Id。 | 文字列 | |
camel.component.google-bigquery.enabled | google-bigquery コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.google-bigquery.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
camel.component.google-bigquery.project-id | Google Cloud Project Id。 | 文字列 |
第27章 Google Pubsub
Camel 2.19 以降
producer と consumer の両方がサポート対象。
Google Pubsub コンポーネントは 、Google Cloud Pub/Sub 用の Google Cloud Java クライアント を介して Cloud Pub/Sub インフラストラクチャー へのアクセスを提供します。
このコンポーネントの pom.xml
に次の依存関係を追加します。
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-google-pubsub</artifactId> <version>3.20.1.redhat-00031</version> <!-- use the same version as your Camel core version --> </dependency>
27.1. URI 形式
Google Pubsub コンポーネントは、次の URI 形式を使用します。
google-pubsub://project-id:destinationName?[options]
宛先名は、トピック名またはサブスクリプション名のいずれかです。
27.2. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
27.2.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
27.2.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
27.3. コンポーネントオプション
Google Pubsub コンポーネントは、以下に示す 10 個のオプションをサポートしています。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
authenticate (共通) | PubSub サービスと対話する場合は Credentials を使用します (エミュレーターを使用する場合は認証は必要ありません)。 | true | boolean |
エンドポイント (共通) | ローカルの Pub/Sub エミュレーターで使用するエンドポイント。 | 文字列 | |
serviceAccountKey (common) | PubSub パブリッシャー/サブスクライバーの認証情報として使用できるサービスアカウントキー。デフォルトではクラスパスからロードできますが、classpath:、file:、または http: の接頭辞を付けて、別のシステムからリソースをロードできます。 | 文字列 | |
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
synchronousPullRetryableCodes (consumer) | 同期プルの追加の再試行可能なエラーコードのコンマ区切りリスト。デフォルトでは、PubSub クライアントライブラリーは ABORTED、UNAVAILABLE、UNKNOWN を再試行します。 | 文字列 | |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
publisherCacheSize (producer) | キャッシュする producer の最大数。これは、さまざまなトピックの producer がある場合に増加する可能性があります。 | int | |
publisherCacheTimeout (producer) | 各 producer がキャッシュ内で存続する必要があるミリ秒数。 | int | |
autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
publisherTerminationTimeout (advanced) | プロデューサの終了を何ミリ秒許可するか。 | int |
27.4. エンドポイントオプション
Google Pubsub エンドポイントは、URI 構文を使用して設定されます。
google-pubsub:projectId:destinationName
パスおよびクエリーパラメーターを使用します。
27.4.1. パスパラメーター (2 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
projectId (common) | 必須 Google Cloud PubSub プロジェクト ID。 | 文字列 | |
destinationName (common) | 必須 宛先名。consumer の場合、これはサブスクリプション名になりますが、producer の場合はトピック名になります。 | 文字列 |
27.4.2. クエリーパラメーター (15 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
authenticate (共通) | PubSub サービスと対話する場合は Credentials を使用します (エミュレーターを使用する場合は認証は必要ありません)。 | true | boolean |
loggerId (Common) | 親ルートとの一致が必要な場合に使用するロガー ID。 | 文字列 | |
serviceAccountKey (common) | PubSub パブリッシャー/サブスクライバーの認証情報として使用できるサービスアカウントキー。デフォルトではクラスパスからロードできますが、classpath:、file:、または http: の接頭辞を付けて、別のシステムからリソースをロードできます。 | 文字列 | |
ackMode (consumer) | AUTO = エクスチェンジは完了時に確認/拒否されます。NONE = ダウンストリームプロセスは明示的に ack/nack する必要があります。 列挙値:
| AUTO | AckMode |
concurrentConsumers (consumer) | サブスクリプションから消費する並列ストリームの数。 | 1 | Integer |
maxAckExtensionPeriod (consumer) | メッセージ確認応答期限が延長される最大期間を設定します。秒単位の値。 | 3600 | int |
maxMessagesPerPoll (consumer) | 1 回の API 呼び出しでサーバーから受信するメッセージの最大数。 | 1 | Integer |
synchronousPull (consumer) | メッセージのバッチを同期的にプルします。 | false | boolean |
bridgeErrorHandler (consumer (advanced)) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
exceptionHandler (consumer (上級)) | consumer によるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、consumer は例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
exchangePattern (consumer (上級)) | consumer がエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
lazyStartProducer (producer (advanced)) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
messageOrderingEnabled (producer (advanced)) | メッセージの順序付けを有効にする必要があります。 | false | boolean |
pubsubEndpoint (producer (高度)) | 使用する Pub/Sub エンドポイント。メッセージの順序付けを使用する場合に必要であり、複数のパブリッシャーが使用されている場合でもメッセージが順番に受信されるようにします。 | 文字列 | |
シリアライザー (producer (高度)) | Autowired producer でのメッセージペイロードのシリアライズに使用するカスタム GooglePubsubSerializer。 | GooglePubsubSerializer |
27.5. メッセージヘッダー
Google Pubsub コンポーネントは、以下に示す 5 つのメッセージヘッダーをサポートしています。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
CamelGooglePubsubMessageId (common) 定数: MESSAGE_ID | メッセージの発行時にサーバーによって割り当てられるメッセージの ID。 | 文字列 | |
CamelGooglePubsubMsgAckId (consumer) 定数: ACK_ID | 受信したメッセージを確認するために使用される ID。 | 文字列 | |
CamelGooglePubsubPublishTime (consumer) 定数: PUBLISH_TIME | メッセージが公開された時間。 | Timestamp | |
CamelGooglePubsubAttributes (common) 定数: ATTRIBUTES | メッセージの属性。 | Map | |
CamelGooglePubsubOrderingKey (producer) 定数: ORDERING_KEY | 空でない場合、公開順序を尊重する必要がある関連メッセージを識別します。 | 文字列 |
27.6. producer エンドポイント
producer エンドポイントは、PubSub の個別のエクスチェンジとグループ化されたエクスチェンジを同様に受け入れて配信できます。グループ化された取引所には、Exchange.GROUPED_EXCHANGE
プロパティーセットがあります。
Google PubSub は、ペイロードが byte[] 配列であることを想定しており、producer エンドポイントは次を送信します。
- UTF-8 としてエンコードされた byte[] としての String ボディー
- byte[] ボディそのまま
- それ以外はすべて byte[] 配列にシリアル化される
メッセージヘッダー GooglePubsubConstants.ATTRIBUTES
として設定されたマップは、PubSub 属性として送信されます。
Google PubSub は、順序付けられたメッセージ配信をサポートしています。
このセットを有効にするには、オプション messageOrderingEnabled を true に設定し、pubsubEndpoint を GCP リージョンに設定します。
メッセージを生成するときに、メッセージヘッダー GooglePubsubConstants.ORDERING_KEY
を設定します。これは、メッセージの PubSub ordersKey として設定されます。
詳細は、メッセージの注文 を参照してください。
エクスチェンジが PubSub に配信されると、PubSub メッセージ ID がヘッダー GooglePubsubConstants.MESSAGE_ID
に割り当てられます。
27.7. consumer エンドポイント
サブスクリプションの設定オプションとして設定された期間内にメッセージが確認されない場合、Google PubSub はメッセージを再配信します。
エクスチェンジ処理が完了すると、コンポーネントはメッセージを確認します。
ルートが例外を出力した場合、エクスチェンジは失敗としてマークされ、コンポーネントはメッセージに NACK を送信します。メッセージはすぐに再配信されます。
メッセージを確認/拒否するために、コンポーネントはヘッダー GooglePubsubConstants.ACK_ID
として保存されている確認 ID を使用します。ヘッダーが削除または改ざんされた場合、ack は失敗し、ack の期限後にメッセージが再配信されます。
27.8. メッセージボディー
consumer エンドポイントは、メッセージの内容を byte[] として返します。これは、基になるシステムが送信するのとまったく同じです。コンテンツを変換/アンマーシャリングするのはルート次第です。
27.9. authentication-configuration
デフォルトでは、このコンポーネントは GoogleCredentials.getApplicationDefault()
を使用して認証情報を取得します。この動作は、authenticate オプションを false
に設定することで無効にできます。この場合、Google API へのリクエストは認証の詳細なしで行われます。これは、エミュレーターに対して開発する場合にのみ必要です。この動作は、サービスアカウントキーファイルへのパスを指定することで変更できます。
27.10. ロールバックと再配信
Google PubSub のロールバックは、確認応答期限 (Google PubSub が確認応答を受け取る予定の期間) の考え方に依存しています。受信確認が受信されていない場合、メッセージは再配信されます。
Google は、メッセージの期限を延長するための API を提供しています。
詳細は、Google PubSub ドキュメント を参照してください
したがって、ロールバックは事実上、値がゼロの期限延長 API 呼び出しです。つまり、期限に達したので、メッセージを次の consumer に再配信できます。
メッセージヘッダー GooglePubsubConstants.ACK_DEADLINE
を秒単位の値に設定して、ロールバックの確認期限を明示的に設定することで、メッセージの再配信を遅らせることができます。
27.11. Spring Boot 自動設定
Spring Boot で google-pubsub を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-google-pubsub-starter</artifactId> </dependency>
コンポーネントは、以下に記載される 11 のオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.component.google-pubsub.authenticate | PubSub サービスと対話する場合は Credentials を使用します (エミュレーターを使用する場合は認証は必要ありません)。 | true | Boolean |
camel.component.google-pubsub.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.google-pubsub.bridge-error-handler | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | Boolean |
camel.component.google-pubsub.enabled | google-pubsub コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.google-pubsub.endpoint | ローカルの Pub/Sub エミュレーターで使用するエンドポイント。 | 文字列 | |
camel.component.google-pubsub.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
camel.component.google-pubsub.publisher-cache-size | キャッシュする producer の最大数。これは、さまざまなトピックの producer がある場合に増加する可能性があります。 | Integer | |
camel.component.google-pubsub.publisher-cache-timeout | 各 producer がキャッシュ内で存続する必要があるミリ秒数。 | Integer | |
camel.component.google-pubsub.publisher-termination-timeout | プロデューサの終了を何ミリ秒許可するか。 | Integer | |
camel.component.google-pubsub.service-account-key | PubSub パブリッシャー/サブスクライバーの認証情報として使用できるサービスアカウントキー。デフォルトではクラスパスからロードできますが、classpath:、file:、または http: の接頭辞を付けて、別のシステムからリソースをロードできます。 | 文字列 | |
camel.component.google-pubsub.synchronous-pull-retryable-codes | 同期プルの追加の再試行可能なエラーコードのコンマ区切りリスト。デフォルトでは、PubSub クライアントライブラリーは ABORTED、UNAVAILABLE、UNKNOWN を再試行します。 | 文字列 |
第28章 HTTP
producer のみサポート対象
HTTP コンポーネントは、外部 HTTP リソースを呼び出すための HTTP ベースのエンドポイントを提供します (HTTP を使用して外部サーバーを呼び出すクライアントとして)。
Maven ユーザーは、このコンポーネントの pom.xml
に以下の依存関係を追加する必要があります。
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-http</artifactId> <version>{CamelSBVersion}</version> <!-- use the same version as your Camel core version --> </dependency>
28.1. URI 形式
http:hostname[:port][/resourceUri][?options]
デフォルトでは、HTTP にはポート 80、HTTPS には 443 を使用します。
28.2. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
28.2.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
28.2.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
28.3. コンポーネントオプション
HTTP コンポーネントは、以下に示す 37 のオプションをサポートしています。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
cookieStore (producer) | カスタム org.apache.http.client.CookieStore を使用するには。デフォルトでは、メモリー内のみの Cookie ストアである org.apache.http.impl.client.BasicCookieStore が使用されます。bridgeEndpoint=true の場合、Cookie ストアは強制的に noop cookie ストアになることに注意してください。これは、単にブリッジしているだけであるため (たとえば、プロキシーとして動作するため)、Cookie を保存するべきではないためです。 | CookieStore | |
copyHeaders (producer) | このオプションが true の場合、IN 交換ヘッダーは、コピー戦略に従って OUT 交換ヘッダーにコピーされます。これを false に設定すると、HTTP 応答からのヘッダーのみを含めることができます (IN ヘッダーは伝播されません)。 | true | boolean |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
responsePayloadStreamingThreshold (producer) | このバイト単位のしきい値は、応答ペイロードをメモリーにバイト配列として格納するか、ストリーミングベースにするかを制御します。常にストリーミングモードを使用するには、これを -1 に設定します。 | 8192 | int |
skipRequestHeaders (producer (上級)) | すべての Camel ヘッダーを HTTP リクエストヘッダーとしてマッピングすることをスキップするかどうか。HTTP 要求に含める必要がある Camel ヘッダーからのデータがない場合は、これにより、JVM ガベージコレクターの多くのオブジェクト割り当てによるオーバーヘッドの解析を回避できます。 | false | boolean |
skipResponseHeaders (producer (上級)) | すべての HTTP 応答ヘッダーの Camel ヘッダーへのマッピングをスキップするかどうか。HTTP ヘッダーから必要なデータがない場合は、これにより、JVM ガベージコレクターの多くのオブジェクト割り当てによる解析のオーバーヘッドを回避できます。 | false | boolean |
allowJavaSerializedObject (上級) | リクエストが context-type=application/x-java-serialized-object を使用する場合に Java シリアル化を許可するかどうか。これは、デフォルトでオフになっています。これを有効にすると、Java が受信データをリクエストから Java にデシリアライズし、セキュリティー上のリスクが生じる可能性があることに注意してください。 | false | boolean |
authCachingDisabled (上級) | 認証スキームのキャッシュを無効にします。 | false | boolean |
automaticRetriesDisabled (上級) | リクエストの自動回復と再実行を無効にします。 | false | boolean |
autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
clientConnectionManager (上級) | カスタムおよび共有の HttpClientConnectionManager を使用して接続を管理するには。これが設定されている場合、これは、このコンポーネントによって作成されたすべてのエンドポイントに常に使用されます。 | HttpClientConnectionManager | |
connectionsPerRoute (上級) | ルートごとの接続の最大数。 | 20 | int |
connectionStateDisabled (上級) | 接続状態の追跡を無効にします。 | false | boolean |
connectionTimeToLive (上級) | 接続が有効になるまでの時間。単位はミリ秒で、デフォルト値は常にキープアライブです。 | long | |
contentCompressionDisabled (上級) | コンテンツの自動解凍を無効にします。 | false | boolean |
cookieManagementDisabled (上級) | 状態 (Cookie) の管理を無効にします。 | false | boolean |
defaultUserAgentDisabled (上級) | ユーザーによって何も提供されていない場合、このビルダーによって設定されたデフォルトのユーザーエージェントを無効にします。 | false | boolean |
httpBinding (上級) | カスタム HttpBinding を使用して、Camel メッセージと HttpClient との間のマッピングを制御します。 | HttpBinding | |
httpClientConfigurer (上級) | カスタム HttpClientConfigurer を使用して、使用される HttpClient の設定を実行します。 | HttpClientConfigurer | |
httpConfiguration (上級) | 共有 HttpConfiguration を基本設定として使用するには、以下を行います。 | HttpConfiguration | |
httpContext (上級) | リクエストの実行時にカスタム org.apache.http.protocol.HttpContext を使用するには。 | HttpContext | |
maxTotalConnections (上級) | 接続の最大数。 | 200 | int |
redirectHandlingDisabled (上級) | 自動リダイレクト処理を無効にします。 | false | boolean |
headerFilterStrategy (filter) | カスタムの org.apache.camel.spi.HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルターします。 | HeaderFilterStrategy | |
proxyAuthDomain (プロキシー) | 使用するプロキシー認証ドメイン。 | String | |
proxyAuthHost (プロキシー) | プロキシー認証ホスト。 | String | |
proxyAuthMethod (プロキシー) | 使用するプロキシー認証方法。 列挙値:
| String | |
proxyAuthNtHost (プロキシー) | NTML で使用するプロキシー認証ドメイン (ワークステーション名)。 | String | |
proxyAuthPassword (プロキシー) | プロキシー認証パスワード。 | String | |
proxyAuthPort (プロキシー) | プロキシー認証ポート。 | Integer | |
proxyAuthUsername (プロキシー) | プロキシー認証のユーザー名。 | String | |
sslContextParameters (security) | SSLContextParameters を使用してセキュリティーを設定する場合。重要: HttpComponent ごとにサポートされる org.apache.camel.support.jsse.SSLContextParameters のインスタンスは 1 つだけです。2 つ以上の異なるインスタンスを使用する必要がある場合は、必要なインスタンスごとに新しい HttpComponent を定義する必要があります。 | SSLContextParameters | |
useGlobalSslContextParameters (security) | グローバル SSL コンテキストパラメーターの使用を有効にします。 | false | boolean |
x509HostnameVerifier (セキュリティー) | DefaultHostnameVerifier や NoopHostnameVerifier などのカスタム X509HostnameVerifier を使用します。 | HostnameVerifier | |
connectionRequestTimeout (timeout) | 接続マネージャーからの接続を要求するときに使用されるミリ秒単位のタイムアウト。タイムアウト値 0 は無限のタイムアウトとして解釈されます。タイムアウト値 0 は無限のタイムアウトとして解釈されます。負の値は未定義として解釈されます (該当する場合はシステムのデフォルト)。 | -1 | int |
connectTimeout (タイムアウト) | 接続が確立されるまでのタイムアウトをミリ秒単位で決定します。タイムアウト値 0 は無限のタイムアウトとして解釈されます。タイムアウト値 0 は無限のタイムアウトとして解釈されます。負の値は未定義として解釈されます (該当する場合はシステムのデフォルト)。 | -1 | int |
socketTimeout (タイムアウト) | ソケットのタイムアウトをミリ秒単位で定義します。これは、データを待機するためのタイムアウト、または別の言い方をすれば、2 つの連続するデータパケット間の最大非アクティブ期間です)。タイムアウト値 0 は無限のタイムアウトとして解釈されます。負の値は未定義として解釈されます (該当する場合はシステムのデフォルト)。 | -1 | int |
28.4. エンドポイントオプション
HTTP エンドポイントは、URI 構文を使用して設定されます。
http://httpUri
パスおよびクエリーパラメーターを使用します。
28.4.1. パスパラメーター(1 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
httpUri (共通) | 必須 呼び出す HTTP エンドポイントの URL。 | URI |
28.4.2. クエリーパラメーター (51 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
chunked (producer) | このオプションが false の場合、サーブレットは HTTP ストリーミングを無効にし、応答に content-length ヘッダーを設定します。 | true | boolean |
disableStreamCache (共通) | サーブレットからの生の入力ストリームがキャッシュされるかどうかを決定します (Camel はストリームをメモリー内/ファイルへのオーバーフロー、ストリームキャッシュに読み込みます)。デフォルトでは、Camel はサーブレット入力ストリームをキャッシュして複数回の読み取りをサポートし、Camel がストリームからすべてのデータを取得できるようにします。ただし、ファイルやその他の永続ストアに直接ストリーミングするなど、生のストリームにアクセスする必要がある場合は、このオプションを true に設定できます。ストリームの複数回の読み取りをサポートするためにこのオプションが false の場合、DefaultHttpBinding は要求入力ストリームをストリームキャッシュにコピーし、それをメッセージ本文に入れます。サーブレットを使用してエンドポイントをブリッジ/プロキシーする場合、メッセージペイロードを複数回読み取る必要がない場合は、このオプションを有効にしてパフォーマンスを向上させることを検討してください。http producer は、デフォルトで応答本文ストリームをキャッシュします。このオプションを true に設定すると、プロデューサは応答本文ストリームをキャッシュせず、応答ストリームをそのままメッセージ本文として使用します。 | false | boolean |
headerFilterStrategy (共通) | カスタムの HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルタリングします。 | HeaderFilterStrategy | |
httpBinding (common (上級)) | カスタム HttpBinding を使用して、Camel メッセージと HttpClient との間のマッピングを制御します。 | HttpBinding | |
bridgeEndpoint (producer) | オプションが true の場合、HttpProducer は Exchange.HTTP_URI ヘッダーを無視し、エンドポイントの URI を要求に使用します。オプション throwExceptionOnFailure を false に設定して、HttpProducer がすべての障害応答を送り返すようにすることもできます。 | false | boolean |
clearExpiredCookies (producer) | HTTP リクエストを送信する前に期限切れの Cookie をクリアするかどうか。これにより、有効期限が切れたときに削除される新しい Cookie を追加することで、Cookie ストアが成長し続けることがなくなります。コンポーネントが Cookie 管理を無効にしている場合、このオプションも無効になります。 | true | boolean |
connectionClose (producer) | Connection Close ヘッダーを HTTP 要求に追加する必要があるかどうかを指定します。デフォルトでは、connectionClose は false です。 | false | boolean |
copyHeaders (producer) | このオプションが true の場合、IN 交換ヘッダーは、コピー戦略に従って OUT 交換ヘッダーにコピーされます。これを false に設定すると、HTTP 応答からのヘッダーのみを含めることができます (IN ヘッダーは伝播されません)。 | true | boolean |
customHostHeader (producer) | producer のカスタムホストヘッダーを使用するには。クエリーで設定されていない場合は無視されます。設定すると、url から派生したホストヘッダーが上書きされます。 | String | |
httpMethod (producer) | 使用する HTTP メソッドを設定します。設定されている場合、HttpMethod ヘッダーはこのオプションをオーバーライドできません。 列挙値:
| HttpMethods | |
ignoreResponseBody (producer) | このオプションが true の場合、http producer は応答本文を読み取らず、入力ストリームをキャッシュしません。 | false | boolean |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
preserveHostHeader (producer) | オプションが true の場合、HttpProducer は Host ヘッダーを現在の Exchange Host ヘッダーに含まれる値に設定します。これは、ダウンストリームサーバーが受信した Host ヘッダーにアップストリームクライアントが呼び出した URL を反映させたいリバースプロキシーアプリケーションで役立ちます。Host ヘッダーを使用するアプリケーションが、プロキシーされたサービスの正確な URL を生成できるようにします。 | false | boolean |
throwExceptionOnFailure (producer) | リモートサーバーからの応答が失敗した場合に HttpOperationFailedException を出力することを無効にするオプション。これにより、HTTP ステータスコードに関係なくすべての応答を取得できます。 | true | boolean |
transferException (producer) | 有効にすると、エクスチェンジが consumer 側で処理に失敗し、発生した例外が application/x-java-serialized-object コンテンツタイプとして応答でシリアライズされた場合に、例外がシリアライズされました。producer 側では、例外がデシリアライズされ、HttpOperationFailedException ではなくそのまま出力されます。原因となった例外はシリアライズする必要があります。これは、デフォルトでオフになっています。これを有効にすると、Java が受信データをリクエストから Java にデシリアライズし、セキュリティー上のリスクが生じる可能性があることに注意してください。 | false | boolean |
cookieHandler (producer (上級)) | HTTP セッションを維持するように Cookie ハンドラーを設定します。 | CookieHandler | |
cookieStore (producer (上級)) | カスタム CookieStore を使用するには。デフォルトでは、メモリー内のみの Cookie ストアである BasicCookieStore が使用されます。bridgeEndpoint=true の場合、Cookie ストアは強制的に noop cookie ストアになることに注意してください。これは、単にブリッジしているだけであるため (たとえば、プロキシーとして動作するため)、Cookie を保存するべきではないためです。cookieHandler が設定されている場合、cookie の処理は cookieHandler によって実行されるため、cookie ストアも強制的に noop cookie ストアになります。 | CookieStore | |
deleteWithBody (producer (上級)) | HTTP DELETE にメッセージ本文を含めるかどうか。デフォルトでは、HTTP DELETE には HTTP 本文は含まれません。ただし、ごくまれに、ユーザーがメッセージ本文を含める必要がある場合があります。 | false | boolean |
getWithBody (producer (上級)) | HTTP GET にメッセージ本文を含めるかどうか。デフォルトでは、HTTP GET には HTTP 本文は含まれません。ただし、ごくまれに、ユーザーがメッセージ本文を含める必要がある場合があります。 | false | boolean |
okStatusCodeRange (producer (上級)) | 正常な応答と見なされるステータスコード。値は含まれます。複数の範囲をコンマで区切って定義できます (例: 200-204,209,301-304)。各範囲は、ダッシュを含む 1 つの数字または from-to である必要があります。 | 200-299 | String |
skipRequestHeaders (producer (上級)) | すべての Camel ヘッダーを HTTP リクエストヘッダーとしてマッピングすることをスキップするかどうか。HTTP 要求に含める必要がある Camel ヘッダーからのデータがない場合は、これにより、JVM ガベージコレクターの多くのオブジェクト割り当てによるオーバーヘッドの解析を回避できます。 | false | boolean |
skipResponseHeaders (producer (上級)) | すべての HTTP 応答ヘッダーの Camel ヘッダーへのマッピングをスキップするかどうか。HTTP ヘッダーから必要なデータがない場合は、これにより、JVM ガベージコレクターの多くのオブジェクト割り当てによる解析のオーバーヘッドを回避できます。 | false | boolean |
userAgent (producer (上級)) | カスタム HTTP User-Agent 要求ヘッダーを設定します。 | String | |
clientBuilder (上級) | このエンドポイントの producer または consumer によって使用される新しい RequestConfig インスタンスで使用される http クライアント要求パラメーターへのアクセスを提供します。 | HttpClientBuilder | |
clientConnectionManager (上級) | カスタム HttpClientConnectionManager を使用して接続を管理するには。 | HttpClientConnectionManager | |
connectionsPerRoute (上級) | ルートごとの接続の最大数。 | 20 | int |
httpClient (上級) | producer が使用するカスタム HttpClient を設定します。 | HttpClient | |
httpClientConfigurer (上級) | 認証メカニズムなどを設定するために、producer または consumer によって作成された新しい HttpClient インスタンスのカスタム設定戦略を登録します。 | HttpClientConfigurer | |
httpClientOptions (上級) | マップのキー/値を使用して HttpClient を設定するには。 | Map | |
httpContext (上級) | カスタム HttpContext インスタンスを使用します。 | HttpContext | |
maxTotalConnections (上級) | 接続の最大数。 | 200 | int |
useSystemProperties (上級) | システムプロパティーを設定のフォールバックとして使用します。 | false | boolean |
proxyAuthDomain (プロキシー) | NTML で使用するプロキシー認証ドメイン。 | String | |
proxyAuthHost (プロキシー) | プロキシー認証ホスト。 | String | |
proxyAuthMethod (プロキシー) | 使用するプロキシー認証方法。 列挙値:
| String | |
proxyAuthNtHost (プロキシー) | NTML で使用するプロキシー認証ドメイン (ワークステーション名)。 | String | |
proxyAuthPassword (プロキシー) | プロキシー認証パスワード。 | String | |
proxyAuthPort (プロキシー) | プロキシー認証ポート。 | int | |
proxyAuthScheme (プロキシー) | 使用するプロキシー認証スキーム。 列挙値:
| String | |
proxyAuthUsername (プロキシー) | プロキシー認証のユーザー名。 | String | |
proxyHost (プロキシー) | 使用するプロキシーホスト名。 | String | |
proxyPort (プロキシー) | 使用するプロキシーポート。 | int | |
authDomain (セキュリティー) | NTML で使用する認証ドメイン。 | String | |
authenticationPreemptive (セキュリティー) | このオプションが true の場合、camel-http はプリエンプティブ基本認証をサーバーに送信します。 | false | boolean |
authHost (セキュリティー) | NTML で使用する認証ホスト。 | String | |
authMethod (security) | Basic、Digest、または NTLM の値のコンマ区切りリストとして使用できる認証方法。 | String | |
authMethodPriority (security) | 基本、ダイジェスト、または NTLM のいずれかとして、優先して使用する認証方法。 列挙値:
| String | |
authPassword (セキュリティー) | 認証パスワード。 | String | |
authUsername (セキュリティー) | 認証ユーザー名。 | String | |
sslContextParameters (security) | SSLContextParameters を使用してセキュリティーを設定する場合。重要: HttpComponent ごとにサポートされる org.apache.camel.util.jsse.SSLContextParameters のインスタンスは 1 つだけです。2 つ以上の異なるインスタンスを使用する必要がある場合は、必要なインスタンスごとに新しい HttpComponent を定義する必要があります。 | SSLContextParameters | |
x509HostnameVerifier (セキュリティー) | DefaultHostnameVerifier や NoopHostnameVerifier などのカスタム X509HostnameVerifier を使用します。 | HostnameVerifier |
28.5. メッセージヘッダー
名前 | タイプ | 説明 |
---|---|---|
|
| 呼び出す URI。エンドポイントで直接設定された既存の URI をオーバーライドします。この uri は、呼び出す http サーバーの uri です。セキュリティーなどのエンドポイントオプションを設定できる Camel エンドポイント uri とは異なります。このヘッダーはそれをサポートしていません。http サーバーの唯一の uri です。 |
|
| リクエスト URI のパス。ヘッダーは、HTTP_URI でリクエスト URI を構築するために使用されます。 |
|
| URI パラメーター。エンドポイントに直接設定された既存の URI パラメーターをオーバーライドします。 |
|
| 外部サーバーからの HTTP 応答コード。OK の場合は 200 です。 |
|
| 外部サーバーからの HTTP 応答テキスト。 |
|
| 文字エンコーディング。 |
|
|
HTTP コンテンツタイプ。 |
|
|
HTTP コンテンツエンコーディング。 |
28.6. メッセージボディー
Camel は、外部サーバーからの HTTP レスポンスを OUT ボディに保存します。IN メッセージのすべてのヘッダーが OUT メッセージにコピーされるため、ヘッダーはルーティング中に保持されます。さらに、Camel は HTTP 応答ヘッダーも OUT メッセージヘッダーに追加します。
28.7. システムプロパティーの使用
useSystemProperties を true に設定すると、HTTP クライアントは次のシステムプロパティーを探して使用します。
- ssl.TrustManagerFactory.algorithm
- javax.net.ssl.trustStoreType
- javax.net.ssl.trustStore
- javax.net.ssl.trustStoreProvider
- javax.net.ssl.trustStorePassword
- java.home
- ssl.KeyManagerFactory.algorithm
- javax.net.ssl.keyStoreType
- javax.net.ssl.keyStore
- javax.net.ssl.keyStoreProvider
- javax.net.ssl.keyStorePassword
- http.proxyHost
- http.proxyPort
- http.nonProxyHosts
- http.keepAlive
- http.maxConnections
28.8. レスポンスコード
Camel は HTTP 応答コードに従って処理します。
- 応答コードは 100..299 の範囲で、Camel はそれを成功応答と見なします。
-
応答コードは 300..399 の範囲にあり、Camel はこれをリダイレクト応答と見なし、情報とともに
HttpOperationFailedException
を出力します。 -
応答コードが 400+ の場合、Camel はこれを外部サーバーの障害と見なし、その情報とともに
HttpOperationFailedException
を出力します。
throwExceptionOnFailure オプション throwExceptionOnFailure
を false
に設定して、失敗した応答コードに対して HttpOperationFailedException
が出力されないようにすることができます。これにより、リモートサーバーからの応答を取得できます。
これを示すサンプルを以下に示します。
28.9. 例外
HttpOperationFailedException
例外には、次の情報が含まれています。
- HTTP ステータスコード
- HTTP ステータス行 (ステータスコードのテキスト)
- サーバーがリダイレクトを返した場合は、ロケーションをリダイレクトします
-
サーバーがレスポンスとして本文を提供した場合、
java.lang.String
としてのレスポンス本文
28.10. どの HTTP メソッドを使用するか
次のアルゴリズムを使用して、使用する HTTP メソッドを決定します。
1.エンドポイント設定 (httpMethod
) として提供されるメソッドを使用します。
2.ヘッダーで提供されるメソッドを使用します (Exchange.HTTP_METHOD
)。
3.ヘッダーにクエリー文字列が指定されている場合は GET
。
4.エンドポイントがクエリー文字列で設定されている場合は GET
。
5.送信するデータがある場合は POST
(本文が null
ではない)。
6.それ以外の場合は GET
。
28.11. HttpServletRequest と HttpServletResponse にアクセスする方法
を使用して Camel 型コンバーターシステムを使用して、これら 2 つにアクセスできます。
HttpServletRequest request = exchange.getIn().getBody(HttpServletRequest.class); HttpServletResponse response = exchange.getIn().getBody(HttpServletResponse.class);
camel-jetty または camel-cxf エンドポイントの後のプロセッサーからだけでなく、リクエストとレスポンスを取得できます。
28.12. 呼び出す URI の設定
HTTP producer の URI は、エンドポイント URI から直接設定できます。以下のルートでは、Camel は HTTP を使用して外部サーバー oldhost
を呼び出します。
from("direct:start") .to("http://oldhost");
同等の Spring の例:
<camelContext xmlns="http://activemq.apache.org/camel/schema/spring"> <route> <from uri="direct:start"/> <to uri="http://oldhost"/> </route> </camelContext>
メッセージにキー Exchange.HTTP_URI
を含むヘッダーを追加することで、HTTP エンドポイント URI をオーバーライドできます。
from("direct:start") .setHeader(Exchange.HTTP_URI, constant("http://newhost")) .to("http://oldhost");
上記のサンプルでは、エンドポイントが http://oldhost/ で設定されているにもかかわらず、Camel は http://newhost/ を呼び出します。
http エンドポイントがブリッジモードで動作している場合、Exchange.HTTP_URI
のメッセージヘッダーは無視されます。
28.13. URI パラメーターの設定
http producer は、HTTP サーバーに送信される URI パラメーターをサポートしています。URI パラメーターは、エンドポイント URI に直接設定するか、メッセージのキー Exchange.HTTP_QUERY
を含むヘッダーとして設定できます。
from("direct:start") .to("http://oldhost?order=123&detail=short");
または、ヘッダーで提供されるオプション:
from("direct:start") .setHeader(Exchange.HTTP_QUERY, constant("order=123&detail=short")) .to("http://oldhost");
28.14. HTTP プロデューサに http メソッド (GET/PATCH/POST/PUT/DELETE/HEAD/OPTIONS/TRACE) を設定する方法
HTTP コンポーネントは、メッセージヘッダーを設定することにより、HTTP 要求メソッドを設定する方法を提供します。以下に例を示します。
from("direct:start") .setHeader(Exchange.HTTP_METHOD, constant(org.apache.camel.component.http.HttpMethods.POST)) .to("http://www.google.com") .to("mock:results");
このメソッドは、文字列定数を使用して少し短く書くことができます。
.setHeader("CamelHttpMethod", constant("POST"))
同等の Spring の例:
<camelContext xmlns="http://activemq.apache.org/camel/schema/spring"> <route> <from uri="direct:start"/> <setHeader name="CamelHttpMethod"> <constant>POST</constant> </setHeader> <to uri="http://www.google.com"/> <to uri="mock:results"/> </route> </camelContext>
28.15. クライアントタイムアウトの使用 - SO_TIMEOUT
HttpSOTimeoutTest 単体テストを参照してください。
28.16. プロキシーの設定
HTTP コンポーネントは、プロキシーを設定する方法を提供します。
from("direct:start") .to("http://oldhost?proxyAuthHost=www.myproxy.com&proxyAuthPort=80");
また、proxyAuthUsername
および proxyAuthPassword
オプションによるプロキシー認証もサポートされています。
28.16.1. URI の外部でプロキシー設定を使用する
システムプロパティーの競合を避けるために、CamelContext または URI からのみプロキシー設定を設定できます。
Java DSL:
context.getGlobalOptions().put("http.proxyHost", "172.168.18.9"); context.getGlobalOptions().put("http.proxyPort", "8080");
Spring XML
<camelContext> <properties> <property key="http.proxyHost" value="172.168.18.9"/> <property key="http.proxyPort" value="8080"/> </properties> </camelContext>
Camel は最初に Java システムまたは CamelContext プロパティーから設定を行い、次にエンドポイントプロキシーオプションが提供されている場合はそれを設定します。
そのため、システムプロパティーをエンドポイントオプションでオーバーライドできます。
使用するスキームを明示的に設定するために設定できる http.proxyScheme
プロパティーもあります。
28.17. 文字セットの設定
POST
を使用してデータを送信している場合は、Exchange
プロパティーを使用して charset
を設定できます。
exchange.setProperty(Exchange.CHARSET_NAME, "ISO-8859-1");
28.17.1. スケジュールされたポーリングのサンプル
このサンプルは、Google ホームページを 10 秒ごとにポーリングし、そのページをファイル message.html
に書き込みます。
from("timer://foo?fixedRate=true&delay=0&period=10000") .to("http://www.google.com") .setHeader(FileComponent.HEADER_FILE_NAME, "message.html") .to("file:target/google");
28.17.2. エンドポイント URI からの URI パラメーター
このサンプルには、Web ブラウザーに入力したものとまったく同じ完全な URI エンドポイントがあります。もちろん、Web ブラウザーと同じように &
文字を区切り文字として使用して、複数の URI パラメーターを設定できます。Camel はここでトリックを行いません。
// we query for Camel at the Google page template.sendBody("http://www.google.com/search?q=Camel", null);
28.17.3. メッセージからの URI パラメーター
Map headers = new HashMap(); headers.put(Exchange.HTTP_QUERY, "q=Camel&lr=lang_en"); // we query for Camel and English language at Google template.sendBody("http://www.google.com/search", null, headers);
上記のヘッダー値では、?
を接頭辞として付けるべきでは ない ことに注意してください。&
文字を使用して、通常どおりパラメーターを区切ることができます。
28.17.4. 応答コードの取得
Exchange.HTTP_RESPONSE_CODE
を使用して Out メッセージヘッダーから値を取得することにより、HTTP コンポーネントから HTTP 応答コードを取得できます。
Exchange exchange = template.send("http://www.google.com/search", new Processor() { public void process(Exchange exchange) throws Exception { exchange.getIn().setHeader(Exchange.HTTP_QUERY, constant("hl=en&q=activemq")); } }); Message out = exchange.getOut(); int responseCode = out.getHeader(Exchange.HTTP_RESPONSE_CODE, Integer.class);
28.18. クッキーの無効化
Cookie を無効にするには、次の URI オプションを追加して、HTTP クライアントが Cookie を無視するように設定します。httpClient.cookieSpec=ignoreCookies
28.19. ストリーミングメッセージ本文による基本認証
NonRepeatableRequestException
を回避するには、次のオプションを追加してプリエンプティブ基本認証を行う必要があります。authenticationPreemptive=true
28.20. 高度な使用方法
HTTP producer をさらに制御する必要がある場合は、さまざまなクラスを設定してカスタム動作を提供できる HttpComponent
を使用する必要があります。
28.20.1. HTTP クライアントの SSL の設定
JSSE 設定ユーティリティーの使用
HTTP コンポーネントは、Camel JSSE Configuration Utility を介して SSL/TLS 設定をサポートします。このユーティリティーは、記述する必要があるコンポーネント固有のコードの量を大幅に削減し、エンドポイントおよびコンポーネントレベルで設定できます。次の例は、HTTP コンポーネントでユーティリティーを使用する方法を示しています。
コンポーネントのプログラムによる設定
KeyStoreParameters ksp = new KeyStoreParameters(); ksp.setResource("/users/home/server/keystore.jks"); ksp.setPassword("keystorePassword"); KeyManagersParameters kmp = new KeyManagersParameters(); kmp.setKeyStore(ksp); kmp.setKeyPassword("keyPassword"); SSLContextParameters scp = new SSLContextParameters(); scp.setKeyManagers(kmp); HttpComponent httpComponent = getContext().getComponent("https", HttpComponent.class); httpComponent.setSslContextParameters(scp);
エンドポイントの Spring DSL ベースの設定
<camel:sslContextParameters id="sslContextParameters"> <camel:keyManagers keyPassword="keyPassword"> <camel:keyStore resource="/users/home/server/keystore.jks" password="keystorePassword"/> </camel:keyManagers> </camel:sslContextParameters> <to uri="https://127.0.0.1/mail/?sslContextParameters=#sslContextParameters"/>
Apache HTTP クライアントを直接設定する
基本的に camel-http コンポーネントは Apache HttpClient の上に構築されます。詳細については、SSL/TLS のカスタマイズ を参照するか、org.apache.camel.component.http.HttpsServerTestSupport
単体テスト基本クラスを調べてください。
カスタム org.apache.camel.component.http.HttpClientConfigurer
を実装して、http クライアントを完全に制御する必要がある場合は、その設定を行うこともできます。
ただし、キーストアとトラストストアを指定する だけ の場合は、Apache HTTP HttpClientConfigurer
を使用してこれを行うことができます。次に例を示します。
KeyStore keystore = ...; KeyStore truststore = ...; SchemeRegistry registry = new SchemeRegistry(); registry.register(new Scheme("https", 443, new SSLSocketFactory(keystore, "mypassword", truststore)));
次に、HttpClientConfigurer
を実装するクラスを作成し、上記の例に従ってキーストアまたはトラストストアを提供する https プロトコルを登録する必要があります。次に、キャメルルートビルダークラスから次のように接続できます。
HttpComponent httpComponent = getContext().getComponent("http", HttpComponent.class); httpComponent.setHttpClientConfigurer(new MyHttpClientConfigurer());
Spring DSL を使用してこれを行う場合、URI を使用して HttpClientConfigurer
を指定できます。以下に例を示します。
<bean id="myHttpClientConfigurer" class="my.https.HttpClientConfigurer"> </bean> <to uri="https://myhostname.com:443/myURL?httpClientConfigurer=myHttpClientConfigurer"/>
上記のように HttpClientConfigurer を実装し、キーストアとトラストストアを設定する限り、問題なく動作します。
HTTPS を使用して落とし穴を認証する
あるエンドユーザーが、HTTPS での認証に問題があると報告しました。この問題は、カスタム設定の org.apache.http.protocol.HttpContext
を提供することで最終的に解決されました。
- 1.HttpContexts の (Spring) ファクトリーを作成します。
public class HttpContextFactory { private String httpHost = "localhost"; private String httpPort = 9001; private BasicHttpContext httpContext = new BasicHttpContext(); private BasicAuthCache authCache = new BasicAuthCache(); private BasicScheme basicAuth = new BasicScheme(); public HttpContext getObject() { authCache.put(new HttpHost(httpHost, httpPort), basicAuth); httpContext.setAttribute(ClientContext.AUTH_CACHE, authCache); return httpContext; } // getter and setter }
- 2.Spring アプリケーションコンテキストファイルで HttpContext を宣言します。
<bean id="myHttpContext" factory-bean="httpContextFactory" factory-method="getObject"/>
- 3.http URL でコンテキストを参照します。
<to uri="https://myhostname.com:443/myURL?httpContext=myHttpContext"/>
異なる SSLContextParameters の使用
HTTP コンポーネントは、コンポーネントごとに org.apache.camel.support.jsse.SSLContextParameters
の 1 つのインスタンスのみをサポートします。2 つ以上の異なるインスタンスを使用する必要がある場合は、以下に示すように複数の HTTP コンポーネントを設定する必要があります。2 つのコンポーネントがあり、それぞれが sslContextParameters
プロパティーの独自のインスタンスを使用しています。
<bean id="http-foo" class="org.apache.camel.component.http.HttpComponent"> <property name="sslContextParameters" ref="sslContextParams1"/> <property name="x509HostnameVerifier" ref="hostnameVerifier"/> </bean> <bean id="http-bar" class="org.apache.camel.component.http.HttpComponent"> <property name="sslContextParameters" ref="sslContextParams2"/> <property name="x509HostnameVerifier" ref="hostnameVerifier"/> </bean>
28.21. Spring Boot Auto-Configuration
Spring Boot で http を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-http-starter</artifactId> </dependency>
コンポーネントは、以下に記載される 38 オプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.component.http.allow-java-serialized-object | リクエストが context-type=application/x-java-serialized-object を使用する場合に Java シリアル化を許可するかどうか。これは、デフォルトでオフになっています。これを有効にすると、Java が受信データをリクエストから Java にデシリアライズし、セキュリティー上のリスクが生じる可能性があることに注意してください。 | false | Boolean |
camel.component.http.auth-caching-disabled | 認証スキームのキャッシュを無効にします。 | false | Boolean |
camel.component.http.automatic-retries-disabled | リクエストの自動回復と再実行を無効にします。 | false | Boolean |
camel.component.http.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.http.client-connection-manager | カスタムおよび共有の HttpClientConnectionManager を使用して接続を管理するには。これが設定されている場合、これは、このコンポーネントによって作成されたすべてのエンドポイントに常に使用されます。オプションは org.apache.http.conn.HttpClientConnectionManager タイプです。 | HttpClientConnectionManager | |
camel.component.http.connect-timeout | 接続が確立されるまでのタイムアウトをミリ秒単位で決定します。タイムアウト値 0 は無限のタイムアウトとして解釈されます。タイムアウト値 0 は無限のタイムアウトとして解釈されます。負の値は未定義として解釈されます (該当する場合はシステムのデフォルト)。 | -1 | Integer |
camel.component.http.connection-request-timeout | 接続マネージャーからの接続を要求するときに使用されるミリ秒単位のタイムアウト。タイムアウト値 0 は無限のタイムアウトとして解釈されます。タイムアウト値 0 は無限のタイムアウトとして解釈されます。負の値は未定義として解釈されます (該当する場合はシステムのデフォルト)。 | -1 | Integer |
camel.component.http.connection-state-disabled | 接続状態の追跡を無効にします。 | false | Boolean |
camel.component.http.connection-time-to-live | 接続が有効になるまでの時間。単位はミリ秒で、デフォルト値は常にキープアライブです。 | Long | |
camel.component.http.connections-per-route | ルートごとの接続の最大数。 | 20 | Integer |
camel.component.http.content-compression-disabled | コンテンツの自動解凍を無効にします。 | false | Boolean |
camel.component.http.cookie-management-disabled | 状態 (Cookie) の管理を無効にします。 | false | Boolean |
camel.component.http.cookie-store | カスタム org.apache.http.client.CookieStore を使用するには。デフォルトでは、メモリー内のみの Cookie ストアである org.apache.http.impl.client.BasicCookieStore が使用されます。bridgeEndpoint=true の場合、Cookie ストアは強制的に noop cookie ストアになることに注意してください。これは、単にブリッジしているだけであるため (たとえば、プロキシーとして動作するため)、Cookie を保存するべきではないためです。オプションは org.apache.http.client.CookieStore タイプです。 | CookieStore | |
camel.component.http.copy-headers | このオプションが true の場合、IN 交換ヘッダーは、コピー戦略に従って OUT 交換ヘッダーにコピーされます。これを false に設定すると、HTTP 応答からのヘッダーのみを含めることができます (IN ヘッダーは伝播されません)。 | true | Boolean |
camel.component.http.default-user-agent-disabled | ユーザーによって何も提供されていない場合、このビルダーによって設定されたデフォルトのユーザーエージェントを無効にします。 | false | Boolean |
camel.component.http.enabled | http コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.http.header-filter-strategy | カスタムの org.apache.camel.spi.HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルターします。このオプションは org.apache.camel.spi.HeaderFilterStrategy タイプです。 | HeaderFilterStrategy | |
camel.component.http.http-binding | カスタム HttpBinding を使用して、Camel メッセージと HttpClient との間のマッピングを制御します。オプションは org.apache.camel.http.common.HttpBinding タイプです。 | HttpBinding | |
camel.component.http.http-client-configurer | カスタム HttpClientConfigurer を使用して、使用される HttpClient の設定を実行します。オプションは org.apache.camel.component.http.HttpClientConfigurer タイプです。 | HttpClientConfigurer | |
camel.component.http.http-configuration | 共有 HttpConfiguration を基本設定として使用するには、以下を行います。オプションは org.apache.camel.http.common.HttpConfiguration タイプです。 | HttpConfiguration | |
camel.component.http.http-context | リクエストの実行時にカスタム org.apache.http.protocol.HttpContext を使用するには。オプションは org.apache.http.protocol.HttpContext タイプです。 | HttpContext | |
camel.component.http.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
camel.component.http.max-total-connections | 接続の最大数。 | 200 | Integer |
camel.component.http.proxy-auth-domain | 使用するプロキシー認証ドメイン。 | String | |
camel.component.http.proxy-auth-host | プロキシー認証ホスト。 | String | |
camel.component.http.proxy-auth-method | 使用するプロキシー認証方法。 | String | |
camel.component.http.proxy-auth-nt-host | NTML で使用するプロキシー認証ドメイン (ワークステーション名)。 | String | |
camel.component.http.proxy-auth-password | プロキシー認証パスワード。 | String | |
camel.component.http.proxy-auth-port | プロキシー認証ポート。 | Integer | |
camel.component.http.proxy-auth-username | プロキシー認証のユーザー名。 | String | |
camel.component.http.redirect-handling-disabled | 自動リダイレクト処理を無効にします。 | false | Boolean |
camel.component.http.response-payload-streaming-threshold | このバイト単位のしきい値は、応答ペイロードをメモリーにバイト配列として格納するか、ストリーミングベースにするかを制御します。常にストリーミングモードを使用するには、これを -1 に設定します。 | 8192 | Integer |
camel.component.http.skip-request-headers | すべての Camel ヘッダーを HTTP リクエストヘッダーとしてマッピングすることをスキップするかどうか。HTTP 要求に含める必要がある Camel ヘッダーからのデータがない場合は、これにより、JVM ガベージコレクターの多くのオブジェクト割り当てによるオーバーヘッドの解析を回避できます。 | false | Boolean |
camel.component.http.skip-response-headers | すべての HTTP 応答ヘッダーの Camel ヘッダーへのマッピングをスキップするかどうか。HTTP ヘッダーから必要なデータがない場合は、これにより、JVM ガベージコレクターの多くのオブジェクト割り当てによる解析のオーバーヘッドを回避できます。 | false | Boolean |
camel.component.http.socket-timeout | ソケットのタイムアウトをミリ秒単位で定義します。これは、データを待機するためのタイムアウト、または別の言い方をすれば、2 つの連続するデータパケット間の最大非アクティブ期間です)。タイムアウト値 0 は無限のタイムアウトとして解釈されます。負の値は未定義として解釈されます (該当する場合はシステムのデフォルト)。 | -1 | Integer |
camel.component.http.ssl-context-parameters | SSLContextParameters を使用してセキュリティーを設定する場合。重要: HttpComponent ごとにサポートされる org.apache.camel.support.jsse.SSLContextParameters のインスタンスは 1 つだけです。2 つ以上の異なるインスタンスを使用する必要がある場合は、必要なインスタンスごとに新しい HttpComponent を定義する必要があります。オプションは org.apache.camel.support.jsse.SSLContextParameters タイプです。 | SSLContextParameters | |
camel.component.http.use-global-ssl-context-parameters | グローバル SSL コンテキストパラメーターの使用を有効にします。 | false | Boolean |
camel.component.http.x509-hostname-verifier | DefaultHostnameVerifier や NoopHostnameVerifier などのカスタム X509HostnameVerifier を使用します。オプションは javax.net.ssl.HostnameVerifier タイプです。 | HostnameVerifier |
第29章 Infinispan
producer と consumer の両方がサポート対象
このコンポーネントを使用すると、Hot Rod プロトコルを使用して Infinispan 分散 Data Grid/キャッシュと対話できます。Infinispan は、Java で記述された、非常にスケーラブルで可用性の高いキー/バリューデータストアおよび Data Grid プラットフォームです。
Maven を使用する場合は、次の依存関係を pom.xml
に追加する必要があります。
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-infinispan</artifactId> <version>{CamelSBVersion}</version> <!-- use the same version as your Camel core version --> </dependency>
29.1. URI 形式
infinispan://cacheName?[options]
プロデューサは、HotRod プロトコルを使用してメッセージをリモートキャッシュに送信できます。consumer は、HotRod プロトコルを使用してリモートキャッシュからのイベントをリッスンできます。
29.2. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
29.2.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
29.2.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
29.3. コンポーネントオプション
Infinispan コンポーネントは、以下に示す 26 のオプションをサポートしています。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
configuration (共通) | コンポーネントの設定。 | InfinispanRemoteConfiguration | |
hosts (共通) | Infinispan インスタンスのキャッシュのホストを指定します。 | String | |
queryBuilder (共通) | クエリービルダーを指定します。 | InfinispanQueryBuilder | |
secure (共通) | 安全な Infinispan インスタンスに接続するかどうかを定義します。 | false | boolean |
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
customListener (consumer) | 提供されている場合は、使用中のカスタムリスナーを返します。 | InfinispanRemoteCustomListener | |
eventTypes (consumer) | consumer によって登録される一連のイベントタイプを指定します。複数のイベントはコンマで区切ることができます。可能なイベントタイプは、CLIENT_CACHE_ENTRY_CREATED、CLIENT_CACHE_ENTRY_MODIFIED、CLIENT_CACHE_ENTRY_REMOVED、CLIENT_CACHE_ENTRY_EXPIRED、CLIENT_CACHE_FAILOVER です。 | String | |
defaultValue (producer) | 一部の producer 操作に対して特定のデフォルト値を設定します。 | オブジェクト | |
key (producer) | producer 操作用の特定のキーを設定します。 | オブジェクト | |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
oldValue (producer) | 一部の producer 操作に特定の古い値を設定します。 | オブジェクト | |
operation (producer) | 実行する操作。 列挙値:
| PUT | InfinispanOperation |
value (producer) | producer 操作に特定の値を設定します。 | オブジェクト | |
password (セキュリティー) | infinispan インスタンスにアクセスするためのパスワードを定義します。 | String | |
saslMechanism ( security) | infinispan インスタンスにアクセスするための SASL メカニズムを定義します。 | String | |
securityRealm ( security) | infinispan インスタンスにアクセスするためのセキュリティーレルムを定義します。 | String | |
securityServerName ( security) | infinispan インスタンスにアクセスするためのセキュリティーサーバー名を定義します。 | String | |
username (セキュリティー) | infinispan インスタンスにアクセスするためのユーザー名を定義します。 | String | |
autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
cacheContainer (上級) | Autowired 接続するキャッシュコンテナーを指定します。 | RemoteCacheManager | |
cacheContainerConfiguration (上級) | Autowired CacheContainer 設定。cacheContainer が定義されていない場合に使用されます。 | 設定 | |
configurationProperties (上級) | CacheManager の実装固有のプロパティー。 | マップ | |
configurationUri (上級) | CacheManager の実装固有の URI。 | String | |
flags (上級) | 各キャッシュ呼び出しでデフォルトで適用される org.infinispan.client.hotrod.Flag のコンマ区切りリスト。 | String | |
remappingFunction (上級) | 計算操作で使用する特定の remappingFunction を設定します。 | BiFunction | |
resultHeader (上級) | メッセージ本文ではなく、ヘッダーに操作結果を格納します。デフォルトでは、resultHeader == null で、クエリー結果はメッセージ本文に格納され、メッセージ本文の既存のコンテンツは破棄されます。resultHeader が設定されている場合、値はクエリー結果を格納するヘッダーの名前として使用され、元のメッセージ本文は保持されます。この値は、CamelInfinispanOperationResultHeader という名前のメッセージヘッダーでオーバーライドできます。 | String |
29.4. エンドポイントオプション
Infinispan エンドポイントは、URI 構文を使用して設定されます。
infinispan:cacheName
パスおよびクエリーパラメーターを使用します。
29.4.1. パスパラメーター(1 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
cacheName (共通) | 必須 使用するキャッシュの名前。current を使用して、現在設定されているキャッシュされたマネージャーの既存のキャッシュ名を使用します。または、デフォルトのキャッシュマネージャー名に default を使用します。 | String |
29.4.2. クエリーパラメーター (26 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
hosts (共通) | Infinispan インスタンスのキャッシュのホストを指定します。 | String | |
queryBuilder (共通) | クエリービルダーを指定します。 | InfinispanQueryBuilder | |
secure (共通) | 安全な Infinispan インスタンスに接続するかどうかを定義します。 | false | boolean |
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
customListener (consumer) | 提供されている場合は、使用中のカスタムリスナーを返します。 | InfinispanRemoteCustomListener | |
eventTypes (consumer) | consumer によって登録される一連のイベントタイプを指定します。複数のイベントはコンマで区切ることができます。可能なイベントタイプは、CLIENT_CACHE_ENTRY_CREATED、CLIENT_CACHE_ENTRY_MODIFIED、CLIENT_CACHE_ENTRY_REMOVED、CLIENT_CACHE_ENTRY_EXPIRED、CLIENT_CACHE_FAILOVER です。 | String | |
exceptionHandler (consumer (上級)) | consumer によるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、consumer は例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
exchangePattern (consumer (上級)) | consumer がエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
defaultValue (producer) | 一部の producer 操作に対して特定のデフォルト値を設定します。 | オブジェクト | |
key (producer) | producer 操作用の特定のキーを設定します。 | オブジェクト | |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
oldValue (producer) | 一部の producer 操作に特定の古い値を設定します。 | オブジェクト | |
operation (producer) | 実行する操作。 列挙値:
| PUT | InfinispanOperation |
value (producer) | producer 操作に特定の値を設定します。 | オブジェクト | |
password (セキュリティー) | infinispan インスタンスにアクセスするためのパスワードを定義します。 | String | |
saslMechanism ( security) | infinispan インスタンスにアクセスするための SASL メカニズムを定義します。 | String | |
securityRealm ( security) | infinispan インスタンスにアクセスするためのセキュリティーレルムを定義します。 | String | |
securityServerName ( security) | infinispan インスタンスにアクセスするためのセキュリティーサーバー名を定義します。 | String | |
username (セキュリティー) | infinispan インスタンスにアクセスするためのユーザー名を定義します。 | String | |
cacheContainer (上級) | Autowired 接続するキャッシュコンテナーを指定します。 | RemoteCacheManager | |
cacheContainerConfiguration (上級) | Autowired CacheContainer 設定。cacheContainer が定義されていない場合に使用されます。 | 設定 | |
configurationProperties (上級) | CacheManager の実装固有のプロパティー。 | マップ | |
configurationUri (上級) | CacheManager の実装固有の URI。 | String | |
flags (上級) | 各キャッシュ呼び出しでデフォルトで適用される org.infinispan.client.hotrod.Flag のコンマ区切りリスト。 | String | |
remappingFunction (上級) | 計算操作で使用する特定の remappingFunction を設定します。 | BiFunction | |
resultHeader (上級) | メッセージ本文ではなく、ヘッダーに操作結果を格納します。デフォルトでは、resultHeader == null で、クエリー結果はメッセージ本文に格納され、メッセージ本文の既存のコンテンツは破棄されます。resultHeader が設定されている場合、値はクエリー結果を格納するヘッダーの名前として使用され、元のメッセージ本文は保持されます。この値は、CamelInfinispanOperationResultHeader という名前のメッセージヘッダーでオーバーライドできます。 | String |
29.5. キャメルオペレーション
このセクションでは、使用可能なすべての操作とそのヘッダー情報を一覧表示します。
操作名 | 説明 |
---|---|
InfinispanOperation.PUT | オプションで有効期限付きで、キーと値のペアをキャッシュに入れます |
InfinispanOperation.PUTASYNC | オプションで有効期限付きで、キーと値のペアを非同期的にキャッシュに入れます |
InfinispanOperation.PUTIFABSENT | キーと値のペアが存在しない場合はキャッシュに入れ、オプションで有効期限を設定します |
InfinispanOperation.PUTIFABSENTASYNC | キーと値のペアが存在しない場合は、非同期でキャッシュに入れます。オプションで有効期限を設定します |
必要なヘッダー:
- CamelInfinispanKey
- CamelInfinispanValue
任意のヘッダー:
- CamelInfinispanLifespanTime
- CamelInfinispanLifespanTimeUnit
- CamelInfinispanMaxIdleTime
- CamelInfinispanMaxIdleTimeUnit
結果ヘッダー:
- CamelInfinispanOperationResult
操作名 | 説明 |
---|---|
InfinispanOperation.PUTALL | オプションで有効期限付きで、複数のエントリーをキャッシュに追加します |
CamelInfinispanOperation.PUTALLASYNC | 複数のエントリーをキャッシュに非同期的に追加します。オプションで有効期限を設定します |
必要なヘッダー:
- CamelInfinispanMap
任意のヘッダー:
- CamelInfinispanLifespanTime
- CamelInfinispanLifespanTimeUnit
- CamelInfinispanMaxIdleTime
- CamelInfinispanMaxIdleTimeUnit
操作名 | 説明 |
---|---|
InfinispanOperation.GET | 特定のキーに関連付けられた値をキャッシュから取得します |
InfinispanOperation.GETORDEFAULT | 特定のキーに関連付けられた値またはデフォルト値をキャッシュから取得します |
必要なヘッダー:
- CamelInfinispanKey
操作名 | 説明 |
---|---|
InfinispanOperation.CONTAINSKEY | キャッシュに特定のキーが含まれているかどうかを判断します |
結果ヘッダー
- CamelInfinispanKey
結果ヘッダー
- CamelInfinispanOperationResult
操作名 | 説明 |
---|---|
InfinispanOperation.CONTAINSVALUE | キャッシュに特定の値が含まれているかどうかを判断します |
必要なヘッダー:
- CamelInfinispanKey
操作名 | 説明 |
---|---|
InfinispanOperation.REMOVE | オプションで、値が指定された値と一致する場合にのみ、キャッシュからエントリーを削除します |
InfinispanOperation.REMOVEASYNC | オプションで、値が指定された値と一致する場合にのみ、キャッシュからエントリーを非同期的に削除します |
必要なヘッダー:
- CamelInfinispanKey
任意のヘッダー:
- CamelInfinispanValue
結果ヘッダー:
- CamelInfinispanOperationResult
操作名 | 説明 |
---|---|
InfinispanOperation.REPLACE | オプションで有効期限付きで、条件付きでキャッシュ内のエントリーを置き換えます |
InfinispanOperation.REPLACEASYNC | オプションで有効期限付きで、キャッシュ内のエントリーを条件付きで非同期的に置き換えます |
必要なヘッダー:
- CamelInfinispanKey
- CamelInfinispanValue
- CamelInfinispanOldValue
任意のヘッダー:
- CamelInfinispanLifespanTime
- CamelInfinispanLifespanTimeUnit
- CamelInfinispanMaxIdleTime
- CamelInfinispanMaxIdleTimeUnit
結果ヘッダー:
- CamelInfinispanOperationResult
操作名 | 説明 |
---|---|
InfinispanOperation.CLEAR | キャッシュをクリアします |
InfinispanOperation.CLEARASYNC | キャッシュを非同期的にクリアします |
操作名 | 説明 |
---|---|
InfinispanOperation.SIZE | キャッシュ内のエントリー数を返します |
結果ヘッダー
- CamelInfinispanOperationResult
操作名 | 説明 |
---|---|
InfinispanOperation.STATS | キャッシュに関する統計を返します |
結果ヘッダー:
- CamelInfinispanOperationResult
操作名 | 説明 |
---|---|
InfinispanOperation.QUERY | キャッシュでクエリーを実行します |
必要なヘッダー:
- CamelInfinispanQueryBuilder
結果ヘッダー:
- CamelInfinispanOperationResult
put (key、value) や remove (key) のような書き込みメソッドは、デフォルトでは以前の値を返しません。
29.6. メッセージヘッダー
名前 | デフォルト値 | タイプ | コンテキスト | 説明 |
---|---|---|---|---|
CamelInfinispanCacheName |
| String | 共有 | 操作またはイベントに参加するキャッシュ。 |
CamelInfinispanOperation |
| InfinispanOperation | Producer | 実行する操作。 |
CamelInfinispanMap |
| Map | Producer | CamelInfinispanOperationPutAll 操作の場合に使用する Map |
CamelInfinispanKey |
| Object | 共有 | 操作を実行するキー、またはイベントを生成するキー。 |
CamelInfinispanValue |
| Object | Producer | 操作に使用する値。 |
CamelInfinispanEventType |
| String | Consumer | 受信したイベントのタイプ。 |
CamelInfinispanLifespanTime |
| long | Producer | キャッシュ内の値の有効期間。負の値は無限大として解釈されます。 |
CamelInfinispanTimeUnit |
| String | Producer | エントリーのライフスパン時間の時間単位。 |
CamelInfinispanMaxIdleTime |
| long | Producer | エントリーが期限切れと見なされるまでにアイドル状態が許可される最大時間。 |
CamelInfinispanMaxIdleTimeUnit |
| String | Producer | エントリーの最大アイドル時間の時間単位。 |
CamelInfinispanQueryBuilder | null | InfinispanQueryBuilder | producer | QUERY コマンドに使用する QueryBuilde。存在しない場合、コマンドのデフォルトは InifinispanConfiguration のものになります。 |
CamelInfinispanOperationResultHeader | null | String | producer | 操作結果をメッセージ本文ではなくヘッダーに格納する |
29.7. 例
キー/値を名前付きキャッシュに入れます。
from("direct:start") .setHeader(InfinispanConstants.OPERATION).constant(InfinispanOperation.PUT) (1) .setHeader(InfinispanConstants.KEY).constant("123") (2) .to("infinispan:myCacheName&cacheContainer=#cacheContainer"); (3)
詳細は以下のようになります。
- 1 - 実行する操作を設定する
- 2 - キャッシュ内の要素を識別するために使用されるキーを設定します
3 - レジストリーから設定されたキャッシュマネージャー
cacheContainer
を使用して、myCacheName
という名前のキャッシュに要素を配置します。次の例のように、エントリーの有効期限が切れてキャッシュから削除されるまでの有効期間および/またはアイドル時間を設定できます。
from("direct:start") .setHeader(InfinispanConstants.OPERATION).constant(InfinispanOperation.GET) .setHeader(InfinispanConstants.KEY).constant("123") .setHeader(InfinispanConstants.LIFESPAN_TIME).constant(100L) (1) .setHeader(InfinispanConstants.LIFESPAN_TIME_UNIT.constant(TimeUnit.MILLISECONDS.toString()) (2) .to("infinispan:myCacheName");
ここで、
- 1 - エントリーの寿命を設定します
- 2 - 寿命の時間単位を設定します
クエリー
from("direct:start") .setHeader(InfinispanConstants.OPERATION, InfinispanConstants.QUERY) .setHeader(InfinispanConstants.QUERY_BUILDER, new InfinispanQueryBuilder() { @Override public Query build(QueryFactory<Query> qf) { return qf.from(User.class).having("name").like("%abc%").build(); } }) .to("infinispan:myCacheName?cacheContainer=#cacheManager") ;
ドメインオブジェクトの .proto 記述子は、リモート Data Grid サーバーに登録する必要があります。公式の Infinispan ドキュメントの リモートクエリーの例 を参照してください。
カスタムリスナー
from("infinispan://?cacheContainer=#cacheManager&customListener=#myCustomListener") .to("mock:result");
myCustomListener
のインスタンスが存在する必要があり、Camel は Registry
からそれを検索できる必要があります。ユーザーは org.apache.camel.component.infinispan.remote.InfinispanRemoteCustomListener
クラスを拡張し、結果のクラスに @ClientListener
でアノテーションを付けることをお勧めします。これはパッケージ org.infinispan.client.hotrod.annotation
にあります。
29.8. Infinispan ベースのべき等リポジトリーの使用
このセクションでは、Infinispan ベースのべき等リポジトリーを使用します。
Java の例
InfinispanRemoteConfiguration conf = new InfinispanRemoteConfiguration(); (1) conf.setHosts("localhost:1122") InfinispanRemoteIdempotentRepository repo = new InfinispanRemoteIdempotentRepository("idempotent"); (2) repo.setConfiguration(conf); context.addRoutes(new RouteBuilder() { @Override public void configure() { from("direct:start") .idempotentConsumer(header("MessageID"), repo) (3) .to("mock:result"); } });
ここで、
- 1 - キャッシュを設定する
- 2 - リポジトリー Bean を設定する
- 3 - リポジトリーをルートに設定する
XML の例
<bean id="infinispanRepo" class="org.apache.camel.component.infinispan.remote.InfinispanRemoteIdempotentRepository" destroy-method="stop"> <constructor-arg value="idempotent"/> (1) <property name="configuration"> (2) <bean class="org.apache.camel.component.infinispan.remote.InfinispanRemoteConfiguration"> <property name="hosts" value="localhost:11222"/> </bean> </property> </bean> <camelContext xmlns="http://camel.apache.org/schema/spring"> <route> <from uri="direct:start" /> <idempotentConsumer messageIdRepositoryRef="infinispanRepo"> (3) <header>MessageID</header> <to uri="mock:result" /> </idempotentConsumer> </route> </camelContext>
ここで、
- 1 - リポジトリーで使用されるキャッシュの名前を設定します
- 2 - リポジトリー Bean を設定する
- 3 - リポジトリーをルートに設定する
29.9. Infinispan ベースの集計リポジトリーの使用
このセクションでは、Infinispan ベースの集計リポジトリーを使用します。
Java の例
InfinispanRemoteConfiguration conf = new InfinispanRemoteConfiguration(); (1) conf.setHosts("localhost:1122") InfinispanRemoteAggregationRepository repo = new InfinispanRemoteAggregationRepository(); (2) repo.setCacheName("aggregation"); repo.setConfiguration(conf); context.addRoutes(new RouteBuilder() { @Override public void configure() { from("direct:start") .aggregate(header("MessageID")) .completionSize(3) .aggregationRepository(repo) (3) .aggregationStrategyRef("myStrategy") .to("mock:result"); } });
ここで、
- 1 - キャッシュを設定する
- 2 - リポジトリー Bean を作成する
- 3 - リポジトリーをルートに設定する
XML の例
<bean id="infinispanRepo" class="org.apache.camel.component.infinispan.remote.InfinispanRemoteAggregationRepository" destroy-method="stop"> <constructor-arg value="aggregation"/> (1) <property name="configuration"> (2) <bean class="org.apache.camel.component.infinispan.remote.InfinispanRemoteConfiguration"> <property name="hosts" value="localhost:11222"/> </bean> </property> </bean> <camelContext xmlns="http://camel.apache.org/schema/spring"> <route> <from uri="direct:start" /> <aggregate strategyRef="myStrategy" completionSize="3" aggregationRepositoryRef="infinispanRepo"> (3) <correlationExpression> <header>MessageID</header> </correlationExpression> <to uri="mock:result"/> </aggregate> </route> </camelContext>
ここで、
- 1 - リポジトリーで使用されるキャッシュの名前を設定します
- 2 - リポジトリー Bean を設定する
- 3 - リポジトリーをルートに設定する
Infinispan 11 のリリースでは、作成されたキャッシュにエンコーディング設定を設定する必要があります。これは、イベントを消費する場合にも重要です。詳細については、公式の Infinispan ドキュメントの Data Encoding と MediaTypes を参照してください。
29.10. Spring Boot Auto-Configuration
Spring Boot で infinispan を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-infinispan-starter</artifactId> </dependency>
コンポーネントは、以下に記載される 23 のオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.component.infinispan.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.infinispan.bridge-error-handler | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | Boolean |
camel.component.infinispan.cache-container | 接続するキャッシュコンテナーを指定します。オプションは org.infinispan.client.hotrod.RemoteCacheManager タイプです。 | RemoteCacheManager | |
camel.component.infinispan.cache-container-configuration | CacheContainer 設定。cacheContainer が定義されていない場合に使用されます。オプションは org.infinispan.client.hotrod.configuration.Configuration タイプです。 | 設定 | |
camel.component.infinispan.configuration | コンポーネントの設定。オプションは org.apache.camel.component.infinispan.remote.InfinispanRemoteConfiguration タイプです。 | InfinispanRemoteConfiguration | |
camel.component.infinispan.configuration-properties | CacheManager の実装固有のプロパティー。 | マップ | |
camel.component.infinispan.configuration-uri | CacheManager の実装固有の URI。 | String | |
camel.component.infinispan.custom-listener | 提供されている場合は、使用中のカスタムリスナーを返します。オプションは org.apache.camel.component.infinispan.remote.InfinispanRemoteCustomListener タイプです。 | InfinispanRemoteCustomListener | |
camel.component.infinispan.enabled | infinispan コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.infinispan.event-types | consumer によって登録される一連のイベントタイプを指定します。複数のイベントはコンマで区切ることができます。可能なイベントタイプは、CLIENT_CACHE_ENTRY_CREATED、CLIENT_CACHE_ENTRY_MODIFIED、CLIENT_CACHE_ENTRY_REMOVED、CLIENT_CACHE_ENTRY_EXPIRED、CLIENT_CACHE_FAILOVER です。 | String | |
camel.component.infinispan.flags | 各キャッシュ呼び出しでデフォルトで適用される org.infinispan.client.hotrod.Flag のコンマ区切りリスト。 | String | |
camel.component.infinispan.hosts | Infinispan インスタンスのキャッシュのホストを指定します。 | String | |
camel.component.infinispan.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
camel.component.infinispan.operation | 実行する操作。 | InfinispanOperation | |
camel.component.infinispan.password | infinispan インスタンスにアクセスするためのパスワードを定義します。 | String | |
camel.component.infinispan.query-builder | クエリービルダーを指定します。オプションは org.apache.camel.component.infinispan.InfinispanQueryBuilder タイプです。 | InfinispanQueryBuilder | |
camel.component.infinispan.remapping-function | 計算操作で使用する特定の remappingFunction を設定します。オプションは java.util.function.BiFunction 型です。 | BiFunction | |
camel.component.infinispan.result-header | メッセージ本文ではなく、ヘッダーに操作結果を格納します。デフォルトでは、resultHeader == null で、クエリー結果はメッセージ本文に格納され、メッセージ本文の既存のコンテンツは破棄されます。resultHeader が設定されている場合、値はクエリー結果を格納するヘッダーの名前として使用され、元のメッセージ本文は保持されます。この値は、CamelInfinispanOperationResultHeader という名前のメッセージヘッダーでオーバーライドできます。 | String | |
camel.component.infinispan.sasl-mechanism | infinispan インスタンスにアクセスするための SASL メカニズムを定義します。 | String | |
camel.component.infinispan.secure | 安全な Infinispan インスタンスに接続するかどうかを定義します。 | false | Boolean |
camel.component.infinispan.security-realm | infinispan インスタンスにアクセスするためのセキュリティーレルムを定義します。 | String | |
camel.component.infinispan.security-server-name | infinispan インスタンスにアクセスするためのセキュリティーサーバー名を定義します。 | String | |
camel.component.infinispan.username | infinispan インスタンスにアクセスするためのユーザー名を定義します。 | String |
第30章 Jira
producer と consumer の両方がサポート対象
JIRA コンポーネントは、Atlassian の REST Java Client for JIRA をカプセル化することにより、JIRA API と対話します。現在、新しい問題と新しいコメントのポーリングを提供しています。また、新しい課題の作成、コメントの追加、課題の変更、ウォッチャーの追加/削除、添付ファイルの追加、課題の状態の遷移も行うことができます。
このエンドポイントは Webhook ではなく、単純なポーリングに依存しています。理由は次のとおりです。
- 信頼性安定性への懸念
- 通常、ポーリングするペイロードの種類は大きくありません (さらに、ページングは API で利用できます)。
- Webhook が失敗するような一般公開されていない場所で実行されているアプリをサポートする必要性
JIRA API はかなり拡張性があることに注意してください。したがって、このコンポーネントを簡単に拡張して、追加の相互作用を提供できます。
Maven ユーザーは、このコンポーネントの pom.xml に以下の依存関係を追加する必要があります。
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-jira</artifactId> <version>${camel-version}</version> </dependency>
30.1. URI 形式
jira://type[?options]
Jira タイプは次の操作を受け入れます。
consumer 向け:
- newIssues: ルートの開始後に新しい課題のみを取得します
- newComments: ルートの開始後に新しいコメントのみを取得します
- watchUpdates: 提供された jql に基づいて、更新されたフィールド/課題のみを取得します
生産者向け:
- addIssue: 問題を追加します
- addComment: 特定の問題にコメントを追加します
- attach: 特定の問題に添付ファイルを追加します
- deleteIssue: 特定の問題を削除します
- updateIssue: 特定の問題の更新フィールド
- transitionIssue: 特定の問題のステータスを移行します
- ウォッチャー: 特定の問題のウォッチャーを追加/削除します
Jira は完全にカスタマイズ可能であるため、異なる Jira サーバー間で変更される可能性があるため、プロジェクトとワークフローのフィールド ID が存在することを確認する必要があります。
30.2. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
30.2.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
30.2.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
30.3. コンポーネントオプション
Jira コンポーネントは、以下に示す 12 のオプションをサポートしています。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
delay (共通) | 次のポーリングまでの経過時間 (ミリ秒)。 | 6000 | Integer |
jiraUrl (共通) | 必須 Jira サーバーの URL。例: . | String | |
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
configuration (上級) | 共有ベース Jira 設定を使用するには。 | JiraConfiguration | |
accessToken (セキュリティー) | (OAuth のみ) Jira サーバーによって生成されたアクセストークン。 | String | |
consumerKey (セキュリティー) | (OAuth のみ) Jira 設定の consumer キー。 | String | |
password (セキュリティー) | Basic 認証のみ) Jira サーバーに対して認証するためのパスワード。ユーザー名の Basic 認証が使用されている場合にのみ使用します。 | String | |
privateKey (セキュリティー) | (OAuth のみ) サーバーへの会話を暗号化するためにクライアントによって生成された秘密鍵。 | String | |
username (セキュリティー) | (Basic 認証のみ) Jira サーバーに対して認証するためのユーザー名。Jira サーバーで OAuth が有効になっていない場合にのみ使用します。ユーザー名と OAuth トークンパラメーターを設定しないでください。両方が設定されている場合は、ユーザー名の Basic 認証が優先されます。 | String | |
検証コード (セキュリティー) | (OAuth のみ) 認証プロセスの最初のステップで生成された Jira からの検証コード。 | String |
30.4. エンドポイントオプション
Jira エンドポイントは、URI 構文を使用して設定されます。
jira:type
パスおよびクエリーパラメーターを使用します。
30.4.1. パスパラメーター(1 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
type (共通) | 実行するために 必要な 操作。consumer: NewIssues、NewComments。producer: AddIssue、AttachFile、DeleteIssue、TransitionIssue、UpdateIssue、Watchers。詳細は、このクラスの javadoc の説明を参照してください。 列挙値:
| JiraType |
30.4.2. クエリーパラメーター(16 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
delay (共通) | 次のポーリングまでの経過時間 (ミリ秒)。 | 6000 | Integer |
jiraUrl (共通) | 必須 Jira サーバーの URL。例: . | String | |
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
jql (consumer) | JQL は、必要なデータを取得できるようにする JIRA のクエリー言語です。例: jql=project=MyProject ここで、MyProject は Jira のプロダクトキーです。RAW() を使用し、その中に JQL を設定してラクダによる解析を防ぐことが重要です。例: RAW(project in (MYP、COM) AND resolution = Unresolved)。 | String | |
maxResults (consumer) | 検索する課題の最大数。 | 50 | Integer |
sendOnlyUpdatedField (consumer) | 交換本体または課題オブジェクトで変更されたフィールドのみを送信するためのインジケーター。デフォルトでは、consumer は変更されたフィールドのみを送信します。 | true | boolean |
watchedFields (consumer) | 変更を監視するフィールドのコンマ区切りリスト。ステータス、優先度がデフォルトです。 | ステータス、優先度 | String |
exceptionHandler (consumer (上級)) | consumer によるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、consumer は例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
exchangePattern (consumer (上級)) | consumer がエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
accessToken (セキュリティー) | (OAuth のみ) Jira サーバーによって生成されたアクセストークン。 | String | |
consumerKey (セキュリティー) | (OAuth のみ) Jira 設定の consumer キー。 | String | |
password (セキュリティー) | Basic 認証のみ) Jira サーバーに対して認証するためのパスワード。ユーザー名の Basic 認証が使用されている場合にのみ使用します。 | String | |
privateKey (セキュリティー) | (OAuth のみ) サーバーへの会話を暗号化するためにクライアントによって生成された秘密鍵。 | String | |
username (セキュリティー) | (Basic 認証のみ) Jira サーバーに対して認証するためのユーザー名。Jira サーバーで OAuth が有効になっていない場合にのみ使用します。ユーザー名と OAuth トークンパラメーターを設定しないでください。両方が設定されている場合は、ユーザー名の Basic 認証が優先されます。 | String | |
検証コード (セキュリティー) | (OAuth のみ) 認証プロセスの最初のステップで生成された Jira からの検証コード。 | String |
30.5. クライアントファクトリー
レジストリーで JiraRestClientFactory を JiraRestClientFactory
という名前でバインドして、Jira エンドポイントで自動的に設定することができます。
30.6. 認証
Camel-jira は Basic 認証 と OAuth 3 legged authentication をサポートしています。
ユーザーとシステムに最高のセキュリティーを提供するため、可能な限り OAuth を使用することをお勧めします。
30.6.1. 基本認証要件:
- ユーザー名とパスワード
30.6.2. OAuth 認証の要件:
Jira OAuth ドキュメント のチュートリアルに従って、クライアントプライベートキー、consumer キー、検証コード、およびアクセストークンを生成します。
- システム上でローカルに生成された秘密鍵。
- Jira サーバーによって生成された確認コード。
- Jira サーバー設定で設定された consumer キー。
- Jira サーバーによって生成されたアクセストークン。
30.7. JQL
JQL URI オプションは、両方の consumer エンドポイントで使用されます。理論的には、プロジェクトキーなどの項目は URI オプション自体である可能性があります。ただし、JQL の使用を要求することで、consumer はより柔軟で強力になります。
最低限、consumer は以下を必要とします。
jira://[type]?[required options]&jql=project=[project key]
注意すべき重要な点の 1 つは、newIssues consumer が JQL を次のように自動的に設定することです。
-
ORDER BY key desc
を JQL に追加します -
先頭に
id > latestIssueId
を追加して、camel ルートの開始後に追加された課題を取得します。
これは、プロジェクト内のすべての問題をインデックス化するのではなく、起動処理を最適化するためです。
もう 1 つの注意点は、同様に、newComments consumer は、プロジェクト内のすべての問題 と コメントをインデックス化する必要があることです。したがって、大規模なプロジェクトでは、JQL 式を可能な限り最適化することが 不可欠 です。たとえば、JIRA ツールキットプラグインにはコメント数カスタムフィールドが含まれています。クエリーでコメント数 > 0 を使用します。また、状態 (status=Open) に基づいて最小化したり、ポーリングの遅延を増やしたりするなどしてください。以下に例を示します。
jira://[type]?[required options]&jql=RAW(project=[project key] AND status in (Open, \"Coding In Progress\") AND \"Number of comments\">0)"
30.8. 操作
Jira 操作を使用するときに設定する必要があるヘッダーのリストを参照してください。producer の作成者フィールドは、Jira 側で認証済みユーザーに自動的に設定されます。
必須フィールドが設定されていない場合は、IllegalArgumentException が出力されます。
課題タイプ、優先度、トランジションなどのフィールドに id
を必要とする操作があります。Jira のインストールとプロジェクトのワークフローによって異なる可能性があるため、Jira プロジェクトで有効な id
を確認してください。
30.9. AddIssue
必須:
-
ProjectKey
: プロジェクトキー。例: CAMEL、HHH、MYP。 -
IssueTypeId
またはIssueTypeName
: 課題タイプのid
または課題タイプの名前。有効なリストはhttp://jira_server/rest/api/2/issue/createmeta?projectKeys=SAMPLE_KEY
で確認できます。 -
IssueSummary
: 問題の概要。
オプション:
-
IssueAssignee
: 担当者ユーザー -
IssuePriorityId
またはIssuePriorityName
: 課題の優先度。有効なリストはhttp://jira_server/rest/api/2/priority
で確認できます。 -
IssueComponents
: 有効なコンポーネント名を含む文字列のリスト。 -
IssueWatchersAdd
: ウォッチャーリストに追加するユーザー名を含む文字列のリスト。 -
IssueDescription
: 問題の説明。
30.10. AddComment
必須:
-
IssueKey
: 発行キー識別子。 - 交換の本体は説明です。
30.11. アタッチ
呼び出しごとに 1 つのファイルのみを添付する必要があります。
必須:
-
IssueKey
: 発行キー識別子。 -
交換の本体は
File
タイプである必要があります
30.12. DeleteIssue
必須:
-
IssueKey
: 発行キー識別子。
30.13. 移行の問題
必須:
-
IssueKey
: 発行キー識別子。 -
IssueTransitionId
: 課題トランジションid
。 - 交換の本体は説明です。
30.14. 更新の問題
-
IssueKey
: 発行キー識別子。 -
IssueTypeId
またはIssueTypeName
: 課題タイプのid
または課題タイプの名前。有効なリストはhttp://jira_server/rest/api/2/issue/createmeta?projectKeys=SAMPLE_KEY
で確認できます。 -
IssueSummary
: 問題の概要。 -
IssueAssignee
: 担当者ユーザー -
IssuePriorityId
またはIssuePriorityName
: 課題の優先度。有効なリストはhttp://jira_server/rest/api/2/priority
で確認できます。 -
IssueComponents
: 有効なコンポーネント名を含む文字列のリスト。 -
IssueDescription
: 問題の説明。
30.15. ウォッチャー
-
IssueKey
: 発行キー識別子。 -
IssueWatchersAdd
: ウォッチャーリストに追加するユーザー名を含む文字列のリスト。 -
IssueWatchersRemove
: ウォッチャーリストから削除するユーザー名を含む文字列のリスト。
30.16. WatchUpdates (consumer)
-
watchedFields
ステータス、優先度、担当者、コンポーネント
などの変更を監視するフィールドのコンマ区切りリスト。 -
sendOnlyUpdatedField
デフォルトでは、変更されたフィールドのみが本文として送信されます。
すべてのメッセージには、変更に関する追加情報を追加する次のヘッダーも含まれています。
-
issueKey
: 更新された課題のキー -
changed
: 更新されたフィールドの名前 (つまり、ステータス) -
watchedIssues
: 更新時に監視されているすべての課題キーのリスト
30.17. Spring Boot Auto-Configuration
Spring Boot で jira を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-jira-starter</artifactId> </dependency>
このコンポーネントは、以下に示す 13 のオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.component.jira.access-token | (OAuth のみ) Jira サーバーによって生成されたアクセストークン。 | String | |
camel.component.jira.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.jira.bridge-error-handler | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | Boolean |
camel.component.jira.configuration | 共有ベース Jira 設定を使用するには。オプションは org.apache.camel.component.jira.JiraConfiguration タイプです。 | JiraConfiguration | |
camel.component.jira.consumer-key | (OAuth のみ) Jira 設定の consumer キー。 | String | |
camel.component.jira.delay | 次のポーリングまでの経過時間 (ミリ秒)。 | 6000 | Integer |
camel.component.jira.enabled | jira コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.jira.jira-url | Jira サーバーの URL (例: http://my_jira.com:8081/)。 | String | |
camel.component.jira.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
camel.component.jira.password | Basic 認証のみ) Jira サーバーに対して認証するためのパスワード。ユーザー名の Basic 認証が使用されている場合にのみ使用します。 | String | |
camel.component.jira.private-key | (OAuth のみ) サーバーへの会話を暗号化するためにクライアントによって生成された秘密鍵。 | String | |
camel.component.jira.username | (Basic 認証のみ) Jira サーバーに対して認証するためのユーザー名。Jira サーバーで OAuth が有効になっていない場合にのみ使用します。ユーザー名と OAuth トークンパラメーターを設定しないでください。両方が設定されている場合は、ユーザー名の Basic 認証が優先されます。 | String | |
camel.component.jira.verification-code | (OAuth のみ) 認証プロセスの最初のステップで生成された Jira からの検証コード。 | String |
第31章 JMS
producer と consumer の両方がサポート対象
このコンポーネントを使用すると、メッセージを JMS キューまたはトピックに送信 (またはそこから消費) できます。送信用の Spring の JmsTemplate
や消費用の MessageListenerContainer
など、Spring の JMS サポートを宣言型トランザクションに使用します。
Maven ユーザーは、このコンポーネントの pom.xml
に以下の依存関係を追加する必要があります。
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-jms</artifactId> <version>{CamelSBVersion}</version> <!-- use the same version as your Camel core version --> </dependency>
ActiveMQ の使用
Apache ActiveMQ を使用している場合は、ActiveMQ 用に最適化されている ActiveMQ コンポーネントを優先する必要があります。このページのすべてのオプションとサンプルは、ActiveMQ コンポーネントにも有効です。
トランザクションとキャッシング
パフォーマンスに影響を与える可能性があるため、JMS でトランザクションを使用している場合は、以下の トランザクションとキャッシュレベル セクションを参照してください。
JMS 経由のリクエスト/リプライ
Camel はパフォーマンスとクラスター化された環境を設定するための多くのオプションを提供するため、リクエスト/リプライに関する重要な注意事項については、このページのさらに下にあるセクション JMS を介したリクエスト - リプライ を必ずお読みください。
31.1. URI 形式
jms:[queue:|topic:]destinationName[?options]
ここで、destinationName
は JMS キューまたはトピック名です。デフォルトでは、destinationName
はキュー名として解釈されます。たとえば、キューに接続するには、FOO.BAR
を次のように使用します。
jms:FOO.BAR
必要に応じて、オプションの queue:
接頭辞を含めることができます。
jms:queue:FOO.BAR
トピックに接続するには、topic:
接頭辞を含める 必要 があります。たとえば、トピック Stocks.Prices
に接続するには、次を使用します。
jms:topic:Stocks.Prices
次の形式を使用して、クエリーオプションを URI に追加します。
?option=value&option=value&…
31.1.1. ActiveMQ の使用
JMS コンポーネントは、Spring 2 の JmsTemplate
を再利用してメッセージを送信します。これは非 J2EE コンテナーでの使用には理想的ではなく、通常、パフォーマンスの低下 を避けるために JMS プロバイダーでのキャッシュが必要になります。
Apache ActiveMQ をメッセージブローカーとして使用する場合は、次のいずれかを実行することをお勧めします。
- ActiveMQ を効率的に使用するためにすでに最適化されている ActiveMQ コンポーネントを使用する
-
ActiveMQ で
PoolingConnectionFactory
を使用します。
31.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
の使用を検討してください。
31.1.3. 永続サブスクリプション
永続的なトピックサブスクリプションを使用する場合は、clientId
と durableSubscriptionName
の両方を指定する必要があります。clientId
の値は一意である必要があり、ネットワーク全体で単一の JMS 接続インスタンスによってのみ使用できます。この制限を回避するために、代わりに 仮想トピック を使用することをお勧めします。耐久性のあるメッセージングの詳細については、こちら をご覧ください。
31.1.4. メッセージヘッダーのマッピング
JMS 仕様では、メッセージヘッダーを使用する場合、ヘッダー名は有効な Java 識別子である必要があると規定されています。そのため、有効な Java 識別子になるようにヘッダーに名前を付けるようにしてください。これを行う利点の 1 つは、JMS セレクター内でヘッダーを使用できることです (その SQL92 構文では、ヘッダーの Java 識別子構文が義務付けられています)。
デフォルトでは、ヘッダー名をマッピングする単純な方法が使用されます。以下に示すように、ヘッダー名のドットとハイフンをすべて置き換え、ネットワーク経由で送信された JMS メッセージからヘッダー名が復元されたときに置き換えを元に戻す方法です。意味を確認するBean コンポーネントで呼び出すメソッド名が失われたり、ファイルコンポーネントのファイル名ヘッダーが失われたりすることはもうありません。
Camel でヘッダー名を受け入れるための現在のヘッダー名戦略は次のとおりです。
- ドットは `DOT` に置き換えられ、Camel がメッセージを消費すると置換が逆になります
- ハイフンは `HYPHEN` に置き換えられ、Camel がメッセージを消費すると置換が逆になります
JMS エンドポイントでさまざまなプロパティーを設定できます。これらのプロパティーは、JMSConfiguration
オブジェクトのプロパティーにマップされます。
Spring JMS へのマッピング
これらのプロパティーの多くは、Camel がメッセージの送受信に使用する Spring JMS のプロパティーにマップされます。したがって、関連する Spring ドキュメントを参照することで、これらのプロパティーに関する詳細情報を取得できます。
31.2. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
31.2.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
31.2.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
31.3. コンポーネントオプション
JMS コンポーネントは、以下に示す 98 個のオプションをサポートしています。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
clientId (共通) | 使用する JMS クライアント ID を設定します。この値を指定する場合は、一意である必要があり、単一の JMS 接続インスタンスでのみ使用できることに注意してください。通常、永続的なトピックサブスクリプションの場合にのみ必要です。Apache ActiveMQ を使用している場合は、代わりに仮想トピックを使用することをお勧めします。 | String | |
connectionFactory (共通) | 使用する接続ファクトリー。コンポーネントまたはエンドポイントで接続ファクトリーを設定する必要があります。 | ConnectionFactory | |
disableReplyTo (共通) | Camel がメッセージの JMSReplyTo ヘッダーを無視するかどうかを指定します。true の場合、Camel は JMSReplyTo ヘッダーで指定された宛先に返信を送り返しません。Camel にルートから消費させたいが、コード内の別のコンポーネントが応答メッセージを処理するため、Camel に自動的に応答メッセージを送り返したくない場合は、このオプションを使用できます。Camel を異なるメッセージブローカー間のプロキシーとして使用し、あるシステムから別のシステムにメッセージをルーティングする場合にも、このオプションを使用できます。 | false | boolean |
durableSubscriptionName (共通) | 永続トピックサブスクリプションを指定するための永続サブスクライバー名。clientId オプションも設定する必要があります。 | String | |
jmsMessageType (共通) | JMS メッセージの送信に特定の javax.jms.Message 実装を強制的に使用できるようにします。可能な値は、Bytes、Map、Object、Stream、Text です。デフォルトでは、Camel は In body タイプから使用する JMS メッセージタイプを決定します。このオプションで指定できます。 列挙値:
| JmsMessageType | |
replyTo (共通) | 明示的な ReplyTo 宛先を提供します (consumer の Message.getJMSReplyTo() の着信値をオーバーライドします)。 | String | |
testConnectionOnStartup (共通) | 起動時に接続をテストするかどうかを指定します。これにより、Camel の起動時に、すべての JMS consumerが JMS ブローカーへの有効な接続を持つことが保証されます。接続を許可できない場合、Camel は起動時に例外を出力します。これにより、接続に失敗した状態で Camel が開始されなくなります。JMS producer もテストされています。 | false | boolean |
acknowledgementModeName (consumer) | JMS 確認応答名。SESSION_TRANSACTED、CLIENT_ACKNOWLEDGE、AUTO_ACKNOWLEDGE、DUPS_OK_ACKNOWLEDGE のいずれかです。 列挙値:
| AUTO_ACKNOWLEDGE | String |
artemisConsumerPriority (consumer) | consumer の優先度を使用すると、優先度の高い consumer がアクティブなときにメッセージを受信できるようになります。通常、キューに接続されているアクティブな consumer は、ラウンドロビン方式でキューからメッセージを受け取ります。consumer の優先度が使用されているとき、同じ優先度の高いアクティブなconsumer が複数存在する場合は、メッセージがラウンドロビンで配信されます。メッセージは、優先度の高い consumer がメッセージを消費するために利用できるクレジットを持っていない場合、またはそれらの優先度の高い consumer がメッセージの受け入れを拒否した場合にのみ、優先度の低い consumer に送信されます (たとえば、consumer に関連するセレクターの基準を満たさないため)。 | int | |
asyncConsumer (consumer) | JmsConsumer が Exchange を非同期的に処理するかどうか。有効にすると、JmsConsumer は JMS キューから次のメッセージを取得できますが、前のメッセージは (非同期ルーティングエンジンによって) 非同期に処理されます。これは、メッセージが 100% 厳密に順序どおりに処理されない可能性があることを意味します。無効になっている場合 (デフォルト)、JmsConsumer が JMS キューから次のメッセージを取得する前に Exchange が完全に処理されます。transactioned が有効になっている場合、トランザクションは同期的に実行する必要があるため、asyncConsumer=true は非同期的に実行されないことに注意してください (Camel 3.0 は非同期トランザクションをサポートする場合があります)。 | false | boolean |
autoStartup (consumer) | consumer コンテナーを自動起動するかどうかを指定します。 | true | boolean |
cacheLevel (consumer) | 基礎となる JMS リソースの ID によってキャッシュレベルを設定します。詳細は、cacheLevelName オプションを参照してください。 | int | |
cacheLevelName (consumer) | 基礎となる JMS リソースのキャッシュレベルを名前で設定します。可能な値は、CACHE_AUTO、CACHE_CONNECTION、CACHE_CONSUMER、CACHE_NONE、および CACHE_SESSION です。デフォルト設定は CACHE_AUTO です。詳細は、Spring のドキュメントとトランザクションキャッシュレベルを参照してください。 列挙値:
| CACHE_AUTO | String |
concurrentConsumers (consumer) | JMS から消費する場合の同時 consumer のデフォルト数を指定します (JMS を介した要求/応答ではありません)。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。JMS を介して要求/応答を行う場合は、オプション replyToConcurrentConsumers を使用して、応答メッセージリスナーの同時 consumer の数を制御します。 | 1 | int |
maxConcurrentConsumers (consumer) | JMS から消費する場合の同時 consumer の最大数を指定します (JMS を介した要求/応答ではありません)。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。JMS を介して要求/応答を行う場合は、オプション replyToMaxConcurrentConsumers を使用して、応答メッセージリスナーの同時 consumer の数を制御します。 | int | |
replyToDeliveryPersistent (consumer) | 返信に対してデフォルトで永続的な配信を使用するかどうかを指定します。 | true | boolean |
selector (consumer) | 使用する JMS セレクターを設定します。 | String | |
subscriptionDurable (consumer) | サブスクリプションを永続化するかどうかを設定します。使用する永続サブスクリプション名は、subscriptionName プロパティーで指定できます。デフォルトは false です。通常、subscriptionName 値と組み合わせて永続的なサブスクリプションを登録するには、これを true に設定します (メッセージリスナークラス名がサブスクリプション名として十分でない場合)。トピック (pub-sub ドメイン) をリッスンする場合にのみ意味があるため、このメソッドは pubSubDomain フラグも切り替えます。 | false | boolean |
subscriptionName (consumer) | 作成するサブスクリプションの名前を設定します。共有または永続的なサブスクリプションを持つトピック (pub-sub ドメイン) の場合に適用されます。サブスクリプション名は、このクライアントの JMS クライアント ID 内で一意である必要があります。デフォルトは、指定されたメッセージリスナーのクラス名です。注: 共有サブスクリプション (JMS 2.0 が必要) を除き、サブスクリプションごとに 1 つの同時 consumer (このメッセージリスナコンテナーのデフォルト) のみが許可されます。 | String | |
subscriptionShared (consumer) | サブスクリプションを共有するかどうかを設定します。使用する共有サブスクリプション名は、subscriptionName プロパティーで指定できます。デフォルトは false です。通常は subscriptionName 値と組み合わせて共有サブスクリプションを登録するには、これを true に設定します (メッセージリスナークラス名がサブスクリプション名として十分でない場合)。共有サブスクリプションも永続的である可能性があるため、このフラグを subscriptionDurable と組み合わせることもできます (多くの場合は組み合わせます)。トピック (pub-sub ドメイン) をリッスンする場合にのみ意味があるため、このメソッドは pubSubDomain フラグも切り替えます。JMS 2.0 互換のメッセージブローカーが必要です。 | false | boolean |
acceptMessagesWhileStopping (consumer (上級)) | consumer が停止中にメッセージを受け入れるかどうかを指定します。実行時に JMS ルートを開始および停止するが、キューにメッセージが入れられている場合は、このオプションを有効にすることを検討してください。このオプションが false の場合は、JMS ルートを停止すると、メッセージが拒否される可能性があり、JMS ブローカは再配信を試行する必要がありますが、これも拒否される可能性があり、最終的にメッセージはJMS ブローカー上のデッドレターキューに移動される可能性があります。これを回避するには、このオプションを有効にすることをお勧めします。 | false | boolean |
allowReplyManagerQuickStop (consumer (上級)) | JmsConfiguration#isAcceptMessagesWhileStopping が有効で、org.apache.camel.CamelContext が現在停止している場合に、要求/応答メッセージングのリプライマネージャーで使用される DefaultMessageListenerContainer が、DefaultMessageListenerContainer.runningAllowed フラグを迅速に停止できるようにするかどうか。このクイック停止機能は、通常の JMS consumer ではデフォルトで有効になっていますが、応答マネージャーを有効にするには、このフラグを有効にする必要があります。 | false | boolean |
consumerType (consumer (上級)) | 使用する consumer タイプ。Simple、Default、または Custom のいずれかです。consumer タイプによって、使用する Spring JMS リスナーが決まります。デフォルトは org.springframework.jms.listener.DefaultMessageListenerContainer を使用し、Simple は org.springframework.jms.listener.SimpleMessageListenerContainer を使用します。Custom を指定した場合は、messageListenerContainerFactory オプションで定義された MessageListenerContainerFactory によって、使用する org.springframework.jms.listener.AbstractMessageListenerContainer が決まります。 列挙値:
| デフォルト | ConsumerType |
defaultTaskExecutorType (consumer (上級)) | consumer エンドポイントとプロデューサエンドポイントの ReplyTo consumer の両方に対して、DefaultMessageListenerContainer で使用するデフォルトの TaskExecutor タイプを指定します。可能な値: SimpleAsync (Spring の SimpleAsyncTaskExecutor を使用) または ThreadPool (Spring の ThreadPoolTaskExecutor を最適な値で使用 - キャッシュされたスレッドプールのようなもの)。設定されていない場合は、デフォルトで以前の動作になり、consumer エンドポイントにはキャッシュされたスレッドプールが使用され、応答 consumer には SimpleAsync が使用されます。ThreadPool の使用は、同時 consumer が動的に増減するエラスティック設定でスレッドのゴミを減らすために推奨されます。 列挙値:
| DefaultTaskExecutorType | |
eagerLoadingOfProperties (consumer (上級)) | メッセージが読み込まれるとすぐに JMS プロパティーとペイロードの熱心な読み込みを有効にします。これは、JMS プロパティーが必要ない場合があるため一般的に非効率的ですが、基盤となる JMS プロバイダーと JMS プロパティーの使用に関する問題を早期に発見できる場合があります。オプション eagerPoisonBody も参照してください。 | false | boolean |
eagerPoisonBody (consumer (上級)) | eagerLoadingOfProperties が有効であり、JMS メッセージペイロード (JMS 本文または JMS プロパティー) が有害 (読み取り/マッピングできない) である場合は、代わりにこのテキストをメッセージボディーとして設定し、メッセージを処理できるようにします (有害の原因は、Exchange では例外としてすでに保存されています)。これは、eagerPoisonBody=false を設定することでオフにすることができます。オプション eagerLoadingOfProperties も参照してください。 | $\{exception.message} による JMS メッセージへの影響 | String |
exposeListenerSession (consumer (上級)) | メッセージを消費するときにリスナーセッションを公開するかどうかを指定します。 | false | boolean |
replyToSameDestinationAllowed (consumer (上級)) | JMS consumer が、consumer が使用しているのと同じ宛先に応答メッセージを送信できるかどうか。これにより、同じメッセージを消費してそれ自体に送り返すことで、無限ループが回避されます。 | false | boolean |
taskExecutor (consumer (上級)) | メッセージを消費するためのカスタムタスクエグゼキュータを指定できます。 | TaskExecutor | |
deliveryDelay (producer) | JMS の送信呼び出しに使用する配信遅延を設定します。このオプションには、JMS 2.0 準拠のブローカーが必要です。 | -1 | long |
deliveryMode (producer) | 使用する配信モードを指定します。可能な値は、javax.jms.DeliveryMode で定義された値です。NON_PERSISTENT = 1 および PERSISTENT = 2。 列挙値:
| Integer | |
deliveryPersistent (producer) | デフォルトで永続配信を使用するかどうかを指定します。 | true | boolean |
explicitQosEnabled (producer) | メッセージの送信時に、deliveryMode、priority、または timeToLive のサービス品質を使用する必要があるかどうかを設定します。このオプションは、Spring の JmsTemplate に基づいています。deliveryMode、priority、および timeToLive オプションは、現在のエンドポイントに適用されます。これは、メッセージの粒度で動作し、Camel In メッセージヘッダーから排他的に QoS プロパティーを読み取る preserveMessageQos オプションとは対照的です。 | false | Boolean |
formatDateHeadersToIso8601 (producer) | JMS 日付プロパティーを ISO 8601 標準に従ってフォーマットするかどうかを設定します。 | false | boolean |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
preserveMessageQos (producer) | JMS エンドポイントの QoS 設定ではなく、メッセージで指定された QoS 設定を使用してメッセージを送信する場合は、true に設定します。次の 3 つのヘッダーは、JMSPriority、JMSDeliveryMode、および JMSExpiration と見なされます。それらのすべてまたは一部のみを指定できます。指定されていない場合、Camel は代わりにエンドポイントからの値を使用するようにフォールバックします。したがって、このオプションを使用すると、ヘッダーはエンドポイントからの値をオーバーライドします。対照的に、explicitQosEnabled オプションは、エンドポイントに設定されたオプションのみを使用し、メッセージヘッダーの値は使用しません。 | false | boolean |
priority (producer) | 1 より大きい値は、送信時のメッセージの優先度を指定します (1 が最低の優先度で、9 が最高の優先度です)。このオプションを有効にするには、explicitQosEnabled オプションも有効にする必要があります。 列挙値:
| 4 | int |
replyToConcurrentConsumers (producer) | JMS を介して要求/応答を行うときの同時 consumer のデフォルト数を指定します。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。 | 1 | int |
replyToMaxConcurrentConsumers (producer) | JMS を介した要求/応答を使用する場合の同時 consumer の最大数を指定します。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。 | int | |
replyToOnTimeoutMaxConcurrentConsumers (producer) | JMS 経由の要求/応答を使用するときにタイムアウトが発生したときに、ルーティングを継続するための同時 consumer の最大数を指定します。 | 1 | int |
replyToOverride (producer) | JMS メッセージで明示的な ReplyTo 宛先を提供します。これは、replyTo の設定をオーバーライドします。メッセージをリモート Queue に転送し、ReplyTo 宛先から応答メッセージを受け取る場合に便利です。 | String | |
replyToType (producer) | JMS を介して要求/応答を行うときに、replyTo キューに使用する戦略の種類を明示的に指定できます。可能な値は、Temporary、Shared、または Exclusive です。デフォルトでは、Camel は一時キューを使用します。ただし、replyTo が設定されている場合は、デフォルトで Shared が使用されます。このオプションを使用すると、共有キューの代わりに専用キューを使用できます。詳細については、Camel JMS のドキュメントを参照してください。特に、クラスター化された環境で実行する場合の影響に関する注意事項と、共有応答キューは代替の一時および排他的キューよりもパフォーマンスが低いという事実を参照してください。 列挙値:
| ReplyToType | |
requestTimeout (producer) | InOut Exchange パターン使用時の応答待ちタイムアウト (ミリ秒単位)。デフォルトは 20 秒です。ヘッダー CamelJmsRequestTimeout を含めて、このエンドポイントで設定されたタイムアウト値をオーバーライドし、メッセージごとに個別のタイムアウト値を持つことができます。requestTimeoutCheckerInterval オプションも参照してください。 | 20000 | long |
timeToLive (producer) | メッセージの送信時に、メッセージの有効期限をミリ秒単位で指定します。 | -1 | long |
allowAdditionalHeaders (producer (上級)) | このオプションは、JMS 仕様に従って無効な値を持つ可能性がある追加のヘッダーを許可するために使用されます。たとえば、WMQ などの一部のメッセージシステムは、バイト配列またはその他の無効な型の値を含む接頭辞 JMS_IBM_MQMD_ を使用するヘッダー名でこれを行います。コンマで区切られた複数のヘッダー名を指定し、ワイルドカードマッチングの接尾辞として使用できます。 | String | |
allowNullBody (producer (上級)) | ボディーのないメッセージの送信を許可するかどうか。このオプションが false でメッセージボディーが null の場合は、JMSException が出力されます。 | true | boolean |
alwaysCopyMessage (producer (上級)) | true の場合、メッセージが producer に渡されて送信されると、Camel は常にメッセージの JMS メッセージコピーを作成します。replyToDestinationSelectorName が設定されている場合など、状況によってはメッセージをコピーする必要があります (ちなみに、replyToDestinationSelectorName が設定されている場合、Camel は alwaysCopyMessage オプションを true に設定します)。 | false | boolean |
correlationProperty (producer (上級)) | InOut 交換パターンを使用する場合、JMSCorrelationID JMS プロパティーの代わりにこの JMS プロパティーを使用してメッセージを関連付けます。設定されたメッセージがこのプロパティーの値のみに関連付けられる場合、JMSCorrelationID プロパティーは無視され、Camel によって設定されません。 | String | |
disableTimeToLive (producer (上級)) | このオプションを使用して、有効期限を強制的に無効にします。たとえば、JMS を介して要求/応答を行う場合、Camel はデフォルトで、送信されるメッセージの存続時間として requestTimeout 値を使用します。問題は、送信側システムと受信側システムのクロックを同期させる必要があるため、同期していることです。これをアーカイブするのは必ずしも簡単ではありません。したがって、disableTimeToLive=true を使用して、送信されたメッセージに有効期限の値を設定しないようにすることができます。その後、メッセージは受信側システムで期限切れになりません。詳細については、以下の生存時間についてのセクションを参照してください。 | false | boolean |
forceSendOriginalMessage (producer (上級)) | mapJmsMessage=false を使用すると、ルート中にヘッダーに触れると (get または set)、Camel は新しい JMS メッセージを作成して新しい JMS 宛先に送信します。Camel が受信した元の JMS メッセージを強制的に送信するには、このオプションを true に設定します。 | false | boolean |
includeSentJMSMessageID (producer (上級)) | InOnly を使用して JMS 宛先に送信する場合にのみ適用されます (例: ファイアアンドフォーゲット)。このオプションを有効にすると、メッセージが JMS 宛先に送信されたときに JMS クライアントによって使用された実際の JMSMessageID で Camel Exchange が強化されます。 | false | boolean |
replyToCacheLevelName (producer (上級)) | JMS を介して要求/応答を行うときに、応答 consumer のキャッシュレベルを名前で設定します。このオプションは、固定応答キュー (一時的ではない) を使用する場合にのみ適用されます。Camel はデフォルトで次を使用します: 排他的または replyToSelectorName と共有の CACHE_CONSUMER。そして、replyToSelectorName なしで共有するための CACHE_SESSION。IBM WebSphere などの一部の JMS ブローカーは、replyToCacheLevelName=CACHE_NONE を機能させるために設定する必要がある場合があります。注: 一時キューを使用する場合、CACHE_NONE は許可されず、CACHE_CONSUMER や CACHE_SESSION などのより高い値を使用する必要があります。 列挙値:
| String | |
replyToDestinationSelectorName (producer (上級)) | 使用する固定名を使用して JMS セレクターを設定し、共有キューを使用している場合 (つまり、一時的な応答キューを使用していない場合) に、他の応答から自分の応答を除外できるようにします。 | String | |
streamMessageTypeEnabled (producer (上級)) | StreamMessage タイプを有効にするかどうかを設定します。ファイル、InputStream などのストリーミングの種類のメッセージペイロードは、BytesMessage または StreamMessage として送信されます。このオプションは、どの種類が使用されるかを制御します。デフォルトでは、BytesMessage が使用され、メッセージペイロード全体がメモリーに読み込まれます。このオプションを有効にすると、メッセージペイロードがチャンク単位でメモリーに読み込まれ、データがなくなるまで各チャンクが StreamMessage に書き込まれます。 | false | boolean |
allowAutoWiredConnectionFactory (上級) | 接続ファクトリーが設定されていない場合に、レジストリーから ConnectionFactory を自動検出するかどうか。ConnectionFactory のインスタンスが 1 つだけ見つかった場合は、それが使用されます。これはデフォルトで有効になっています。 | true | boolean |
allowAutoWiredDestinationResolver (上級) | 宛先リゾルバーが設定されていない場合に、レジストリーから DestinationResolver を自動検出するかどうか。DestinationResolver のインスタンスが 1 つだけ見つかった場合は、それが使用されます。これはデフォルトで有効になっています。 | true | boolean |
allowSerializedHeaders (上級) | シリアル化されたヘッダーを含めるかどうかを制御します。transferExchange が true の場合にのみ適用されます。これには、オブジェクトがシリアライズ可能である必要があります。Camel はシリアル化できないオブジェクトを除外し、WARN レベルでログに記録します。 | false | boolean |
artemisStreamingEnabled (上級) | Apache Artemis ストリーミングモード用に最適化するかどうか。これにより、JMS StreamMessage タイプで Artemis を使用する場合のメモリーオーバーヘッドを削減できます。このオプションは、Apache Artemis が使用されている場合にのみ有効にする必要があります。 | false | boolean |
asyncStartListener (上級) | ルートの開始時に JmsConsumer メッセージリスナーを非同期で開始するかどうか。たとえば、JmsConsumer がリモート JMS ブローカーへの接続を取得できない場合は、再試行中やフェイルオーバー中にブロックされる可能性があります。これにより、ルートの開始時に Camel がブロックされます。このオプションを true に設定すると、ルートの起動を許可します。一方、JmsConsumer は非同期モードで専用のスレッドを使用して JMS ブローカーに接続します。このオプションを使用する場合は、接続を確立できない場合は例外が WARN レベルでログに記録され、consumer はメッセージを受信できず、ルートを再起動して再試行できます。 | false | boolean |
asyncStopListener (上級) | ルートを停止するときに、JmsConsumer メッセージリスナーを非同期的に停止するかどうか。 | false | boolean |
autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
configuration (上級) | 共有 JMS 設定を使用するには。 | JmsConfiguration | |
destinationResolver (上級) | 独自のリゾルバーを使用できるようにするプラグ可能な org.springframework.jms.support.destination.DestinationResolver (たとえば、JNDI レジストリーで実際の宛先を検索するため)。 | DestinationResolver | |
errorHandler (上級) | Message の処理中にキャッチされない例外が出力された場合に呼び出される org.springframework.util.ErrorHandler を指定します。デフォルトでは、errorHandler が設定されていない場合、これらの例外は WARN レベルでログに記録されます。errorHandlerLoggingLevel および errorHandlerLogStackTrace オプションを使用して、ログレベルとスタックトレースをログに記録するかどうかを設定できます。これにより、カスタム errorHandler をコーディングするよりも設定がはるかに簡単になります。 | ErrorHandler | |
exceptionListener (上級) | 基礎となる JMS 例外の通知を受ける JMS 例外リスナーを指定します。 | ExceptionListener | |
idleConsumerLimit (上級) | 常にアイドル状態にできる consumer の数の制限を指定します。 | 1 | int |
idleTaskExecutionLimit (上級) | 実行中にメッセージを受信していない、受信タスクのアイドル実行の制限を指定します。この制限に達すると、タスクはシャットダウンし、他の実行中のタスクに受信を任せます (動的スケジューリングの場合。maxConcurrentConsumers 設定を参照してください)。Spring から入手できる追加のドキュメントがあります。 | 1 | int |
includeAllJMSXProperties (上級) | JMS から Camel Message へのマッピング時に JMSXxxx プロパティーをすべて含めるかどうか。これを true に設定すると、JMSXAppID や JMSXUserID などのプロパティーが含まれます。注記: カスタムの headerFilterStrategy を使用している場合、このオプションは適用されません。 | false | boolean |
jmsKeyFormatStrategy (上級) | JMS 仕様に準拠できるように、JMS キーをエンコードおよびデコードするためのプラグ可能な戦略。Camel は、追加設定なしで、default と passthrough の 2 つの実装を提供します。デフォルトのストラテジーでは、ドットとハイフン(. および -)を安全にマーシャリングします。パススルー戦略では、キーはそのまま残ります。JMS ヘッダーキーに不正な文字が含まれているかどうかは問題にならない JMS ブローカーに使用できます。org.apache.camel.component.jms.JmsKeyFormatStrategy の独自の実装を提供し、# 表記を使用して参照できます。 列挙値:
| JmsKeyFormatStrategy | |
mapJmsMessage (上級) | Camel が受信した JMS メッセージを適切なペイロードタイプ (javax.jms.TextMessage を文字列など) に自動マップするかどうかを指定します。 | true | boolean |
maxMessagesPerTask (上級) | タスクあたりのメッセージ数。-1 は無制限です。同時 consumer の範囲 (例: min max) を使用する場合、このオプションを使用して値を 100 などに設定し、必要な作業が少ない場合に consumer が縮小する速度を制御できます。 | -1 | int |
messageConverter (上級) | カスタム Spring org.springframework.jms.support.converter.MessageConverter を使用して、javax.jms.Message との間でどのようにマッピングするかを制御できるようにします。 | MessageConverter | |
messageCreatedStrategy (上級) | Camel が JMS メッセージを送信しているときに、Camel が javax.jms.Message オブジェクトの新しいインスタンスを作成するときに呼び出される、指定された MessageCreatedStrategy を使用します。 | MessageCreatedStrategy | |
messageIdEnabled (上級) | 送信時に、メッセージ ID を追加するかどうかを指定します。これは、JMS ブローカーへの単なるヒントです。JMS プロバイダーがこのヒントを受け入れる場合、これらのメッセージのメッセージ ID を null に設定する必要があります。プロバイダーがヒントを無視する場合、メッセージ ID は通常の一意の値に設定する必要があります。 | true | boolean |
messageListenerContainerFactory (上級) | メッセージを消費するために使用する org.springframework.jms.listener.AbstractMessageListenerContainer を決定するために使用される MessageListenerContainerFactory のレジストリー ID。これを設定すると、consumerType が自動的に Custom に設定されます。 | MessageListenerContainerFactory | |
messageTimestampEnabled (上級) | メッセージの送信時にデフォルトでタイムスタンプを有効にするかどうかを指定します。これは、JMS ブローカーへの単なるヒントです。JMS プロバイダーがこのヒントを受け入れる場合、これらのメッセージのタイムスタンプをゼロに設定する必要があります。プロバイダーがヒントを無視する場合は、タイムスタンプを通常の値に設定する必要があります。 | true | boolean |
pubSubNoLocal (上級) | 独自の接続によってパブリッシュされたメッセージの配信を禁止するかどうかを指定します。 | false | boolean |
queueBrowseStrategy (上級) | キューを参照するときにカスタム QueueBrowseStrategy を使用するには。 | QueueBrowseStrategy | |
receiveTimeout (上級) | メッセージ受信のタイムアウト (ミリ秒単位)。 | 1000 | long |
recoveryInterval (上級) | リカバリーの試行の間隔を指定します。つまり、接続が更新されるタイミング(ミリ秒単位)を指定します。デフォルトは 5000 ミリ秒、つまり 5 秒です。 | 5000 | long |
requestTimeoutCheckerInterval (上級) | JMS を介してリクエスト/リプライを行うときに、Camel がタイムアウトになった Exchange をチェックする頻度を設定します。デフォルトでは、Camel は 1 秒に 1 回確認します。ただし、タイムアウトが発生したときに迅速に対応する必要がある場合は、この間隔を短くして、より頻繁にチェックすることができます。タイムアウトは、オプション requestTimeout によって決定されます。 | 1000 | long |
synchronous (上級) | 同期処理を厳密に使用するかどうかを設定します。 | false | boolean |
transferException (上級) | 有効で、Request Reply メッセージング (InOut) を使用していて、Exchange が consumer 側で失敗した場合、原因となった例外が javax.jms.ObjectMessage として応答で返されます。クライアントが Camel の場合、返された Exception は再出力されます。これにより、Camel JMS をルーティングのブリッジとして使用できます。たとえば、永続的なキューを使用して堅牢なルーティングを有効にできます。transferExchange も有効にしている場合は、このオプションが優先されることに注意してください。キャッチされた例外はシリアライズ可能である必要があります。consumer 側の元の Exception は、producer に返されるときに org.apache.camel.RuntimeCamelException などの外部例外にラップできます。データは Java オブジェクトのシリアライゼーションを使用しており、受信側がクラスレベルでデータをデシリアライズできる必要があるため、これは注意して使用してください。 | false | boolean |
transferExchange (上級) | 本文とヘッダーだけでなく、電信送金で交換を転送できます。次のフィールドが転送されます: In body、Out body、Fault body、In ヘッダー、Out ヘッダー、Fault ヘッダー、交換プロパティー、交換例外。これには、オブジェクトがシリアライズ可能である必要があります。Camel はシリアル化できないオブジェクトを除外し、WARN レベルでログに記録します。プロデューサ側と consumer 側の両方でこのオプションを有効にする必要があるため、Camel はペイロードが Exchange であり、通常のペイロードではないことを認識します。データは Java オブジェクトのシリアライゼーションを使用しており、レシーバーがクラスレベルでデータをデシリアライズできる必要があるため、これは注意して使用してください。これにより、互換性のある Camel バージョンを使用する必要がある producer と consumer の間の強い結合が強制されます。 | false | boolean |
useMessageIDAsCorrelationID (上級) | InOut メッセージの JMSCorrelationID として JMSMessageID を常に使用するかどうかを指定します。 | false | boolean |
waitForProvisionCorrelationToBeUpdatedCounter (上級) | JMS を介して要求/応答を行う場合、およびオプション useMessageIDAsCorrelationID が有効な場合に、暫定相関 ID が実際の相関 ID に更新されるのを待機する回数。 | 50 | int |
waitForProvisionCorrelationToBeUpdatedThreadSleepingTime (上級) | 暫定相関 ID が更新されるのを待機するたびにスリープする間隔 (ミリ単位)。 | 100 | long |
headerFilterStrategy (filter) | カスタムの org.apache.camel.spi.HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルターします。 | HeaderFilterStrategy | |
errorHandlerLoggingLevel (logging) | キャッチされていない例外をログに記録するためのデフォルトの errorHandler ログレベルを設定できます。 列挙値:
| WARN | LoggingLevel |
errorHandlerLogStackTrace (logging) | デフォルトの errorHandler でスタックトレースをログに記録するかどうかを制御できます。 | true | boolean |
password (security) | ConnectionFactory で使用するパスワード。また、ConnectionFactory でユーザー名およびパスワードを直接設定することもできます。 | String | |
username (security) | ConnectionFactory で使用するユーザー名。また、ConnectionFactory でユーザー名およびパスワードを直接設定することもできます。 | String | |
取引済み (取引) | トランザクションモードを使用するかどうかを指定します。 | false | boolean |
transactedInOut (トランザクション) | InOut 操作 (リクエストリプライ) がデフォルトでトランザクションモードを使用するかどうかを指定します。このフラグが true に設定されている場合、Spring JmsTemplate は sessionTransacted を true に設定し、acknowledgeMode は InOut 操作に使用される JmsTemplate でトランザクションされます。Spring JMS からの注意: JTA トランザクション内では、createQueue、createTopic メソッドに渡されるパラメーターは考慮されません。Java EE トランザクションコンテキストに応じて、コンテナーはこれらの値を独自に決定します。同様に、この場合、Spring JMS は既存の JMS セッションで動作するため、これらのパラメーターはローカルで管理されるトランザクション内でも考慮されません。このフラグを true に設定すると、管理対象トランザクションの外部で実行されている場合は短いローカル JMS トランザクションが使用され、管理対象トランザクション (XA トランザクション以外) が存在する場合は同期されたローカル JMS トランザクションが使用されます。これには、ローカル JMS トランザクションがメイントランザクション (ネイティブ JDBC トランザクションの場合もある) と一緒に管理され、JMS トランザクションがメイントランザクションの直後にコミットされるという効果があります。 | false | boolean |
lazyCreateTransactionManager (transaction (上級)) | true の場合、オプション transacted=true のときに transactionManager が挿入されていない場合、Camel は JmsTransactionManager を作成します。 | true | boolean |
transactionManager (トランザクション (上級)) | 使用する Spring トランザクションマネージャー。 | PlatformTransactionManager | |
transactionName (トランザクション (上級)) | 使用するトランザクションの名前。 | String | |
transactionTimeout (トランザクション (上級)) | トランザクションモードを使用している場合の、トランザクションのタイムアウト値 (秒単位)。 | -1 | int |
31.4. エンドポイントオプション
JMS エンドポイントは、URI 構文を使用して設定されます。
jms:destinationType:destinationName
パスおよびクエリーパラメーターを使用します。
31.4.1. パスパラメーター (2 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
destinationType (共通) | 使用する宛先の種類。 列挙値:
| queue | String |
destinationName (共通) | 必須 宛先として使用するキューまたはトピックの名前。 | String |
31.4.2. クエリーパラメーター (95 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
clientId (共通) | 使用する JMS クライアント ID を設定します。この値を指定する場合は、一意である必要があり、単一の JMS 接続インスタンスでのみ使用できることに注意してください。通常、永続的なトピックサブスクリプションの場合にのみ必要です。Apache ActiveMQ を使用している場合は、代わりに仮想トピックを使用することをお勧めします。 | String | |
connectionFactory (共通) | 使用する接続ファクトリー。コンポーネントまたはエンドポイントで接続ファクトリーを設定する必要があります。 | ConnectionFactory | |
disableReplyTo (共通) | Camel がメッセージの JMSReplyTo ヘッダーを無視するかどうかを指定します。true の場合、Camel は JMSReplyTo ヘッダーで指定された宛先に返信を送り返しません。Camel にルートから消費させたいが、コード内の別のコンポーネントが応答メッセージを処理するため、Camel に自動的に応答メッセージを送り返したくない場合は、このオプションを使用できます。Camel を異なるメッセージブローカー間のプロキシーとして使用し、あるシステムから別のシステムにメッセージをルーティングする場合にも、このオプションを使用できます。 | false | boolean |
durableSubscriptionName (共通) | 永続トピックサブスクリプションを指定するための永続サブスクライバー名。clientId オプションも設定する必要があります。 | String | |
jmsMessageType (共通) | JMS メッセージの送信に特定の javax.jms.Message 実装を強制的に使用できるようにします。可能な値は、Bytes、Map、Object、Stream、Text です。デフォルトでは、Camel は In body タイプから使用する JMS メッセージタイプを決定します。このオプションで指定できます。 列挙値:
| JmsMessageType | |
replyTo (共通) | 明示的な ReplyTo 宛先を提供します (consumer の Message.getJMSReplyTo() の着信値をオーバーライドします)。 | String | |
testConnectionOnStartup (共通) | 起動時に接続をテストするかどうかを指定します。これにより、Camel の起動時に、すべての JMS consumerが JMS ブローカーへの有効な接続を持つことが保証されます。接続を許可できない場合、Camel は起動時に例外を出力します。これにより、接続に失敗した状態で Camel が開始されなくなります。JMS producer もテストされています。 | false | boolean |
acknowledgementModeName (consumer) | JMS 確認応答名。SESSION_TRANSACTED、CLIENT_ACKNOWLEDGE、AUTO_ACKNOWLEDGE、DUPS_OK_ACKNOWLEDGE のいずれかです。 列挙値:
| AUTO_ACKNOWLEDGE | String |
artemisConsumerPriority (consumer) | consumer の優先度を使用すると、優先度の高い consumer がアクティブなときにメッセージを受信できるようになります。通常、キューに接続されているアクティブな consumer は、ラウンドロビン方式でキューからメッセージを受け取ります。consumer の優先度が使用されているとき、同じ優先度の高いアクティブなconsumer が複数存在する場合は、メッセージがラウンドロビンで配信されます。メッセージは、優先度の高い consumer がメッセージを消費するために利用できるクレジットを持っていない場合、またはそれらの優先度の高い consumer がメッセージの受け入れを拒否した場合にのみ、優先度の低い consumer に送信されます (たとえば、consumer に関連するセレクターの基準を満たさないため)。 | int | |
asyncConsumer (consumer) | JmsConsumer が Exchange を非同期的に処理するかどうか。有効にすると、JmsConsumer は JMS キューから次のメッセージを取得できますが、前のメッセージは (非同期ルーティングエンジンによって) 非同期に処理されます。これは、メッセージが 100% 厳密に順序どおりに処理されない可能性があることを意味します。無効になっている場合 (デフォルト)、JmsConsumer が JMS キューから次のメッセージを取得する前に Exchange が完全に処理されます。transactioned が有効になっている場合、トランザクションは同期的に実行する必要があるため、asyncConsumer=true は非同期的に実行されないことに注意してください (Camel 3.0 は非同期トランザクションをサポートする場合があります)。 | false | boolean |
autoStartup (consumer) | consumer コンテナーを自動起動するかどうかを指定します。 | true | boolean |
cacheLevel (consumer) | 基礎となる JMS リソースの ID によってキャッシュレベルを設定します。詳細は、cacheLevelName オプションを参照してください。 | int | |
cacheLevelName (consumer) | 基礎となる JMS リソースのキャッシュレベルを名前で設定します。可能な値は、CACHE_AUTO、CACHE_CONNECTION、CACHE_CONSUMER、CACHE_NONE、および CACHE_SESSION です。デフォルト設定は CACHE_AUTO です。詳細は、Spring のドキュメントとトランザクションキャッシュレベルを参照してください。 列挙値:
| CACHE_AUTO | String |
concurrentConsumers (consumer) | JMS から消費する場合の同時 consumer のデフォルト数を指定します (JMS を介した要求/応答ではありません)。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。JMS を介して要求/応答を行う場合は、オプション replyToConcurrentConsumers を使用して、応答メッセージリスナーの同時 consumer の数を制御します。 | 1 | int |
maxConcurrentConsumers (consumer) | JMS から消費する場合の同時 consumer の最大数を指定します (JMS を介した要求/応答ではありません)。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。JMS を介して要求/応答を行う場合は、オプション replyToMaxConcurrentConsumers を使用して、応答メッセージリスナーの同時 consumer の数を制御します。 | int | |
replyToDeliveryPersistent (consumer) | 返信に対してデフォルトで永続的な配信を使用するかどうかを指定します。 | true | boolean |
selector (consumer) | 使用する JMS セレクターを設定します。 | String | |
subscriptionDurable (consumer) | サブスクリプションを永続化するかどうかを設定します。使用する永続サブスクリプション名は、subscriptionName プロパティーで指定できます。デフォルトは false です。通常、subscriptionName 値と組み合わせて永続的なサブスクリプションを登録するには、これを true に設定します (メッセージリスナークラス名がサブスクリプション名として十分でない場合)。トピック (pub-sub ドメイン) をリッスンする場合にのみ意味があるため、このメソッドは pubSubDomain フラグも切り替えます。 | false | boolean |
subscriptionName (consumer) | 作成するサブスクリプションの名前を設定します。共有または永続的なサブスクリプションを持つトピック (pub-sub ドメイン) の場合に適用されます。サブスクリプション名は、このクライアントの JMS クライアント ID 内で一意である必要があります。デフォルトは、指定されたメッセージリスナーのクラス名です。注: 共有サブスクリプション (JMS 2.0 が必要) を除き、サブスクリプションごとに 1 つの同時 consumer (このメッセージリスナコンテナーのデフォルト) のみが許可されます。 | String | |
subscriptionShared (consumer) | サブスクリプションを共有するかどうかを設定します。使用する共有サブスクリプション名は、subscriptionName プロパティーで指定できます。デフォルトは false です。通常は subscriptionName 値と組み合わせて共有サブスクリプションを登録するには、これを true に設定します (メッセージリスナークラス名がサブスクリプション名として十分でない場合)。共有サブスクリプションも永続的である可能性があるため、このフラグを subscriptionDurable と組み合わせることもできます (多くの場合は組み合わせます)。トピック (pub-sub ドメイン) をリッスンする場合にのみ意味があるため、このメソッドは pubSubDomain フラグも切り替えます。JMS 2.0 互換のメッセージブローカーが必要です。 | false | boolean |
acceptMessagesWhileStopping (consumer (上級)) | consumer が停止中にメッセージを受け入れるかどうかを指定します。実行時に JMS ルートを開始および停止するが、キューにメッセージが入れられている場合は、このオプションを有効にすることを検討してください。このオプションが false の場合は、JMS ルートを停止すると、メッセージが拒否される可能性があり、JMS ブローカは再配信を試行する必要がありますが、これも拒否される可能性があり、最終的にメッセージはJMS ブローカー上のデッドレターキューに移動される可能性があります。これを回避するには、このオプションを有効にすることをお勧めします。 | false | boolean |
allowReplyManagerQuickStop (consumer (上級)) | JmsConfiguration#isAcceptMessagesWhileStopping が有効で、org.apache.camel.CamelContext が現在停止している場合に、要求/応答メッセージングのリプライマネージャーで使用される DefaultMessageListenerContainer が、DefaultMessageListenerContainer.runningAllowed フラグを迅速に停止できるようにするかどうか。このクイック停止機能は、通常の JMS consumer ではデフォルトで有効になっていますが、応答マネージャーを有効にするには、このフラグを有効にする必要があります。 | false | boolean |
consumerType (consumer (上級)) | 使用する consumer タイプ。Simple、Default、または Custom のいずれかです。consumer タイプによって、使用する Spring JMS リスナーが決まります。デフォルトは org.springframework.jms.listener.DefaultMessageListenerContainer を使用し、Simple は org.springframework.jms.listener.SimpleMessageListenerContainer を使用します。Custom を指定した場合は、messageListenerContainerFactory オプションで定義された MessageListenerContainerFactory によって、使用する org.springframework.jms.listener.AbstractMessageListenerContainer が決まります。 列挙値:
| デフォルト | ConsumerType |
defaultTaskExecutorType (consumer (上級)) | consumer エンドポイントとプロデューサエンドポイントの ReplyTo consumer の両方に対して、DefaultMessageListenerContainer で使用するデフォルトの TaskExecutor タイプを指定します。可能な値: SimpleAsync (Spring の SimpleAsyncTaskExecutor を使用) または ThreadPool (Spring の ThreadPoolTaskExecutor を最適な値で使用 - キャッシュされたスレッドプールのようなもの)。設定されていない場合は、デフォルトで以前の動作になり、consumer エンドポイントにはキャッシュされたスレッドプールが使用され、応答 consumer には SimpleAsync が使用されます。ThreadPool の使用は、同時 consumer が動的に増減するエラスティック設定でスレッドのゴミを減らすために推奨されます。 列挙値:
| DefaultTaskExecutorType | |
eagerLoadingOfProperties (consumer (上級)) | メッセージが読み込まれるとすぐに JMS プロパティーとペイロードの熱心な読み込みを有効にします。これは、JMS プロパティーが必要ない場合があるため一般的に非効率的ですが、基盤となる JMS プロバイダーと JMS プロパティーの使用に関する問題を早期に発見できる場合があります。オプション eagerPoisonBody も参照してください。 | false | boolean |
eagerPoisonBody (consumer (上級)) | eagerLoadingOfProperties が有効であり、JMS メッセージペイロード (JMS 本文または JMS プロパティー) が有害 (読み取り/マッピングできない) である場合は、代わりにこのテキストをメッセージボディーとして設定し、メッセージを処理できるようにします (有害の原因は、Exchange では例外としてすでに保存されています)。これは、eagerPoisonBody=false を設定することでオフにすることができます。オプション eagerLoadingOfProperties も参照してください。 | $\{exception.message} による JMS メッセージへの影響 | String |
exceptionHandler (consumer (上級)) | consumer によるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、consumer は例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
exchangePattern (consumer (上級)) | consumer がエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
exposeListenerSession (consumer (上級)) | メッセージを消費するときにリスナーセッションを公開するかどうかを指定します。 | false | boolean |
replyToSameDestinationAllowed (consumer (上級)) | JMS consumer が、consumer が使用しているのと同じ宛先に応答メッセージを送信できるかどうか。これにより、同じメッセージを消費してそれ自体に送り返すことで、無限ループが回避されます。 | false | boolean |
taskExecutor (consumer (上級)) | メッセージを消費するためのカスタムタスクエグゼキュータを指定できます。 | TaskExecutor | |
deliveryDelay (producer) | JMS の送信呼び出しに使用する配信遅延を設定します。このオプションには、JMS 2.0 準拠のブローカーが必要です。 | -1 | long |
deliveryMode (producer) | 使用する配信モードを指定します。可能な値は、javax.jms.DeliveryMode で定義された値です。NON_PERSISTENT = 1 および PERSISTENT = 2。 列挙値:
| Integer | |
deliveryPersistent (producer) | デフォルトで永続配信を使用するかどうかを指定します。 | true | boolean |
explicitQosEnabled (producer) | メッセージの送信時に、deliveryMode、priority、または timeToLive のサービス品質を使用する必要があるかどうかを設定します。このオプションは、Spring の JmsTemplate に基づいています。deliveryMode、priority、および timeToLive オプションは、現在のエンドポイントに適用されます。これは、メッセージの粒度で動作し、Camel In メッセージヘッダーから排他的に QoS プロパティーを読み取る preserveMessageQos オプションとは対照的です。 | false | Boolean |
formatDateHeadersToIso8601 (producer) | JMS 日付プロパティーを ISO 8601 標準に従ってフォーマットするかどうかを設定します。 | false | boolean |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
preserveMessageQos (producer) | JMS エンドポイントの QoS 設定ではなく、メッセージで指定された QoS 設定を使用してメッセージを送信する場合は、true に設定します。次の 3 つのヘッダーは、JMSPriority、JMSDeliveryMode、および JMSExpiration と見なされます。それらのすべてまたは一部のみを指定できます。指定されていない場合、Camel は代わりにエンドポイントからの値を使用するようにフォールバックします。したがって、このオプションを使用すると、ヘッダーはエンドポイントからの値をオーバーライドします。対照的に、explicitQosEnabled オプションは、エンドポイントに設定されたオプションのみを使用し、メッセージヘッダーの値は使用しません。 | false | boolean |
priority (producer) | 1 より大きい値は、送信時のメッセージの優先度を指定します (1 が最低の優先度で、9 が最高の優先度です)。このオプションを有効にするには、explicitQosEnabled オプションも有効にする必要があります。 列挙値:
| 4 | int |
replyToConcurrentConsumers (producer) | JMS を介して要求/応答を行うときの同時 consumer のデフォルト数を指定します。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。 | 1 | int |
replyToMaxConcurrentConsumers (producer) | JMS を介した要求/応答を使用する場合の同時 consumer の最大数を指定します。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。 | int | |
replyToOnTimeoutMaxConcurrentConsumers (producer) | JMS 経由の要求/応答を使用するときにタイムアウトが発生したときに、ルーティングを継続するための同時 consumer の最大数を指定します。 | 1 | int |
replyToOverride (producer) | JMS メッセージで明示的な ReplyTo 宛先を提供します。これは、replyTo の設定をオーバーライドします。メッセージをリモート Queue に転送し、ReplyTo 宛先から応答メッセージを受け取る場合に便利です。 | String | |
replyToType (producer) | JMS を介して要求/応答を行うときに、replyTo キューに使用する戦略の種類を明示的に指定できます。可能な値は、Temporary、Shared、または Exclusive です。デフォルトでは、Camel は一時キューを使用します。ただし、replyTo が設定されている場合は、デフォルトで Shared が使用されます。このオプションを使用すると、共有キューの代わりに専用キューを使用できます。詳細については、Camel JMS のドキュメントを参照してください。特に、クラスター化された環境で実行する場合の影響に関する注意事項と、共有応答キューは代替の一時および排他的キューよりもパフォーマンスが低いという事実を参照してください。 列挙値:
| ReplyToType | |
requestTimeout (producer) | InOut Exchange パターン使用時の応答待ちタイムアウト (ミリ秒単位)。デフォルトは 20 秒です。ヘッダー CamelJmsRequestTimeout を含めて、このエンドポイントで設定されたタイムアウト値をオーバーライドし、メッセージごとに個別のタイムアウト値を持つことができます。requestTimeoutCheckerInterval オプションも参照してください。 | 20000 | long |
timeToLive (producer) | メッセージの送信時に、メッセージの有効期限をミリ秒単位で指定します。 | -1 | long |
allowAdditionalHeaders (producer (上級)) | このオプションは、JMS 仕様に従って無効な値を持つ可能性がある追加のヘッダーを許可するために使用されます。たとえば、WMQ などの一部のメッセージシステムは、バイト配列またはその他の無効な型の値を含む接頭辞 JMS_IBM_MQMD_ を使用するヘッダー名でこれを行います。コンマで区切られた複数のヘッダー名を指定し、ワイルドカードマッチングの接尾辞として使用できます。 | String | |
allowNullBody (producer (上級)) | ボディーのないメッセージの送信を許可するかどうか。このオプションが false でメッセージボディーが null の場合は、JMSException が出力されます。 | true | boolean |
alwaysCopyMessage (producer (上級)) | true の場合、メッセージが producer に渡されて送信されると、Camel は常にメッセージの JMS メッセージコピーを作成します。replyToDestinationSelectorName が設定されている場合など、状況によってはメッセージをコピーする必要があります (ちなみに、replyToDestinationSelectorName が設定されている場合、Camel は alwaysCopyMessage オプションを true に設定します)。 | false | boolean |
correlationProperty (producer (上級)) | InOut 交換パターンを使用する場合、JMSCorrelationID JMS プロパティーの代わりにこの JMS プロパティーを使用してメッセージを関連付けます。設定されたメッセージがこのプロパティーの値のみに関連付けられる場合、JMSCorrelationID プロパティーは無視され、Camel によって設定されません。 | String | |
disableTimeToLive (producer (上級)) | このオプションを使用して、有効期限を強制的に無効にします。たとえば、JMS を介して要求/応答を行う場合、Camel はデフォルトで、送信されるメッセージの存続時間として requestTimeout 値を使用します。問題は、送信側システムと受信側システムのクロックを同期させる必要があるため、同期していることです。これをアーカイブするのは必ずしも簡単ではありません。したがって、disableTimeToLive=true を使用して、送信されたメッセージに有効期限の値を設定しないようにすることができます。その後、メッセージは受信側システムで期限切れになりません。詳細については、以下の生存時間についてのセクションを参照してください。 | false | boolean |
forceSendOriginalMessage (producer (上級)) | mapJmsMessage=false を使用すると、ルート中にヘッダーに触れると (get または set)、Camel は新しい JMS メッセージを作成して新しい JMS 宛先に送信します。Camel が受信した元の JMS メッセージを強制的に送信するには、このオプションを true に設定します。 | false | boolean |
includeSentJMSMessageID (producer (上級)) | InOnly を使用して JMS 宛先に送信する場合にのみ適用されます (例: ファイアアンドフォーゲット)。このオプションを有効にすると、メッセージが JMS 宛先に送信されたときに JMS クライアントによって使用された実際の JMSMessageID で Camel Exchange が強化されます。 | false | boolean |
replyToCacheLevelName (producer (上級)) | JMS を介して要求/応答を行うときに、応答 consumer のキャッシュレベルを名前で設定します。このオプションは、固定応答キュー (一時的ではない) を使用する場合にのみ適用されます。Camel はデフォルトで次を使用します: 排他的または replyToSelectorName と共有の CACHE_CONSUMER。そして、replyToSelectorName なしで共有するための CACHE_SESSION。IBM WebSphere などの一部の JMS ブローカーは、replyToCacheLevelName=CACHE_NONE を機能させるために設定する必要がある場合があります。注: 一時キューを使用する場合、CACHE_NONE は許可されず、CACHE_CONSUMER や CACHE_SESSION などのより高い値を使用する必要があります。 列挙値:
| String | |
replyToDestinationSelectorName (producer (上級)) | 使用する固定名を使用して JMS セレクターを設定し、共有キューを使用している場合 (つまり、一時的な応答キューを使用していない場合) に、他の応答から自分の応答を除外できるようにします。 | String | |
streamMessageTypeEnabled (producer (上級)) | StreamMessage タイプを有効にするかどうかを設定します。ファイル、InputStream などのストリーミングの種類のメッセージペイロードは、BytesMessage または StreamMessage として送信されます。このオプションは、どの種類が使用されるかを制御します。デフォルトでは、BytesMessage が使用され、メッセージペイロード全体がメモリーに読み込まれます。このオプションを有効にすると、メッセージペイロードがチャンク単位でメモリーに読み込まれ、データがなくなるまで各チャンクが StreamMessage に書き込まれます。 | false | boolean |
allowSerializedHeaders (上級) | シリアル化されたヘッダーを含めるかどうかを制御します。transferExchange が true の場合にのみ適用されます。これには、オブジェクトがシリアライズ可能である必要があります。Camel はシリアル化できないオブジェクトを除外し、WARN レベルでログに記録します。 | false | boolean |
artemisStreamingEnabled (上級) | Apache Artemis ストリーミングモード用に最適化するかどうか。これにより、JMS StreamMessage タイプで Artemis を使用する場合のメモリーオーバーヘッドを削減できます。このオプションは、Apache Artemis が使用されている場合にのみ有効にする必要があります。 | false | boolean |
asyncStartListener (上級) | ルートの開始時に JmsConsumer メッセージリスナーを非同期で開始するかどうか。たとえば、JmsConsumer がリモート JMS ブローカーへの接続を取得できない場合は、再試行中やフェイルオーバー中にブロックされる可能性があります。これにより、ルートの開始時に Camel がブロックされます。このオプションを true に設定すると、ルートの起動を許可します。一方、JmsConsumer は非同期モードで専用のスレッドを使用して JMS ブローカーに接続します。このオプションを使用する場合は、接続を確立できない場合は例外が WARN レベルでログに記録され、consumer はメッセージを受信できず、ルートを再起動して再試行できます。 | false | boolean |
asyncStopListener (上級) | ルートを停止するときに、JmsConsumer メッセージリスナーを非同期的に停止するかどうか。 | false | boolean |
destinationResolver (上級) | 独自のリゾルバーを使用できるようにするプラグ可能な org.springframework.jms.support.destination.DestinationResolver (たとえば、JNDI レジストリーで実際の宛先を検索するため)。 | DestinationResolver | |
errorHandler (上級) | Message の処理中にキャッチされない例外が出力された場合に呼び出される org.springframework.util.ErrorHandler を指定します。デフォルトでは、errorHandler が設定されていない場合、これらの例外は WARN レベルでログに記録されます。errorHandlerLoggingLevel および errorHandlerLogStackTrace オプションを使用して、ログレベルとスタックトレースをログに記録するかどうかを設定できます。これにより、カスタム errorHandler をコーディングするよりも設定がはるかに簡単になります。 | ErrorHandler | |
exceptionListener (上級) | 基礎となる JMS 例外の通知を受ける JMS 例外リスナーを指定します。 | ExceptionListener | |
headerFilterStrategy (上級) | カスタムの HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルタリングします。 | HeaderFilterStrategy | |
idleConsumerLimit (上級) | 常にアイドル状態にできる consumer の数の制限を指定します。 | 1 | int |
idleTaskExecutionLimit (上級) | 実行中にメッセージを受信していない、受信タスクのアイドル実行の制限を指定します。この制限に達すると、タスクはシャットダウンし、他の実行中のタスクに受信を任せます (動的スケジューリングの場合。maxConcurrentConsumers 設定を参照してください)。Spring から入手できる追加のドキュメントがあります。 | 1 | int |
includeAllJMSXProperties (上級) | JMS から Camel Message へのマッピング時に JMSXxxx プロパティーをすべて含めるかどうか。これを true に設定すると、JMSXAppID や JMSXUserID などのプロパティーが含まれます。注記: カスタムの headerFilterStrategy を使用している場合、このオプションは適用されません。 | false | boolean |
jmsKeyFormatStrategy (上級) | JMS 仕様に準拠できるように、JMS キーをエンコードおよびデコードするためのプラグ可能な戦略。Camel は、追加設定なしで、default と passthrough の 2 つの実装を提供します。デフォルトのストラテジーでは、ドットとハイフン(. および -)を安全にマーシャリングします。パススルー戦略では、キーはそのまま残ります。JMS ヘッダーキーに不正な文字が含まれているかどうかは問題にならない JMS ブローカーに使用できます。org.apache.camel.component.jms.JmsKeyFormatStrategy の独自の実装を提供し、# 表記を使用して参照できます。 列挙値:
| JmsKeyFormatStrategy | |
mapJmsMessage (上級) | Camel が受信した JMS メッセージを適切なペイロードタイプ (javax.jms.TextMessage を文字列など) に自動マップするかどうかを指定します。 | true | boolean |
maxMessagesPerTask (上級) | タスクあたりのメッセージ数。-1 は無制限です。同時 consumer の範囲 (例: min max) を使用する場合、このオプションを使用して値を 100 などに設定し、必要な作業が少ない場合に consumer が縮小する速度を制御できます。 | -1 | int |
messageConverter (上級) | カスタム Spring org.springframework.jms.support.converter.MessageConverter を使用して、javax.jms.Message との間でどのようにマッピングするかを制御できるようにします。 | MessageConverter | |
messageCreatedStrategy (上級) | Camel が JMS メッセージを送信しているときに、Camel が javax.jms.Message オブジェクトの新しいインスタンスを作成するときに呼び出される、指定された MessageCreatedStrategy を使用します。 | MessageCreatedStrategy | |
messageIdEnabled (上級) | 送信時に、メッセージ ID を追加するかどうかを指定します。これは、JMS ブローカーへの単なるヒントです。JMS プロバイダーがこのヒントを受け入れる場合、これらのメッセージのメッセージ ID を null に設定する必要があります。プロバイダーがヒントを無視する場合、メッセージ ID は通常の一意の値に設定する必要があります。 | true | boolean |
messageListenerContainerFactory (上級) | メッセージを消費するために使用する org.springframework.jms.listener.AbstractMessageListenerContainer を決定するために使用される MessageListenerContainerFactory のレジストリー ID。これを設定すると、consumerType が自動的に Custom に設定されます。 | MessageListenerContainerFactory | |
messageTimestampEnabled (上級) | メッセージの送信時にデフォルトでタイムスタンプを有効にするかどうかを指定します。これは、JMS ブローカーへの単なるヒントです。JMS プロバイダーがこのヒントを受け入れる場合、これらのメッセージのタイムスタンプをゼロに設定する必要があります。プロバイダーがヒントを無視する場合は、タイムスタンプを通常の値に設定する必要があります。 | true | boolean |
pubSubNoLocal (上級) | 独自の接続によってパブリッシュされたメッセージの配信を禁止するかどうかを指定します。 | false | boolean |
receiveTimeout (上級) | メッセージ受信のタイムアウト (ミリ秒単位)。 | 1000 | long |
recoveryInterval (上級) | リカバリーの試行の間隔を指定します。つまり、接続が更新されるタイミング(ミリ秒単位)を指定します。デフォルトは 5000 ミリ秒、つまり 5 秒です。 | 5000 | long |
requestTimeoutCheckerInterval (上級) | JMS を介してリクエスト/リプライを行うときに、Camel がタイムアウトになった Exchange をチェックする頻度を設定します。デフォルトでは、Camel は 1 秒に 1 回確認します。ただし、タイムアウトが発生したときに迅速に対応する必要がある場合は、この間隔を短くして、より頻繁にチェックすることができます。タイムアウトは、オプション requestTimeout によって決定されます。 | 1000 | long |
synchronous (上級) | 同期処理を厳密に使用するかどうかを設定します。 | false | boolean |
transferException (上級) | 有効で、Request Reply メッセージング (InOut) を使用していて、Exchange が consumer 側で失敗した場合、原因となった例外が javax.jms.ObjectMessage として応答で返されます。クライアントが Camel の場合、返された Exception は再出力されます。これにより、Camel JMS をルーティングのブリッジとして使用できます。たとえば、永続的なキューを使用して堅牢なルーティングを有効にできます。transferExchange も有効にしている場合は、このオプションが優先されることに注意してください。キャッチされた例外はシリアライズ可能である必要があります。consumer 側の元の Exception は、producer に返されるときに org.apache.camel.RuntimeCamelException などの外部例外にラップできます。データは Java オブジェクトのシリアライゼーションを使用しており、受信側がクラスレベルでデータをデシリアライズできる必要があるため、これは注意して使用してください。 | false | boolean |
transferExchange (上級) | 本文とヘッダーだけでなく、電信送金で交換を転送できます。次のフィールドが転送されます: In body、Out body、Fault body、In ヘッダー、Out ヘッダー、Fault ヘッダー、交換プロパティー、交換例外。これには、オブジェクトがシリアライズ可能である必要があります。Camel はシリアル化できないオブジェクトを除外し、WARN レベルでログに記録します。プロデューサ側と consumer 側の両方でこのオプションを有効にする必要があるため、Camel はペイロードが Exchange であり、通常のペイロードではないことを認識します。データは Java オブジェクトのシリアライゼーションを使用しており、レシーバーがクラスレベルでデータをデシリアライズできる必要があるため、これは注意して使用してください。これにより、互換性のある Camel バージョンを使用する必要がある producer と consumer の間の強い結合が強制されます。 | false | boolean |
useMessageIDAsCorrelationID (上級) | InOut メッセージの JMSCorrelationID として JMSMessageID を常に使用するかどうかを指定します。 | false | boolean |
waitForProvisionCorrelationToBeUpdatedCounter (上級) | JMS を介して要求/応答を行う場合、およびオプション useMessageIDAsCorrelationID が有効な場合に、暫定相関 ID が実際の相関 ID に更新されるのを待機する回数。 | 50 | int |
waitForProvisionCorrelationToBeUpdatedThreadSleepingTime (上級) | 暫定相関 ID が更新されるのを待機するたびにスリープする間隔 (ミリ単位)。 | 100 | long |
errorHandlerLoggingLevel (logging) | キャッチされていない例外をログに記録するためのデフォルトの errorHandler ログレベルを設定できます。 列挙値:
| WARN | LoggingLevel |
errorHandlerLogStackTrace (logging) | デフォルトの errorHandler でスタックトレースをログに記録するかどうかを制御できます。 | true | boolean |
password (security) | ConnectionFactory で使用するパスワード。また、ConnectionFactory でユーザー名およびパスワードを直接設定することもできます。 | String | |
username (security) | ConnectionFactory で使用するユーザー名。また、ConnectionFactory でユーザー名およびパスワードを直接設定することもできます。 | String | |
取引済み (取引) | トランザクションモードを使用するかどうかを指定します。 | false | boolean |
transactedInOut (トランザクション) | InOut 操作 (リクエストリプライ) がデフォルトでトランザクションモードを使用するかどうかを指定します。このフラグが true に設定されている場合、Spring JmsTemplate は sessionTransacted を true に設定し、acknowledgeMode は InOut 操作に使用される JmsTemplate でトランザクションされます。Spring JMS からの注意: JTA トランザクション内では、createQueue、createTopic メソッドに渡されるパラメーターは考慮されません。Java EE トランザクションコンテキストに応じて、コンテナーはこれらの値を独自に決定します。同様に、この場合、Spring JMS は既存の JMS セッションで動作するため、これらのパラメーターはローカルで管理されるトランザクション内でも考慮されません。このフラグを true に設定すると、管理対象トランザクションの外部で実行されている場合は短いローカル JMS トランザクションが使用され、管理対象トランザクション (XA トランザクション以外) が存在する場合は同期されたローカル JMS トランザクションが使用されます。これには、ローカル JMS トランザクションがメイントランザクション (ネイティブ JDBC トランザクションの場合もある) と一緒に管理され、JMS トランザクションがメイントランザクションの直後にコミットされるという効果があります。 | false | boolean |
lazyCreateTransactionManager (transaction (上級)) | true の場合、オプション transacted=true のときに transactionManager が挿入されていない場合、Camel は JmsTransactionManager を作成します。 | true | boolean |
transactionManager (トランザクション (上級)) | 使用する Spring トランザクションマネージャー。 | PlatformTransactionManager | |
transactionName (トランザクション (上級)) | 使用するトランザクションの名前。 | String | |
transactionTimeout (トランザクション (上級)) | トランザクションモードを使用している場合の、トランザクションのタイムアウト値 (秒単位)。 | -1 | int |
31.5. サンプル
JMS は、他のコンポーネントの多くの例でも使用されています。ただし、開始するためのいくつかのサンプルを以下に示します。
31.5.1. JMS からの受信
次のサンプルでは、JMS メッセージを受信し、メッセージを POJO にルーティングするルートを設定します。
from("jms:queue:foo"). to("bean:myBusinessLogic");
もちろん、任意の EIP パターンを使用して、ルートをコンテキストベースにすることができます。たとえば、次のように、高額の支出者向けに注文トピックをフィルター処理します。
from("jms:topic:OrdersTopic"). filter().method("myBean", "isGoldCustomer"). to("jms:queue:BigSpendersQueue");
31.5.2. JMS への送信
以下のサンプルでは、ファイルフォルダーをポーリングし、ファイルコンテンツを JMS トピックに送信します。ファイルの内容を BytesMessage
ではなく TextMessage
にしたいので、本文を String
に変換する必要があります。
from("file://orders"). convertBodyTo(String.class). to("jms:topic:OrdersTopic");
31.5.3. アノテーションの使用
Camel にはアノテーションもあるため、POJO Consuming と POJO Producing を使用できます。
31.5.4. Spring の DSL サンプル
前の例では、Java DSL を使用しています。Camel は Spring XML DSL もサポートしています。以下は、Spring DSL を使用した高額支出者のサンプルです。
<route> <from uri="jms:topic:OrdersTopic"/> <filter> <method ref="myBean" method="isGoldCustomer"/> <to uri="jms:queue:BigSpendersQueue"/> </filter> </route>
31.5.5. その他のサンプル
JMS は、この Camel ドキュメントだけでなく、他のコンポーネントや EIP パターンの例の多くにも登場します。そのため、ドキュメントを自由に参照してください。
31.5.6. JMS を Exchange を格納するデッドレターキューとして使用する
通常、JMS をトランスポートとして使用する場合、ペイロードとしてボディーとヘッダーのみを転送します。Dead Letter Channel で JMS を使用する場合、JMS キューをデッドレターキューとして使用する場合、通常、発生した例外は JMS メッセージに格納されません。ただし、JMS デッドレターキューで transferExchange
オプションを使用して、Exchange 全体を org.apache.camel.support.DefaultExchangeHolder
を保持する javax.jms.ObjectMessage
としてキューに格納するよう Camel に指示できます。これにより、デッドレターキューから消費し、キー Exchange.EXCEPTION_CAUGHT
を使用して Exchange プロパティーから原因の例外を取得できます。以下のデモは、これを示しています。
// setup error handler to use JMS as queue and store the entire Exchange errorHandler(deadLetterChannel("jms:queue:dead?transferExchange=true"));
次に、JMS キューから消費して問題を分析できます。
from("jms:queue:dead").to("bean:myErrorAnalyzer"); // and in our bean String body = exchange.getIn().getBody(); Exception cause = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Exception.class); // the cause message is String problem = cause.getMessage();
31.5.7. エラーのみを格納するデッドレターチャネルとして JMS を使用する
JMS を使用して、原因エラーメッセージを格納したり、自分で初期化できるカスタムボディーを格納したりできます。次の例では、Message Translator EIP を使用して、失敗した交換を JMS デッドレターキューに移動する前に変換を行います。
// we sent it to a seda dead queue first errorHandler(deadLetterChannel("seda:dead")); // and on the seda dead queue we can do the custom transformation before its sent to the JMS queue from("seda:dead").transform(exceptionMessage()).to("jms:queue:dead");
ここでは、元の原因のエラーメッセージのみを変換に保存します。ただし、任意の式を使用して、好きなものを送信できます。たとえば、Bean でメソッドを呼び出したり、カスタムプロセッサーを使用したりできます。
31.6. JMS と Camel 間のメッセージマッピング
Camel は javax.jms.Message
と org.apache.camel.Message
の間でメッセージを自動的にマップします。
JMS メッセージを送信するとき、Camel はメッセージ本文を次の JMS メッセージタイプに変換します。
ボディタイプ | JMS Message | Comment |
---|---|---|
|
| |
|
|
DOM は |
|
| |
|
| |
|
| |
|
| |
|
| |
|
| |
|
|
JMS メッセージを受信すると、Camel は JMS メッセージを次のボディタイプに変換します。
JMS Message | ボディタイプ |
---|---|
|
|
|
|
|
|
|
|
31.6.1. JMS メッセージの自動マッピングの無効化
mapJmsMessage
オプションを使用して、上記の自動マッピングを無効にすることができます。無効にすると、Camel は受信した JMS メッセージをマップしようとせず、ペイロードとして直接使用します。これにより、マッピングのオーバーヘッドを回避し、Camel に JMS メッセージを通過させることができます。たとえば、クラスパスに ない クラスを使用して javax.jms.ObjectMessage
JMS メッセージをルーティングすることもできます。
31.6.2. カスタム MessageConverter の使用
messageConverter
オプションを使用して、Spring org.springframework.jms.support.converter.MessageConverter
クラスで自分でマッピングを行うことができます。
たとえば、以下のルートでは、メッセージを JMS オーダーキューに送信するときにカスタムメッセージコンバーターを使用します。
from("file://inbox/order").to("jms:queue:order?messageConverter=#myMessageConverter");
JMS 宛先から消費する場合は、カスタムメッセージコンバーターを使用することもできます。
31.6.3. 選択したマッピング戦略の制御
エンドポイント URL で jmsMessageType
オプションを使用して、すべてのメッセージに対して特定のメッセージタイプを強制することができます。
以下のルートでは、フォルダーからファイルをポーリングし、それらを javax.jms.TextMessage
として送信します。これは、JMS producer エンドポイントにテキストメッセージの使用を強制したためです。
from("file://inbox/order").to("jms:queue:order?jmsMessageType=Text");
キー CamelJmsMessageType
でヘッダーを設定することにより、各メッセージに使用するメッセージタイプを指定することもできます。以下に例を示します。
from("file://inbox/order").setHeader("CamelJmsMessageType", JmsMessageType.Text).to("jms:queue:order");
可能な値は enum
型クラス org.apache.camel.jms.JmsMessageType
で定義されています。
31.7. 送信時のメッセージ形式
JMS ワイヤを介して送信される交換は、JMS メッセージ仕様 に準拠する必要があります。
exchange.in.header
の場合、次のルールがヘッダー キー に適用されます。
-
JMS
またはJMSX
で始まるキーは予約されています。 -
exchange.in.headers
キーはリテラルで、すべて有効な Java 識別子である必要があります (キー名にドットを使用しないでください)。 -
Camel は、JMS メッセージを消費するときにドットとハイフンを置き換え、その逆を行います。
.
は `DOT` に置き換えられ、Camel がメッセージを消費するときは逆の置き換えになります。-
は `HYPHEN` に置き換えられ、Camel がメッセージを消費するときは逆の置き換えになります。 -
オプション
jmsKeyFormatStrategy
も参照してください。これにより、キーのフォーマットに独自のカスタム戦略を使用できます。
exchange.in.header
の場合、次のルールがヘッダー 値 に適用されます。
-
値は、プリミティブまたはそのカウンターオブジェクト (
Integer
、Long
、Character
など) である必要があります。タイプString
、CharSequence
、Date
、BigDecimal
、およびBigInteger
はすべて、それらのtoString()
表現に変換されます。他のすべてのタイプはドロップされます。
Camel は、特定のヘッダー値を削除すると、カテゴリー org.apache.camel.component.jms.JmsBinding
で DEBUG レベルでログに記録します。以下に例を示します。
2008-07-09 06:43:04,046 [main ] DEBUG JmsBinding - Ignoring non primitive header: order of class: org.apache.camel.component.jms.issues.DummyOrder with value: DummyOrder{orderId=333, itemId=4444, quantity=2}
31.8. 受信時のメッセージフォーマット
Camel は、メッセージを受信すると、次のプロパティーを Exchange
に追加します。
プロパティー | 型 | 説明 |
---|---|---|
|
| 返信先。 |
Camel は、JMS メッセージを受信すると、In メッセージヘッダーに次の JMS プロパティーを追加します。
ヘッダー | タイプ | 説明 |
---|---|---|
|
| JMS 相関 ID。 |
|
| JMS 配信モード。 |
|
| JMS 宛先。 |
|
| JMS の有効期限。 |
|
| JMS 固有のメッセージ ID。 |
|
| JMS 優先度 (0 が最低の優先度、9 が最高の優先度)。 |
|
| JMS メッセージは再配信されますか。 |
|
| JMS 返信先の宛先。 |
|
| JMS タイムスタンプ。 |
|
| JMS タイプ。 |
|
| JMS グループ ID。 |
上記の情報はすべて標準の JMS であるため、詳細については JMS のドキュメント を参照してください。
31.9. Camel を使用したメッセージの送受信と JMSReplyTo について
JMS コンポーネントは複雑で、場合によってはその動作に細心の注意を払う必要があります。したがって、これは探すべき領域/落とし穴のいくつかの簡単な要約です.
Camel が JMSProducer
を使用してメッセージを送信すると、次の条件がチェックされます。
- メッセージ交換パターン、
-
JMSReplyTo
がエンドポイントまたはメッセージヘッダーで設定されたかどうか、 -
次のいずれかのオプションが JMS エンドポイントに設定されているかどうか:
disableReplyTo
、preserveMessageQos
、explicitQosEnabled
。
これらすべてを理解し、ユースケースをサポートするように設定するには、少し複雑になる可能性があります。
31.9.1. JmsProducer
JmsProducer
は、設定に応じて次のように動作します。
交換パターン | その他のオプション | 説明 |
---|---|---|
InOut | - |
Camel は応答を期待し、一時的な |
InOut |
|
Camel は応答を期待し、メッセージの送信後、指定された |
InOnly | - | Camel はメッセージを送信しますが、返信は期待 しません。 |
InOnly |
|
デフォルトでは、Camel は |
31.9.2. JmsConsumer
JmsConsumer
は、設定に応じて次のように動作します。
交換パターン | その他のオプション | 説明 |
---|---|---|
InOut | - |
Camel は応答を |
InOnly | - | パターンが InOnly であるため、Camel は返信を返しません。 |
- |
| このオプションは、返信を抑制します。 |
そのため、取引所に設定されているメッセージ交換パターンに注意してください。
ルートの途中で JMS 宛先にメッセージを送信する場合は、使用する交換パターンを指定できます。詳細については、Request Reply を参照してください。
これは、InOnly
メッセージを JMS トピックに送信する場合に便利です。
from("activemq:queue:in") .to("bean:validateOrder") .to(ExchangePattern.InOnly, "activemq:topic:order") .to("bean:handleOrder");
31.10. エンドポイントを再利用し、実行時に計算されたさまざまな宛先に送信します
多くの異なる JMS 宛先にメッセージを送信する必要がある場合は、JMS エンドポイントを再利用して、メッセージヘッダーで実際の宛先を指定するのが理にかなっています。これにより、Camel は同じエンドポイントを再利用できますが、異なる宛先に送信できます。これにより、作成されるエンドポイントの数が大幅に削減され、メモリーとスレッドリソースが節約されます。
次のヘッダーで宛先を指定できます。
ヘッダー | タイプ | 説明 |
---|---|---|
|
| 宛先オブジェクト。 |
|
| 宛先名。 |
たとえば、次のルートは、実行時に宛先を計算し、それを使用して JMS URL に表示される宛先をオーバーライドする方法を示しています。
from("file://inbox") .to("bean:computeDestination") .to("activemq:queue:dummy");
キュー名の dummy
は単なるプレースホルダーです。JMS エンドポイント URL の一部として指定する必要がありますが、この例では無視されます。
computeDestination
bean で、CamelJmsDestinationName
ヘッダーを次のように設定して、実際の宛先を指定します。
public void setJmsHeader(Exchange exchange) { String id = .... exchange.getIn().setHeader("CamelJmsDestinationName", "order:" + id"); }
次に、Camel はこのヘッダーを読み取り、エンドポイントで設定されたものの代わりに宛先として使用します。したがって、この例では、id
値が 2 であると仮定して、Camel はメッセージを activemq:queue:order:2
に送信します。
CamelJmsDestination
ヘッダーと CamelJmsDestinationName
ヘッダーの両方が設定されている場合、CamelJmsDestination
が優先されます。JMS producer は、CamelJmsDestination
ヘッダーと CamelJmsDestinationName
ヘッダーの両方を交換から削除し、作成された JMS メッセージに伝播しないことに注意してください。これは、ルートでの偶発的なループを回避するためです (メッセージが別の JMS エンドポイントに転送されるシナリオで)。
31.11. 異なる JMS プロバイダーの設定
次のように、Spring XML で JMS プロバイダーを設定できます。
基本的に、必要な数の JMS コンポーネントインスタンスを設定し、id
属性 を使用して一意の名前 を付けることができます。前の例では、activemq
コンポーネントを設定しています。同じことを行って、MQSeries、TibCo、BEA、Sonic などを設定できます。
名前付き JMS コンポーネントを作成したら、URI を使用してそのコンポーネント内のエンドポイントを参照できます。たとえば、コンポーネント名 activemq
の場合、URI 形式 activemq:queue:|topic:destinationName
を使用して宛先を参照できます。他のすべての JMS プロバイダーに対して同じアプローチを使用できます。
これは、SpringCamelContext がエンドポイント URI に使用するスキーム名のスプリングコンテキストからコンポーネントを遅延フェッチし、コンポーネントにエンドポイント URI を解決させることによって機能します。
31.11.1. JNDI を使用して ConnectionFactory を見つける
J2EE コンテナーを使用している場合は、Spring で通常の <bean>
メカニズムを使用するのではなく、JNDI を検索して JMS ConnectionFactory
を見つける必要がある場合があります。これは、Spring のファクトリー bean または新しい Spring XML 名前空間を使用して行うことができます。以下に例を示します。
<bean id="weblogic" class="org.apache.camel.component.jms.JmsComponent"> <property name="connectionFactory" ref="myConnectionFactory"/> </bean> <jee:jndi-lookup id="myConnectionFactory" jndi-name="jms/connectionFactory"/>
JNDI ルックアップの詳細については、Spring リファレンスドキュメントの jee スキーマ を参照してください。
31.12. 同時消費
JMS の一般的な要件は、アプリケーションの応答性を高めるために、複数のスレッドで同時にメッセージを消費することです。次のように、concurrentConsumers
オプションを設定して、JMS エンドポイントにサービスを提供するスレッドの数を指定できます。
from("jms:SomeQueue?concurrentConsumers=20"). bean(MyClass.class);
このオプションは、次のいずれかの方法で設定できます。
-
JmsComponent
で、 - エンドポイント URI または、
-
JmsEndpoint
で直接setConcurrentConsumers ()
を呼び出す。
31.12.1. 非同期 consumer による同時消費
各 concurrent consumer は、現在のメッセージが完全に処理されたときに、JMS ブローカーから次に利用可能なメッセージのみを取得することに注意してください。オプション asyncConsumer=true
を設定すると、前のメッセージが (非同期ルーティングエンジンによって) 非同期に処理されている間に、consumer が JMS キューから次のメッセージをピックアップできるようになります。asyncConsumer
オプションの詳細については、ページ上部の表を参照してください。
from("jms:SomeQueue?concurrentConsumers=20&asyncConsumer=true"). bean(MyClass.class);
31.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 は応答キューをリッスンする consumer を自動的にセットアップするので、何もする必要 はありません。
この consumer は、返信をリッスンする Spring DefaultMessageListenerContainer
です。ただし、concurrent consumer は 1 つに固定されています。
つまり、返信を処理するスレッドは 1 つしかないため、返信は順番に処理されます。concurrentConsumers
および maxConcurrentConsumers
オプションを使用して、同時スレッドを使用するようにリスナーを設定できます。これにより、以下に示すように Camel でこれを簡単に設定できます。
from(xxx) .inOut().to("activemq:queue:foo?concurrentConsumers=5") .to(yyy) .to(zzz);
このルートでは、5 つのスレッドを持つスレッドプールを使用して応答を非同期にルーティングするように Camel に指示します。
31.13.2. JMS を介したリクエストとリプライ、および専用の固定リプライキューを使用
前の例では、Camel は bar という名前の固定応答キューが共有されていると予想し、JMSSelector
を使用して、期待する応答メッセージのみを消費します。ただし、JMS セレクターは低速であるため、これを行うには欠点があります。また、応答キューの consumer は、新しい JMS セレクター ID での更新が遅くなります。実際には、receiveTimeout
オプションがタイムアウトしたときにのみ更新されます。デフォルトでは 1 秒です。したがって、理論的には、応答メッセージが検出されるまでに約 1 秒かかる可能性があります。一方、固定リプライキューが Camel reply consumer専用である場合は、JMS セレクターの使用を避けることができるため、パフォーマンスが向上します。実際、一時キューを使用するのと同じくらい高速です。Exclusive
に設定できる 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)
クラスター環境で実行する場合も同様です。次に、クラスター内の各ノードは一意の応答キュー名を使用する必要があります。そうしないと、クラスター内の各ノードが、別のノードでの応答として意図されたメッセージを取得する可能性があります。クラスター化された環境では、代わりに共有応答キューを使用することをお勧めします。
31.14. 送信側と受信側のクロックの同期
システム間でメッセージングを行う場合、システムのクロックが同期していることが望ましいです。たとえば、JMS メッセージを送信する場合には、メッセージに Time to Live 値を設定できます。次に、受信者はこの値を検査し、メッセージがすでに期限切れになっているかどうかを判断し、メッセージを消費して処理する代わりにドロップします。ただし、これには、送信側と受信側の両方でクロックが同期されている必要があります。ActiveMQ を使用している場合は、タイムスタンププラグイン を使用してクロックを同期できます。
31.15. 生きる時間について
上記の同期クロックについて最初に読んでください。
Camel を使用して JMS 経由で要求/応答 (InOut) を行う場合に、Camel は送信側でタイムアウトを使用します。これは、requestTimeout
オプションのデフォルトの 20 秒です。これは、より高い/より低い値を設定することで制御できます。ただし、送信されるメッセージには存続時間の値が設定されたままです。そのため、システム間でクロックを同期する必要があります。そうでない場合は、設定されている存続時間の値を無効にすることができます。これは、Camel 2.8 以降の disableTimeToLive
オプションを使用して可能になりました。したがって、このオプションを disableTimeToLive=true
に設定すると、Camel は JMS メッセージの送信時に有効期限の値を設定しません。ただし、リクエストのタイムアウトはまだ有効です。たとえば、JMS を介してリクエスト/リプライを行い、有効期限を無効にしている場合、Camel は引き続き 20 秒のタイムアウトを使用します (requestTimeout
オプション)。もちろん、そのオプションも設定できます。そのため、requestTimeout
と disableTimeToLive
の 2 つのオプションを使用すると、リクエスト/リプライを行うときにきめ細かい制御が可能になります。
メッセージにヘッダーを指定してオーバーライドし、エンドポイントの設定値の代わりにリクエストのタイムアウト値として使用できます。以下に例を示します。
from("direct:someWhere") .to("jms:queue:foo?replyTo=bar&requestTimeout=30s") .to("bean:processReply");
上記のルートでは、requestTimeout
が 30 秒に設定されたエンドポイントがあります。そのため、Camel は、その応答メッセージがバーキューに戻ってくるまで最大 30 秒待機します。応答メッセージが受信されない場合、Exchange で org.apache.camel.ExchangeTimedOutException
が設定され、Camel はメッセージのルーティングを続行しますが、例外が原因で失敗し、Camel のエラーハンドラーが反応します。
メッセージごとのタイムアウト値を使用する場合は、長型としてタイムアウト値を持つ定数値 "CamelJmsRequestTimeout"
を持つキー org.apache.camel.component.jms.JmsConstants#JMS_REQUEST_TIMEOUT
でヘッダーを設定できます。
たとえば、bean を使用して、以下に示すようにサービス Bean で "whatIsTheTimeout"
メソッドを呼び出すなど、個々のメッセージごとのタイムアウト値を計算できます。
from("direct:someWhere") .setHeader("CamelJmsRequestTimeout", method(ServiceBean.class, "whatIsTheTimeout")) .to("jms:queue:foo?replyTo=bar&requestTimeout=30s") .to("bean:processReply");
Camel を使用して JMS を介して fire および forget (InOut) を行う場合には、Camel はデフォルトで、メッセージに Time to Live 値を設定 しません。timeToLive
オプションを使用して値を設定できます。たとえば、5 秒を示すには、timeToLive=5000
を設定します。オプション disableTimeToLive
を使用して、有効期限を強制的に無効にすることができます。また、InOnly メッセージングについても同様です。requestTimeout
オプションは、InOnly メッセージングには使用されていません。
31.16. 取引消費の有効化
一般的な要件は、トランザクション内のキューから消費し、Camel ルートを使用してメッセージを処理することです。これを行うには、コンポーネント/エンドポイントで次のプロパティーを設定していることを確認してください。
-
transacted
= true -
transactionManager
= トランザクションマネージャー - 通常はJmsTransactionManager
詳細については、Transactional Client EIP パターンを参照してください。
JMS を介したトランザクションと [Request Reply]
Request Reply over JMS を使用する場合、単一のトランザクションを使用することはできません。JMS はコミットが実行されるまでメッセージを送信しないため、サーバー側はトランザクションがコミットされるまで何も受信しません。したがって、リクエストリプライ を使用するには、リクエストの送信後にトランザクションをコミットし、別のトランザクションを使用してレスポンスを受信する必要があります。
この問題に対処するために、JMS コンポーネントは異なるプロパティーを使用して、一方向メッセージングと要求応答メッセージングのトランザクションの使用を指定します。
transacted
プロパティーは、InOnly メッセージ交換パターン (MEP) に のみ 適用されます。
コンポーネント/エンドポイントで次のプロパティーを使用して、DMLC トランザクションセッション API を利用できます。
-
transacted
= true -
lazyCreateTransactionManager
= false
そうすることの利点は、設定された TransactionManager なしでローカルトランザクションを使用するときに、cacheLevel 設定が受け入れられることです。TransactionManager が設定されている場合、DMLC レベルでキャッシュは発生せず、プールされた接続ファクトリーに依存する必要があります。この種のセットアップの詳細については、こちら と こちら を参照してください。
31.17. 遅延応答に対する JMSReplyTo の使用
Camel を JMS リスナーとして使用する場合、キー ReplyTo
を持つ ReplyTo javax.jms.Destination
オブジェクトの値で Exchange プロパティーを設定します。この Destination
は次のように取得できます。
Destination replyDestination = exchange.getIn().getHeader(JmsConstants.JMS_REPLY_DESTINATION, Destination.class);
そして後でそれを使用して、通常の JMS または Camel を使用して応答を送信します。
// we need to pass in the JMS component, and in this sample we use ActiveMQ JmsEndpoint endpoint = JmsEndpoint.newInstance(replyDestination, activeMQComponent); // now we have the endpoint we can use regular Camel API to send a message to it template.sendBody(endpoint, "Here is the late reply.");
返信を送信する別の解決策は、送信時に同じ Exchange プロパティーに replyDestination
オブジェクトを提供することです。Camel はこのプロパティーを取得し、実際の目的地に使用します。ただし、エンドポイント URI にはダミーの宛先を含める必要があります。以下に例を示します。
// we pretend to send it to some non existing dummy queue template.send("activemq:queue:dummy, new Processor() { public void process(Exchange exchange) throws Exception { // and here we override the destination with the ReplyTo destination object so the message is sent to there instead of dummy exchange.getIn().setHeader(JmsConstants.JMS_DESTINATION, replyDestination); exchange.getIn().setBody("Here is the late reply."); } }
31.18. リクエストタイムアウトの使用
以下のサンプルでは、Request Reply スタイルのメッセージ Exchange (requestBody
メソッド = InOut
を使用) を出力 キューに送信して、Camel でさらに処理し、返信を待ちます。
31.19. InOnly メッセージを送信し、JMSReplyTo ヘッダーを保持する
camel-jms を使用して JMS 宛先に送信する場合に、producer は MEP を使用して、その InOnly または InOut メッセージングを検出します。ただし、InOnly メッセージを送信したいが、JMSReplyTo
ヘッダーを保持したい場合があります。そのためには、Camel にそれを保持するように指示する必要があります。そうしないと、JMSReplyTo
ヘッダーがドロップされます。
たとえば、InOnly メッセージを foo キューに送信しますが、JMSReplyTo
と bar キューを使用すると、次のように実行できます。
template.send("activemq:queue:foo?preserveMessageQos=true", new Processor() { public void process(Exchange exchange) throws Exception { exchange.getIn().setBody("World"); exchange.getIn().setHeader("JMSReplyTo", "bar"); } });
preserveMessageQos=true
を使用して Camel に JMSReplyTo
ヘッダーを保持するように指示していることに注意してください。
31.20. 宛先での JMS プロバイダーオプションの設定
IBM の WebSphere MQ などの一部の JMS プロバイダーでは、JMS 宛先にオプションを設定する必要があります。たとえば、targetClient
オプションを指定する必要がある場合があります。targetClient
は Camel URI オプションではなく WebSphere MQ オプションであるため、次のように JMS 宛先名に設定する必要があります。
// ... .setHeader("CamelJmsDestinationName", constant("queue:///MY_QUEUE?targetClient=1")) .to("wmq:queue:MY_QUEUE?useMessageIDAsCorrelationID=true");
WMQ の一部のバージョンは、宛先名でこのオプションを受け入れず、次のような例外が発生します。
com.ibm.msg.client.jms.DetailedJMSException: JMSCC0005: The specified value 'MY_QUEUE?targetClient=1' is not allowed for 'XMSC_DESTINATION_NAME'
回避策は、カスタムの DestinationResolver を使用することです。
JmsComponent wmq = new JmsComponent(connectionFactory); wmq.setDestinationResolver(new DestinationResolver() { public Destination resolveDestinationName(Session session, String destinationName, boolean pubSubDomain) throws JMSException { MQQueueSession wmqSession = (MQQueueSession) session; return wmqSession.createQueue("queue:///" + destinationName + "?targetClient=1"); } });
31.21. Spring Boot Auto-Configuration
Spring Boot で jms を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-jms-starter</artifactId> </dependency>
コンポーネントは、以下に記載される 99 のオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.component.jms.accept-messages-while-stopping | consumer が停止中にメッセージを受け入れるかどうかを指定します。実行時に JMS ルートを開始および停止するが、キューにメッセージが入れられている場合は、このオプションを有効にすることを検討してください。このオプションが false の場合は、JMS ルートを停止すると、メッセージが拒否される可能性があり、JMS ブローカは再配信を試行する必要がありますが、これも拒否される可能性があり、最終的にメッセージはJMS ブローカー上のデッドレターキューに移動される可能性があります。これを回避するには、このオプションを有効にすることをお勧めします。 | false | Boolean |
camel.component.jms.acknowledgement-mode-name | JMS 確認応答名。SESSION_TRANSACTED、CLIENT_ACKNOWLEDGE、AUTO_ACKNOWLEDGE、DUPS_OK_ACKNOWLEDGE のいずれかです。 | AUTO_ACKNOWLEDGE | String |
camel.component.jms.allow-additional-headers | このオプションは、JMS 仕様に従って無効な値を持つ可能性がある追加のヘッダーを許可するために使用されます。たとえば、WMQ などの一部のメッセージシステムは、バイト配列またはその他の無効な型の値を含む接頭辞 JMS_IBM_MQMD_ を使用するヘッダー名でこれを行います。コンマで区切られた複数のヘッダー名を指定し、ワイルドカードマッチングの接尾辞として使用できます。 | String | |
camel.component.jms.allow-auto-wired-connection-factory | 接続ファクトリーが設定されていない場合に、レジストリーから ConnectionFactory を自動検出するかどうか。ConnectionFactory のインスタンスが 1 つだけ見つかった場合は、それが使用されます。これはデフォルトで有効になっています。 | true | Boolean |
camel.component.jms.allow-auto-wired-destination-resolver | 宛先リゾルバーが設定されていない場合に、レジストリーから DestinationResolver を自動検出するかどうか。DestinationResolver のインスタンスが 1 つだけ見つかった場合は、それが使用されます。これはデフォルトで有効になっています。 | true | Boolean |
camel.component.jms.allow-null-body | ボディーのないメッセージの送信を許可するかどうか。このオプションが false でメッセージボディーが null の場合は、JMSException が出力されます。 | true | Boolean |
camel.component.jms.allow-reply-manager-quick-stop | JmsConfiguration#isAcceptMessagesWhileStopping が有効で、org.apache.camel.CamelContext が現在停止している場合に、要求/応答メッセージングのリプライマネージャーで使用される DefaultMessageListenerContainer が、DefaultMessageListenerContainer.runningAllowed フラグを迅速に停止できるようにするかどうか。このクイック停止機能は、通常の JMS consumer ではデフォルトで有効になっていますが、応答マネージャーを有効にするには、このフラグを有効にする必要があります。 | false | Boolean |
camel.component.jms.allow-serialized-headers | シリアル化されたヘッダーを含めるかどうかを制御します。transferExchange が true の場合にのみ適用されます。これには、オブジェクトがシリアライズ可能である必要があります。Camel はシリアル化できないオブジェクトを除外し、WARN レベルでログに記録します。 | false | Boolean |
camel.component.jms.always-copy-message | true の場合、メッセージが producer に渡されて送信されると、Camel は常にメッセージの JMS メッセージコピーを作成します。replyToDestinationSelectorName が設定されている場合など、状況によってはメッセージをコピーする必要があります (ちなみに、replyToDestinationSelectorName が設定されている場合、Camel は alwaysCopyMessage オプションを true に設定します)。 | false | Boolean |
camel.component.jms.artemis-consumer-priority | consumer の優先度を使用すると、優先度の高い consumer がアクティブなときにメッセージを受信できるようになります。通常、キューに接続されているアクティブな consumer は、ラウンドロビン方式でキューからメッセージを受け取ります。consumer の優先度が使用されているとき、同じ優先度の高いアクティブなconsumer が複数存在する場合は、メッセージがラウンドロビンで配信されます。メッセージは、優先度の高い consumer がメッセージを消費するために利用できるクレジットを持っていない場合、またはそれらの優先度の高い consumer がメッセージの受け入れを拒否した場合にのみ、優先度の低い consumer に送信されます (たとえば、consumer に関連するセレクターの基準を満たさないため)。 | Integer | |
camel.component.jms.artemis-streaming-enabled | Apache Artemis ストリーミングモード用に最適化するかどうか。これにより、JMS StreamMessage タイプで Artemis を使用する場合のメモリーオーバーヘッドを削減できます。このオプションは、Apache Artemis が使用されている場合にのみ有効にする必要があります。 | false | Boolean |
camel.component.jms.async-consumer | JmsConsumer が Exchange を非同期的に処理するかどうか。有効にすると、JmsConsumer は JMS キューから次のメッセージを取得できますが、前のメッセージは (非同期ルーティングエンジンによって) 非同期に処理されます。これは、メッセージが 100% 厳密に順序どおりに処理されない可能性があることを意味します。無効になっている場合 (デフォルト)、JmsConsumer が JMS キューから次のメッセージを取得する前に Exchange が完全に処理されます。transactioned が有効になっている場合、トランザクションは同期的に実行する必要があるため、asyncConsumer=true は非同期的に実行されないことに注意してください (Camel 3.0 は非同期トランザクションをサポートする場合があります)。 | false | Boolean |
camel.component.jms.async-start-listener | ルートの開始時に JmsConsumer メッセージリスナーを非同期で開始するかどうか。たとえば、JmsConsumer がリモート JMS ブローカーへの接続を取得できない場合は、再試行中やフェイルオーバー中にブロックされる可能性があります。これにより、ルートの開始時に Camel がブロックされます。このオプションを true に設定すると、ルートの起動を許可します。一方、JmsConsumer は非同期モードで専用のスレッドを使用して JMS ブローカーに接続します。このオプションを使用する場合は、接続を確立できない場合は例外が WARN レベルでログに記録され、consumer はメッセージを受信できず、ルートを再起動して再試行できます。 | false | Boolean |
camel.component.jms.async-stop-listener | ルートを停止するときに、JmsConsumer メッセージリスナーを非同期的に停止するかどうか。 | false | Boolean |
camel.component.jms.auto-startup | consumer コンテナーを自動起動するかどうかを指定します。 | true | Boolean |
camel.component.jms.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.jms.cache-level | 基礎となる JMS リソースの ID によってキャッシュレベルを設定します。詳細は、cacheLevelName オプションを参照してください。 | Integer | |
camel.component.jms.cache-level-name | 基礎となる JMS リソースのキャッシュレベルを名前で設定します。可能な値は、CACHE_AUTO、CACHE_CONNECTION、CACHE_CONSUMER、CACHE_NONE、および CACHE_SESSION です。デフォルト設定は CACHE_AUTO です。詳細は、Spring のドキュメントとトランザクションキャッシュレベルを参照してください。 | CACHE_AUTO | String |
camel.component.jms.client-id | 使用する JMS クライアント ID を設定します。この値を指定する場合は、一意である必要があり、単一の JMS 接続インスタンスでのみ使用できることに注意してください。通常、永続的なトピックサブスクリプションの場合にのみ必要です。Apache ActiveMQ を使用している場合は、代わりに仮想トピックを使用することをお勧めします。 | String | |
camel.component.jms.concurrent-consumers | JMS から消費する場合の同時 consumer のデフォルト数を指定します (JMS を介した要求/応答ではありません)。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。JMS を介して要求/応答を行う場合は、オプション replyToConcurrentConsumers を使用して、応答メッセージリスナーの同時 consumer の数を制御します。 | 1 | Integer |
camel.component.jms.configuration | 共有 JMS 設定を使用するには。オプションは org.apache.camel.component.jms.JmsConfiguration タイプです。 | JmsConfiguration | |
camel.component.jms.connection-factory | 使用する接続ファクトリー。コンポーネントまたはエンドポイントで接続ファクトリーを設定する必要があります。オプションは javax.jms.ConnectionFactory タイプです。 | ConnectionFactory | |
camel.component.jms.consumer-type | 使用する consumer タイプ。Simple、Default、または Custom のいずれかです。consumer タイプによって、使用する Spring JMS リスナーが決まります。デフォルトは org.springframework.jms.listener.DefaultMessageListenerContainer を使用し、Simple は org.springframework.jms.listener.SimpleMessageListenerContainer を使用します。Custom を指定した場合は、messageListenerContainerFactory オプションで定義された MessageListenerContainerFactory によって、使用する org.springframework.jms.listener.AbstractMessageListenerContainer が決まります。 | ConsumerType | |
camel.component.jms.correlation-property | InOut 交換パターンを使用する場合、JMSCorrelationID JMS プロパティーの代わりにこの JMS プロパティーを使用してメッセージを関連付けます。設定されたメッセージがこのプロパティーの値のみに関連付けられる場合、JMSCorrelationID プロパティーは無視され、Camel によって設定されません。 | String | |
camel.component.jms.default-task-executor-type | consumer エンドポイントとプロデューサエンドポイントの ReplyTo consumer の両方に対して、DefaultMessageListenerContainer で使用するデフォルトの TaskExecutor タイプを指定します。可能な値: SimpleAsync (Spring の SimpleAsyncTaskExecutor を使用) または ThreadPool (Spring の ThreadPoolTaskExecutor を最適な値で使用 - キャッシュされたスレッドプールのようなもの)。設定されていない場合は、デフォルトで以前の動作になり、consumer エンドポイントにはキャッシュされたスレッドプールが使用され、応答 consumer には SimpleAsync が使用されます。ThreadPool の使用は、同時 consumer が動的に増減するエラスティック設定でスレッドのゴミを減らすために推奨されます。 | DefaultTaskExecutorType | |
camel.component.jms.delivery-delay | JMS の送信呼び出しに使用する配信遅延を設定します。このオプションには、JMS 2.0 準拠のブローカーが必要です。 | -1 | Long |
camel.component.jms.delivery-mode | 使用する配信モードを指定します。可能な値は、javax.jms.DeliveryMode で定義された値です。NON_PERSISTENT = 1 および PERSISTENT = 2。 | Integer | |
camel.component.jms.delivery-persistent | デフォルトで永続配信を使用するかどうかを指定します。 | true | Boolean |
camel.component.jms.destination-resolver | 独自のリゾルバーを使用できるようにするプラグ可能な org.springframework.jms.support.destination.DestinationResolver (たとえば、JNDI レジストリーで実際の宛先を検索するため)。オプションは org.springframework.jms.support.destination.DestinationResolver 型です。 | DestinationResolver | |
camel.component.jms.disable-reply-to | Camel がメッセージの JMSReplyTo ヘッダーを無視するかどうかを指定します。true の場合、Camel は JMSReplyTo ヘッダーで指定された宛先に返信を送り返しません。Camel にルートから消費させたいが、コード内の別のコンポーネントが応答メッセージを処理するため、Camel に自動的に応答メッセージを送り返したくない場合は、このオプションを使用できます。Camel を異なるメッセージブローカー間のプロキシーとして使用し、あるシステムから別のシステムにメッセージをルーティングする場合にも、このオプションを使用できます。 | false | Boolean |
camel.component.jms.disable-time-to-live | このオプションを使用して、有効期限を強制的に無効にします。たとえば、JMS を介して要求/応答を行う場合、Camel はデフォルトで、送信されるメッセージの存続時間として requestTimeout 値を使用します。問題は、送信側システムと受信側システムのクロックを同期させる必要があるため、同期していることです。これをアーカイブするのは必ずしも簡単ではありません。したがって、disableTimeToLive=true を使用して、送信されたメッセージに有効期限の値を設定しないようにすることができます。その後、メッセージは受信側システムで期限切れになりません。詳細については、以下の生存時間についてのセクションを参照してください。 | false | Boolean |
camel.component.jms.durable-subscription-name | 永続トピックサブスクリプションを指定するための永続サブスクライバー名。clientId オプションも設定する必要があります。 | String | |
camel.component.jms.eager-loading-of-properties | メッセージが読み込まれるとすぐに JMS プロパティーとペイロードの熱心な読み込みを有効にします。これは、JMS プロパティーが必要ない場合があるため一般的に非効率的ですが、基盤となる JMS プロバイダーと JMS プロパティーの使用に関する問題を早期に発見できる場合があります。オプション eagerPoisonBody も参照してください。 | false | Boolean |
camel.component.jms.eager-poison-body | eagerLoadingOfProperties が有効であり、JMS メッセージペイロード (JMS 本文または JMS プロパティー) が有害 (読み取り/マッピングできない) である場合は、代わりにこのテキストをメッセージボディーとして設定し、メッセージを処理できるようにします (有害の原因は、Exchange では例外としてすでに保存されています)。これは、eagerPoisonBody=false を設定することでオフにすることができます。オプション eagerLoadingOfProperties も参照してください。 | $\{exception.message} による JMS メッセージへの影響 | String |
camel.component.jms.enabled | jms コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.jms.error-handler | Message の処理中にキャッチされない例外が出力された場合に呼び出される org.springframework.util.ErrorHandler を指定します。デフォルトでは、errorHandler が設定されていない場合、これらの例外は WARN レベルでログに記録されます。errorHandlerLoggingLevel および errorHandlerLogStackTrace オプションを使用して、ログレベルとスタックトレースをログに記録するかどうかを設定できます。これにより、カスタム errorHandler をコーディングするよりも設定がはるかに簡単になります。オプションは org.springframework.util.ErrorHandler 型です。 | ErrorHandler | |
camel.component.jms.error-handler-log-stack-trace | デフォルトの errorHandler でスタックトレースをログに記録するかどうかを制御できます。 | true | Boolean |
camel.component.jms.error-handler-logging-level | キャッチされていない例外をログに記録するためのデフォルトの errorHandler ログレベルを設定できます。 | LoggingLevel | |
camel.component.jms.exception-listener | 基礎となる JMS 例外の通知を受ける JMS 例外リスナーを指定します。オプションは javax.jms.ExceptionListener 型です。 | ExceptionListener | |
camel.component.jms.explicit-qos-enabled | メッセージの送信時に、deliveryMode、priority、または timeToLive のサービス品質を使用する必要があるかどうかを設定します。このオプションは、Spring の JmsTemplate に基づいています。deliveryMode、priority、および timeToLive オプションは、現在のエンドポイントに適用されます。これは、メッセージの粒度で動作し、Camel In メッセージヘッダーから排他的に QoS プロパティーを読み取る preserveMessageQos オプションとは対照的です。 | false | Boolean |
camel.component.jms.expose-listener-session | メッセージを消費するときにリスナーセッションを公開するかどうかを指定します。 | false | Boolean |
camel.component.jms.force-send-original-message | mapJmsMessage=false を使用すると、ルート中にヘッダーに触れると (get または set)、Camel は新しい JMS メッセージを作成して新しい JMS 宛先に送信します。Camel が受信した元の JMS メッセージを強制的に送信するには、このオプションを true に設定します。 | false | Boolean |
camel.component.jms.format-date-headers-to-iso8601 | JMS 日付プロパティーを ISO 8601 標準に従ってフォーマットするかどうかを設定します。 | false | Boolean |
camel.component.jms.header-filter-strategy | カスタムの org.apache.camel.spi.HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルターします。このオプションは org.apache.camel.spi.HeaderFilterStrategy タイプです。 | HeaderFilterStrategy | |
camel.component.jms.idle-consumer-limit | 常にアイドル状態にできる consumer の数の制限を指定します。 | 1 | Integer |
camel.component.jms.idle-task-execution-limit | 実行中にメッセージを受信していない、受信タスクのアイドル実行の制限を指定します。この制限に達すると、タスクはシャットダウンし、他の実行中のタスクに受信を任せます (動的スケジューリングの場合。maxConcurrentConsumers 設定を参照してください)。Spring から入手できる追加のドキュメントがあります。 | 1 | Integer |
camel.component.jms.include-all-j-m-s-x-properties | JMS から Camel Message へのマッピング時に JMSXxxx プロパティーをすべて含めるかどうか。これを true に設定すると、JMSXAppID や JMSXUserID などのプロパティーが含まれます。注記: カスタムの headerFilterStrategy を使用している場合、このオプションは適用されません。 | false | Boolean |
camel.component.jms.include-sent-j-m-s-message-i-d | InOnly を使用して JMS 宛先に送信する場合にのみ適用されます (例: ファイアアンドフォーゲット)。このオプションを有効にすると、メッセージが JMS 宛先に送信されたときに JMS クライアントによって使用された実際の JMSMessageID で Camel Exchange が強化されます。 | false | Boolean |
camel.component.jms.jms-key-format-strategy | JMS 仕様に準拠できるように、JMS キーをエンコードおよびデコードするためのプラグ可能な戦略。Camel は、追加設定なしで、default と passthrough の 2 つの実装を提供します。デフォルトのストラテジーでは、ドットとハイフン(. および -)を安全にマーシャリングします。パススルー戦略では、キーはそのまま残ります。JMS ヘッダーキーに不正な文字が含まれているかどうかは問題にならない JMS ブローカーに使用できます。org.apache.camel.component.jms.JmsKeyFormatStrategy の独自の実装を提供し、# 表記を使用して参照できます。 | JmsKeyFormatStrategy | |
camel.component.jms.jms-message-type | JMS メッセージの送信に特定の javax.jms.Message 実装を強制的に使用できるようにします。可能な値は、Bytes、Map、Object、Stream、Text です。デフォルトでは、Camel は In body タイプから使用する JMS メッセージタイプを決定します。このオプションで指定できます。 | JmsMessageType | |
camel.component.jms.lazy-create-transaction-manager | true の場合、オプション transacted=true のときに transactionManager が挿入されていない場合、Camel は JmsTransactionManager を作成します。 | true | Boolean |
camel.component.jms.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
camel.component.jms.map-jms-message | Camel が受信した JMS メッセージを適切なペイロードタイプ (javax.jms.TextMessage を文字列など) に自動マップするかどうかを指定します。 | true | Boolean |
camel.component.jms.max-concurrent-consumers | JMS から消費する場合の同時 consumer の最大数を指定します (JMS を介した要求/応答ではありません)。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。JMS を介して要求/応答を行う場合は、オプション replyToMaxConcurrentConsumers を使用して、応答メッセージリスナーの同時 consumer の数を制御します。 | Integer | |
camel.component.jms.max-messages-per-task | タスクあたりのメッセージ数。-1 は無制限です。同時 consumer の範囲 (例: min max) を使用する場合、このオプションを使用して値を 100 などに設定し、必要な作業が少ない場合に consumer が縮小する速度を制御できます。 | -1 | Integer |
camel.component.jms.message-converter | カスタム Spring org.springframework.jms.support.converter.MessageConverter を使用して、javax.jms.Message との間でどのようにマッピングするかを制御できるようにします。オプションは org.springframework.jms.support.converter.MessageConverter 型です。 | MessageConverter | |
camel.component.jms.message-created-strategy | Camel が JMS メッセージを送信しているときに、Camel が javax.jms.Message オブジェクトの新しいインスタンスを作成するときに呼び出される、指定された MessageCreatedStrategy を使用します。オプションは org.apache.camel.component.jms.MessageCreatedStrategy タイプです。 | MessageCreatedStrategy | |
camel.component.jms.message-id-enabled | 送信時に、メッセージ ID を追加するかどうかを指定します。これは、JMS ブローカーへの単なるヒントです。JMS プロバイダーがこのヒントを受け入れる場合、これらのメッセージのメッセージ ID を null に設定する必要があります。プロバイダーがヒントを無視する場合、メッセージ ID は通常の一意の値に設定する必要があります。 | true | Boolean |
camel.component.jms.message-listener-container-factory | メッセージを消費するために使用する org.springframework.jms.listener.AbstractMessageListenerContainer を決定するために使用される MessageListenerContainerFactory のレジストリー ID。これを設定すると、consumerType が自動的に Custom に設定されます。オプションは org.apache.camel.component.jms.MessageListenerContainerFactory タイプです。 | MessageListenerContainerFactory | |
camel.component.jms.message-timestamp-enabled | メッセージの送信時にデフォルトでタイムスタンプを有効にするかどうかを指定します。これは、JMS ブローカーへの単なるヒントです。JMS プロバイダーがこのヒントを受け入れる場合、これらのメッセージのタイムスタンプをゼロに設定する必要があります。プロバイダーがヒントを無視する場合は、タイムスタンプを通常の値に設定する必要があります。 | true | Boolean |
camel.component.jms.password | ConnectionFactory で使用するパスワード。また、ConnectionFactory でユーザー名およびパスワードを直接設定することもできます。 | String | |
camel.component.jms.preserve-message-qos | JMS エンドポイントの QoS 設定ではなく、メッセージで指定された QoS 設定を使用してメッセージを送信する場合は、true に設定します。次の 3 つのヘッダーは、JMSPriority、JMSDeliveryMode、および JMSExpiration と見なされます。それらのすべてまたは一部のみを指定できます。指定されていない場合、Camel は代わりにエンドポイントからの値を使用するようにフォールバックします。したがって、このオプションを使用すると、ヘッダーはエンドポイントからの値をオーバーライドします。対照的に、explicitQosEnabled オプションは、エンドポイントに設定されたオプションのみを使用し、メッセージヘッダーの値は使用しません。 | false | Boolean |
camel.component.jms.priority | 1 より大きい値は、送信時のメッセージの優先度を指定します (1 が最低の優先度で、9 が最高の優先度です)。このオプションを有効にするには、explicitQosEnabled オプションも有効にする必要があります。 | 4 | Integer |
camel.component.jms.pub-sub-no-local | 独自の接続によってパブリッシュされたメッセージの配信を禁止するかどうかを指定します。 | false | Boolean |
camel.component.jms.queue-browse-strategy | キューを参照するときにカスタム QueueBrowseStrategy を使用するには。オプションは org.apache.camel.component.jms.QueueBrowseStrategy タイプです。 | QueueBrowseStrategy | |
camel.component.jms.receive-timeout | メッセージ受信のタイムアウト (ミリ秒単位)。オプションはロング型です。 | 1000 | Long |
camel.component.jms.recovery-interval | リカバリーの試行の間隔を指定します。つまり、接続が更新されるタイミング(ミリ秒単位)を指定します。デフォルトは 5000 ミリ秒、つまり 5 秒です。オプションはロング型です。 | 5000 | Long |
camel.component.jms.reply-to | 明示的な ReplyTo 宛先を提供します (consumer の Message.getJMSReplyTo() の着信値をオーバーライドします)。 | String | |
camel.component.jms.reply-to-cache-level-name | JMS を介して要求/応答を行うときに、応答 consumer のキャッシュレベルを名前で設定します。このオプションは、固定応答キュー (一時的ではない) を使用する場合にのみ適用されます。Camel はデフォルトで次を使用します: 排他的または replyToSelectorName と共有の CACHE_CONSUMER。そして、replyToSelectorName なしで共有するための CACHE_SESSION。IBM WebSphere などの一部の JMS ブローカーは、replyToCacheLevelName=CACHE_NONE を機能させるために設定する必要がある場合があります。注: 一時キューを使用する場合、CACHE_NONE は許可されず、CACHE_CONSUMER や CACHE_SESSION などのより高い値を使用する必要があります。 | String | |
camel.component.jms.reply-to-concurrent-consumers | JMS を介して要求/応答を行うときの同時 consumer のデフォルト数を指定します。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。 | 1 | Integer |
camel.component.jms.reply-to-delivery-persistent | 返信に対してデフォルトで永続的な配信を使用するかどうかを指定します。 | true | Boolean |
camel.component.jms.reply-to-destination-selector-name | 使用する固定名を使用して JMS セレクターを設定し、共有キューを使用している場合 (つまり、一時的な応答キューを使用していない場合) に、他の応答から自分の応答を除外できるようにします。 | String | |
camel.component.jms.reply-to-max-concurrent-consumers | JMS を介した要求/応答を使用する場合の同時 consumer の最大数を指定します。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。 | Integer | |
camel.component.jms.reply-to-on-timeout-max-concurrent-consumers | JMS 経由の要求/応答を使用するときにタイムアウトが発生したときに、ルーティングを継続するための同時 consumer の最大数を指定します。 | 1 | Integer |
camel.component.jms.reply-to-override | JMS メッセージで明示的な ReplyTo 宛先を提供します。これは、replyTo の設定をオーバーライドします。メッセージをリモート Queue に転送し、ReplyTo 宛先から応答メッセージを受け取る場合に便利です。 | String | |
camel.component.jms.reply-to-same-destination-allowed | JMS consumer が、consumer が使用しているのと同じ宛先に応答メッセージを送信できるかどうか。これにより、同じメッセージを消費してそれ自体に送り返すことで、無限ループが回避されます。 | false | Boolean |
camel.component.jms.reply-to-type | JMS を介して要求/応答を行うときに、replyTo キューに使用する戦略の種類を明示的に指定できます。可能な値は、Temporary、Shared、または Exclusive です。デフォルトでは、Camel は一時キューを使用します。ただし、replyTo が設定されている場合は、デフォルトで Shared が使用されます。このオプションを使用すると、共有キューの代わりに専用キューを使用できます。詳細については、Camel JMS のドキュメントを参照してください。特に、クラスター化された環境で実行する場合の影響に関する注意事項と、共有応答キューは代替の一時および排他的キューよりもパフォーマンスが低いという事実を参照してください。 | ReplyToType | |
camel.component.jms.request-timeout | InOut Exchange パターン使用時の応答待ちタイムアウト (ミリ秒単位)。デフォルトは 20 秒です。ヘッダー CamelJmsRequestTimeout を含めて、このエンドポイントで設定されたタイムアウト値をオーバーライドし、メッセージごとに個別のタイムアウト値を持つことができます。requestTimeoutCheckerInterval オプションも参照してください。オプションはロング型です。 | 20000 | Long |
camel.component.jms.request-timeout-checker-interval | JMS を介してリクエスト/リプライを行うときに、Camel がタイムアウトになった Exchange をチェックする頻度を設定します。デフォルトでは、Camel は 1 秒に 1 回確認します。ただし、タイムアウトが発生したときに迅速に対応する必要がある場合は、この間隔を短くして、より頻繁にチェックすることができます。タイムアウトは、オプション requestTimeout によって決定されます。オプションはロング型です。 | 1000 | Long |
camel.component.jms.selector | 使用する JMS セレクターを設定します。 | String | |
camel.component.jms.stream-message-type-enabled | StreamMessage タイプを有効にするかどうかを設定します。ファイル、InputStream などのストリーミングの種類のメッセージペイロードは、BytesMessage または StreamMessage として送信されます。このオプションは、どの種類が使用されるかを制御します。デフォルトでは、BytesMessage が使用され、メッセージペイロード全体がメモリーに読み込まれます。このオプションを有効にすると、メッセージペイロードがチャンク単位でメモリーに読み込まれ、データがなくなるまで各チャンクが StreamMessage に書き込まれます。 | false | Boolean |
camel.component.jms.subscription-durable | サブスクリプションを永続化するかどうかを設定します。使用する永続サブスクリプション名は、subscriptionName プロパティーで指定できます。デフォルトは false です。通常、subscriptionName 値と組み合わせて永続的なサブスクリプションを登録するには、これを true に設定します (メッセージリスナークラス名がサブスクリプション名として十分でない場合)。トピック (pub-sub ドメイン) をリッスンする場合にのみ意味があるため、このメソッドは pubSubDomain フラグも切り替えます。 | false | Boolean |
camel.component.jms.subscription-name | 作成するサブスクリプションの名前を設定します。共有または永続的なサブスクリプションを持つトピック (pub-sub ドメイン) の場合に適用されます。サブスクリプション名は、このクライアントの JMS クライアント ID 内で一意である必要があります。デフォルトは、指定されたメッセージリスナーのクラス名です。注: 共有サブスクリプション (JMS 2.0 が必要) を除き、サブスクリプションごとに 1 つの同時 consumer (このメッセージリスナコンテナーのデフォルト) のみが許可されます。 | String | |
camel.component.jms.subscription-shared | サブスクリプションを共有するかどうかを設定します。使用する共有サブスクリプション名は、subscriptionName プロパティーで指定できます。デフォルトは false です。通常は subscriptionName 値と組み合わせて共有サブスクリプションを登録するには、これを true に設定します (メッセージリスナークラス名がサブスクリプション名として十分でない場合)。共有サブスクリプションも永続的である可能性があるため、このフラグを subscriptionDurable と組み合わせることもできます (多くの場合は組み合わせます)。トピック (pub-sub ドメイン) をリッスンする場合にのみ意味があるため、このメソッドは pubSubDomain フラグも切り替えます。JMS 2.0 互換のメッセージブローカーが必要です。 | false | Boolean |
camel.component.jms.synchronous | 同期処理を厳密に使用するかどうかを設定します。 | false | Boolean |
camel.component.jms.task-executor | メッセージを消費するためのカスタムタスクエグゼキュータを指定できます。オプションは org.springframework.core.task.TaskExecutor 型です。 | TaskExecutor | |
camel.component.jms.test-connection-on-startup | 起動時に接続をテストするかどうかを指定します。これにより、Camel の起動時に、すべての JMS consumerが JMS ブローカーへの有効な接続を持つことが保証されます。接続を許可できない場合、Camel は起動時に例外を出力します。これにより、接続に失敗した状態で Camel が開始されなくなります。JMS producer もテストされています。 | false | Boolean |
camel.component.jms.time-to-live | メッセージの送信時に、メッセージの有効期限をミリ秒単位で指定します。 | -1 | Long |
camel.component.jms.transacted | トランザクションモードを使用するかどうかを指定します。 | false | Boolean |
camel.component.jms.transacted-in-out | InOut 操作 (リクエストリプライ) がデフォルトでトランザクションモードを使用するかどうかを指定します。このフラグが true に設定されている場合、Spring JmsTemplate は sessionTransacted を true に設定し、acknowledgeMode は InOut 操作に使用される JmsTemplate でトランザクションされます。Spring JMS からの注意: JTA トランザクション内では、createQueue、createTopic メソッドに渡されるパラメーターは考慮されません。Java EE トランザクションコンテキストに応じて、コンテナーはこれらの値を独自に決定します。同様に、この場合、Spring JMS は既存の JMS セッションで動作するため、これらのパラメーターはローカルで管理されるトランザクション内でも考慮されません。このフラグを true に設定すると、管理対象トランザクションの外部で実行されている場合は短いローカル JMS トランザクションが使用され、管理対象トランザクション (XA トランザクション以外) が存在する場合は同期されたローカル JMS トランザクションが使用されます。これには、ローカル JMS トランザクションがメイントランザクション (ネイティブ JDBC トランザクションの場合もある) と一緒に管理され、JMS トランザクションがメイントランザクションの直後にコミットされるという効果があります。 | false | Boolean |
camel.component.jms.transaction-manager | 使用する Spring トランザクションマネージャー。オプションは org.springframework.transaction.PlatformTransactionManager 型です。 | PlatformTransactionManager | |
camel.component.jms.transaction-name | 使用するトランザクションの名前。 | String | |
camel.component.jms.transaction-timeout | トランザクションモードを使用している場合の、トランザクションのタイムアウト値 (秒単位)。 | -1 | Integer |
camel.component.jms.transfer-exception | 有効で、Request Reply メッセージング (InOut) を使用していて、Exchange が consumer 側で失敗した場合、原因となった例外が javax.jms.ObjectMessage として応答で返されます。クライアントが Camel の場合、返された Exception は再出力されます。これにより、Camel JMS をルーティングのブリッジとして使用できます。たとえば、永続的なキューを使用して堅牢なルーティングを有効にできます。transferExchange も有効にしている場合は、このオプションが優先されることに注意してください。キャッチされた例外はシリアライズ可能である必要があります。consumer 側の元の Exception は、producer に返されるときに org.apache.camel.RuntimeCamelException などの外部例外にラップできます。データは Java オブジェクトのシリアライゼーションを使用しており、受信側がクラスレベルでデータをデシリアライズできる必要があるため、これは注意して使用してください。 | false | Boolean |
camel.component.jms.transfer-exchange | 本文とヘッダーだけでなく、電信送金で交換を転送できます。次のフィールドが転送されます: In body、Out body、Fault body、In ヘッダー、Out ヘッダー、Fault ヘッダー、交換プロパティー、交換例外。これには、オブジェクトがシリアライズ可能である必要があります。Camel はシリアル化できないオブジェクトを除外し、WARN レベルでログに記録します。プロデューサ側と consumer 側の両方でこのオプションを有効にする必要があるため、Camel はペイロードが Exchange であり、通常のペイロードではないことを認識します。データは Java オブジェクトのシリアライゼーションを使用しており、レシーバーがクラスレベルでデータをデシリアライズできる必要があるため、これは注意して使用してください。これにより、互換性のある Camel バージョンを使用する必要がある producer と consumer の間の強い結合が強制されます。 | false | Boolean |
camel.component.jms.use-message-i-d-as-correlation-i-d | InOut メッセージの JMSCorrelationID として JMSMessageID を常に使用するかどうかを指定します。 | false | Boolean |
camel.component.jms.username | ConnectionFactory で使用するユーザー名。また、ConnectionFactory でユーザー名およびパスワードを直接設定することもできます。 | String | |
camel.component.jms.wait-for-provision-correlation-to-be-updated-counter | JMS を介して要求/応答を行う場合、およびオプション useMessageIDAsCorrelationID が有効な場合に、暫定相関 ID が実際の相関 ID に更新されるのを待機する回数。 | 50 | Integer |
camel.component.jms.wait-for-provision-correlation-to-be-updated-thread-sleeping-time | 暫定相関 ID が更新されるのを待機するたびにスリープする間隔 (ミリ単位)。オプションはロング型です。 | 100 | Long |
第32章 JPA
Camel 1.0 以降
producer と consumer の両方がサポート対象。
JPA コンポーネントを使用すると、EJB 3 の Java Persistence Architecture (JPA) を使用して永続ストレージから Java オブジェクトを格納および取得できます。Java Persistence Architecture (JPA) は、OpenJPA、Hibernate、TopLink などのオブジェクト/リレーショナルマッピング (ORM) 製品をラップする標準インターフェイスレイヤーです。
このコンポーネントの pom.xml
に次の依存関係を追加します。
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-jpa</artifactId> <version>3.20.1.redhat-00031</version> <!-- use the same version as your Camel core version --> </dependency>
32.1. エンドポイントへの送信
Java エンティティー Bean を JPA producer エンドポイントに送信することにより、データベースに格納できます。In
メッセージのボディーは、エンティティー Bean (つまり、@Entity アノテーションが付けられた POJO) またはエンティティー Bean のコレクションまたは配列であると想定されます。
本文がエンティティーのリストである場合は、producer エンドポイントに渡される設定として entityType=java.util.List
を使用します。
本文に前にリストされたタイプのいずれも含まれていない場合は、エンドポイントの前に Message Translator を配置して、最初に必要な変換を実行します。
producer にも query
、namedQuery
または nativeQuery を
使用できます。parameters
の値には、メッセージ本文、ヘッダーなどからパラメーター値を取得できるシンプルな式を使用できます。これらのクエリーは、SELECT
JPQL/SQL ステートメントを使用した一連のデータの取得、および UPDATE
/DELETE
JPQL/SQL ステートメントを使用した一括更新/削除の実行に使用できます。camel は query
や nativeQuery
とは異なり、名前付きクエリーを調べないため、namedQuery
で UPDATE
/DELETE
を実行する場合は、useExecuteUpdate
を true
に指定する必要があることに注意してください。
32.2. エンドポイントからの消費
JPA consumer エンドポイントからメッセージを消費すると、データベース内のエンティティー Bean が削除 (または更新) されます。これにより、データベーステーブルを論理キューとして使用できます。consumer はキューからメッセージを取得し、それらを削除/更新してキューから論理的に削除します。
エンティティー Bean が処理されたとき (およびルーティングが完了したとき) にエンティティー Bean を削除したくない場合は、URI で consumeDelete=false
を指定できます。これにより、ポーリングごとにエンティティーが処理されます。
エンティティーに何らかの更新を実行して、処理済みとしてマークする (今後のクエリーから除外するなど) 場合は、@Consumed で Bean にアノテーションを付けることができます。処理済み (およびルーティングが完了したとき)。
エンティティー Bean が処理される前 (ルーティング前) に呼び出される @PreConsumed を使用できます。
大量 (100K+) の行を消費していて OutOfMemory の問題が発生している場合は、maximumResults を適切な値に設定する必要があります。
32.3. URI 形式
jpa:entityClassName[?options]
エンドポイントに送信する場合、entityClassName
はオプションです。指定すると、型コンバーター が本体が正しい型であることを確認するのに役立ちます。
消費する場合、entityClassName
は必須です。
32.4. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
32.4.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
32.4.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
32.4.3. コンポーネントオプション
JPA コンポーネントは、以下に示す 9 個のオプションをサポートしています。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
aliases (共通) | エイリアスを JPA エンティティークラスにマップします。エイリアスは、(完全修飾クラス名の代わりに) エンドポイント URI で使用できます。 | Map | |
entityManagerFactory (Common) | EntityManagerFactory を使用する場合。これを設定することを強くお勧めします。 | EntityManagerFactory | |
joinTransaction (Common) | camel-jpa コンポーネントはデフォルトでトランザクションに参加します。このオプションを使用して、これをオフにすることができます。たとえば、LOCAL_RESOURCE を使用していて、参加トランザクションが JPA プロバイダーで機能しない場合などです。このオプションは、すべてのエンドポイントで設定する代わりに、JpaComponent でグローバルに設定することもできます。 | true | boolean |
sharedEntityManager (common) | consumer/producer に Spring の SharedEntityManager を使用するかどうか。これは EXTENDED EntityManager ではないため、ほとんどの場合、joinTransaction は false に設定する必要があります。 | false | boolean |
transactionManager (Common) | PlatformTransactionManager を使用してトランザクションを管理する場合。 | PlatformTransactionManager | |
transactionStrategy (共通) | トランザクションで操作を実行するために TransactionStrategy を使用するには。 | TransactionStrategy | |
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
32.4.4. エンドポイントオプション
JPA エンドポイントは、URI 構文を使用して設定されます。
jpa:entityType
パスおよびクエリーパラメーターを使用します。
32.4.4.1. パスパラメーター(1 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
entityType (common) | 必須 Entity クラス名。 | クラス |
32.4.4.2. クエリーパラメーター (44 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
joinTransaction (Common) | camel-jpa コンポーネントはデフォルトでトランザクションに参加します。このオプションを使用して、これをオフにすることができます。たとえば、LOCAL_RESOURCE を使用していて、参加トランザクションが JPA プロバイダーで機能しない場合などです。このオプションは、すべてのエンドポイントで設定する代わりに、JpaComponent でグローバルに設定することもできます。 | true | boolean |
maximumResults (common) | クエリーで取得する結果の最大数を設定します。 | -1 | int |
namedQuery (common) | 名前付きクエリーを使用する場合。 | String | |
nativeQuery (common) | カスタムネイティブクエリーを使用する場合。ネイティブクエリーを使用する場合にも、オプション resultClass を使用することができます。 | 文字列 | |
persistenceUnit (common) | 必須 デフォルトで使用される JPA 持続性ユニット。 | camel | String |
query (common) | カスタムクエリーを使用する場合。 | String | |
resultClass (common) | 返されるペイロードのタイプを定義します (entityManager.createNativeQuery (nativeQuery) の代わりに entityManager.createNativeQuery (nativeQuery、resultClass) を呼び出します)。このオプションを指定しないと、オブジェクト配列が返されます。データを消費するときにネイティブクエリーと組み合わせて使用する場合にのみ影響します。 | クラス | |
consumeDelete (consumer) | true の場合、エンティティーは消費後に削除されます。false の場合、エンティティーは削除されません。 | true | boolean |
consumeLockEntity (consumer) | ポーリングの結果を処理する際に、各エンティティー Bean に排他ロックを設定するかどうかを指定します。 | true | boolean |
deleteHandler (consumer) | consumer がエクスチェンジの処理を完了した後に、カスタム DeleteHandler を使用して行を削除する場合。 | DeleteHandler | |
lockModeType (consumer) | consumer でロックモードを設定する場合。 列挙値:
| PESSIMISTIC_WRITE | LockModeType |
maxMessagesPerPoll (consumer) | ポーリングごとに収集するメッセージの最大数を定義する整数値。デフォルトでは最大値は設定されていません。サーバーの起動時に何千ものメッセージをポーリングするのを避けるために使用できます。無効にするには、0 または負の値を設定します。 | int | |
preDeleteHandler (consumer) | カスタム Pre-DeleteHandler を使用して、consumer がエンティティーを読み取った後に行を削除する場合。 | DeleteHandler | |
sendEmptyMessageWhenIdle (consumer) | ポーリング consumer がファイルをポーリングしなかった場合、このオプションを有効にして、代わりに空のメッセージ (ボディーなし) を送信できます。 | false | boolean |
skipLockedEntity (consumer) | ロック時に NOWAIT を使用し、サイレントにエンティティーをスキップするかどうかを設定する場合。 | false | boolean |
transacted (consumer) | バッチ全体が処理されたときに、すべてのメッセージがコミットまたはロールバックされるトランザクションモードで consumer を実行するかどうか。デフォルトの動作 (false) は、以前に正常に処理されたすべてのメッセージをコミットし、最後に失敗したメッセージのみをロールバックします。 | false | boolean |
bridgeErrorHandler (consumer (advanced)) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
exceptionHandler (consumer (上級)) | consumer によるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、consumer は例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
exchangePattern (consumer (上級)) | consumer がエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
parameter (consumer (高度)) | このキーと値のマッピングは、クエリーパラメーターの作成に使用されます。これは、キーが特定の JPA クエリーの名前付きパラメーターであり、値が選択する対応する有効な値であるジェネリック型 java.util.Map であることが期待されます。producer に使用する場合は、単純式をパラメーター値として使用できます。メッセージボディー、ヘッダーなどからパラメーター値を取得できます。 | Map | |
pollStrategy (consumer (上級)) | プラグ可能な org.apache.camel.PollingConsumerPollingStrategy を使用すると、エクスチェンジが作成され、Camel でルーティングされる前に、通常はポーリング操作中に発生するエラー処理を制御するカスタム実装が提供できます。 | PollingConsumerPollStrategy | |
findEntity (producer) | 有効にすると、producer はメッセージボディーをキーとして使用し、EntityType をクラスタイプとして使用して単一のエンティティーを見つけます。これは、クエリーの代わりに使用して、単一のエンティティーを検索できます。 | false | boolean |
flushOnSend (producer) | エンティティー Bean が永続化された後、EntityManager をフラッシュします。 | true | boolean |
remove (producer) | entityManager.remove (entity) を使用することを示します。 | false | boolean |
useExecuteUpdate (producer) | producer がクエリーを実行するときに executeUpdate() を使用するかどうかを設定します。INSERT、UPDATE、または DELETE ステートメントを名前付きクエリーとして使用する場合、このオプションを true に指定する必要があります。 | Boolean | |
usePersist (producer) | entityManager.merge (entity) の代わりに entityManager.persist (entity) を使用することを示します。注記: entityManager.persist (entity) は、切り離されたエンティティー (EntityManager が INSERT クエリーの代わりに UPDATE を実行する必要がある場合) では機能しません! | false | boolean |
lazyStartProducer (producer (上級)) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
usePassedInEntityManager (producer (advanced)) | true に設定すると、Camel は、コンポーネント/エンドポイントで設定されたエンティティーマネージャーの代わりに、ヘッダー JpaConstants.ENTITY_MANAGER の EntityManager を使用します。これにより、エンドユーザーはどのエンティティーマネージャーを使用するかを制御できます。 | false | boolean |
entityManagerProperties (advanced) | エンティティーマネージャーが使用する追加のプロパティー。 | Map | |
sharedEntityManager (advanced) | consumer/producer に Spring の SharedEntityManager を使用するかどうか。これは EXTENDED EntityManager ではないため、ほとんどの場合、joinTransaction は false に設定する必要があります。 | false | boolean |
backoffErrorThreshold (scheduler) | backoffMultipler が開始する前に発生する必要がある後続のエラーポーリング (エラーによって失敗した) の数。 | int | |
backoffIdleThreshold (scheduler) | backoffMultipler が開始する前に発生する必要がある後続のアイドルポーリングの数。 | int | |
backoffMultiplier (scheduler) | 後続のアイドル状態/エラーが連続して発生した場合に、スケジュールされたポーリング consumer のバックオフを許可します。乗数は、実際に次の試行が行われる前にスキップされるポーリングの数です。このオプションが使用されている場合は、backoffIdleThreshold や backoffErrorThreshold も設定する必要があります。 | int | |
delay (scheduler) | 次のポーリングまでの時間 (ミリ秒単位)。 | 500 | long |
greedy (scheduler) | greedy が有効で、以前の実行が 1 つ以上のメッセージをポーリングした場合、ScheduledPollConsumer は即座に再度実行されます。 | false | boolean |
initialDelay (scheduler) | 最初のポーリングが開始されるまでの時間 (ミリ秒単位)。 | 1000 | long |
repeatCount (スケジューラー) | 実行の最大数を指定します。そのため、これを 1 に設定するとスケジューラーは 1 度だけ実行されます。これを 5 に設定した場合、5 回だけ実行されます。0 または負の値を設定すると、無制限に実行されます。 | 0 | long |
runLoggingLevel (scheduler) | consumer はポーリング時に開始/完了のログ行を記録します。このオプションを使用すると、ログレベルを設定できます。 列挙値:
| TRACE | LoggingLevel |
scheduledExecutorService (scheduler) | consumer に使用するカスタム/共有スレッドプールを設定できます。デフォルトでは、各 consumer に独自の単一スレッドのスレッドプールがあります。 | ScheduledExecutorService | |
scheduler (スケジューラー) | camel-spring または camel-quartz コンポーネントから cron スケジューラーを使用します。スケジューラーにビルドされた値 spring または quartz を使用。 | none | オブジェクト |
schedulerProperties (スケジューラー) | カスタムスケジューラーまたは Quartz や Spring ベースのスケジューラーを使用する場合に、追加のプロパティーを設定します。 | マップ | |
startScheduler (scheduler) | スケジューラーを自動起動するかどうか。 | true | boolean |
timeUnit (scheduler) | initialDelay および delay オプションの時間単位。 列挙値:
| MILLISECONDS | TimeUnit |
useFixedDelay (scheduler) | 固定遅延または固定レートを使用するかどうかを制御します。詳細は、JDK の ScheduledExecutorService を参照してください。 | true | boolean |
32.5. メッセージヘッダー
JPA コンポーネントは、以下に示す 2 つのメッセージヘッダーをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
CamelEntityManager (common) 定数: ENTITY_MANAGER | JPA EntityManager オブジェクト。 | EntityManager | |
camelJpaParameters (producer) 定数: リンク: JPA_PARAMETERS_HEADER | クエリーパラメーターを Exchange ヘッダーとして渡す別の方法。 | Map |
32.6. EntityManagerFactory の設定
特定の EntityManagerFactory
インスタンスを使用するように JPA コンポーネントを設定することを推奨します。そうしないと、各 JpaEndpoint
が EntityManagerFactory
の独自のインスタンスを自動作成しますが、これはほとんどの場合、必要なものではありません。
たとえば、次のように、myEMFactory
エンティティーマネージャーファクトリーを参照する JPA コンポーネントをインスタンス化できます。
<bean id="jpa" class="org.apache.camel.component.jpa.JpaComponent"> <property name="entityManagerFactory" ref="myEMFactory"/> </bean>
JpaComponent
はレジストリーから EntityManagerFactory
を自動的に検索します。つまり、上記のように JpaComponent
でこれを設定する必要はありません。あいまいさがある場合にのみそうする必要があります。その場合、Camel は WARN をログに記録します。
32.7. transactionManager の設定
JpaComponent
は、レジストリーから TransactionManager
を自動的に検索します。Camel が登録されている TransactionManager
インスタンスを見つけられない場合、TransactionTemplate
も検索し、そこから TransactionManager
を抽出しようとします。
レジストリーで使用可能な TransactionTemplate
がない場合、JpaEndpoint
は TransactionManager
の独自のインスタンスを自動的に作成しますが、これはほとんどの場合、必要なものではありません。
TransactionManager
の複数のインスタンスが見つかった場合、Camel は WARN をログに記録します。このような場合、次のように、myTransactionManager
トランザクションマネージャーを参照する JPA コンポーネントをインスタンス化し、明示的に設定することができます。
<bean id="jpa" class="org.apache.camel.component.jpa.JpaComponent"> <property name="entityManagerFactory" ref="myEMFactory"/> <property name="transactionManager" ref="myTransactionManager"/> </bean>
32.8. 名前付きクエリーで consumer を使用する
選択したエンティティーのみを使用するには、namedQuery
URI クエリーオプションを使用できます。まず、JPA Entity クラスで名前付きクエリーを定義する必要があります。
@Entity @NamedQuery(name = "step1", query = "select x from MultiSteps x where x.step = 1") public class MultiSteps { ... }
その後、以下に示すように consumer URI を定義できます。
from("jpa://org.apache.camel.examples.MultiSteps?namedQuery=step1") .to("bean:myBusinessLogic");
32.9. クエリーで consumer を使用する
選択したエンティティーのみを使用するには、query
URI クエリーオプションを使用できます。クエリーオプションを定義するだけです。
from("jpa://org.apache.camel.examples.MultiSteps?query=select o from org.apache.camel.examples.MultiSteps o where o.step = 1") .to("bean:myBusinessLogic");
32.10. ネイティブクエリーで consumer を使用する
選択したエンティティーのみを使用するには、nativeQuery
URI クエリーオプションを使用できます。ネイティブクエリーオプションを定義するだけです。
from("jpa://org.apache.camel.examples.MultiSteps?nativeQuery=select * from MultiSteps where step = 1") .to("bean:myBusinessLogic");
ネイティブクエリーオプションを使用すると、メッセージ本文でオブジェクト配列を受け取ります。
32.11. 名前付きクエリーで producer を使用する
選択したエンティティーを取得するか、一括更新/削除を実行するには、namedQuery
URI クエリーオプションを使用できます。まず、JPA Entity クラスで名前付きクエリーを定義する必要があります。
@Entity @NamedQuery(name = "step1", query = "select x from MultiSteps x where x.step = 1") public class MultiSteps { ... }
その後、以下に示すように producer uri を定義できます。
from("direct:namedQuery") .to("jpa://org.apache.camel.examples.MultiSteps?namedQuery=step1");
UPDATE
/DELETE
ステートメントを名前付きクエリーとして実行するには、useExecuteUpdate
オプションを true
に指定する必要があることに注意してください。
32.12. クエリーで producer を使用する
選択したエンティティーを取得するか、一括更新/削除を実行するには、クエリー
URI クエリーオプションを使用できます。クエリーオプションを定義するだけです。
from("direct:query") .to("jpa://org.apache.camel.examples.MultiSteps?query=select o from org.apache.camel.examples.MultiSteps o where o.step = 1");
32.13. ネイティブクエリーで producer を使用する
選択したエンティティーを取得するか、一括更新/削除を実行するには、nativeQuery
URI クエリーオプションを使用できます。ネイティブクエリーオプションを定義するだけです。
from("direct:nativeQuery") .to("jpa://org.apache.camel.examples.MultiSteps?resultClass=org.apache.camel.examples.MultiSteps&nativeQuery=select * from MultiSteps where step = 1");
resultClass
を指定せずにネイティブクエリーオプションを使用すると、メッセージ本文でオブジェクト配列を受け取ります。
32.14. JPA ベースのべき等リポジトリーの使用
EIP パターン の Idempotent Consumer は、重複するメッセージを除外するために使用されます。JPA ベースのべき等リポジトリーが提供されます。
JPA ベースのべき等リポジトリーを使用するには。
手順
-
persistence.xml ファイルで
persistence-unit
を設定します。 -
org.apache.camel.processor.idempotent.jpa.JpaMessageIdRepository
で使用されるorg.springframework.orm.jpa.JpaTemplate
を設定します。 - エラー形式のマクロを設定します: snippet: java.lang.IndexOutOfBoundsException: Index: 20、Size: 20
-
べき等リポジトリーを
org.apache.camel.processor.idempotent.jpa.JpaMessageIdRepository
として設定します。 - 以下に示すように、Spring XML ファイルに JPA べき等リポジトリーを作成します。
<camelContext xmlns="http://camel.apache.org/schema/spring"> <route id="JpaMessageIdRepositoryTest"> <from uri="direct:start" /> <idempotentConsumer idempotentRepository="jpaStore"> <header>messageId</header> <to uri="mock:result" /> </idempotentConsumer> </route> </camelContext>
IDE 内でこの Camel コンポーネントテストを実行する場合
このコンポーネントのテスト を、Maven を介さずに IDE 内で直接実行すると、次のような例外が発生する可能性があります。
org.springframework.transaction.CannotCreateTransactionException: Could not open JPA EntityManager for transaction; nested exception is <openjpa-2.2.1-r422266:1396819 nonfatal user error> org.apache.openjpa.persistence.ArgumentException: This configuration disallows runtime optimization, but the following listed types were not enhanced at build time or at class load time with a javaagent: "org.apache.camel.examples.SendEmail". at org.springframework.orm.jpa.JpaTransactionManager.doBegin(JpaTransactionManager.java:427) at org.springframework.transaction.support.AbstractPlatformTransactionManager.getTransaction(AbstractPlatformTransactionManager.java:371) at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:127) at org.apache.camel.processor.jpa.JpaRouteTest.cleanupRepository(JpaRouteTest.java:96) at org.apache.camel.processor.jpa.JpaRouteTest.createCamelContext(JpaRouteTest.java:67) at org.apache.camel.test.junit5.CamelTestSupport.doSetUp(CamelTestSupport.java:238) at org.apache.camel.test.junit5.CamelTestSupport.setUp(CamelTestSupport.java:208)
ここでの問題は、ソースが Maven ではなく IDE を介してコンパイルまたは再コンパイルされていることです。これにより、ビルド時にバイトコードが拡張 されます。これを克服するには、OpenJPA の動的バイトコード拡張 を有効にする必要があります。たとえば、Camel で使用されている現在の OpenJPA のバージョンが 2.2.1 であるとすると、IDE 内でテストを実行するには、次の引数を JVM に渡す必要があります。
-javaagent:<path_to_your_local_m2_cache>/org/apache/openjpa/openjpa/2.2.1/openjpa-2.2.1.jar
32.15. Spring Boot 自動設定
Spring Boot で jpa を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-jpa-starter</artifactId> </dependency>
コンポーネントは、以下に示す 10 個のオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.component.jpa.aliases | エイリアスを JPA エンティティークラスにマップします。エイリアスは、(完全修飾クラス名の代わりに) エンドポイント URI で使用できます。 | Map | |
camel.component.jpa.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.jpa.bridge-error-handler | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | Boolean |
camel.component.jpa.enabled | jpa コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.jpa.entity-manager-factory | EntityManagerFactory を使用する場合。これを設定することを強くお勧めします。オプションは javax.persistence.EntityManagerFactory 型です。 | EntityManagerFactory | |
camel.component.jpa.join-transaction | camel-jpa コンポーネントはデフォルトでトランザクションに参加します。このオプションを使用して、これをオフにすることができます。たとえば、LOCAL_RESOURCE を使用していて、参加トランザクションが JPA プロバイダーで機能しない場合などです。このオプションは、すべてのエンドポイントで設定する代わりに、JpaComponent でグローバルに設定することもできます。 | true | Boolean |
camel.component.jpa.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
camel.component.jpa.shared-entity-manager | consumer/producer に Spring の SharedEntityManager を使用するかどうか。これは EXTENDED EntityManager ではないため、ほとんどの場合、joinTransaction は false に設定する必要があります。 | false | Boolean |
camel.component.jpa.transaction-manager | PlatformTransactionManager を使用してトランザクションを管理する場合。オプションは org.springframework.transaction.PlatformTransactionManager 型です。 | PlatformTransactionManager | |
camel.component.jpa.transaction-strategy | トランザクションで操作を実行するために TransactionStrategy を使用するには。オプションは org.apache.camel.component.jpa.TransactionStrategy タイプです。 | TransactionStrategy |
第33章 JSLT
Camel 3.1 以降
producer のみサポート対象
JSLT コンポーネントを使用すると、JSLT 式を使用して JSON メッセージを処理できます。これは、JSON から JSON への変換またはデータのクエリーを実行する場合に理想的です。
このコンポーネントの pom.xml
に次の依存関係を追加します。
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-jslt</artifactId> <version>3.20.1.redhat-00031</version> <!-- use the same version as your Camel core version --> </dependency>
33.1. URI 形式
jslt:specName[?options]
ここで specName
は、呼び出す仕様のクラスパスローカル URI です。またはリモート仕様の完全な URL (例: file://folder/myfile.vm)。
33.2. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
33.2.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
33.2.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
33.2.3. コンポーネントオプション
JSLT コンポーネントは、以下に示す 5 つのオプションをサポートしています。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
allowTemplateFromHeader (producer) | ヘッダーのリソーステンプレートの使用を許可するかどうか (デフォルトは false)。これを有効にすると、メッセージヘッダーを介して動的テンプレートを指定できます。ただし、ヘッダーが悪意のあるユーザーからのものである場合、これは潜在的なセキュリティーの脆弱性と見なされる可能性があるため、注意して使用してください。 | false | boolean |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
functions (上級) | JSLT は、Java で記述された関数をプラグインすることで拡張できます。 | コレクション | |
objectFilter (上級) | JSLT は、カスタム jslt オブジェクトフィルターをプラグインすることで拡張できます。 | JsonFilter |
33.2.4. エンドポイントオプション
JSLT エンドポイントは、URI 構文を使用して設定されます。
jslt:resourceUri
パスおよびクエリーパラメーターを使用します。
33.2.4.1. パスパラメーター(1 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
resourceUri (producer) | 必須 リソースへのパス。プリフィックスには、classpath、file、http、ref、または bean. classpath、file、http を付けることができます (classpath はデフォルト)。ref は、レジストリーでリソースを検索します。Bean は、リソースとして使用される Bean のメソッドを呼び出します。Bean の場合は、ドットの後にメソッド名を指定できます (例:bean:myBean.myMethod)。 | String |
33.2.4.2. クエリーパラメーター (7 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
allowContextMapAll (producer) | コンテキストマップが前詳細へのアクセスを許可するかどうかを設定します。デフォルトでは、メッセージの本文とヘッダーにのみアクセスできます。このオプションは、現在の Exchange および CamelContext へのフルアクセスに対して有効にできます。これを行うと、CamelContext API の全機能へのアクセスが開かれるため、潜在的なセキュリティーリスクが発生します。 | false | boolean |
allowTemplateFromHeader (producer) | ヘッダーのリソーステンプレートの使用を許可するかどうか (デフォルトは false)。これを有効にすると、メッセージヘッダーを介して動的テンプレートを指定できます。ただし、ヘッダーが悪意のあるユーザーからのものである場合、これは潜在的なセキュリティーの脆弱性と見なされる可能性があるため、注意して使用してください。 | false | boolean |
contentCache (producer) | リソースコンテンツキャッシュを使用するかどうかを設定します。 | false | boolean |
mapBigDecimalAsFloats (producer) | true の場合、マッパーはシリアル化機能で USE_BIG_DECIMAL_FOR_FLOATS を使用します。 | false | boolean |
objectMapper (producer) | 使用するカスタム JSON オブジェクトマッパーを設定します。 | ObjectMapper | |
prettyPrint (common) | true の場合、出力メッセージの JSON がきれいに出力されます。 | false | boolean |
lazyStartProducer (producer (上級)) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
33.3. メッセージヘッダー
JSLT コンポーネントは、以下にリストされている 2 つのメッセージヘッダーをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
CamelJsltString (producer) | 文字列としての JSLT テンプレート。 | 文字列 | |
CamelJsltResourceUri (producer) | リソース URI。 | 文字列 |
33.4. JSLT に値を渡す
Camel は、本体に JSLT 式を適用するときに、交換情報を変数として提供できます。Exchange から使用できる変数は次のとおりです。
name | value |
---|---|
ヘッダー |
json オブジェクトとしての |
exchange.properties |
json オブジェクトとしての Exchange プロパティー。 |
Jackson で json に変換できない値はすべて拒否され、jslt 式では使用できません。
たとえば、type という名前のヘッダーと交換プロパティー instance には、次のようにアクセスできます。
{ "type": $headers.type, "instance": $exchange.properties.instance }
33.5. サンプル
サンプルの例は以下のとおりです。
from("activemq:My.Queue"). to("jslt:com/acme/MyResponse.json");
そしてファイルベースのリソース:
from("activemq:My.Queue"). to("jslt:file://myfolder/MyResponse.json?contentCache=true"). to("activemq:Another.Queue");
コンポーネントがヘッダーを介して動的に使用する JSLT 式を指定することもできます。たとえば、次のようになります。
from("direct:in"). setHeader("CamelJsltResourceUri").constant("path/to/my/spec.json"). to("jslt:dummy?allowTemplateFromHeader=true");
または、ヘッダー経由で jslt 式全体を送信します: (クエリーに適しています)
from("direct:in"). setHeader("CamelJsltString").constant(".published"). to("jslt:dummy?allowTemplateFromHeader=true");
交換プロパティーを jslt 式に渡すには、次のようにします。
from("direct:in"). to("jslt:com/acme/MyResponse.json?allowContextMapAll=true");
33.6. Spring Boot 自動設定
Spring Boot で jslt を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-jslt-starter</artifactId> </dependency>
コンポーネントは、以下に示す 6 つのオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.component.jslt.allow-template-from-header | ヘッダーのリソーステンプレートの使用を許可するかどうか (デフォルトは false)。これを有効にすると、メッセージヘッダーを介して動的テンプレートを指定できます。ただし、ヘッダーが悪意のあるユーザーからのものである場合、これは潜在的なセキュリティーの脆弱性と見なされる可能性があるため、注意して使用してください。 | false | Boolean |
camel.component.jslt.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.jslt.enabled | jslt コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.jslt.functions | JSLT は、Java で記述された関数をプラグインすることで拡張できます。 | コレクション | |
camel.component.jslt.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
camel.component.jslt.object-filter | JSLT は、カスタム jslt オブジェクトフィルターをプラグインすることで拡張できます。オプションは com.schibsted.spt.data.jslt.filters.JsonFilter タイプです。 | JsonFilter |
第34章 Kafka
producer と consumer の両方がサポート対象
Kafka コンポーネントは、Apache Kafka メッセージブローカーとの通信に使用されます。
Maven ユーザーは、このコンポーネントの pom.xml
に以下の依存関係を追加する必要があります。
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-kafka</artifactId> <version>{CamelSBVersion}</version> <!-- use the same version as your Camel core version --> </dependency>
34.1. URI 形式
kafka:topic[?options]
34.2. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
34.2.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
34.2.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
34.3. コンポーネントオプション
Kafka コンポーネントは、以下にリストされている 104 のオプションをサポートしています。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
additionalProperties (共通) | camel 設定で直接設定できない場合に備えて、kafka consumer または kafka producer のいずれかに追加のプロパティーを設定します (例: Camel 設定にまだ反映されていない新しい Kafka プロパティー)。プロパティーには additionalProperties を接頭辞として付ける必要があります。たとえば、additionalProperties.transactional.id=12345&additionalProperties.schema.registry.url=http://localhost:8811/avro です。 | マップ | |
brokers (共通) | 使用する Kafka ブローカーの URL。形式は host1:port1,host2:port2 で、リストはブローカーのサブセットまたはブローカーのサブセットを指す VIP にすることができます。このオプションは、Kafka ドキュメントでは bootstrap.servers として知られています。 | String | |
clientId (共通) | クライアント ID は、呼び出しの追跡に役立つように、各要求で送信されるユーザー指定の文字列です。要求を行っているアプリケーションを論理的に識別する必要があります。 | String | |
configuration (共通) | エンドポイントが再利用する共通オプションを使用して、Kafka コンポーネントを事前設定できます。 | KafkaConfiguration | |
headerFilterStrategy (共通) | カスタムの HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルタリングします。 | HeaderFilterStrategy | |
reconnectBackoffMaxMs (共通) | 接続に繰り返し失敗したブローカーへの再接続時に待機する最大時間 (ミリ秒単位)。これが指定されている場合、ホストごとのバックオフは、連続して接続に失敗するたびに、この最大値まで指数関数的に増加します。バックオフの増加を計算した後、コネクションストームを回避するために 20% のランダムなジッターが追加されます。 | 1000 | Integer |
shutdownTimeout (共通) | consumer または producer がワーカースレッドをシャットダウンして終了するまで正常に待機するためのミリ秒単位のタイムアウト。 | 30000 | int |
allowManualCommit (consumer) | KafkaManualCommit による手動コミットを許可するかどうか。このオプションを有効にすると、KafkaManualCommit のインスタンスが Exchange メッセージヘッダーに格納されます。これにより、エンドユーザーはこの API にアクセスし、Kafka consumer を介して手動でオフセットコミットを実行できます。 | false | boolean |
autoCommitEnable (consumer) | true の場合、consumer によってすでにフェッチされているメッセージのオフセットを ZooKeeper に定期的にコミットします。このコミットされたオフセットは、プロセスが失敗したときに、新しい consumer が開始される位置として使用されます。 | true | Boolean |
autoCommitIntervalMs (consumer) | consumer オフセットが Zookeeper にコミットされるミリ秒単位の頻度。 | 5000 | Integer |
autoCommitOnStop (consumer) | consumer が停止したときに明示的な自動コミットを実行して、ブローカーが最後に消費されたメッセージからコミットされていることを確認するかどうか。これには、autoCommitEnable オプションをオンにする必要があります。可能な値は、sync、async、または none です。sync がデフォルト値です。 列挙値:
| sync | String |
autoOffsetReset (consumer) | ZooKeeper に初期オフセットがない場合、またはオフセットが範囲外の場合の対処方法: Early : オフセットを最も古いオフセットに自動的にリセット latest : オフセットを最新のオフセットに自動的にリセット Fail: consumer に例外を出力します。 列挙値:
| latest | String |
breakOnFirstError (consumer) | このオプションは、consumer が交換を処理していて失敗した場合に何が起こるかを制御します。オプションが false の場合、consumer は次のメッセージに進み、それを処理します。オプションが true の場合、consumer は中断し、失敗の原因となったメッセージのオフセットに戻ってシークし、このメッセージの処理を再試行します。ただし、これは、たとえば有害なメッセージのように毎回失敗する場合、同じメッセージの無限の処理につながる可能性があります。したがって、Camel のエラーハンドラーを使用するなどして対処することをお勧めします。 | false | boolean |
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
checkCrcs (consumer) | 消費されたレコードの CRC32 を自動的に確認します。これにより、メッセージのネットワーク上またはディスク上の破損が発生しなくなります。このチェックはオーバーヘッドを追加するため、極端なパフォーマンスを求める場合は無効になる可能性があります。 | true | Boolean |
commitTimeoutMs (consumer) | 同期コミットが完了するまでコードが待機する最大時間 (ミリ秒単位)。 | 5000 | Long |
consumerRequestTimeoutMs (consumer) | この設定は、クライアントの要求の応答を待つ最大時間を制御します。タイムアウトが経過する前に応答が受信されない場合、クライアントは必要に応じてリクエストを再送信します。または、再試行が使い切られるとリクエストが失敗します。 | 40000 | Integer |
consumersCount (consumer) | kafka サーバーに接続する consumer の数。各 consumer は、受信データを取得して処理する個別のスレッドで実行されます。 | 1 | int |
fetchMaxBytes (consumer) | サーバーがフェッチ要求に対して返す必要があるデータの最大量。これは絶対的な最大値ではありません。フェッチの最初の空でないパーティションの最初のメッセージがこの値よりも大きい場合でも、メッセージが返されて、consumer は進歩することができます。ブローカーが受け入れる最大メッセージサイズは、message.max.bytes (ブローカー設定) または max.message.bytes (トピック設定) で定義されます。consumer は複数のフェッチを並行して実行することに注意してください。 | 52428800 | Integer |
fetchMinBytes (consumer) | サーバーがフェッチ要求に対して返す必要のあるデータの最小量。利用可能なデータが不十分な場合、リクエストは、リクエストに応答する前に、十分なデータが蓄積されるのを待ちます。 | 1 | Integer |
fetchWaitMaxMs (consumer) | すぐに fetch.min.bytes を満たすのに十分なデータがない場合に、サーバーがフェッチ要求に応答する前にブロックする最大時間。 | 500 | Integer |
groupId (consumer) | この consumer が属する consumer プロセスのグループを一意に識別する文字列。同じグループ ID を設定することにより、複数のプロセスはそれらがすべて同じ consumer グループの一部であることを示します。このオプションは、consumer に必要です。 | String | |
groupInstanceId (consumer) | エンドユーザーが提供する consumer インスタンスの一意の識別子。non-empty strings のみが許可されます。設定されている場合、consumer は静的メンバーとして扱われます。つまり、常に、この ID を持つ 1 つのインスタンスのみが consumer グループで許可されます。これは、より大きなセッションタイムアウトと組み合わせて使用して、一時的な利用不可 (プロセス再起動など) によるグループのリバランスを回避します。設定しないと、consumer は従来の動作である動的メンバーとしてグループに参加します。 | String | |
headerDeserializer (consumer) | カスタム KafkaHeaderDeserializer を使用して、kafka ヘッダー値を逆シリアル化します。 | KafkaHeaderDeserializer | |
heartbeatIntervalMs (consumer) | Kafka のグループ管理機能を使用する場合の、ハートビートから consumerコーディネーター間の想定される時間。ハートビートは、consumer のセッションがアクティブな状態を維持し、新しい consumer がグループに参加したり離脱したりする際のリバランスを促進するために使用されます。この値は session.timeout.ms よりも低く設定する必要がありますが、通常はその値の 1/3 以下に設定する必要があります。さらに低く調整することで、通常のリバランスの予想時間を制御することもできます。 | 3000 | Integer |
keyDeserializer (consumer) | Deserializer インターフェイスを実装する key の Deserializer クラス。 | org.apache.kafka.common.serialization.StringDeserializer | String |
maxPartitionFetchBytes (consumer) | サーバーが返すパーティションごとのデータの最大量。リクエストに使用される最大合計メモリーは #partitions max.partition.fetch.bytes になります。このサイズは、少なくともサーバーが許可する最大メッセージサイズと同じである必要があります。そうしないと、producer が consumer がフェッチできるよりも大きなメッセージを送信する可能性があります。その場合、consumer は特定のパーティションで大きなメッセージを取得しようとしてスタックする可能性があります。 | 1048576 | Integer |
maxPollIntervalMs (consumer) | consumer グループ管理を使用する場合の poll() の呼び出し間の最大遅延。これにより、consumer がさらにレコードをフェッチする前にアイドル状態になることができる時間に上限が設定されます。このタイムアウトの期限が切れる前に poll() が呼び出されない場合、consumer は失敗とみなされ、グループはパーティションを別のメンバーに再割り当てするためにリバランスします。 | Long | |
maxPollRecords (consumer) | poll() への単一の呼び出しで返される最大レコード数。 | 500 | Integer |
offsetRepository (consumer) | トピックの各パーティションのオフセットをローカルに保存するために使用するオフセットリポジトリー。定義すると、自動コミットが無効になります。 | StateRepository | |
partitionAssignor (consumer) | グループ管理が使用されている場合に、クライアントが consumer インスタンス間でパーティションの所有権を分散するために使用するパーティション割り当て戦略のクラス名。 | org.apache.kafka.clients.consumer.RangeAssignor | String |
pollOnError (consumer) | 新しいメッセージのポーリング中に、kafka が例外を出力した場合のアクション。エンドポイントレベルで明示的な値が設定されていない限り、デフォルトでコンポーネント設定の値が使用されます。DISCARD はメッセージを破棄し、次のメッセージのポーリングを続行します。ERROR_HANDLER は Camel のエラーハンドラーを使用して例外を処理し、その後、次のメッセージのポーリングを続行します。RECONNECT は consumer に再接続し、メッセージのポーリングを再試行します RETRY は consumer が同じメッセージのポーリングを再試行できるようにします STOP は consumer を停止します (consumer がメッセージを再び消費できるようにする必要がある場合は、手動で開始/再起動する必要があります)。 列挙値:
| ERROR_HANDLER | PollOnError |
pollTimeoutMs (consumer) | KafkaConsumer をポーリングするときに使用されるタイムアウト。 | 5000 | Long |
resumeStrategy (consumer) | このオプションを使用すると、ユーザーはカスタムの再開方法を設定できます。再開戦略は、パーティションが割り当てられたとき (つまり、接続時または再接続時) に実行されます。これにより、実装は操作を再開する方法をカスタマイズし、seekTo および offsetRepository メカニズムのより柔軟な代替手段として機能できます。実装の詳細については、KafkaConsumerResumeStrategy を参照してください。このオプションは、自動コミット設定には影響しません。この設定を使用する実装は、これと一緒に手動コミットオプションを使用して評価することも必要になる可能性があります。 | KafkaConsumerResumeStrategy | |
seekTo (consumer) | KafkaConsumer が起動時に最初または最後から読み取るかどうかを設定します。begin : 最初から読み取る end : 最後から読み取るこれは、以前のプロパティー seekToBeginning を置き換えています。 列挙値:
| String | |
sessionTimeoutMs (consumer) | Kafka のグループ管理機能を使用するときに障害を検出するために使用されるタイムアウト。 | 10000 | Integer |
specificAvroReader (consumer) | これにより、Confluent Platform スキーマレジストリーおよび io.confluent.kafka.serializers.KafkaAvroDeserializer で使用する特定の Avro リーダーを使用できるようになります。このオプションは、Confluent Platform (標準の Apache Kafka ではない) でのみ使用できます。 | false | boolean |
topicIsPattern (consumer) | トピックがパターン (正規表現) であるかどうか。これを使用して、パターンに一致する動的な数のトピックをサブスクライブできます。 | false | boolean |
valueDeserializer (consumer) | Deserializer インターフェイスを実装する値の Deserializer クラス。 | org.apache.kafka.common.serialization.StringDeserializer | String |
kafkaManualCommitFactory (consumer (上級)) | KafkaManualCommit インスタンスの作成に使用する Autowired Factory。これにより、カスタムファクトリーをプラグインしてカスタム KafkaManualCommit インスタンスを作成できます。これは、すぐに使用できるデフォルトの実装から逸脱する手動コミットを行うときに特別なロジックが必要な場合に備えています。 | KafkaManualCommitFactory | |
pollExceptionStrategy (consumer (上級)) | Autowired consumer でカスタム戦略を使用して、メッセージのプール中に Kafka ブローカーから出力された例外の処理方法を制御します。 | PollExceptionStrategy | |
bufferMemorySize (producer) | producer が、サーバーへの送信を待機しているレコードをバッファーリングするために使用できるメモリーの合計バイト数。レコードがサーバーに配信されるよりも速く送信された場合、プロデューサはブロックするか、block.on.buffer.full で指定された設定に基づいて例外を出力します。この設定は、プロデューサが使用する合計メモリーにほぼ対応する必要があります。ただし、プロデューサが使用するすべてのメモリーがバッファーリングに使用されるわけではないため、ハードバウンドではありません。一部の追加メモリーは、圧縮 (圧縮が有効な場合) やインフライトリクエストの維持に使用されます。 | 33554432 | Integer |
compressionCodec (producer) | このパラメーターを使用すると、この producer によって生成されるすべてのデータの圧縮コーデックを指定できます。有効な値は none、gzip、snappy です。 列挙値:
| none | String |
connectionMaxIdleMs (producer) | この設定で指定された期間 (ミリ秒単位) の後にアイドル状態の接続を閉じます。 | 540000 | Integer |
deliveryTimeoutMs (producer) | send() の呼び出しが返された後、成功または失敗を報告する時間の上限。これにより、送信前にレコードが遅延する合計時間、ブローカーから確認応答を待つ時間 (予想される場合)、および再試行可能な送信の失敗に許容される時間が制限されます。 | 120000 | Integer |
enableIdempotence (producer) | 'true' に設定すると、producer は、各メッセージのコピーが 1 つだけストリームに書き込まれるようにします。false の場合、プロデューサの再試行により、再試行されたメッセージの複製がストリームに書き込まれる可能性があります。true に設定した場合、このオプションでは max.in.flight.requests.per.connection を 1 に設定する必要があり、再試行をゼロにすることはできず、さらに ack を all に設定する必要があります。 | false | boolean |
headerSerializer (producer) | カスタム KafkaHeaderSerializer を使用して、kafka ヘッダー値をシリアル化します。 | KafkaHeaderSerializer | |
key (producer) | レコードキー (キーが指定されていない場合は null)。このオプションが設定されている場合、ヘッダー KafkaConstants#KEY よりも優先されます。 | String | |
keySerializer (producer) | キーのシリアライザクラス (何も指定されていない場合、デフォルトはメッセージと同じになります)。 | org.apache.kafka.common.serialization.StringSerializer | String |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
lingerMs (producer) | producer は、リクエストの送信の間に到着したレコードを 1 つのバッチリクエストにグループ化します。通常、これは、レコードが送信できるよりも早く到着した場合に、負荷がかかった状態でのみ発生します。ただし、状況によっては、中程度の負荷がかかっている場合でも、クライアントがリクエストの数を減らす場合があります。この設定は、少量の人為的な遅延を追加することでこれを実現します。つまり、レコードをすぐに送信するのではなく、producer は指定された遅延まで待機して他のレコードを送信できるようにし、送信をまとめてバッチ処理できるようにします。これは、TCP の Nagle アルゴリズムに類似するものと考えることができます。この設定は、バッチ処理の遅延の上限を提供します。あるパーティションで batch.size 相当のレコードを取得すると、この設定に関係なくすぐに送信されますが、このパーティションで蓄積されたバイト数がこれより少ない場合は、指定された時間の間、さらにレコードが取得されるのを待つことになります。デフォルトは 0 (つまり遅延なし) に設定されます。たとえば、linger.ms=5 を設定すると、送信されるリクエストの数が減りますが、負荷がない状態で送信されるレコードに最大 5 ミリ秒のレイテンシーが追加されます。 | 0 | Integer |
maxBlockMs (producer) | 設定は、kafka への送信がブロックされる時間を制御します。これらのメソッドは、複数の理由でブロックされる可能性があります。例: バッファーがいっぱい、メタデータが利用できない。この設定では、メタデータのフェッチ、キーと値のシリアル化、send () を実行するときのバッファーメモリーの分割と割り当てに費やされる合計時間に最大制限が課されます。partitionsFor () の場合、この設定はメタデータの待機に最大時間のしきい値を課します。 | 60000 | Integer |
maxInFlightRequest (producer) | ブロックする前にクライアントが 1 つの接続で送信する確認されていないリクエストの最大数。この設定が 1 より大きい値に設定されていて、送信に失敗した場合、再試行によりメッセージの順序が変更されるリスクがあることに注意してください (つまり、再試行が有効になっている場合)。 | 5 | Integer |
maxRequestSize (producer) | リクエストの最大サイズ。これは事実上、最大レコードサイズの上限でもあります。サーバーには、これとは異なる場合がある独自のレコードサイズの上限があることに注意してください。この設定により、producer が 1 回のリクエストで送信するレコードバッチの数が制限され、大量のリクエストが送信されないようになります。 | 1048576 | Integer |
metadataMaxAgeMs (producer) | 新しいブローカーまたはパーティションをプロアクティブに検出するためのパーティションリーダーシップの変更がない場合でも、メタデータの更新を強制するまでの期間 (ミリ秒単位)。 | 300000 | Integer |
metricReporters (producer) | メトリクスレポーターとして使用するクラスの一覧。MetricReporter インターフェイスを実装すると、新しいメトリックの作成が通知されるクラスをプラグインできます。JmxReporter は、JMX 統計を登録するために常に含まれます。 | String | |
metricsSampleWindowMs (producer) | メトリクスを計算するために保持されるサンプルの数。 | 30000 | Integer |
noOfMetricsSample (producer) | メトリクスを計算するために保持されるサンプルの数。 | 2 | Integer |
partitioner (producer) | サブトピック間でメッセージを分割するパーティショナークラス。デフォルトのパーティショナーは、キーのハッシュに基づいています。 | org.apache.kafka.clients.producer.internals.DefaultPartitioner | String |
partitionKey (producer) | レコードの送信先のパーティション (パーティションが指定されていない場合は null)。このオプションが設定されている場合、ヘッダー KafkaConstants#PARTITION_KEY よりも優先されます。 | Integer | |
producerBatchSize (producer) | 複数のレコードが同じパーティションに送信されるときは常に、producer はレコードをまとめてより少ない要求にバッチ処理しようとします。これにより、クライアントとサーバーの両方でパフォーマンスが向上します。この設定では、デフォルトのバッチサイズをバイト単位で制御します。このサイズより大きいバッチレコードは試行されません。ブローカーに送信されるリクエストには、複数のバッチが含まれ、送信可能なデータを含む各パーティションに 1 つずつ含まれます。バッチサイズが小さいと、バッチ処理が一般的ではなくなり、スループット (バッチサイズゼロの場合、バッチ処理が完全に無効になります)。バッチサイズが非常に大きい場合は、追加のレコードを想定して、常に指定のバッチサイズのバッファーを割り当てるため、メモリーを多少無駄に使用する可能性があります。 | 16384 | Integer |
queueBufferingMaxMessages (producer) | プロデューサをブロックするか、データを削除する前に、非同期モードを使用するときにプロデューサのキューに入れることができる未送信メッセージの最大数。 | 10000 | Integer |
receiveBufferBytes (producer) | データの読み取り時に使用する TCP 受信バッファー (SO_RCVBUF) のサイズ。 | 65536 | Integer |
reconnectBackoffMs (producer) | 特定のホストへの再接続を試行するまでの待機時間。これにより、タイトなループでホストに繰り返し接続することを回避します。このバックオフは、consumer からブローカーに送信されるすべてのリクエストに適用されます。 | 50 | Integer |
recordMetadata (producer) | プロデューサが Kafka への送信から RecordMetadata の結果を保存する必要があるかどうか。結果は、RecordMetadata メタデータを含む List に保存されます。リストは、キー KafkaConstants#KAFKA_RECORDMETA を持つヘッダーに保存されます。 | true | boolean |
requestRequiredAcks (producer) | リクエストが完了したと見なす前に、producer がリーダーに受け取ったことを要求する確認の数。これは、送信されるレコードの耐久性を制御します。次の設定が一般的です: acks=0 ゼロに設定すると、プロデューサはサーバーからの確認をまったく待ちません。レコードは直ちにソケットバッファーに追加され、送信済みと見なされます。この場合、サーバーがレコードを受信したかどうかは保証されず、retries の設定は有効になりません (クライアントは通常、失敗を知ることができないからです)。各レコードに返されるオフセットは常に -1 に設定されます。acks=1 これは、リーダーがレコードをローカルログに書き込みますが、すべてのフォロワーからの完全な承認を待たずに応答することを意味します。この場合、レコードを承認した直後にリーダーが失敗したが、フォロワーがそれを複製する前に、レコードは失われます。acks=all これは、リーダーが同期レプリカの完全なセットがレコードを承認するまで待機することを意味します。これにより、少なくとも 1 つの In-Sync レプリカが動作している限り、レコードが失われないことが保証されます。これは利用可能な最強の保証になります。 列挙値:
| 1 | String |
requestTimeoutMs (producer) | クライアントにエラーを返す前に、ブローカーが request.required.acks 要件を満たすために待機する時間。 | 30000 | Integer |
retries (producer) | ゼロより大きい値を設定すると、クライアントは、一時的なエラーの可能性により送信に失敗したレコードを再送信します。この再試行は、クライアントがエラーを受信したときにレコードを再送した場合と同じであることに注意してください。再試行を許可すると、レコードの順序が変更される可能性があります。これは、2 つのレコードが 1 つのパーティションに送信され、最初のレコードが失敗して再試行され、2 番目のレコードが成功した場合、2 番目のレコードが最初に表示される可能性があるためです。 | 0 | Integer |
retryBackoffMs (producer) | 各再試行の前に、producer は関連するトピックのメタデータを更新して、新しいリーダーが選出されたかどうかを確認します。リーダーの選択には少し時間がかかるため、このプロパティーは producer がメタデータを更新するまで待機する時間を指定します。 | 100 | Integer |
sendBufferBytes (producer) | ソケット書き込みバッファーサイズ。 | 131072 | Integer |
valueSerializer (producer) | メッセージのシリアライザクラス。 | org.apache.kafka.common.serialization.StringSerializer | String |
workerPool (producer) | カスタムワーカープールを使用して、kafka サーバーが非同期のノンブロッキング処理を使用して KafkaProducer から送信されたメッセージを確認した後、Exchange のルーティングを続行します。このオプションを使用する場合は、スレッドプールのライフサイクルを処理して、不要になったときにプールをシャットダウンする必要があります。 | ExecutorService | |
workerPoolCoreSize (producer) | Kafka サーバーが非同期のノンブロッキング処理を使用して KafkaProducer から送信されたメッセージを確認した後、Exchange のルーティングを続行するためのワーカープールのコアスレッドの数。 | 10 | Integer |
workerPoolMaxSize (producer) | Kafka サーバーが、非同期のノンブロッキング処理を使用して KafkaProducer から送信されたメッセージを確認した後、Exchange のルーティングを続行するためのワーカープールのスレッドの最大数。 | 20 | Integer |
autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
kafkaClientFactory (上級) | org.apache.kafka.clients.consumer.KafkaConsumer および org.apache.kafka.clients.producer.KafkaProducer インスタンスの作成に使用する Autowired Factory。これにより、バニラ Kafka クライアントを拡張するロジックを使用してインスタンスを作成するカスタムファクトリーを設定できます。 | KafkaClientFactory | |
synchronous (上級) | 同期処理を厳密に使用するかどうかを設定します。 | false | boolean |
schemaRegistryURL (confluent) | 使用する Confluent Platform スキーマレジストリーサーバーの URL。形式は、ホスト 1: ポート 1、ホスト 2: ポート 2 です。これは、Confluent Platform ドキュメントでは schema.registry.url として知られています。このオプションは、Confluent Platform (標準の Apache Kafka ではない) でのみ使用できます。 | String | |
interceptorClasses (モニタリング) | producer または consumer のインターセプターを設定します。Producer インターセプターは org.apache.kafka.clients.producer.ProducerInterceptor を実装するクラスでなければなりません Consumer インターセプターは org.apache.kafka.clients.consumer.ConsumerInterceptor を実装するクラスでなければなりません実行時のクラスキャスト例外。 | String | |
kerberosBeforeReloginMinTime (セキュリティー) | 更新試行間のログインスレッドのスリープ時間。 | 60000 | Integer |
kerberosInitCmd (security) | Kerberos kinit コマンドパス。デフォルトは/usr/bin/kinit です。 | /usr/bin/kinit | String |
kerberosPrincipalToLocalRules (セキュリティー) | プリンシパル名から短縮名 (通常はオペレーティングシステムのユーザー名) にマッピングするためのルールの一覧です。ルールは順番に評価され、プリンシパル名と一致する最初のルールは、これを短縮名にマップするために使用されます。一覧の後続のルールは無視されます。デフォルトでは、{username}/{hostname}{REALM} 形式のプリンシパル名は {username} にマッピングされます。形式の詳細については、セキュリティー認証と ACL のドキュメントを参照してください。複数の値はコンマで区切ることができます。 | DEFAULT | String |
kerberosRenewJitter (security) | 更新時間に追加されたランダムなジッターの割合。 | 0.05 | double |
kerberosRenewWindowFactor (security) | ログインスレッドは、最後の更新からチケットの有効期限までの指定された時間のウィンドウファクターに達するまでスリープし、その時点でチケットの更新を試みます。 | 0.8 | double |
saslJaasConfig (セキュリティー) | kafka sasl.jaas.config パラメーターを公開します。例: org.apache.kafka.common.security.plain.PlainLoginModule required username=USERNAME password=PASSWORD;. | String | |
saslKerberosServiceName (security) | Kafka が実行される Kerberos プリンシパル名。これは、Kafka の JAAS 設定または Kafka の設定で定義できます。 | String | |
saslMechanism (security) | 使用される Simple Authentication and Security Layer(SASL) メカニズム。有効な値については、を参照してください。 | GSSAPI | String |
securityProtocol (security) | ブローカーとの通信に使用されるプロトコル。SASL_PLAINTEXT、PLAINTEXT、および SSL がサポートされています。 | PLAINTEXT | String |
sslCipherSuites (security) | 暗号化スイートの一覧。これは、TLS または SSL ネットワークプロトコルを使用してネットワーク接続のセキュリティー設定をネゴシエートするために使用される、認証、暗号化、MAC、およびキー交換アルゴリズムの名前付きの組み合わせです。デフォルトでは、利用可能なすべての暗号スイートがサポートされています。 | String | |
sslContextParameters (security) | Camel SSLContextParameters オブジェクトを使用した SSL 設定。設定されている場合、他の SSL エンドポイントパラメーターの前に適用されます。注: Kafka はファイルの場所からのキーストアのロードのみをサポートしているため、場所の前に file: を KeyStoreParameters.resource オプションで付けます。 | SSLContextParameters | |
sslEnabledProtocols (security) | SSL 接続で有効なプロトコルの一覧。TLSv1.2、TLSv1.1、および TLSv1 はデフォルトで有効になっています。 | String | |
sslEndpointAlgorithm (security) | サーバー証明書を使用してサーバーのホスト名を検証するエンドポイント識別アルゴリズム。 | https | String |
sslKeymanagerAlgorithm (security) | SSL 接続のキーマネージャーファクトリーによって使用されるアルゴリズム。デフォルト値は、Java 仮想マシンに設定されたキーマネージャーファクトリーアルゴリズムです。 | SunX509 | String |
sslKeyPassword (security) | キーストアファイル内の秘密キーのパスワード。これはクライアントにとってオプションになります。 | String | |
sslKeystoreLocation (security) | キーストアファイルのロケーション。これはクライアントではオプションで、クライアントの双方向認証に使用できます。 | String | |
sslKeystorePassword (security) | キーストアファイルのストアパスワード。これはクライアントのオプションであり、ssl.keystore.location が設定されている場合にのみ必要です。 | String | |
sslKeystoreType (security) | キーストアファイルのファイル形式。これはクライアントにとってオプションになります。デフォルト値は JKS です。 | JKS | String |
sslProtocol (security) | SSLContext の生成に使用される SSL プロトコル。デフォルト設定は TLS で、ほとんどの場合はこれで問題ありません。最近の JVM で許可されている値は、TLS、TLSv1.1、および TLSv1.2 です。SSL、SSLv2、および SSLv3 は古い JVM でサポートされている可能性がありますが、セキュリティーの脆弱性が知られているため、それらの使用はお勧めできません。 | String | |
sslProvider (security) | SSL 接続に使用されるセキュリティープロバイダーの名前。デフォルト値は JVM のデフォルトのセキュリティープロバイダーです。 | String | |
sslTrustmanagerAlgorithm (security) | SSL 接続のトラストマネージャーファクトリーによって使用されるアルゴリズム。デフォルト値は、Java 仮想マシンに設定されたトラストマネージャーファクトリーアルゴリズムです。 | PKIX | String |
sslTruststoreLocation (security) | トラストストアファイルのロケーション。 | String | |
sslTruststorePassword (security) | トラストストアファイルのパスワード。 | String | |
sslTruststoreType (security) | トラストストアファイルのファイル形式。デフォルト値は JKS です。 | JKS | String |
useGlobalSslContextParameters (security) | グローバル SSL コンテキストパラメーターの使用を有効にします。 | false | boolean |
34.4. エンドポイントオプション
Kafka エンドポイントは、URI 構文を使用して設定されます。
kafka:topic
パスおよびクエリーパラメーターを使用します。
34.4.1. パスパラメーター(1 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
topic (共通) | 必須 使用するトピックの名前。consumer では、コンマを使用して複数のトピックを区切ることができます。producer は、1 つのトピックにのみメッセージを送信できます。 | String |
34.4.2. クエリーパラメーター (102 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
additionalProperties (共通) | camel 設定で直接設定できない場合に備えて、kafka consumer または kafka producer のいずれかに追加のプロパティーを設定します (例: Camel 設定にまだ反映されていない新しい Kafka プロパティー)。プロパティーには additionalProperties を接頭辞として付ける必要があります。たとえば、additionalProperties.transactional.id=12345&additionalProperties.schema.registry.url=http://localhost:8811/avro です。 | マップ | |
brokers (共通) | 使用する Kafka ブローカーの URL。形式は host1:port1,host2:port2 で、リストはブローカーのサブセットまたはブローカーのサブセットを指す VIP にすることができます。このオプションは、Kafka ドキュメントでは bootstrap.servers として知られています。 | String | |
clientId (共通) | クライアント ID は、呼び出しの追跡に役立つように、各要求で送信されるユーザー指定の文字列です。要求を行っているアプリケーションを論理的に識別する必要があります。 | String | |
headerFilterStrategy (共通) | カスタムの HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルタリングします。 | HeaderFilterStrategy | |
reconnectBackoffMaxMs (共通) | 接続に繰り返し失敗したブローカーへの再接続時に待機する最大時間 (ミリ秒単位)。これが指定されている場合、ホストごとのバックオフは、連続して接続に失敗するたびに、この最大値まで指数関数的に増加します。バックオフの増加を計算した後、コネクションストームを回避するために 20% のランダムなジッターが追加されます。 | 1000 | Integer |
shutdownTimeout (共通) | consumer または producer がワーカースレッドをシャットダウンして終了するまで正常に待機するためのミリ秒単位のタイムアウト。 | 30000 | int |
allowManualCommit (consumer) | KafkaManualCommit による手動コミットを許可するかどうか。このオプションを有効にすると、KafkaManualCommit のインスタンスが Exchange メッセージヘッダーに格納されます。これにより、エンドユーザーはこの API にアクセスし、Kafka consumer を介して手動でオフセットコミットを実行できます。 | false | boolean |
autoCommitEnable (consumer) | true の場合、consumer によってすでにフェッチされているメッセージのオフセットを ZooKeeper に定期的にコミットします。このコミットされたオフセットは、プロセスが失敗したときに、新しい consumer が開始される位置として使用されます。 | true | Boolean |
autoCommitIntervalMs (consumer) | consumer オフセットが Zookeeper にコミットされるミリ秒単位の頻度。 | 5000 | Integer |
autoCommitOnStop (consumer) | consumer が停止したときに明示的な自動コミットを実行して、ブローカーが最後に消費されたメッセージからコミットされていることを確認するかどうか。これには、autoCommitEnable オプションをオンにする必要があります。可能な値は、sync、async、または none です。sync がデフォルト値です。 列挙値:
| sync | String |
autoOffsetReset (consumer) | ZooKeeper に初期オフセットがない場合、またはオフセットが範囲外の場合の対処方法: Early : オフセットを最も古いオフセットに自動的にリセット latest : オフセットを最新のオフセットに自動的にリセット Fail: consumer に例外を出力します。 列挙値:
| latest | String |
breakOnFirstError (consumer) | このオプションは、consumer が交換を処理していて失敗した場合に何が起こるかを制御します。オプションが false の場合、consumer は次のメッセージに進み、それを処理します。オプションが true の場合、consumer は中断し、失敗の原因となったメッセージのオフセットに戻ってシークし、このメッセージの処理を再試行します。ただし、これは、たとえば有害なメッセージのように毎回失敗する場合、同じメッセージの無限の処理につながる可能性があります。したがって、Camel のエラーハンドラーを使用するなどして対処することをお勧めします。 | false | boolean |
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
checkCrcs (consumer) | 消費されたレコードの CRC32 を自動的に確認します。これにより、メッセージのネットワーク上またはディスク上の破損が発生しなくなります。このチェックはオーバーヘッドを追加するため、極端なパフォーマンスを求める場合は無効になる可能性があります。 | true | Boolean |
commitTimeoutMs (consumer) | 同期コミットが完了するまでコードが待機する最大時間 (ミリ秒単位)。 | 5000 | Long |
consumerRequestTimeoutMs (consumer) | この設定は、クライアントの要求の応答を待つ最大時間を制御します。タイムアウトが経過する前に応答が受信されない場合、クライアントは必要に応じてリクエストを再送信します。または、再試行が使い切られるとリクエストが失敗します。 | 40000 | Integer |
consumersCount (consumer) | kafka サーバーに接続する consumer の数。各 consumer は、受信データを取得して処理する個別のスレッドで実行されます。 | 1 | int |
fetchMaxBytes (consumer) | サーバーがフェッチ要求に対して返す必要があるデータの最大量。これは絶対的な最大値ではありません。フェッチの最初の空でないパーティションの最初のメッセージがこの値よりも大きい場合でも、メッセージが返されて、consumer は進歩することができます。ブローカーが受け入れる最大メッセージサイズは、message.max.bytes (ブローカー設定) または max.message.bytes (トピック設定) で定義されます。consumer は複数のフェッチを並行して実行することに注意してください。 | 52428800 | Integer |
fetchMinBytes (consumer) | サーバーがフェッチ要求に対して返す必要のあるデータの最小量。利用可能なデータが不十分な場合、リクエストは、リクエストに応答する前に、十分なデータが蓄積されるのを待ちます。 | 1 | Integer |
fetchWaitMaxMs (consumer) | すぐに fetch.min.bytes を満たすのに十分なデータがない場合に、サーバーがフェッチ要求に応答する前にブロックする最大時間。 | 500 | Integer |
groupId (consumer) | この consumer が属する consumer プロセスのグループを一意に識別する文字列。同じグループ ID を設定することにより、複数のプロセスはそれらがすべて同じ consumer グループの一部であることを示します。このオプションは、consumer に必要です。 | String | |
groupInstanceId (consumer) | エンドユーザーが提供する consumer インスタンスの一意の識別子。non-empty strings のみが許可されます。設定されている場合、consumer は静的メンバーとして扱われます。つまり、常に、この ID を持つ 1 つのインスタンスのみが consumer グループで許可されます。これは、より大きなセッションタイムアウトと組み合わせて使用して、一時的な利用不可 (プロセス再起動など) によるグループのリバランスを回避します。設定しないと、consumer は従来の動作である動的メンバーとしてグループに参加します。 | String | |
headerDeserializer (consumer) | カスタム KafkaHeaderDeserializer を使用して、kafka ヘッダー値を逆シリアル化します。 | KafkaHeaderDeserializer | |
heartbeatIntervalMs (consumer) | Kafka のグループ管理機能を使用する場合の、ハートビートから consumerコーディネーター間の想定される時間。ハートビートは、consumer のセッションがアクティブな状態を維持し、新しい consumer がグループに参加したり離脱したりする際のリバランスを促進するために使用されます。この値は session.timeout.ms よりも低く設定する必要がありますが、通常はその値の 1/3 以下に設定する必要があります。さらに低く調整することで、通常のリバランスの予想時間を制御することもできます。 | 3000 | Integer |
keyDeserializer (consumer) | Deserializer インターフェイスを実装する key の Deserializer クラス。 | org.apache.kafka.common.serialization.StringDeserializer | String |
maxPartitionFetchBytes (consumer) | サーバーが返すパーティションごとのデータの最大量。リクエストに使用される最大合計メモリーは #partitions max.partition.fetch.bytes になります。このサイズは、少なくともサーバーが許可する最大メッセージサイズと同じである必要があります。そうしないと、producer が consumer がフェッチできるよりも大きなメッセージを送信する可能性があります。その場合、consumer は特定のパーティションで大きなメッセージを取得しようとしてスタックする可能性があります。 | 1048576 | Integer |
maxPollIntervalMs (consumer) | consumer グループ管理を使用する場合の poll() の呼び出し間の最大遅延。これにより、consumer がさらにレコードをフェッチする前にアイドル状態になることができる時間に上限が設定されます。このタイムアウトの期限が切れる前に poll() が呼び出されない場合、consumer は失敗とみなされ、グループはパーティションを別のメンバーに再割り当てするためにリバランスします。 | Long | |
maxPollRecords (consumer) | poll() への単一の呼び出しで返される最大レコード数。 | 500 | Integer |
offsetRepository (consumer) | トピックの各パーティションのオフセットをローカルに保存するために使用するオフセットリポジトリー。定義すると、自動コミットが無効になります。 | StateRepository | |
partitionAssignor (consumer) | グループ管理が使用されている場合に、クライアントが consumer インスタンス間でパーティションの所有権を分散するために使用するパーティション割り当て戦略のクラス名。 | org.apache.kafka.clients.consumer.RangeAssignor | String |
pollOnError (consumer) | 新しいメッセージのポーリング中に、kafka が例外を出力した場合のアクション。エンドポイントレベルで明示的な値が設定されていない限り、デフォルトでコンポーネント設定の値が使用されます。DISCARD はメッセージを破棄し、次のメッセージのポーリングを続行します。ERROR_HANDLER は Camel のエラーハンドラーを使用して例外を処理し、その後、次のメッセージのポーリングを続行します。RECONNECT は consumer に再接続し、メッセージのポーリングを再試行します RETRY は consumer が同じメッセージのポーリングを再試行できるようにします STOP は consumer を停止します (consumer がメッセージを再び消費できるようにする必要がある場合は、手動で開始/再起動する必要があります)。 列挙値:
| ERROR_HANDLER | PollOnError |
pollTimeoutMs (consumer) | KafkaConsumer をポーリングするときに使用されるタイムアウト。 | 5000 | Long |
resumeStrategy (consumer) | このオプションを使用すると、ユーザーはカスタムの再開方法を設定できます。再開戦略は、パーティションが割り当てられたとき (つまり、接続時または再接続時) に実行されます。これにより、実装は操作を再開する方法をカスタマイズし、seekTo および offsetRepository メカニズムのより柔軟な代替手段として機能できます。実装の詳細については、KafkaConsumerResumeStrategy を参照してください。このオプションは、自動コミット設定には影響しません。この設定を使用する実装は、これと一緒に手動コミットオプションを使用して評価することも必要になる可能性があります。 | KafkaConsumerResumeStrategy | |
seekTo (consumer) | KafkaConsumer が起動時に最初または最後から読み取るかどうかを設定します。begin : 最初から読み取る end : 最後から読み取るこれは、以前のプロパティー seekToBeginning を置き換えています。 列挙値:
| String | |
sessionTimeoutMs (consumer) | Kafka のグループ管理機能を使用するときに障害を検出するために使用されるタイムアウト。 | 10000 | Integer |
specificAvroReader (consumer) | これにより、Confluent Platform スキーマレジストリーおよび io.confluent.kafka.serializers.KafkaAvroDeserializer で使用する特定の Avro リーダーを使用できるようになります。このオプションは、Confluent Platform (標準の Apache Kafka ではない) でのみ使用できます。 | false | boolean |
topicIsPattern (consumer) | トピックがパターン (正規表現) であるかどうか。これを使用して、パターンに一致する動的な数のトピックをサブスクライブできます。 | false | boolean |
valueDeserializer (consumer) | Deserializer インターフェイスを実装する値の Deserializer クラス。 | org.apache.kafka.common.serialization.StringDeserializer | String |
exceptionHandler (consumer (上級)) | consumer によるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、consumer は例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
exchangePattern (consumer (上級)) | consumer がエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
kafkaManualCommitFactory (consumer (上級)) | KafkaManualCommit インスタンスの作成に使用するファクトリー。これにより、カスタムファクトリーをプラグインしてカスタム KafkaManualCommit インスタンスを作成できます。これは、すぐに使用できるデフォルトの実装から逸脱する手動コミットを行うときに特別なロジックが必要な場合に備えています。 | KafkaManualCommitFactory | |
bufferMemorySize (producer) | producer が、サーバーへの送信を待機しているレコードをバッファーリングするために使用できるメモリーの合計バイト数。レコードがサーバーに配信されるよりも速く送信された場合、プロデューサはブロックするか、block.on.buffer.full で指定された設定に基づいて例外を出力します。この設定は、プロデューサが使用する合計メモリーにほぼ対応する必要があります。ただし、プロデューサが使用するすべてのメモリーがバッファーリングに使用されるわけではないため、ハードバウンドではありません。一部の追加メモリーは、圧縮 (圧縮が有効な場合) やインフライトリクエストの維持に使用されます。 | 33554432 | Integer |
compressionCodec (producer) | このパラメーターを使用すると、この producer によって生成されるすべてのデータの圧縮コーデックを指定できます。有効な値は none、gzip、snappy です。 列挙値:
| none | String |
connectionMaxIdleMs (producer) | この設定で指定された期間 (ミリ秒単位) の後にアイドル状態の接続を閉じます。 | 540000 | Integer |
deliveryTimeoutMs (producer) | send() の呼び出しが返された後、成功または失敗を報告する時間の上限。これにより、送信前にレコードが遅延する合計時間、ブローカーから確認応答を待つ時間 (予想される場合)、および再試行可能な送信の失敗に許容される時間が制限されます。 | 120000 | Integer |
enableIdempotence (producer) | 'true' に設定すると、producer は、各メッセージのコピーが 1 つだけストリームに書き込まれるようにします。false の場合、プロデューサの再試行により、再試行されたメッセージの複製がストリームに書き込まれる可能性があります。true に設定した場合、このオプションでは max.in.flight.requests.per.connection を 1 に設定する必要があり、再試行をゼロにすることはできず、さらに ack を all に設定する必要があります。 | false | boolean |
headerSerializer (producer) | カスタム KafkaHeaderSerializer を使用して、kafka ヘッダー値をシリアル化します。 | KafkaHeaderSerializer | |
key (producer) | レコードキー (キーが指定されていない場合は null)。このオプションが設定されている場合、ヘッダー KafkaConstants#KEY よりも優先されます。 | String | |
keySerializer (producer) | キーのシリアライザクラス (何も指定されていない場合、デフォルトはメッセージと同じになります)。 | org.apache.kafka.common.serialization.StringSerializer | String |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
lingerMs (producer) | producer は、リクエストの送信の間に到着したレコードを 1 つのバッチリクエストにグループ化します。通常、これは、レコードが送信できるよりも早く到着した場合に、負荷がかかった状態でのみ発生します。ただし、状況によっては、中程度の負荷がかかっている場合でも、クライアントがリクエストの数を減らす場合があります。この設定は、少量の人為的な遅延を追加することでこれを実現します。つまり、レコードをすぐに送信するのではなく、producer は指定された遅延まで待機して他のレコードを送信できるようにし、送信をまとめてバッチ処理できるようにします。これは、TCP の Nagle アルゴリズムに類似するものと考えることができます。この設定は、バッチ処理の遅延の上限を提供します。あるパーティションで batch.size 相当のレコードを取得すると、この設定に関係なくすぐに送信されますが、このパーティションで蓄積されたバイト数がこれより少ない場合は、指定された時間の間、さらにレコードが取得されるのを待つことになります。デフォルトは 0 (つまり遅延なし) に設定されます。たとえば、linger.ms=5 を設定すると、送信されるリクエストの数が減りますが、負荷がない状態で送信されるレコードに最大 5 ミリ秒のレイテンシーが追加されます。 | 0 | Integer |
maxBlockMs (producer) | 設定は、kafka への送信がブロックされる時間を制御します。これらのメソッドは、複数の理由でブロックされる可能性があります。例: バッファーがいっぱい、メタデータが利用できない。この設定では、メタデータのフェッチ、キーと値のシリアル化、send () を実行するときのバッファーメモリーの分割と割り当てに費やされる合計時間に最大制限が課されます。partitionsFor () の場合、この設定はメタデータの待機に最大時間のしきい値を課します。 | 60000 | Integer |
maxInFlightRequest (producer) | ブロックする前にクライアントが 1 つの接続で送信する確認されていないリクエストの最大数。この設定が 1 より大きい値に設定されていて、送信に失敗した場合、再試行によりメッセージの順序が変更されるリスクがあることに注意してください (つまり、再試行が有効になっている場合)。 | 5 | Integer |
maxRequestSize (producer) | リクエストの最大サイズ。これは事実上、最大レコードサイズの上限でもあります。サーバーには、これとは異なる場合がある独自のレコードサイズの上限があることに注意してください。この設定により、producer が 1 回のリクエストで送信するレコードバッチの数が制限され、大量のリクエストが送信されないようになります。 | 1048576 | Integer |
metadataMaxAgeMs (producer) | 新しいブローカーまたはパーティションをプロアクティブに検出するためのパーティションリーダーシップの変更がない場合でも、メタデータの更新を強制するまでの期間 (ミリ秒単位)。 | 300000 | Integer |
metricReporters (producer) | メトリクスレポーターとして使用するクラスの一覧。MetricReporter インターフェイスを実装すると、新しいメトリックの作成が通知されるクラスをプラグインできます。JmxReporter は、JMX 統計を登録するために常に含まれます。 | String | |
metricsSampleWindowMs (producer) | メトリクスを計算するために保持されるサンプルの数。 | 30000 | Integer |
noOfMetricsSample (producer) | メトリクスを計算するために保持されるサンプルの数。 | 2 | Integer |
partitioner (producer) | サブトピック間でメッセージを分割するパーティショナークラス。デフォルトのパーティショナーは、キーのハッシュに基づいています。 | org.apache.kafka.clients.producer.internals.DefaultPartitioner | String |
partitionKey (producer) | レコードの送信先のパーティション (パーティションが指定されていない場合は null)。このオプションが設定されている場合、ヘッダー KafkaConstants#PARTITION_KEY よりも優先されます。 | Integer | |
producerBatchSize (producer) | 複数のレコードが同じパーティションに送信されるときは常に、producer はレコードをまとめてより少ない要求にバッチ処理しようとします。これにより、クライアントとサーバーの両方でパフォーマンスが向上します。この設定では、デフォルトのバッチサイズをバイト単位で制御します。このサイズより大きいバッチレコードは試行されません。ブローカーに送信されるリクエストには、複数のバッチが含まれ、送信可能なデータを含む各パーティションに 1 つずつ含まれます。バッチサイズが小さいと、バッチ処理が一般的ではなくなり、スループット (バッチサイズゼロの場合、バッチ処理が完全に無効になります)。バッチサイズが非常に大きい場合は、追加のレコードを想定して、常に指定のバッチサイズのバッファーを割り当てるため、メモリーを多少無駄に使用する可能性があります。 | 16384 | Integer |
queueBufferingMaxMessages (producer) | プロデューサをブロックするか、データを削除する前に、非同期モードを使用するときにプロデューサのキューに入れることができる未送信メッセージの最大数。 | 10000 | Integer |
receiveBufferBytes (producer) | データの読み取り時に使用する TCP 受信バッファー (SO_RCVBUF) のサイズ。 | 65536 | Integer |
reconnectBackoffMs (producer) | 特定のホストへの再接続を試行するまでの待機時間。これにより、タイトなループでホストに繰り返し接続することを回避します。このバックオフは、consumer からブローカーに送信されるすべてのリクエストに適用されます。 | 50 | Integer |
recordMetadata (producer) | プロデューサが Kafka への送信から RecordMetadata の結果を保存する必要があるかどうか。結果は、RecordMetadata メタデータを含む List に保存されます。リストは、キー KafkaConstants#KAFKA_RECORDMETA を持つヘッダーに保存されます。 | true | boolean |
requestRequiredAcks (producer) | リクエストが完了したと見なす前に、producer がリーダーに受け取ったことを要求する確認の数。これは、送信されるレコードの耐久性を制御します。次の設定が一般的です: acks=0 ゼロに設定すると、プロデューサはサーバーからの確認をまったく待ちません。レコードは直ちにソケットバッファーに追加され、送信済みと見なされます。この場合、サーバーがレコードを受信したかどうかは保証されず、retries の設定は有効になりません (クライアントは通常、失敗を知ることができないからです)。各レコードに返されるオフセットは常に -1 に設定されます。acks=1 これは、リーダーがレコードをローカルログに書き込みますが、すべてのフォロワーからの完全な承認を待たずに応答することを意味します。この場合、レコードを承認した直後にリーダーが失敗したが、フォロワーがそれを複製する前に、レコードは失われます。acks=all これは、リーダーが同期レプリカの完全なセットがレコードを承認するまで待機することを意味します。これにより、少なくとも 1 つの In-Sync レプリカが動作している限り、レコードが失われないことが保証されます。これは利用可能な最強の保証になります。 列挙値:
| 1 | String |
requestTimeoutMs (producer) | クライアントにエラーを返す前に、ブローカーが request.required.acks 要件を満たすために待機する時間。 | 30000 | Integer |
retries (producer) | ゼロより大きい値を設定すると、クライアントは、一時的なエラーの可能性により送信に失敗したレコードを再送信します。この再試行は、クライアントがエラーを受信したときにレコードを再送した場合と同じであることに注意してください。再試行を許可すると、レコードの順序が変更される可能性があります。これは、2 つのレコードが 1 つのパーティションに送信され、最初のレコードが失敗して再試行され、2 番目のレコードが成功した場合、2 番目のレコードが最初に表示される可能性があるためです。 | 0 | Integer |
retryBackoffMs (producer) | 各再試行の前に、producer は関連するトピックのメタデータを更新して、新しいリーダーが選出されたかどうかを確認します。リーダーの選択には少し時間がかかるため、このプロパティーは producer がメタデータを更新するまで待機する時間を指定します。 | 100 | Integer |
sendBufferBytes (producer) | ソケット書き込みバッファーサイズ。 | 131072 | Integer |
valueSerializer (producer) | メッセージのシリアライザクラス。 | org.apache.kafka.common.serialization.StringSerializer | String |
workerPool (producer) | カスタムワーカープールを使用して、kafka サーバーが非同期のノンブロッキング処理を使用して KafkaProducer から送信されたメッセージを確認した後、Exchange のルーティングを続行します。このオプションを使用する場合は、スレッドプールのライフサイクルを処理して、不要になったときにプールをシャットダウンする必要があります。 | ExecutorService | |
workerPoolCoreSize (producer) | Kafka サーバーが非同期のノンブロッキング処理を使用して KafkaProducer から送信されたメッセージを確認した後、Exchange のルーティングを続行するためのワーカープールのコアスレッドの数。 | 10 | Integer |
workerPoolMaxSize (producer) | Kafka サーバーが、非同期のノンブロッキング処理を使用して KafkaProducer から送信されたメッセージを確認した後、Exchange のルーティングを続行するためのワーカープールのスレッドの最大数。 | 20 | Integer |
kafkaClientFactory (上級) | org.apache.kafka.clients.consumer.KafkaConsumer および org.apache.kafka.clients.producer.KafkaProducer インスタンスの作成に使用するファクトリー。これにより、バニラ Kafka クライアントを拡張するロジックを使用してインスタンスを作成するカスタムファクトリーを設定できます。 | KafkaClientFactory | |
synchronous (上級) | 同期処理を厳密に使用するかどうかを設定します。 | false | boolean |
schemaRegistryURL (confluent) | 使用する Confluent Platform スキーマレジストリーサーバーの URL。形式は、ホスト 1: ポート 1、ホスト 2: ポート 2 です。これは、Confluent Platform ドキュメントでは schema.registry.url として知られています。このオプションは、Confluent Platform (標準の Apache Kafka ではない) でのみ使用できます。 | String | |
interceptorClasses (モニタリング) | producer または consumer のインターセプターを設定します。Producer インターセプターは org.apache.kafka.clients.producer.ProducerInterceptor を実装するクラスでなければなりません Consumer インターセプターは org.apache.kafka.clients.consumer.ConsumerInterceptor を実装するクラスでなければなりません実行時のクラスキャスト例外。 | String | |
kerberosBeforeReloginMinTime (セキュリティー) | 更新試行間のログインスレッドのスリープ時間。 | 60000 | Integer |
kerberosInitCmd (security) | Kerberos kinit コマンドパス。デフォルトは/usr/bin/kinit です。 | /usr/bin/kinit | String |
kerberosPrincipalToLocalRules (セキュリティー) | プリンシパル名から短縮名 (通常はオペレーティングシステムのユーザー名) にマッピングするためのルールの一覧です。ルールは順番に評価され、プリンシパル名と一致する最初のルールは、これを短縮名にマップするために使用されます。一覧の後続のルールは無視されます。デフォルトでは、{username}/{hostname}{REALM} 形式のプリンシパル名は {username} にマッピングされます。形式の詳細については、セキュリティー認証と ACL のドキュメントを参照してください。複数の値はコンマで区切ることができます。 | DEFAULT | String |
kerberosRenewJitter (security) | 更新時間に追加されたランダムなジッターの割合。 | 0.05 | double |
kerberosRenewWindowFactor (security) | ログインスレッドは、最後の更新からチケットの有効期限までの指定された時間のウィンドウファクターに達するまでスリープし、その時点でチケットの更新を試みます。 | 0.8 | double |
saslJaasConfig (セキュリティー) | kafka sasl.jaas.config パラメーターを公開します。例: org.apache.kafka.common.security.plain.PlainLoginModule required username=USERNAME password=PASSWORD;. | String | |
saslKerberosServiceName (security) | Kafka が実行される Kerberos プリンシパル名。これは、Kafka の JAAS 設定または Kafka の設定で定義できます。 | String | |
saslMechanism (security) | 使用される Simple Authentication and Security Layer(SASL) メカニズム。有効な値については、を参照してください。 | GSSAPI | String |
securityProtocol (security) | ブローカーとの通信に使用されるプロトコル。SASL_PLAINTEXT、PLAINTEXT、および SSL がサポートされています。 | PLAINTEXT | String |
sslCipherSuites (security) | 暗号化スイートの一覧。これは、TLS または SSL ネットワークプロトコルを使用してネットワーク接続のセキュリティー設定をネゴシエートするために使用される、認証、暗号化、MAC、およびキー交換アルゴリズムの名前付きの組み合わせです。デフォルトでは、利用可能なすべての暗号スイートがサポートされています。 | String | |
sslContextParameters (security) | Camel SSLContextParameters オブジェクトを使用した SSL 設定。設定されている場合、他の SSL エンドポイントパラメーターの前に適用されます。注: Kafka はファイルの場所からのキーストアのロードのみをサポートしているため、場所の前に file: を KeyStoreParameters.resource オプションで付けます。 | SSLContextParameters | |
sslEnabledProtocols (security) | SSL 接続で有効なプロトコルの一覧。TLSv1.2、TLSv1.1、および TLSv1 はデフォルトで有効になっています。 | String | |
sslEndpointAlgorithm (security) | サーバー証明書を使用してサーバーのホスト名を検証するエンドポイント識別アルゴリズム。 | https | String |
sslKeymanagerAlgorithm (security) | SSL 接続のキーマネージャーファクトリーによって使用されるアルゴリズム。デフォルト値は、Java 仮想マシンに設定されたキーマネージャーファクトリーアルゴリズムです。 | SunX509 | String |
sslKeyPassword (security) | キーストアファイル内の秘密キーのパスワード。これはクライアントにとってオプションになります。 | String | |
sslKeystoreLocation (security) | キーストアファイルのロケーション。これはクライアントではオプションで、クライアントの双方向認証に使用できます。 | String | |
sslKeystorePassword (security) | キーストアファイルのストアパスワード。これはクライアントのオプションであり、ssl.keystore.location が設定されている場合にのみ必要です。 | String | |
sslKeystoreType (security) | キーストアファイルのファイル形式。これはクライアントにとってオプションになります。デフォルト値は JKS です。 | JKS | String |
sslProtocol (security) | SSLContext の生成に使用される SSL プロトコル。デフォルト設定は TLS で、ほとんどの場合はこれで問題ありません。最近の JVM で許可されている値は、TLS、TLSv1.1、および TLSv1.2 です。SSL、SSLv2、および SSLv3 は古い JVM でサポートされている可能性がありますが、セキュリティーの脆弱性が知られているため、それらの使用はお勧めできません。 | String | |
sslProvider (security) | SSL 接続に使用されるセキュリティープロバイダーの名前。デフォルト値は JVM のデフォルトのセキュリティープロバイダーです。 | String | |
sslTrustmanagerAlgorithm (security) | SSL 接続のトラストマネージャーファクトリーによって使用されるアルゴリズム。デフォルト値は、Java 仮想マシンに設定されたトラストマネージャーファクトリーアルゴリズムです。 | PKIX | String |
sslTruststoreLocation (security) | トラストストアファイルのロケーション。 | String | |
sslTruststorePassword (security) | トラストストアファイルのパスワード。 | String | |
sslTruststoreType (security) | トラストストアファイルのファイル形式。デフォルト値は JKS です。 | JKS | String |
Producer/Consumer 設定の詳細については、以下を参照してください。
34.5. メッセージヘッダー
34.5.1. consumer ヘッダー
次のヘッダーは、Kafka からのメッセージを使用するときに使用できます。
ヘッダー定数 | ヘッダーの値 | タイプ | 説明 |
---|---|---|---|
|
|
| メッセージの発信元のトピック |
|
|
| メッセージが格納されたパーティション |
|
|
| メッセージのオフセット |
|
|
| メッセージのキー (設定されている場合) |
|
|
| レコードのヘッダー |
|
|
|
コミット前の最後のレコードかどうか ( |
|
|
|
現在のポーリングリクエスト内の最後のレコードを示します ( |
|
|
| Kafka consumer を使用する場合に手動オフセットコミットを強制するために使用できます。 |
34.5.2. producer ヘッダー
メッセージを Kafka に送信する前に、次のヘッダーを設定できます。
ヘッダー定数 | ヘッダーの値 | タイプ | 説明 |
---|---|---|---|
|
|
| 必須 すべての関連メッセージが同じパーティションに入るようにするためのメッセージのキー |
|
|
| メッセージの送信先のトピック (オーバーライドおよび優先)、およびヘッダーは保持されません。 |
|
|
| ProducerRecord には、関連付けられたタイムスタンプもあります。ユーザーがタイムスタンプを提供した場合、producer は提供されたタイムスタンプをレコードにスタンプし、ヘッダーは保持されません。 |
|
|
| パーティションを明示的に指定する |
動的トピックにメッセージを送信する場合は、KafkaConstants.OVERRIDE_TOPIC
を、producer で削除されるため、メッセージに沿って送信されないワンタイムヘッダーとして使用します。
メッセージが Kafka に送信された後、次のヘッダーを使用できます
ヘッダー定数 | ヘッダーの値 | タイプ | 説明 |
---|---|---|---|
|
|
|
メタデータ ( |
34.6. consumer エラー処理
kafka consumer が kafka ブローカーからのメッセージをポーリングしている間、エラーが発生する可能性があります。このセクションでは、何が起こるか、何を設定できるかについて説明します。
Kafka poll
API を呼び出すときに、consumer が例外を出力する場合があります。たとえば、無効なデータやその他の多くの種類のエラーが原因でメッセージをデシリアライズできない場合です。これらのエラーは、再試行 可能 かどうかのいずれかである KafkaException
の形式です。再試行できる例外 (RetriableException
) は、再試行されます (その間にポーリングタイムアウトがあります)。他のすべての種類の例外は、pollOnError 設定に従って処理されます。この設定には次の値があります。
- DISCARD はメッセージを破棄し、次のメッセージのポーリングを続行します。
- ERROR_HANDLER は Camel のエラーハンドラーを使用して例外を処理し、その後、次のメッセージのポーリングを続行します。
- RECONNECT は consumer に再接続し、メッセージのポーリングを再試行します。
- RETRY を使用すると、consumer は同じメッセージのポーリングを再試行できます
- STOP は consumer を停止します (consumer がメッセージを再度消費できるようにする必要がある場合は、手動で開始/再起動する必要があります)。
デフォルトは ERROR_HANDLER で、Camel のエラーハンドラー (設定されている場合) が原因の例外を処理します。その後、次のメッセージのポーリングを続けます。この動作は、Camel コンポーネントが持つ bridgeErrorHandler オプションに似ています。
高度な制御のために、org.apache.camel.component.kafka.PollExceptionStrategy
のカスタム実装をコンポーネントレベルで設定できます。これにより、どの例外が上記のどの戦略を引き起こすかを制御できます。
34.7. サンプル
34.7.1. Kafka からのメッセージの消費
Kafka からメッセージを読み取るために必要な最小限のルートを次に示します。
from("kafka:test?brokers=localhost:9092") .log("Message received from Kafka : ${body}") .log(" on the topic ${headers[kafka.TOPIC]}") .log(" on the partition ${headers[kafka.PARTITION]}") .log(" with the offset ${headers[kafka.OFFSET]}") .log(" with the key ${headers[kafka.KEY]}")
複数のトピックからのメッセージを消費する必要がある場合は、トピック名のコンマ区切りリストを使用できます。
from("kafka:test,test1,test2?brokers=localhost:9092") .log("Message received from Kafka : ${body}") .log(" on the topic ${headers[kafka.TOPIC]}") .log(" on the partition ${headers[kafka.PARTITION]}") .log(" with the offset ${headers[kafka.OFFSET]}") .log(" with the key ${headers[kafka.KEY]}")
トピック名としてパターンを指定し、topicIsPattern
オプションを使用して、複数のトピックをサブスクライブすることもできます。
from("kafka:test*?brokers=localhost:9092&topicIsPattern=true") .log("Message received from Kafka : ${body}") .log(" on the topic ${headers[kafka.TOPIC]}") .log(" on the partition ${headers[kafka.PARTITION]}") .log(" with the offset ${headers[kafka.OFFSET]}") .log(" with the key ${headers[kafka.KEY]}")
Kafka からのメッセージを消費する場合、独自のオフセット管理を使用でき、この管理を Kafka に委任する必要はありません。オフセットを保持するために、コンポーネントには FileStateRepository
などの StateRepository
実装が必要です。この Bean は、レジストリーで使用できるはずです。ここでそれを使用する方法:
// Create the repository in which the Kafka offsets will be persisted FileStateRepository repository = FileStateRepository.fileStateRepository(new File("/path/to/repo.dat")); // Bind this repository into the Camel registry Registry registry = createCamelRegistry(); registry.bind("offsetRepo", repository); // Configure the camel context DefaultCamelContext camelContext = new DefaultCamelContext(registry); camelContext.addRoutes(new RouteBuilder() { @Override public void configure() throws Exception { from("kafka:" + TOPIC + "?brokers=localhost:{{kafkaPort}}" + // Setup the topic and broker address "&groupId=A" + // The consumer processor group ID "&autoOffsetReset=earliest" + // Ask to start from the beginning if we have unknown offset "&offsetRepository=#offsetRepo") // Keep the offsets in the previously configured repository .to("mock:result"); } });
34.7.2. Kafka へのメッセージの生成
Kafka にメッセージを書き込むために必要な最小限のルートを次に示します。
from("direct:start") .setBody(constant("Message from Camel")) // Message to send .setHeader(KafkaConstants.KEY, constant("Camel")) // Key of the message .to("kafka:test?brokers=localhost:9092");
34.8. SSL 設定
Kafka` コンポーネントで SSL 通信を設定するには、2 つの異なる方法があります。
最初の方法は、多くの SSL エンドポイントパラメーターを使用する方法です。
from("kafka:" + TOPIC + "?brokers=localhost:{{kafkaPort}}" + "&groupId=A" + "&sslKeystoreLocation=/path/to/keystore.jks" + "&sslKeystorePassword=changeit" + "&sslKeyPassword=changeit" + "&securityProtocol=SSL") .to("mock:result");
2 つ目の方法は、sslContextParameters
エンドポイントパラメーターを使用することです。
// Configure the SSLContextParameters object KeyStoreParameters ksp = new KeyStoreParameters(); ksp.setResource("/path/to/keystore.jks"); ksp.setPassword("changeit"); KeyManagersParameters kmp = new KeyManagersParameters(); kmp.setKeyStore(ksp); kmp.setKeyPassword("changeit"); SSLContextParameters scp = new SSLContextParameters(); scp.setKeyManagers(kmp); // Bind this SSLContextParameters into the Camel registry Registry registry = createCamelRegistry(); registry.bind("ssl", scp); // Configure the camel context DefaultCamelContext camelContext = new DefaultCamelContext(registry); camelContext.addRoutes(new RouteBuilder() { @Override public void configure() throws Exception { from("kafka:" + TOPIC + "?brokers=localhost:{{kafkaPort}}" + // Setup the topic and broker address "&groupId=A" + // The consumer processor group ID "&sslContextParameters=#ssl" + // The security protocol "&securityProtocol=SSL) // Reference the SSL configuration .to("mock:result"); } });
34.9. Kafka べき等リポジトリーの使用
camel-kafka
ライブラリーは、Kafka トピックベースのべき等リポジトリーを提供します。
このリポジトリーは、べき等状態 (追加/削除) へのブロードキャストのすべての変更を Kafka トピックに保存し、イベントソーシングを通じて各リポジトリーのプロセスインスタンスのローカルインメモリーキャッシュにデータを取り込みます。使用されるトピックは、べき等リポジトリーインスタンスごとに一意である必要があります。
このメカニズムには、トピックパーティションの数に関する要件はありません。リポジトリーがすべてのパーティションから同時に消費するためです。また、トピックのレプリケーションファクターに関する要件もありません。
トピックを使用する各リポジトリーインスタンス (通常、並行して実行されている異なるマシン上) は独自の consumer グループを制御するため、同じトピックを使用する 10 個の Camel プロセスのクラスターでは、それぞれが独自のオフセットを制御します。
起動時に、インスタンスはトピックにサブスクライブし、オフセットを先頭に巻き戻し、キャッシュを最新の状態に再構築します。pollDurationMs
の長さの 1 つのポーリングで 0 レコードが返されるまで、キャッシュはウォームアップされたと見なされません。キャッシュがウォームアップするか、30 秒経過するまで、起動は完了しません。後者の場合、consumer がトピックの最後に追いつくまで、冪等リポジトリーは一貫性のない状態になる可能性があります。
一意性チェックに使用されるヘッダーの形式に注意してください。デフォルトでは、文字列をデータ型として使用します。プリミティブな数値形式を使用する場合、それに応じてヘッダーを逆シリアル化する必要があります。例については、以下のサンプルを確認してください。
KafkaIdempotentRepository
には次のプロパティーがあります。
プロパティー | 説明 |
---|---|
| 変更をブロードキャストするために使用する Kafka トピックの名前。(必要) |
|
内部 Kafka producer および consumer の |
|
変更をブロードキャストする Kafka producer によって使用されるプロパティーを設定します。 |
|
トピックからキャッシュを設定する Kafka consumer によって使用されるプロパティーを設定します。 |
| 最近使用したキーをメモリーに保存する数 (デフォルトは 1000)。 |
|
Kafka consumer のポーリング期間。ローカルキャッシュはすぐに更新されます。この値は、トピックからキャッシュを更新する他のピアが、キャッシュアクションメッセージを送信した冪等の consumer インスタンスと比べてどれだけ遅れているかに影響します。このデフォルト値は 100 ミリ秒です。 |
topic
と bootstrapServers
を定義してリポジトリーをインスタンス化するか、または producerConfig
および consumerConfig
プロパティーセットを明示的に定義して、SSL/SASL などの機能を有効にすることができます。使用するには、CamelContext
に対応しているため、手動で、または Spring/Blueprint で Bean として登録することにより、このリポジトリーを Camel レジストリーに配置する必要があります。
使用例は次のとおりです。
KafkaIdempotentRepository kafkaIdempotentRepository = new KafkaIdempotentRepository("idempotent-db-inserts", "localhost:9091"); SimpleRegistry registry = new SimpleRegistry(); registry.put("insertDbIdemRepo", kafkaIdempotentRepository); // must be registered in the registry, to enable access to the CamelContext CamelContext context = new CamelContext(registry); // later in RouteBuilder... from("direct:performInsert") .idempotentConsumer(header("id")).messageIdRepositoryRef("insertDbIdemRepo") // once-only insert into database .end()
XML の場合:
<!-- simple --> <bean id="insertDbIdemRepo" class="org.apache.camel.processor.idempotent.kafka.KafkaIdempotentRepository"> <property name="topic" value="idempotent-db-inserts"/> <property name="bootstrapServers" value="localhost:9091"/> </bean> <!-- complex --> <bean id="insertDbIdemRepo" class="org.apache.camel.processor.idempotent.kafka.KafkaIdempotentRepository"> <property name="topic" value="idempotent-db-inserts"/> <property name="maxCacheSize" value="10000"/> <property name="consumerConfig"> <props> <prop key="bootstrap.servers">localhost:9091</prop> </props> </property> <property name="producerConfig"> <props> <prop key="bootstrap.servers">localhost:9091</prop> </props> </property> </bean>
数値識別子でべき等性を使用する場合は、3 つの選択肢から選択できます。1 つ目は、org.apache.camel.component.kafka.serde.KafkaSerdeHelper
の静的メソッド numericHeader
メソッドを使用して変換を実行することです。
from("direct:performInsert") .idempotentConsumer(numericHeader("id")).messageIdRepositoryRef("insertDbIdemRepo") // once-only insert into database .end()
または、ルート URL を介して設定されたカスタムシリアライザーを使用して変換を実行することもできます。
public class CustomHeaderDeserializer extends DefaultKafkaHeaderDeserializer { private static final Logger LOG = LoggerFactory.getLogger(CustomHeaderDeserializer.class); @Override public Object deserialize(String key, byte[] value) { if (key.equals("id")) { BigInteger bi = new BigInteger(value); return String.valueOf(bi.longValue()); } else { return super.deserialize(key, value); } } }
最後に、プロセッサーでこれを行うこともできます。
from(from).routeId("foo") .process(exchange -> { byte[] id = exchange.getIn().getHeader("id", byte[].class); BigInteger bi = new BigInteger(id); exchange.getIn().setHeader("id", String.valueOf(bi.longValue())); }) .idempotentConsumer(header("id")) .messageIdRepositoryRef("kafkaIdempotentRepository") .to(to);
34.10. Kafka consumer での手動コミットの使用
デフォルトでは、Kafka consumer は自動コミットを使用します。オフセットは、指定された間隔を使用してバックグラウンドで自動的にコミットされます。
手動コミットを強制する場合は、メッセージヘッダーに保存されている Camel Exchange の KafkaManualCommit
API を使用できます。これには、KafkaComponent
またはエンドポイントでオプション allowManualCommit
を true
に設定して、手動コミットを有効にする必要があります。次に例を示します。
KafkaComponent kafka = new KafkaComponent(); kafka.setAllowManualCommit(true); ... camelContext.addComponent("kafka", kafka);
その後、Camel Processor
などの Java コードから KafkaManualCommit
を使用できます。
public void process(Exchange exchange) { KafkaManualCommit manual = exchange.getIn().getHeader(KafkaConstants.MANUAL_COMMIT, KafkaManualCommit.class); manual.commit(); }
これにより、同期コミットが強制され、Kafka でコミットが確認されるまでブロックされるか、失敗した場合は例外が出力されます。KafkaManualCommitFactory
を `DefaultKafkaManualAsyncCommitFactory` 実装で設定することにより、非同期コミットも使用できます。
その後、kafka 非同期コミット API を使用して、次の consumer ループでコミットが行われます。パーティションからのレコードは、一意のスレッドによって処理およびコミットする必要があることに注意してください。そうでない場合、一貫性のない動作が発生する可能性があります。これは、集約の完了タイムアウト戦略で最も役立ちます。
KafkaManualCommit
のカスタム実装を使用する場合は、カスタム実装のインスタンスを作成する KafkaComponent
でカスタム KafkaManualCommitFactory
を設定できます。
34.11. Kafka ヘッダーの伝播
Kafka からメッセージを消費する場合、ヘッダーは camel exchange ヘッダーに自動的に伝播されます。同じ動作に裏打ちされたフローの生成 - 特定の交換のキャメルヘッダーは、kafka メッセージヘッダーに伝達されます。
kafka ヘッダーは byte[]
値のみを許可するため、camel exchange ヘッダーを伝播するには、その値を bytes[]
にシリアル化する必要があります。そうしないと、ヘッダーはスキップされます。次のヘッダー値タイプがサポートされています: String
、Integer
、Long
、Double
、Boolean
、byte[]
。注: kafka から camel exchange に 伝播されるすべてのヘッダーには、デフォルトで byte[]
値が含まれます。デフォルトの機能をオーバーライドするために、URI パラメーターを設定できます。ルート から
の headerDeserializer
と
ルートへの headerSerializer
です。以下に例を示します。
from("kafka:my_topic?headerDeserializer=#myDeserializer") ... .to("kafka:my_topic?headerSerializer=#mySerializer")
デフォルトでは、すべてのヘッダーが KafkaHeaderFilterStrategy
によってフィルタリングされています。Strategy は、Camel
または org.apache.camel
接頭辞で始まるヘッダーを除外します。デフォルトの戦略は、to
ルートと from
ルートの両方で headerFilterStrategy
uri パラメーターを使用してオーバーライドできます。
from("kafka:my_topic?headerFilterStrategy=#myStrategy") ... .to("kafka:my_topic?headerFilterStrategy=#myStrategy")
myStrategy
オブジェクトは HeaderFilterStrategy
のサブクラスである必要があり、CamelContext
に対応しているため、手動で、または Spring/Blueprint で Bean として登録することにより、Camel レジストリーに配置する必要があります。
34.12. Spring Boot Auto-Configuration
Spring Boot で jira を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-kafka-starter</artifactId> </dependency>
コンポーネントは、以下に記載される 105 のオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.component.kafka.additional-properties | camel 設定で直接設定できない場合に備えて、kafka consumer または kafka producer のいずれかに追加のプロパティーを設定します (例: Camel 設定にまだ反映されていない新しい Kafka プロパティー)。プロパティーには additionalProperties を接頭辞として付ける必要があります。たとえば、additionalProperties.transactional.id=12345&additionalProperties.schema.registry.url=http://localhost:8811/avro です。 | マップ | |
camel.component.kafka.allow-manual-commit | KafkaManualCommit による手動コミットを許可するかどうか。このオプションを有効にすると、KafkaManualCommit のインスタンスが Exchange メッセージヘッダーに格納されます。これにより、エンドユーザーはこの API にアクセスし、Kafka consumer を介して手動でオフセットコミットを実行できます。 | false | Boolean |
camel.component.kafka.auto-commit-enable | true の場合、consumer によってすでにフェッチされているメッセージのオフセットを ZooKeeper に定期的にコミットします。このコミットされたオフセットは、プロセスが失敗したときに、新しい consumer が開始される位置として使用されます。 | true | Boolean |
camel.component.kafka.auto-commit-interval-ms | consumer オフセットが Zookeeper にコミットされるミリ秒単位の頻度。 | 5000 | Integer |
camel.component.kafka.auto-commit-on-stop | consumer が停止したときに明示的な自動コミットを実行して、ブローカーが最後に消費されたメッセージからコミットされていることを確認するかどうか。これには、autoCommitEnable オプションをオンにする必要があります。可能な値は、sync、async、または none です。sync がデフォルト値です。 | sync | String |
camel.component.kafka.auto-offset-reset | ZooKeeper に初期オフセットがない場合、またはオフセットが範囲外の場合の対処方法: Early : オフセットを最も古いオフセットに自動的にリセット latest : オフセットを最新のオフセットに自動的にリセット Fail: consumer に例外を出力します。 | latest | String |
camel.component.kafka.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.kafka.break-on-first-error | このオプションは、consumer が交換を処理していて失敗した場合に何が起こるかを制御します。オプションが false の場合、consumer は次のメッセージに進み、それを処理します。オプションが true の場合、consumer は中断し、失敗の原因となったメッセージのオフセットに戻ってシークし、このメッセージの処理を再試行します。ただし、これは、たとえば有害なメッセージのように毎回失敗する場合、同じメッセージの無限の処理につながる可能性があります。したがって、Camel のエラーハンドラーを使用するなどして対処することをお勧めします。 | false | Boolean |
camel.component.kafka.bridge-error-handler | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | Boolean |
camel.component.kafka.brokers | 使用する Kafka ブローカーの URL。形式は host1:port1,host2:port2 で、リストはブローカーのサブセットまたはブローカーのサブセットを指す VIP にすることができます。このオプションは、Kafka ドキュメントでは bootstrap.servers として知られています。 | String | |
camel.component.kafka.buffer-memory-size | producer が、サーバーへの送信を待機しているレコードをバッファーリングするために使用できるメモリーの合計バイト数。レコードがサーバーに配信されるよりも速く送信された場合、プロデューサはブロックするか、block.on.buffer.full で指定された設定に基づいて例外を出力します。この設定は、プロデューサが使用する合計メモリーにほぼ対応する必要があります。ただし、プロデューサが使用するすべてのメモリーがバッファーリングに使用されるわけではないため、ハードバウンドではありません。一部の追加メモリーは、圧縮 (圧縮が有効な場合) やインフライトリクエストの維持に使用されます。 | 33554432 | Integer |
camel.component.kafka.check-crcs | 消費されたレコードの CRC32 を自動的に確認します。これにより、メッセージのネットワーク上またはディスク上の破損が発生しなくなります。このチェックはオーバーヘッドを追加するため、極端なパフォーマンスを求める場合は無効になる可能性があります。 | true | Boolean |
camel.component.kafka.client-id | クライアント ID は、呼び出しの追跡に役立つように、各要求で送信されるユーザー指定の文字列です。要求を行っているアプリケーションを論理的に識別する必要があります。 | String | |
camel.component.kafka.commit-timeout-ms | 同期コミットが完了するまでコードが待機する最大時間 (ミリ秒単位)。オプションは java.lang.Long 型です。 | 5000 | Long |
camel.component.kafka.compression-codec | このパラメーターを使用すると、この producer によって生成されるすべてのデータの圧縮コーデックを指定できます。有効な値は none、gzip、snappy です。 | none | String |
camel.component.kafka.configuration | エンドポイントが再利用する共通オプションを使用して、Kafka コンポーネントを事前設定できます。オプションは org.apache.camel.component.kafka.KafkaConfiguration タイプです。 | KafkaConfiguration | |
camel.component.kafka.connection-max-idle-ms | この設定で指定された期間 (ミリ秒単位) の後にアイドル状態の接続を閉じます。 | 540000 | Integer |
camel.component.kafka.consumer-request-timeout-ms | この設定は、クライアントの要求の応答を待つ最大時間を制御します。タイムアウトが経過する前に応答が受信されない場合、クライアントは必要に応じてリクエストを再送信します。または、再試行が使い切られるとリクエストが失敗します。 | 40000 | Integer |
camel.component.kafka.consumers-count | kafka サーバーに接続する consumer の数。各 consumer は、受信データを取得して処理する個別のスレッドで実行されます。 | 1 | Integer |
camel.component.kafka.delivery-timeout-ms | send() の呼び出しが返された後、成功または失敗を報告する時間の上限。これにより、送信前にレコードが遅延する合計時間、ブローカーから確認応答を待つ時間 (予想される場合)、および再試行可能な送信の失敗に許容される時間が制限されます。 | 120000 | Integer |
camel.component.kafka.enable-idempotence | 'true' に設定すると、producer は、各メッセージのコピーが 1 つだけストリームに書き込まれるようにします。false の場合、プロデューサの再試行により、再試行されたメッセージの複製がストリームに書き込まれる可能性があります。true に設定した場合、このオプションでは max.in.flight.requests.per.connection を 1 に設定する必要があり、再試行をゼロにすることはできず、さらに ack を all に設定する必要があります。 | false | Boolean |
camel.component.kafka.enabled | kafka コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.kafka.fetch-max-bytes | サーバーがフェッチ要求に対して返す必要があるデータの最大量。これは絶対的な最大値ではありません。フェッチの最初の空でないパーティションの最初のメッセージがこの値よりも大きい場合でも、メッセージが返されて、consumer は進歩することができます。ブローカーが受け入れる最大メッセージサイズは、message.max.bytes (ブローカー設定) または max.message.bytes (トピック設定) で定義されます。consumer は複数のフェッチを並行して実行することに注意してください。 | 52428800 | Integer |
camel.component.kafka.fetch-min-bytes | サーバーがフェッチ要求に対して返す必要のあるデータの最小量。利用可能なデータが不十分な場合、リクエストは、リクエストに応答する前に、十分なデータが蓄積されるのを待ちます。 | 1 | Integer |
camel.component.kafka.fetch-wait-max-ms | すぐに fetch.min.bytes を満たすのに十分なデータがない場合に、サーバーがフェッチ要求に応答する前にブロックする最大時間。 | 500 | Integer |
camel.component.kafka.group-id | この consumer が属する consumer プロセスのグループを一意に識別する文字列。同じグループ ID を設定することにより、複数のプロセスはそれらがすべて同じ consumer グループの一部であることを示します。このオプションは、consumer に必要です。 | String | |
camel.component.kafka.group-instance-id | エンドユーザーが提供する consumer インスタンスの一意の識別子。non-empty strings のみが許可されます。設定されている場合、consumer は静的メンバーとして扱われます。つまり、常に、この ID を持つ 1 つのインスタンスのみが consumer グループで許可されます。これは、より大きなセッションタイムアウトと組み合わせて使用して、一時的な利用不可 (プロセス再起動など) によるグループのリバランスを回避します。設定しないと、consumer は従来の動作である動的メンバーとしてグループに参加します。 | String | |
camel.component.kafka.header-deserializer | カスタム KafkaHeaderDeserializer を使用して、kafka ヘッダー値を逆シリアル化します。オプションは org.apache.camel.component.kafka.serde.KafkaHeaderDeserializer タイプです。 | KafkaHeaderDeserializer | |
camel.component.kafka.header-filter-strategy | カスタムの HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルタリングします。このオプションは org.apache.camel.spi.HeaderFilterStrategy タイプです。 | HeaderFilterStrategy | |
camel.component.kafka.header-serializer | カスタム KafkaHeaderSerializer を使用して、kafka ヘッダー値をシリアル化します。オプションは org.apache.camel.component.kafka.serde.KafkaHeaderSerializer タイプです。 | KafkaHeaderSerializer | |
camel.component.kafka.heartbeat-interval-ms | Kafka のグループ管理機能を使用する場合の、ハートビートから consumerコーディネーター間の想定される時間。ハートビートは、consumer のセッションがアクティブな状態を維持し、新しい consumer がグループに参加したり離脱したりする際のリバランスを促進するために使用されます。この値は session.timeout.ms よりも低く設定する必要がありますが、通常はその値の 1/3 以下に設定する必要があります。さらに低く調整することで、通常のリバランスの予想時間を制御することもできます。 | 3000 | Integer |
camel.component.kafka.interceptor-classes | producer または consumer のインターセプターを設定します。Producer インターセプターは org.apache.kafka.clients.producer.ProducerInterceptor を実装するクラスでなければなりません Consumer インターセプターは org.apache.kafka.clients.consumer.ConsumerInterceptor を実装するクラスでなければなりません実行時のクラスキャスト例外。 | String | |
camel.component.kafka.kafka-client-factory | org.apache.kafka.clients.consumer.KafkaConsumer および org.apache.kafka.clients.producer.KafkaProducer インスタンスの作成に使用するファクトリー。これにより、バニラ Kafka クライアントを拡張するロジックを使用してインスタンスを作成するカスタムファクトリーを設定できます。オプションは org.apache.camel.component.kafka.KafkaClientFactory タイプです。 | KafkaClientFactory | |
camel.component.kafka.kafka-manual-commit-factory | KafkaManualCommit インスタンスの作成に使用するファクトリー。これにより、カスタムファクトリーをプラグインしてカスタム KafkaManualCommit インスタンスを作成できます。これは、すぐに使用できるデフォルトの実装から逸脱する手動コミットを行うときに特別なロジックが必要な場合に備えています。オプションは org.apache.camel.component.kafka.KafkaManualCommitFactory タイプです。 | KafkaManualCommitFactory | |
camel.component.kafka.kerberos-before-relogin-min-time | 更新試行間のログインスレッドのスリープ時間。 | 60000 | Integer |
camel.component.kafka.kerberos-init-cmd | Kerberos kinit コマンドパス。デフォルトは/usr/bin/kinit です。 | /usr/bin/kinit | String |
camel.component.kafka.kerberos-principal-to-local-rules | プリンシパル名から短縮名 (通常はオペレーティングシステムのユーザー名) にマッピングするためのルールの一覧です。ルールは順番に評価され、プリンシパル名と一致する最初のルールは、これを短縮名にマップするために使用されます。一覧の後続のルールは無視されます。デフォルトでは、{username}/{hostname}{REALM} 形式のプリンシパル名は {username} にマッピングされます。形式の詳細については、セキュリティー認証と ACL のドキュメントを参照してください。複数の値はコンマで区切ることができます。 | DEFAULT | String |
camel.component.kafka.kerberos-renew-jitter | 更新時間に追加されたランダムなジッターの割合。 | double | |
camel.component.kafka.kerberos-renew-window-factor | ログインスレッドは、最後の更新からチケットの有効期限までの指定された時間のウィンドウファクターに達するまでスリープし、その時点でチケットの更新を試みます。 | double | |
camel.component.kafka.key | レコードキー (キーが指定されていない場合は null)。このオプションが設定されている場合、ヘッダー KafkaConstants#KEY よりも優先されます。 | String | |
camel.component.kafka.key-deserializer | Deserializer インターフェイスを実装する key の Deserializer クラス。 | org.apache.kafka.common.serialization.StringDeserializer | String |
camel.component.kafka.key-serializer | キーのシリアライザクラス (何も指定されていない場合、デフォルトはメッセージと同じになります)。 | org.apache.kafka.common.serialization.StringSerializer | String |
camel.component.kafka.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
camel.component.kafka.linger-ms | producer は、リクエストの送信の間に到着したレコードを 1 つのバッチリクエストにグループ化します。通常、これは、レコードが送信できるよりも早く到着した場合に、負荷がかかった状態でのみ発生します。ただし、状況によっては、中程度の負荷がかかっている場合でも、クライアントがリクエストの数を減らす場合があります。この設定は、少量の人為的な遅延を追加することでこれを実現します。つまり、レコードをすぐに送信するのではなく、producer は指定された遅延まで待機して他のレコードを送信できるようにし、送信をまとめてバッチ処理できるようにします。これは、TCP の Nagle アルゴリズムに類似するものと考えることができます。この設定は、バッチ処理の遅延の上限を提供します。あるパーティションで batch.size 相当のレコードを取得すると、この設定に関係なくすぐに送信されますが、このパーティションで蓄積されたバイト数がこれより少ない場合は、指定された時間の間、さらにレコードが取得されるのを待つことになります。デフォルトは 0 (つまり遅延なし) に設定されます。たとえば、linger.ms=5 を設定すると、送信されるリクエストの数が減りますが、負荷がない状態で送信されるレコードに最大 5 ミリ秒のレイテンシーが追加されます。 | 0 | Integer |
camel.component.kafka.max-block-ms | 設定は、kafka への送信がブロックされる時間を制御します。これらのメソッドは、複数の理由でブロックされる可能性があります。例: バッファーがいっぱい、メタデータが利用できない。この設定では、メタデータのフェッチ、キーと値のシリアル化、send () を実行するときのバッファーメモリーの分割と割り当てに費やされる合計時間に最大制限が課されます。partitionsFor () の場合、この設定はメタデータの待機に最大時間のしきい値を課します。 | 60000 | Integer |
camel.component.kafka.max-in-flight-request | ブロックする前にクライアントが 1 つの接続で送信する確認されていないリクエストの最大数。この設定が 1 より大きい値に設定されていて、送信に失敗した場合、再試行によりメッセージの順序が変更されるリスクがあることに注意してください (つまり、再試行が有効になっている場合)。 | 5 | Integer |
camel.component.kafka.max-partition-fetch-bytes | サーバーが返すパーティションごとのデータの最大量。リクエストに使用される最大合計メモリーは #partitions max.partition.fetch.bytes になります。このサイズは、少なくともサーバーが許可する最大メッセージサイズと同じである必要があります。そうしないと、producer が consumer がフェッチできるよりも大きなメッセージを送信する可能性があります。その場合、consumer は特定のパーティションで大きなメッセージを取得しようとしてスタックする可能性があります。 | 1048576 | Integer |
camel.component.kafka.max-poll-interval-ms | consumer グループ管理を使用する場合の poll() の呼び出し間の最大遅延。これにより、consumer がさらにレコードをフェッチする前にアイドル状態になることができる時間に上限が設定されます。このタイムアウトの期限が切れる前に poll() が呼び出されない場合、consumer は失敗とみなされ、グループはパーティションを別のメンバーに再割り当てするためにリバランスします。オプションは java.lang.Long 型です。 | Long | |
camel.component.kafka.max-poll-records | poll() への単一の呼び出しで返される最大レコード数。 | 500 | Integer |
camel.component.kafka.max-request-size | リクエストの最大サイズ。これは事実上、最大レコードサイズの上限でもあります。サーバーには、これとは異なる場合がある独自のレコードサイズの上限があることに注意してください。この設定により、producer が 1 回のリクエストで送信するレコードバッチの数が制限され、大量のリクエストが送信されないようになります。 | 1048576 | Integer |
camel.component.kafka.metadata-max-age-ms | 新しいブローカーまたはパーティションをプロアクティブに検出するためのパーティションリーダーシップの変更がない場合でも、メタデータの更新を強制するまでの期間 (ミリ秒単位)。 | 300000 | Integer |
camel.component.kafka.metric-reporters | メトリクスレポーターとして使用するクラスの一覧。MetricReporter インターフェイスを実装すると、新しいメトリックの作成が通知されるクラスをプラグインできます。JmxReporter は、JMX 統計を登録するために常に含まれます。 | String | |
camel.component.kafka.metrics-sample-window-ms | メトリクスを計算するために保持されるサンプルの数。 | 30000 | Integer |
camel.component.kafka.no-of-metrics-sample | メトリクスを計算するために保持されるサンプルの数。 | 2 | Integer |
camel.component.kafka.offset-repository | トピックの各パーティションのオフセットをローカルに保存するために使用するオフセットリポジトリー。定義すると、自動コミットが無効になります。オプションは org.apache.camel.spi.StateRepository<java.lang.String、java.lang.String> 型です。 | StateRepository | |
camel.component.kafka.partition-assignor | グループ管理が使用されている場合に、クライアントが consumer インスタンス間でパーティションの所有権を分散するために使用するパーティション割り当て戦略のクラス名。 | org.apache.kafka.clients.consumer.RangeAssignor | String |
camel.component.kafka.partition-key | レコードの送信先のパーティション (パーティションが指定されていない場合は null)。このオプションが設定されている場合、ヘッダー KafkaConstants#PARTITION_KEY よりも優先されます。 | Integer | |
camel.component.kafka.partitioner | サブトピック間でメッセージを分割するパーティショナークラス。デフォルトのパーティショナーは、キーのハッシュに基づいています。 | org.apache.kafka.clients.producer.internals.DefaultPartitioner | String |
camel.component.kafka.poll-exception-strategy | consumer でカスタム戦略を使用して、メッセージのプール中に Kafka ブローカーから出力された例外の処理方法を制御します。オプションは org.apache.camel.component.kafka.PollExceptionStrategy タイプです。 | PollExceptionStrategy | |
camel.component.kafka.poll-on-error | 新しいメッセージのポーリング中に、kafka が例外を出力した場合のアクション。エンドポイントレベルで明示的な値が設定されていない限り、デフォルトでコンポーネント設定の値が使用されます。DISCARD はメッセージを破棄し、次のメッセージのポーリングを続行します。ERROR_HANDLER は Camel のエラーハンドラーを使用して例外を処理し、その後、次のメッセージのポーリングを続行します。RECONNECT は consumer に再接続し、メッセージのポーリングを再試行します RETRY は consumer が同じメッセージのポーリングを再試行できるようにします STOP は consumer を停止します (consumer がメッセージを再び消費できるようにする必要がある場合は、手動で開始/再起動する必要があります)。 | PollOnError | |
camel.component.kafka.poll-timeout-ms | KafkaConsumer をポーリングするときに使用されるタイムアウト。オプションは java.lang.Long 型です。 | 5000 | Long |
camel.component.kafka.producer-batch-size | 複数のレコードが同じパーティションに送信されるときは常に、producer はレコードをまとめてより少ない要求にバッチ処理しようとします。これにより、クライアントとサーバーの両方でパフォーマンスが向上します。この設定では、デフォルトのバッチサイズをバイト単位で制御します。このサイズより大きいバッチレコードは試行されません。ブローカーに送信されるリクエストには、複数のバッチが含まれ、送信可能なデータを含む各パーティションに 1 つずつ含まれます。バッチサイズが小さいと、バッチ処理が一般的ではなくなり、スループット (バッチサイズゼロの場合、バッチ処理が完全に無効になります)。バッチサイズが非常に大きい場合は、追加のレコードを想定して、常に指定のバッチサイズのバッファーを割り当てるため、メモリーを多少無駄に使用する可能性があります。 | 16384 | Integer |
camel.component.kafka.queue-buffering-max-messages | プロデューサをブロックするか、データを削除する前に、非同期モードを使用するときにプロデューサのキューに入れることができる未送信メッセージの最大数。 | 10000 | Integer |
camel.component.kafka.receive-buffer-bytes | データの読み取り時に使用する TCP 受信バッファー (SO_RCVBUF) のサイズ。 | 65536 | Integer |
camel.component.kafka.reconnect-backoff-max-ms | 接続に繰り返し失敗したブローカーへの再接続時に待機する最大時間 (ミリ秒単位)。これが指定されている場合、ホストごとのバックオフは、連続して接続に失敗するたびに、この最大値まで指数関数的に増加します。バックオフの増加を計算した後、コネクションストームを回避するために 20% のランダムなジッターが追加されます。 | 1000 | Integer |
camel.component.kafka.reconnect-backoff-ms | 特定のホストへの再接続を試行するまでの待機時間。これにより、タイトなループでホストに繰り返し接続することを回避します。このバックオフは、consumer からブローカーに送信されるすべてのリクエストに適用されます。 | 50 | Integer |
camel.component.kafka.record-metadata | プロデューサが Kafka への送信から RecordMetadata の結果を保存する必要があるかどうか。結果は、RecordMetadata メタデータを含む List に保存されます。リストは、キー KafkaConstants#KAFKA_RECORDMETA を持つヘッダーに保存されます。 | true | Boolean |
camel.component.kafka.request-required-acks | リクエストが完了したと見なす前に、producer がリーダーに受け取ったことを要求する確認の数。これは、送信されるレコードの耐久性を制御します。次の設定が一般的です: acks=0 ゼロに設定すると、プロデューサはサーバーからの確認をまったく待ちません。レコードは直ちにソケットバッファーに追加され、送信済みと見なされます。この場合、サーバーがレコードを受信したかどうかは保証されず、retries の設定は有効になりません (クライアントは通常、失敗を知ることができないからです)。各レコードに返されるオフセットは常に -1 に設定されます。acks=1 これは、リーダーがレコードをローカルログに書き込みますが、すべてのフォロワーからの完全な承認を待たずに応答することを意味します。この場合、レコードを承認した直後にリーダーが失敗したが、フォロワーがそれを複製する前に、レコードは失われます。acks=all これは、リーダーが同期レプリカの完全なセットがレコードを承認するまで待機することを意味します。これにより、少なくとも 1 つの In-Sync レプリカが動作している限り、レコードが失われないことが保証されます。これは利用可能な最強の保証になります。 | 1 | String |
camel.component.kafka.request-timeout-ms | クライアントにエラーを返す前に、ブローカーが request.required.acks 要件を満たすために待機する時間。 | 30000 | Integer |
camel.component.kafka.resume-strategy | このオプションを使用すると、ユーザーはカスタムの再開方法を設定できます。再開戦略は、パーティションが割り当てられたとき (つまり、接続時または再接続時) に実行されます。これにより、実装は操作を再開する方法をカスタマイズし、seekTo および offsetRepository メカニズムのより柔軟な代替手段として機能できます。実装の詳細については、KafkaConsumerResumeStrategy を参照してください。このオプションは、自動コミット設定には影響しません。この設定を使用する実装は、これと一緒に手動コミットオプションを使用して評価することも必要になる可能性があります。オプションは org.apache.camel.component.kafka.consumer.support.KafkaConsumerResumeStrategy タイプです。 | KafkaConsumerResumeStrategy | |
camel.component.kafka.retries | ゼロより大きい値を設定すると、クライアントは、一時的なエラーの可能性により送信に失敗したレコードを再送信します。この再試行は、クライアントがエラーを受信したときにレコードを再送した場合と同じであることに注意してください。再試行を許可すると、レコードの順序が変更される可能性があります。これは、2 つのレコードが 1 つのパーティションに送信され、最初のレコードが失敗して再試行され、2 番目のレコードが成功した場合、2 番目のレコードが最初に表示される可能性があるためです。 | 0 | Integer |
camel.component.kafka.retry-backoff-ms | 各再試行の前に、producer は関連するトピックのメタデータを更新して、新しいリーダーが選出されたかどうかを確認します。リーダーの選択には少し時間がかかるため、このプロパティーは producer がメタデータを更新するまで待機する時間を指定します。 | 100 | Integer |
camel.component.kafka.sasl-jaas-config | kafka sasl.jaas.config パラメーターを公開します。例: org.apache.kafka.common.security.plain.PlainLoginModule required username=USERNAME password=PASSWORD;. | String | |
camel.component.kafka.sasl-kerberos-service-name | Kafka が実行される Kerberos プリンシパル名。これは、Kafka の JAAS 設定または Kafka の設定で定義できます。 | String | |
camel.component.kafka.sasl-mechanism | 使用される Simple Authentication and Security Layer(SASL) メカニズム。有効な値については、を参照してください。 | GSSAPI | String |
camel.component.kafka.schema-registry-u-r-l | 使用する Confluent Platform スキーマレジストリーサーバーの URL。形式は、ホスト 1: ポート 1、ホスト 2: ポート 2 です。これは、Confluent Platform ドキュメントでは schema.registry.url として知られています。このオプションは、Confluent Platform (標準の Apache Kafka ではない) でのみ使用できます。 | String | |
camel.component.kafka.security-protocol | ブローカーとの通信に使用されるプロトコル。SASL_PLAINTEXT、PLAINTEXT、および SSL がサポートされています。 | PLAINTEXT | String |
camel.component.kafka.seek-to | KafkaConsumer が起動時に最初または最後から読み取るかどうかを設定します。begin : 最初から読み取る end : 最後から読み取るこれは、以前のプロパティー seekToBeginning を置き換えています。 | String | |
camel.component.kafka.send-buffer-bytes | ソケット書き込みバッファーサイズ。 | 131072 | Integer |
camel.component.kafka.session-timeout-ms | Kafka のグループ管理機能を使用するときに障害を検出するために使用されるタイムアウト。 | 10000 | Integer |
camel.component.kafka.shutdown-timeout | consumer または producer がワーカースレッドをシャットダウンして終了するまで正常に待機するためのミリ秒単位のタイムアウト。 | 30000 | Integer |
camel.component.kafka.specific-avro-reader | これにより、Confluent Platform スキーマレジストリーおよび io.confluent.kafka.serializers.KafkaAvroDeserializer で使用する特定の Avro リーダーを使用できるようになります。このオプションは、Confluent Platform (標準の Apache Kafka ではない) でのみ使用できます。 | false | Boolean |
camel.component.kafka.ssl-cipher-suites | 暗号化スイートの一覧。これは、TLS または SSL ネットワークプロトコルを使用してネットワーク接続のセキュリティー設定をネゴシエートするために使用される、認証、暗号化、MAC、およびキー交換アルゴリズムの名前付きの組み合わせです。デフォルトでは、利用可能なすべての暗号スイートがサポートされています。 | String | |
camel.component.kafka.ssl-context-parameters | Camel SSLContextParameters オブジェクトを使用した SSL 設定。設定されている場合、他の SSL エンドポイントパラメーターの前に適用されます。注: Kafka はファイルの場所からのキーストアのロードのみをサポートしているため、場所の前に file: を KeyStoreParameters.resource オプションで付けます。オプションは org.apache.camel.support.jsse.SSLContextParameters タイプです。 | SSLContextParameters | |
camel.component.kafka.ssl-enabled-protocols | SSL 接続で有効なプロトコルの一覧。TLSv1.2、TLSv1.1、および TLSv1 はデフォルトで有効になっています。 | String | |
camel.component.kafka.ssl-endpoint-algorithm | サーバー証明書を使用してサーバーのホスト名を検証するエンドポイント識別アルゴリズム。 | https | String |
camel.component.kafka.ssl-key-password | キーストアファイル内の秘密キーのパスワード。これはクライアントにとってオプションになります。 | String | |
camel.component.kafka.ssl-keymanager-algorithm | SSL 接続のキーマネージャーファクトリーによって使用されるアルゴリズム。デフォルト値は、Java 仮想マシンに設定されたキーマネージャーファクトリーアルゴリズムです。 | SunX509 | String |
camel.component.kafka.ssl-keystore-location | キーストアファイルの場所。これはクライアントではオプションで、クライアントの双方向認証に使用できます。 | String | |
camel.component.kafka.ssl-keystore-password | キーストアファイルのストアパスワード。これはクライアントのオプションであり、ssl.keystore.location が設定されている場合にのみ必要です。 | String | |
camel.component.kafka.ssl-keystore-type | キーストアファイルのファイル形式。これはクライアントにとってオプションになります。デフォルト値は JKS です。 | JKS | String |
camel.component.kafka.ssl-protocol | SSLContext の生成に使用される SSL プロトコル。デフォルト設定は TLS で、ほとんどの場合はこれで問題ありません。最近の JVM で許可されている値は、TLS、TLSv1.1、および TLSv1.2 です。SSL、SSLv2、および SSLv3 は古い JVM でサポートされている可能性がありますが、セキュリティーの脆弱性が知られているため、それらの使用はお勧めできません。 | String | |
camel.component.kafka.ssl-provider | SSL 接続に使用されるセキュリティープロバイダーの名前。デフォルト値は JVM のデフォルトのセキュリティープロバイダーです。 | String | |
camel.component.kafka.ssl-trustmanager-algorithm | SSL 接続のトラストマネージャーファクトリーによって使用されるアルゴリズム。デフォルト値は、Java 仮想マシンに設定されたトラストマネージャーファクトリーアルゴリズムです。 | PKIX | String |
camel.component.kafka.ssl-truststore-location | トラストストアファイルの場所。 | String | |
camel.component.kafka.ssl-truststore-password | トラストストアファイルのパスワード。 | String | |
camel.component.kafka.ssl-truststore-type | トラストストアファイルのファイル形式。デフォルト値は JKS です。 | JKS | String |
camel.component.kafka.synchronous | 同期処理を厳密に使用するかどうかを設定します。 | false | Boolean |
camel.component.kafka.topic-is-pattern | トピックがパターン (正規表現) であるかどうか。これを使用して、パターンに一致する動的な数のトピックをサブスクライブできます。 | false | Boolean |
camel.component.kafka.use-global-ssl-context-parameters | グローバル SSL コンテキストパラメーターの使用を有効にします。 | false | Boolean |
camel.component.kafka.value-deserializer | Deserializer インターフェイスを実装する値の Deserializer クラス。 | org.apache.kafka.common.serialization.StringDeserializer | String |
camel.component.kafka.value-serializer | メッセージのシリアライザクラス。 | org.apache.kafka.common.serialization.StringSerializer | String |
camel.component.kafka.worker-pool | カスタムワーカープールを使用して、kafka サーバーが非同期のノンブロッキング処理を使用して KafkaProducer から送信されたメッセージを確認した後、Exchange のルーティングを続行します。このオプションを使用する場合は、スレッドプールのライフサイクルを処理して、不要になったときにプールをシャットダウンする必要があります。オプションは java.util.concurrent.ExecutorService タイプです。 | ExecutorService | |
camel.component.kafka.worker-pool-core-size | Kafka サーバーが非同期のノンブロッキング処理を使用して KafkaProducer から送信されたメッセージを確認した後、Exchange のルーティングを続行するためのワーカープールのコアスレッドの数。 | 10 | Integer |
camel.component.kafka.worker-pool-max-size | Kafka サーバーが、非同期のノンブロッキング処理を使用して KafkaProducer から送信されたメッセージを確認した後、Exchange のルーティングを続行するためのワーカープールのスレッドの最大数。 | 20 | Integer |
第35章 Kamelet
producer と consumer の両方がサポート対象
Kamelet コンポーネントは、エンドポイントセマンティックを使用して Camel Route Template エンジンと対話するためのサポートを提供します。
35.1. URI 形式
kamelet:templateId/routeId[?options]
35.2. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
35.2.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
35.2.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
35.3. コンポーネントオプション
Kamelet コンポーネントは、以下に示す 9 つのオプションをサポートしています。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
location (共通) | ファイルシステム上の Kamelets の場所。複数の場所をコンマで区切って設定できます。 | クラスパス:/kamelets | String |
routeProperties (共通) | ルートローカルパラメーターを設定します。 | マップ | |
templateProperties (共通) | テンプレートのローカルパラメーターを設定します。 | マップ | |
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
block (producer) | アクティブな consumer を持たない direct エンドポイントにメッセージを送信する場合、ブロックして consumer がアクティブになるのを待つよう producer に指示できます。 | true | boolean |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
timeout (producer) | ブロックが有効な場合に使用するタイムアウト値。 | 30000 | long |
autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
routeTemplateLoaderListener (上級) | Autowired Kamelet コンポーネントが外部リソースから Kamelet をロードするときのカスタムリスナーをプラグインします。 | RouteTemplateLoaderListener |
35.4. エンドポイントオプション
Kamelet エンドポイントは、URI 構文を使用して設定されます。
kamelet:templateId/routeId
パスおよびクエリーパラメーターを使用します。
35.4.1. パスパラメーター (2 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
templateId (共通) | 必須 ルートテンプレート ID。 | String | |
routeId (共通) | ルート ID。デフォルト値に関する通知: ID が指定されていない場合、ID は自動生成されます。 | String |
35.4.2. クエリーパラメーター (8 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
location (共通) | ファイルシステム、クラスパスなどからリソースとして指定できる、使用する Kamelet の場所。場所にはワイルドカードを使用できません。たとえば、file:/etc/foo-kamelet.xml のように、拡張子を含むファイルを参照する必要があります。 | String | |
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
exceptionHandler (consumer (上級)) | consumer によるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、consumer は例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
exchangePattern (consumer (上級)) | consumer がエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
block (producer) | アクティブな consumer を持たない direct エンドポイントにメッセージを送信する場合、ブロックして consumer がアクティブになるのを待つよう producer に指示できます。 | true | boolean |
failIfNoConsumers (producer) | アクティブな consumer のない DIRECT エンドポイントに送信するときに、producer が例外を出力して失敗するかどうか。 | true | boolean |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
timeout (producer) | ブロックが有効な場合に使用するタイムアウト値。 | 30000 | long |
kamelet エンドポイントは lenient です。つまり、エンドポイントは、エンジンに渡され、ルートの実体化で消費される追加パラメーターを受け入れます。
35.5. 検出
ルートテンプレート が見つからない場合、kamelet エンドポイントは関連する kamelet 定義をファイルシステム (デフォルトでは classpath:/kamelets
) からロードしようとします。デフォルトの解決メカニズムは、kamelet ファイルの拡張子が .kamelet.yaml
であることを想定しています。
35.6. サンプル
Kamelets は、標準の Camel コンポーネントであるかのように使用できます。たとえば、次のようにルートテンプレートを作成したとします。
routeTemplate("setMyBody") .templateParameter("bodyValue") .from("kamelet:source") .setBody().constant("{{bodyValue}}");
Kamelet コンポーネントが具体化されたルートを呼び出し元プロセッサーに配線できるようにするには、ルートの入力エンドポイントと出力エンドポイントを識別できるようにする必要があります。これは、kamel:source
を使用して入力エンドポイントをマークし、kamelet:sink
を出力に使用することによって行われます。終点。
次に、以下に示すように、テンプレートをインスタンス化して呼び出すことができます。
from("direct:setMyBody") .to("kamelet:setMyBody?bodyValue=myKamelet");
舞台裏で、Kamelet コンポーネントは次のことを行います。
-
指定された
templateId
パスパラメーター (この場合はsetBody
) によって識別されるルートテンプレートからルートをインスタンス化します。 -
これは
direct
コンポーネントのように機能し、現在のルートを具体化されたルートに接続します。
プログラムで行う必要がある場合は、次のようになります。
routeTemplate("setMyBody") .templateParameter("bodyValue") .from("direct:{{foo}}") .setBody().constant("{{bodyValue}}"); TemplatedRouteBuilder.builder(context, "setMyBody") .parameter("foo", "bar") .parameter("bodyValue", "myKamelet") .add(); from("direct:template") .to("direct:bar");
35.7. Spring Boot Auto-Configuration
Spring Boot で dataset を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-kamelet-starter</artifactId> </dependency>
コンポーネントは、以下に示す 10 個のオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.component.kamelet.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.kamelet.block | アクティブな consumer を持たない direct エンドポイントにメッセージを送信する場合、ブロックして consumer がアクティブになるのを待つよう producer に指示できます。 | true | Boolean |
camel.component.kamelet.bridge-error-handler | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | Boolean |
camel.component.kamelet.enabled | kamelet コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.kamelet.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
camel.component.kamelet.location | ファイルシステム上の Kamelets の場所。複数の場所をコンマで区切って設定できます。 | クラスパス:/kamelets | String |
camel.component.kamelet.route-properties | ルートローカルパラメーターを設定します。 | マップ | |
camel.component.kamelet.route-template-loader-listener | Kamelet コンポーネントが外部リソースから Kamelet をロードするときのカスタムリスナーをプラグインします。オプションは org.apache.camel.spi.RouteTemplateLoaderListener タイプです。 | RouteTemplateLoaderListener | |
camel.component.kamelet.template-properties | テンプレートのローカルパラメーターを設定します。 | マップ | |
camel.component.kamelet.timeout | ブロックが有効な場合に使用するタイムアウト値。 | 30000 | Long |
第36章 言語
producer のみサポート対象
言語コンポーネントを使用すると、Camel でサポートされている言語のいずれかでスクリプトを実行するエンドポイントに Exchange を送信できます。言語スクリプトを実行するコンポーネントを持つことで、より動的なルーティング機能が可能になります。たとえば、Routing Slip または Dynamic Router EIP を使用して、スクリプトが動的に定義されている言語エンドポイントにメッセージを送信できます。
このコンポーネントはキャメルコアでそのまま提供されるため、追加の JAR は必要ありません。Groovy や JavaScript 言語を使用するなど、選択した言語で必要な場合にのみ、追加の Camel コンポーネントを含める必要があります。
36.1. URI 形式
language://languageName[:script][?options]
Camel の他の 言語 でサポートされているのと同じ表記法を使用して、スクリプトの外部リソースを参照できます。
language://languageName:resource:scheme:location][?options]
36.2. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
36.2.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
36.2.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
36.3. コンポーネントオプション
言語コンポーネントは、次に示す 2 つのオプションをサポートしています。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
36.4. エンドポイントオプション
Language エンドポイントは、URI 構文を使用して設定されます。
language:languageName:resourceUri
パスおよびクエリーパラメーターを使用します。
36.4.1. パスパラメーター (2 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
languageName (producer) | 必須 使用する言語の名前を設定します。 列挙値:
| String | |
resourceUri (producer) | リソースへのパス、またはリソースとして使用するレジストリー内の Bean をルックアップするための参照。 | String |
36.4.2. クエリーパラメーター (7 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
allowContextMapAll (producer) | コンテキストマップが前詳細へのアクセスを許可するかどうかを設定します。デフォルトでは、メッセージの本文とヘッダーにのみアクセスできます。このオプションは、現在の Exchange および CamelContext へのフルアクセスに対して有効にできます。これを行うと、CamelContext API の全機能へのアクセスが開かれるため、潜在的なセキュリティーリスクが発生します。 | false | boolean |
binary (producer) | スクリプトがバイナリーコンテンツかテキストコンテンツか。デフォルトでは、スクリプトはテキストコンテンツとして読み込まれます (例: java.lang.String)。 | false | boolean |
cacheScript (producer) | コンパイルされたスクリプトをキャッシュして再利用するかどうかスクリプトを再利用すると、1 つの Camel org.apache.camel.Exchange の処理から次の org.apache.camel.Exchange への副作用が発生する可能性があることに注意してください。 | false | boolean |
contentCache (producer) | リソースコンテンツキャッシュを使用するかどうかを設定します。 | true | boolean |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
script (producer) | 実行するスクリプトを設定します。 | String | |
transform (producer) | スクリプトの結果をメッセージ本文として使用するかどうか。このオプションのデフォルトは true です。 | true | boolean |
36.5. メッセージヘッダー
次のメッセージヘッダーを使用して、コンポーネントの動作に影響を与えることができます。
ヘッダー | 説明 |
---|---|
| ヘッダーで提供される実行するスクリプト。エンドポイントで設定されたスクリプトよりも優先されます。 |
36.6. 例
たとえば、Simple 言語を使用してメッセージの変換を行います。
以下に示すように、スクリプトをヘッダーとして提供することもできます。ここでは、XPath 言語を使用して <foo> タグからテキストを抽出します。
Object out = producer.requestBodyAndHeader("language:xpath", "<foo>Hello World</foo>", Exchange.LANGUAGE_SCRIPT, "/foo/text()"); assertEquals("Hello World", out);
36.7. リソースからのスクリプトのロード
エンドポイント uri または Exchange.LANGUAGE_SCRIPT
ヘッダーのいずれかで、ロードするスクリプトのリソース uri を指定できます。URI は、次のスキームのいずれかで始まる必要があります: file:、classpath:、または http:
デフォルトでは、スクリプトは一度ロードされてキャッシュされます。ただし、contentCache
オプションを無効にして、評価ごとにスクリプトをロードすることができます。たとえば、ファイル myscript.txt がディスク上で変更された場合、更新されたスクリプトが使用されます。
以下に示すように、resource: という接頭辞を付けることで、Camel の他の 言語 と同様のリソースを参照できます。
36.8. Spring Boot 自動設定
Spring Boot でファイルを使用する場合は、自動設定をサポートするために次の Maven 依存関係を使用してください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-language-starter</artifactId> </dependency>
コンポーネントは、以下に記載される 3 つのオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.component.language.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.language.enabled | 言語コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.language.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
第37章 Log
producer のみサポート対象
Log コンポーネントは、メッセージ交換を基になるロギングメカニズムに記録します。
Camel は SLF4J を使用します。これにより、特に次の方法でロギングを設定できます。
- Log4j
- Logback
- Java Util Logging
37.1. URI 形式
log:loggingCategory[?options]
loggingCategory は、使用するログカテゴリーの名前です。URI には、次の形式でクエリーオプションを追加できます。
?option=value&option=value&…
レジストリーから Logger インスタンスを使用する
レジストリーに org.slf4j.Logger
の単一インスタンスが見つかった場合、loggingCategory はロガーインスタンスの作成に使用されなくなりました。登録されたインスタンスが代わりに使用されます。また、?logger=#myLogger
URI パラメーターを使用して、特定の Logger
インスタンスを参照することもできます。最終的に、登録された URI logger
パラメーターがない場合、ロガーインスタンスは loggingCategory を使用して作成されます。
たとえば、ログエンドポイントは通常、次のように level
オプションを使用してログレベルを指定します。
log:org.apache.camel.example?level=DEBUG
デフォルトのロガーは、すべての交換をログに記録します (通常のログ記録)。ただし、Camel には Throughput
ロガーも同梱されており、これは groupSize
オプションが指定されている場合に常に使用されます。
また、DSL のログ
DSL にも直接 log
がありますが、目的が異なります。軽量で人間のログ用です。詳細については、LogEIP を参照してください。
37.2. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
37.2.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
37.2.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
37.3. コンポーネントオプション
ログ コンポーネントは、以下に示す 3 個のオプションをサポートしています。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
exchangeFormatter (上級) | Autowired カスタム ExchangeFormatter を設定して、Exchange をログに適した文字列に変換します。指定しない場合は、デフォルトで DefaultExchangeFormatter になります。 | ExchangeFormatter |
37.4. エンドポイントオプション
ログエンドポイントは、URI 構文を使用して設定されます。
log:loggerName
パスおよびクエリーパラメーターを使用します。
37.4.1. パスパラメーター(1 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
loggerName (producer) | 必須 使用するロギングカテゴリーの名前。 | String |
37.4.2. クエリーパラメーター (27 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
groupActiveOnly (producer) | true の場合、新しいメッセージが一定期間受信されていない場合に統計を非表示にします。false の場合、メッセージトラフィックに関係なく統計を表示します。 | true | Boolean |
groupDelay (producer) | 統計の初期遅延を設定します (ミリ秒単位)。 | Long | |
groupInterval (producer) | 指定すると、この時間間隔 (ミリ秒単位) でメッセージ統計がグループ化されます。 | Long | |
groupSize (producer) | スループットログのグループサイズを指定する整数。 | Integer | |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
level (producer) | 使用するロギングレベル。デフォルト値は INFO です。 列挙値:
| INFO | String |
logMask (producer) | true の場合、ログ内のパスワードやパスフレーズなどの機密情報をマスクします。 | Boolean | |
marker (producer) | 使用するオプションのマーカー名。 | String | |
exchangeFormatter (上級) | カスタム Exchange フォーマッタを使用するには。 | ExchangeFormatter | |
maxChars (フォーマット) | 1 行に記録される文字数を制限します。 | 10000 | int |
multiline (formatting) | 有効にすると、各情報が改行で出力されます。 | false | boolean |
showAll (書式設定) | すべてのオプションをオンにするためのクイックオプション。(複数行、maxChars を使用する場合は手動で設定する必要があります)。 | false | boolean |
showAllProperties (formatting) | すべての交換プロパティー (内部およびカスタムの両方) を表示します。 | false | boolean |
showBody (formatting) | メッセージ本文を表示します。 | true | boolean |
showBodyType (formatting) | 本文の Java タイプを表示します。 | true | boolean |
showCaughtException (formatting) | 交換でキャッチされた例外がある場合は、例外メッセージを表示します (スタックトレースなし)。キャッチされた例外は、エクスチェンジのプロパティーとして保存され (キー org.apache.camel.Exchange#EXCEPTION_CAUGHT を使用)、たとえば doCatch は例外をキャッチできます。 | false | boolean |
showException (フォーマット) | 交換に例外がある場合は、例外メッセージを表示します (スタックトレースなし)。 | false | boolean |
showExchangeId (formatting) | 一意の取引所 ID を表示します。 | false | boolean |
showExchangePattern (formatting) | メッセージ交換パターン (略して MEP) を表示します。 | true | boolean |
showFiles (フォーマット) | 有効にすると、Camel はファイルを出力します。 | false | boolean |
showFuture (formatting) | 有効にすると、Camel は Future オブジェクトで、ログに記録されるペイロードを取得するために完了するのを待ちます。 | false | boolean |
showHeaders (formatting) | メッセージヘッダーを表示します。 | false | boolean |
showProperties (フォーマット) | 交換のプロパティーを表示します (カスタムのみ)。内部プロパティーとカスタムプロパティーの両方を表示するには、showAllProperties を使用します。 | false | boolean |
showStackTrace (formatting) | 交換に例外がある場合、スタックトレースを表示します。showAll、showException、または showCaughtException のいずれかが有効になっている場合にのみ有効です。 | false | boolean |
showStreams (formatting) | Camel がストリーム本文を表示するかどうか (例: java.io.InputStream など)。このオプションを有効にすると、ストリームがこのロガーによってすでに読み取られているため、後でメッセージ本文にアクセスできなくなる可能性があることに注意してください。これを解決するには、ストリームキャッシングを使用する必要があります。 | false | boolean |
skipBodyLineSeparator (formatting) | メッセージ本文をログに記録するときに行区切りをスキップするかどうか。これにより、メッセージ本文を 1 行でログに記録できます。このオプションを false に設定すると、本文の行区切りが保持され、本文がそのままログに記録されます。 | true | boolean |
style (formatting) | 使用する出力スタイルを設定します。 列挙値:
| デフォルト | OutputStyle |
37.5. 通常のロガーのサンプル
以下のルートでは、注文が処理される前に、受信した注文を DEBUG
レベルでログに記録します。
from("activemq:orders").to("log:com.mycompany.order?level=DEBUG").to("bean:processOrder");
または、Spring XML を使用してルートを定義します。
<route> <from uri="activemq:orders"/> <to uri="log:com.mycompany.order?level=DEBUG"/> <to uri="bean:processOrder"/> </route>
37.6. フォーマッターサンプル付きの通常のロガー
以下のルートでは、注文が処理される前に、受信した注文を INFO
レベルでログに記録します。
from("activemq:orders"). to("log:com.mycompany.order?showAll=true&multiline=true").to("bean:processOrder");
37.7. groupSize サンプルを使用したスループットロガー
以下のルートでは、10 個のメッセージでグループ化された DEBUG
レベルでの受注のスループットをログに記録します。
from("activemq:orders"). to("log:com.mycompany.order?level=DEBUG&groupSize=10").to("bean:processOrder");
37.8. groupInterval サンプルを使用したスループットロガー
このルートにより、10 秒ごとにログに記録されるメッセージの統計が生成されます。最初は 60 秒の遅延があり、メッセージトラフィックがない場合でも統計が表示されます。
from("activemq:orders"). to("log:com.mycompany.order?level=DEBUG&groupInterval=10000&groupDelay=60000&groupActiveOnly=false").to("bean:processOrder");
以下がログに記録されます。
"Received: 1000 new messages, with total 2000 so far. Last group took: 10000 millis which is: 100 messages per second. average: 100"
37.9. パスワードなどの機密情報のマスク
logMask
フラグを true
に設定することで、ログのセキュリティーマスキングを有効にできます。このオプションはログ EIP にも影響することに注意してください。
CamelContext レベルで Java DSL でマスクを有効にするには、以下を行います。
camelContext.setLogMask(true);
XML では次のようになります。
<camelContext logMask="true">
エンドポイントレベルでオン/オフにすることもできます。エンドポイントレベルで Java DSL のマスクを有効にするには、ログエンドポイントの URI に logMask=true オプションを追加します。
from("direct:start").to("log:foo?logMask=true");
XML では次のようになります。
<route> <from uri="direct:foo"/> <to uri="log:foo?logMask=true"/> </route>
デフォルトでは、org.apache.camel.support.processor.DefaultMaskingFormatter
がマスキングに使用されます。カスタムマスキングフォーマッタを使用する場合は、CamelCustomLogMask
という名前でレジストリーに配置します。マスキングフォーマッタは org.apache.camel.spi.MaskingFormatter
を実装する必要があることに注意してください。
37.10. ログ出力の完全なカスタマイズ
このセクションで概説したオプションを使用すると、ロガーの出力の大部分を制御できます。ただし、ログ行は常に次の構造に従います。
Exchange[Id:ID-machine-local-50656-1234567901234-1-2, ExchangePattern:InOut, Properties:{CamelToEndpoint=log://org.apache.camel.component.log.TEST?showAll=true, CamelCreatedTimestamp=Thu Mar 28 00:00:00 WET 2013}, Headers:{breadcrumbId=ID-machine-local-50656-1234567901234-1-1}, BodyType:String, Body:Hello World, Out: null]
この形式は、場合によっては不適切です。おそらく、必要があるためです…
- 出力されるヘッダーとプロパティーをフィルタリングして、洞察と冗長性のバランスをとります。
- ログメッセージを最も読みやすいと思われるものに調整します。
- 例えばSplunk などのログマイニングシステムによる消化用にログメッセージを調整します。
- 特定のボディタイプを異なる方法で印刷します。
完全なカスタマイズが必要な場合はいつでも、インターフェイスを実装するクラスを作成できます。format(Exchange)
メソッド内では、完全な Exchange にアクセスできるため、必要な正確な情報を選択して抽出し、カスタムの方法でフォーマットして返すことができます。戻り値が最終的なログメッセージになります。
次の 2 つの方法のいずれかで、Log コンポーネントにカスタム ExchangeFormatter
を取得させることができます。
レジストリーで LogComponent を明示的にインスタンス化します。
<bean name="log" class="org.apache.camel.component.log.LogComponent"> <property name="exchangeFormatter" ref="myCustomFormatter" /> </bean>
37.10.1. 設定より規約
logFormatter
という名前の Bean を登録するだけです。ログコンポーネントは、それを自動的に取得するのに十分なほどインテリジェントです。
<bean name="logFormatter" class="com.xyz.MyCustomExchangeFormatter" />
ExchangeFormatter
は 、その Camel Context 内のすべての Log エンドポイント に適用されます。エンドポイントごとに異なる ExchangeFormatters が必要な場合は、必要な回数だけ LogComponent をインスタンス化し、関連する Bean 名をエンドポイント 接頭辞として使用します。
カスタムログフォーマッタを使用する場合、カスタムログフォーマッタで設定されるログ URI にパラメーターを指定できます。ただし、その場合、logFormatter をスコープ付きのプロトタイプとして定義する必要があるため、異なるパラメーターがある場合は共有されません。たとえば、
<bean name="logFormatter" class="com.xyz.MyCustomExchangeFormatter" scope="prototype"/>
そして、さまざまなオプションでログ URI を使用して Camel ルートを作成できます。
<to uri="log:foo?param1=foo&param2=100"/> <to uri="log:bar?param1=bar&param2=200"/>
37.11. Spring Boot 自動設定
Spring Boot でログを使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-log-starter</artifactId> </dependency>
コンポーネントは、以下に記載される 4 のオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.component.log.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.log.enabled | ログコンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.log.exchange-formatter | カスタム ExchangeFormatter を設定して、Exchange をログに適した文字列に変換します。指定しない場合は、デフォルトで DefaultExchangeFormatter になります。オプションは org.apache.camel.spi.ExchangeFormatter タイプです。 | ExchangeFormatter | |
camel.component.log.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
第38章 mail
producer と consumer の両方がサポート対象
Mail コンポーネントは、Spring の Mail サポートおよび基盤となる JavaMail システムを介して電子メールへのアクセスを提供します。
Maven ユーザーは、このコンポーネントの pom.xml
に以下の依存関係を追加する必要があります。
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-mail</artifactId> <version>{CamelSBVersion}</version> <!-- use the same version as your Camel core version --> </dependency>
POP3 または IMAP
POP3 にはいくつかの制限があるため、エンドユーザーは可能であれば IMAP を使用することをお勧めします。
テスト用の模擬メールの使用
単体テストにモックフレームワークを使用できます。これにより、実際のメールサーバーを必要とせずにテストできます。ただし、実際のメールサーバーにメールを送信する必要がある本番環境やその他の環境に移行する場合は、モックメールを含めないことを忘れないでください。クラスパスに mock-javamail.jar が存在するということは、それが作動してメールの送信を回避することを意味します。
38.1. URI 形式
メールエンドポイントには、次の URI 形式のいずれかを使用できます (プロトコルはそれぞれ、SMTP、POP3、または IMAP)。
smtp://[username@]host[:port][?options] pop3://[username@]host[:port][?options] imap://[username@]host[:port][?options]
メールコンポーネントは、これらのプロトコルの安全なバリアント (SSL を介したレイヤー) もサポートします。スキームに s
を追加することで、安全なプロトコルを有効にできます。
smtps://[username@]host[:port][?options] pop3s://[username@]host[:port][?options] imaps://[username@]host[:port][?options]
38.2. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
38.2.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
38.2.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
38.3. コンポーネントオプション
Mail コンポーネントは、以下に示す 43 個のオプションをサポートしています。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
closeFolder (consumer) | ポーリング後に consumer がフォルダーを閉じる必要があるかどうか。このオプションを false に設定し、disconnect=false も設定すると、consumer はポーリング間でフォルダーを開いたままにします。 | true | boolean |
copyTo (consumer) | メールメッセージを処理した後、指定された名前のメールフォルダーにコピーできます。キー copyTo を含むヘッダーを使用して、この設定値をオーバーライドできます。これにより、実行時に設定されたフォルダー名にメッセージをコピーできます。 | String | |
decodeFilename (consumer) | true に設定すると、MimeUtility.decodeText メソッドを使用してファイル名がデコードされます。これは、JVM システムプロパティー mail.mime.encodefilename の設定に似ています。 | false | boolean |
delete (consumer) | 処理後にメッセージを削除します。これは、メールメッセージに DELETED フラグを設定することによって行われます。false の場合、代わりに SEEN フラグが設定されます。Camel 2.10 では、メールを削除するかどうかを決定するキー delete でヘッダーを設定することにより、この設定オプションをオーバーライドできます。 | false | boolean |
disconnect (consumer) | ポーリング後に consumer を切断するかどうか。有効にすると、各ポーリングで Camel が強制的に接続されます。 | false | boolean |
handleFailedMessage (consumer) | mail consumer が特定のメールメッセージを取得できない場合、このオプションを使用すると、consumer のエラーハンドラーによって発生した例外を処理できます。consumer でブリッジエラーハンドラーを有効にすると、代わりに Camel ルーティングエラーハンドラーが例外を処理できます。デフォルトの動作では、consumer が例外を出力し、バッチからのメールは Camel によってルーティングできません。 | false | boolean |
mimeDecodeHeaders (consumer) | このオプションは、メールヘッダーの透過的な MIME デコードとデプロイメントを有効にします。 | false | boolean |
moveTo (consumer) | メールメッセージを処理した後、指定された名前のメールフォルダーに移動できます。キー moveTo を含むヘッダーを使用して、この設定値をオーバーライドできます。これにより、実行時に設定されたフォルダー名にメッセージを移動できます。 | String | |
peek (consumer) | メールメッセージを処理する前に、javax.mail.Message をピークとしてマークします。これは、IMAPMessage メッセージタイプにのみ適用されます。peek を使用すると、メールはメールサーバー上で SEEN としてマークされません。これにより、Camel でエラー処理が発生した場合にメールメッセージをロールバックできます。 | true | boolean |
skipFailedMessage (consumer) | mail consumer が特定のメールメッセージを取得できない場合、このオプションを使用すると、メッセージをスキップして次のメールメッセージの取得に進むことができます。デフォルトの動作では、consumer が例外を出力し、バッチからのメールは Camel によってルーティングできません。 | false | boolean |
unseen (consumer) | 未読メールのみで制限するかどうか。 | true | boolean |
fetchSize (consumer (上級)) | ポーリング中に消費するメッセージの最大数を設定します。これは、メールボックスフォルダーに大量のメッセージが含まれている場合に、メールサーバーの過負荷を回避するために使用できます。デフォルト値の -1 は、フェッチサイズがなく、すべてのメッセージが消費されることを意味します。値を 0 に設定するのは、Camel がメッセージをまったく消費しない特殊なケースです。 | -1 | int |
folderName (consumer (上級)) | ポーリングするフォルダー。 | INBOX | String |
mapMailMessage (consumer (上級)) | Camel が受信したメールメッセージを Camel の本文/ヘッダー/添付ファイルにマップするかどうかを指定します。true に設定すると、メールメッセージの本文は Camel IN メッセージの本文にマップされ、メールヘッダーは IN ヘッダーにマップされ、添付ファイルは Camel IN 添付メッセージにマップされます。このオプションが false に設定されている場合、IN メッセージには生の javax.mail.Message が含まれます。exchange.getIn ().getBody (javax.mail.Message.class) を呼び出して、この生のメッセージを取得できます。 | true | boolean |
bcc (producer) | BCC メールアドレスを設定します。複数の電子メールアドレスはコンマで区切ります。 | String | |
cc (producer) | CC メールアドレスを設定します。複数の電子メールアドレスはコンマで区切ります。 | String | |
from (producer) | 差出人の電子メールアドレス。 | camel@localhost | String |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
replyTo (producer) | Reply-To 受信者 (応答メールの受信者)。複数のメールアドレスはコンマで区切ります。 | String | |
subject (producer) | 送信されるメッセージの件名。注: ヘッダーに件名を設定すると、このオプションよりも優先されます。 | String | |
to (producer) | 宛先メールアドレスを設定します。複数の電子メールアドレスはコンマで区切ります。 | String | |
javaMailSender (producer (上級)) | メールの送信にカスタム org.apache.camel.component.mail.JavaMailSender を使用するには。 | JavaMailSender | |
additionalJavaMailProperties (上級) | 他のすべてのオプションに基づいて設定されたデフォルトプロパティーを追加/オーバーライドする追加の Java メールプロパティーを設定します。これは、いくつかの特別なオプションを追加する必要があるが、他のオプションはそのままにしておきたい場合に便利です。 | プロパティー | |
alternativeBodyHeader (上級) | 代替電子メール本文を含む IN メッセージヘッダーのキーを指定します。たとえば、メールを text/html 形式で送信し、HTML 以外のメールクライアントに代替メール本文を提供する場合は、このキーをヘッダーとして使用して代替メール本文を設定します。 | CamelMailAlternativeBody | String |
attachmentsContentTransferEncodingResolver (上級) | カスタムの AttachmentsContentTransferEncodingResolver を使用して、添付ファイルに使用する content-type-encoding を解決するには。 | AttachmentsContentTransferEncodingResolver | |
authenticator (上級) | ログインのオーセンティケーター。設定すると、パスワードとユーザー名は無視されます。有効期限が切れる可能性があるため、動的に読み取る必要があるトークンに使用できます。 | MailAuthenticator | |
autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
configuration (上級) | メール設定を設定します。 | MailConfiguration | |
connectionTimeout (上級) | ミリ秒単位の接続タイムアウト。 | 30000 | int |
contentType (上級) | メールメッセージのコンテンツタイプ。HTML メールには text/html を使用します。 | text/plain | String |
contentTypeResolver (上級) | 添付の Content-Type を決定するリゾルバー。 | ContentTypeResolver | |
debugMode (上級) | 基礎となるメールフレームワークでデバッグモードを有効にします。SUN メールフレームワークは、デフォルトでデバッグメッセージを System.out に記録します。 | false | boolean |
ignoreUnsupportedCharset (上級) | メール送信時にローカル JVM でサポートされていない文字セットを Camel が無視できるようにするオプション。文字セットがサポートされていない場合は、charset=XXX (XXX はサポートされていない文字セットを表す) が content-type から削除され、代わりにプラットフォームのデフォルトに依存します。 | false | boolean |
ignoreUriScheme (上級) | メール送信時にローカル JVM でサポートされていない文字セットを Camel が無視できるようにするオプション。文字セットがサポートされていない場合は、charset=XXX (XXX はサポートされていない文字セットを表す) が content-type から削除され、代わりにプラットフォームのデフォルトに依存します。 | false | boolean |
javaMailProperties (上級) | Java メールオプションを設定します。デフォルトのプロパティーをすべてクリアし、このメソッドに提供されているプロパティーのみを使用します。 | プロパティー | |
session (上級) | camel がすべてのメールインタラクションに使用するメールセッションを指定します。メールセッションが JavaEE コンテナーなどの他のリソースによって作成および管理されるシナリオで役立ちます。カスタムメールセッションを使用する場合、メールセッションのホスト名とポートが使用されます (セッションで設定されている場合)。 | Session | |
useInlineAttachments (上級) | ディスポジションインラインまたは添付を使用するかどうか。 | false | boolean |
headerFilterStrategy (filter) | カスタムの org.apache.camel.spi.HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルターします。 | HeaderFilterStrategy | |
password (セキュリティー) | ログイン用のパスワード。setAuthenticator (MailAuthenticator) も参照してください。 | String | |
sslContextParameters (security) | SSLContextParameters を使用してセキュリティーを設定する場合。 | SSLContextParameters | |
useGlobalSslContextParameters (security) | グローバル SSL コンテキストパラメーターの使用を有効にします。 | false | boolean |
username (セキュリティー) | ログイン用のユーザー名。setAuthenticator (MailAuthenticator) も参照してください。 | String |
38.4. エンドポイントオプション
Mail エンドポイントは、URI 構文を使用して設定されます。
imap:host:port
パスおよびクエリーパラメーターを使用します。
38.4.1. パスパラメーター (2 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
host (共通) | 必須 メールサーバーのホスト名。 | String | |
port (共通) | メールサーバーのポート番号。 | int |
38.4.2. クエリーパラメーター (66 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
closeFolder (consumer) | ポーリング後に consumer がフォルダーを閉じる必要があるかどうか。このオプションを false に設定し、disconnect=false も設定すると、consumer はポーリング間でフォルダーを開いたままにします。 | true | boolean |
copyTo (consumer) | メールメッセージを処理した後、指定された名前のメールフォルダーにコピーできます。キー copyTo を含むヘッダーを使用して、この設定値をオーバーライドできます。これにより、実行時に設定されたフォルダー名にメッセージをコピーできます。 | String | |
decodeFilename (consumer) | true に設定すると、MimeUtility.decodeText メソッドを使用してファイル名がデコードされます。これは、JVM システムプロパティー mail.mime.encodefilename の設定に似ています。 | false | boolean |
delete (consumer) | 処理後にメッセージを削除します。これは、メールメッセージに DELETED フラグを設定することによって行われます。false の場合、代わりに SEEN フラグが設定されます。Camel 2.10 では、メールを削除するかどうかを決定するキー delete でヘッダーを設定することにより、この設定オプションをオーバーライドできます。 | false | boolean |
disconnect (consumer) | ポーリング後に consumer を切断するかどうか。有効にすると、各ポーリングで Camel が強制的に接続されます。 | false | boolean |
handleFailedMessage (consumer) | mail consumer が特定のメールメッセージを取得できない場合、このオプションを使用すると、consumer のエラーハンドラーによって発生した例外を処理できます。consumer でブリッジエラーハンドラーを有効にすると、代わりに Camel ルーティングエラーハンドラーが例外を処理できます。デフォルトの動作では、consumer が例外を出力し、バッチからのメールは Camel によってルーティングできません。 | false | boolean |
maxMessagesPerPoll (consumer) | ポーリングごとに収集するメッセージの最大数を指定します。デフォルトでは最大値は設定されていません。サーバーの起動時に数千のファイルをダウンロードしないように、たとえば 1000 の制限を設定するために使用できます。このオプションを無効にするには、0 または負の値を設定します。 | int | |
mimeDecodeHeaders (consumer) | このオプションは、メールヘッダーの透過的な MIME デコードとデプロイメントを有効にします。 | false | boolean |
moveTo (consumer) | メールメッセージを処理した後、指定された名前のメールフォルダーに移動できます。キー moveTo を含むヘッダーを使用して、この設定値をオーバーライドできます。これにより、実行時に設定されたフォルダー名にメッセージを移動できます。 | String | |
peek (consumer) | メールメッセージを処理する前に、javax.mail.Message をピークとしてマークします。これは、IMAPMessage メッセージタイプにのみ適用されます。peek を使用すると、メールはメールサーバー上で SEEN としてマークされません。これにより、Camel でエラー処理が発生した場合にメールメッセージをロールバックできます。 | true | boolean |
sendEmptyMessageWhenIdle (consumer) | ポーリング consumer がファイルをポーリングしなかった場合、このオプションを有効にして、代わりに空のメッセージ (ボディーなし) を送信できます。 | false | boolean |
skipFailedMessage (consumer) | mail consumer が特定のメールメッセージを取得できない場合、このオプションを使用すると、メッセージをスキップして次のメールメッセージの取得に進むことができます。デフォルトの動作では、consumer が例外を出力し、バッチからのメールは Camel によってルーティングできません。 | false | boolean |
unseen (consumer) | 未読メールのみで制限するかどうか。 | true | boolean |
exceptionHandler (consumer (上級)) | consumer によるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、consumer は例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
exchangePattern (consumer (上級)) | consumer がエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
fetchSize (consumer (上級)) | ポーリング中に消費するメッセージの最大数を設定します。これは、メールボックスフォルダーに大量のメッセージが含まれている場合に、メールサーバーの過負荷を回避するために使用できます。デフォルト値の -1 は、フェッチサイズがなく、すべてのメッセージが消費されることを意味します。値を 0 に設定するのは、Camel がメッセージをまったく消費しない特殊なケースです。 | -1 | int |
folderName (consumer (上級)) | ポーリングするフォルダー。 | INBOX | String |
mailUidGenerator (consumer (上級)) | カスタムロジックを使用してメールメッセージの UUID を生成できるプラグ可能な MailUidGenerator。 | MailUidGenerator | |
mapMailMessage (consumer (上級)) | Camel が受信したメールメッセージを Camel の本文/ヘッダー/添付ファイルにマップするかどうかを指定します。true に設定すると、メールメッセージの本文は Camel IN メッセージの本文にマップされ、メールヘッダーは IN ヘッダーにマップされ、添付ファイルは Camel IN 添付メッセージにマップされます。このオプションが false に設定されている場合、IN メッセージには生の javax.mail.Message が含まれます。exchange.getIn ().getBody (javax.mail.Message.class) を呼び出して、この生のメッセージを取得できます。 | true | boolean |
pollStrategy (consumer (上級)) | プラグ可能な org.apache.camel.PollingConsumerPollingStrategy を使用すると、エクスチェンジが作成され、Camel でルーティングされる前に、通常はポーリング操作中に発生するエラー処理を制御するカスタム実装が提供できます。 | PollingConsumerPollStrategy | |
postProcessAction (consumer (上級)) | 通常の処理が終了したら、メールボックスで後処理タスクを実行するための MailBoxPostProcessAction を参照します。 | MailBoxPostProcessAction | |
bcc (producer) | BCC メールアドレスを設定します。複数の電子メールアドレスはコンマで区切ります。 | String | |
cc (producer) | CC メールアドレスを設定します。複数の電子メールアドレスはコンマで区切ります。 | String | |
from (producer) | 差出人の電子メールアドレス。 | camel@localhost | String |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
replyTo (producer) | Reply-To 受信者 (応答メールの受信者)。複数のメールアドレスはコンマで区切ります。 | String | |
subject (producer) | 送信されるメッセージの件名。注: ヘッダーに件名を設定すると、このオプションよりも優先されます。 | String | |
to (producer) | 宛先メールアドレスを設定します。複数の電子メールアドレスはコンマで区切ります。 | String | |
javaMailSender (producer (上級)) | メールの送信にカスタム org.apache.camel.component.mail.JavaMailSender を使用するには。 | JavaMailSender | |
additionalJavaMailProperties (上級) | 他のすべてのオプションに基づいて設定されたデフォルトプロパティーを追加/オーバーライドする追加の Java メールプロパティーを設定します。これは、いくつかの特別なオプションを追加する必要があるが、他のオプションはそのままにしておきたい場合に便利です。 | プロパティー | |
alternativeBodyHeader (上級) | 代替電子メール本文を含む IN メッセージヘッダーのキーを指定します。たとえば、メールを text/html 形式で送信し、HTML 以外のメールクライアントに代替メール本文を提供する場合は、このキーをヘッダーとして使用して代替メール本文を設定します。 | CamelMailAlternativeBody | String |
attachmentsContentTransferEncodingResolver (上級) | カスタムの AttachmentsContentTransferEncodingResolver を使用して、添付ファイルに使用する content-type-encoding を解決するには。 | AttachmentsContentTransferEncodingResolver | |
authenticator (上級) | ログインのオーセンティケーター。設定すると、パスワードとユーザー名は無視されます。有効期限が切れる可能性があるため、動的に読み取る必要があるトークンに使用できます。 | MailAuthenticator | |
binding (上級) | Camel メッセージと Mail メッセージの間の変換に使用されるバインディングを設定します。 | MailBinding | |
connectionTimeout (上級) | ミリ秒単位の接続タイムアウト。 | 30000 | int |
contentType (上級) | メールメッセージのコンテンツタイプ。HTML メールには text/html を使用します。 | text/plain | String |
contentTypeResolver (上級) | 添付の Content-Type を決定するリゾルバー。 | ContentTypeResolver | |
debugMode (上級) | 基礎となるメールフレームワークでデバッグモードを有効にします。SUN メールフレームワークは、デフォルトでデバッグメッセージを System.out に記録します。 | false | boolean |
headerFilterStrategy (上級) | カスタム org.apache.camel.spi.HeaderFilterStrategy を使用してヘッダーをフィルタリングするには。 | HeaderFilterStrategy | |
ignoreUnsupportedCharset (上級) | メール送信時にローカル JVM でサポートされていない文字セットを Camel が無視できるようにするオプション。文字セットがサポートされていない場合は、charset=XXX (XXX はサポートされていない文字セットを表す) が content-type から削除され、代わりにプラットフォームのデフォルトに依存します。 | false | boolean |
ignoreUriScheme (上級) | メール送信時にローカル JVM でサポートされていない文字セットを Camel が無視できるようにするオプション。文字セットがサポートされていない場合は、charset=XXX (XXX はサポートされていない文字セットを表す) が content-type から削除され、代わりにプラットフォームのデフォルトに依存します。 | false | boolean |
javaMailProperties (上級) | Java メールオプションを設定します。デフォルトのプロパティーをすべてクリアし、このメソッドに提供されているプロパティーのみを使用します。 | プロパティー | |
session (上級) | camel がすべてのメールインタラクションに使用するメールセッションを指定します。メールセッションが JavaEE コンテナーなどの他のリソースによって作成および管理されるシナリオで役立ちます。カスタムメールセッションを使用する場合、メールセッションのホスト名とポートが使用されます (セッションで設定されている場合)。 | Session | |
useInlineAttachments (上級) | ディスポジションインラインまたは添付を使用するかどうか。 | false | boolean |
idempotentRepository (filter) | プラグイン可能なリポジトリー org.apache.camel.spi.IdempotentRepository により、同じメールボックスからのクラスター消費が可能になり、consumer が処理するメールメッセージが有効かどうかをリポジトリーで調整できます。デフォルトでは、リポジトリーは使用されていません。 | IdempotentRepository | |
idempotentRepositoryRemoveOnCommit (filter) | べき等リポジトリーを使用している場合、メールメッセージが正常に処理されてコミットされると、メッセージ ID がべき等リポジトリーから削除されるか (デフォルト)、リポジトリーに保持されます。デフォルトでは、メッセージ ID は一意であり、リポジトリーに保持する値がないと想定されます。これは、メールメッセージが閲覧済み、移動済み、または削除済みとしてマークされ、再度消費されるのを防ぐためです。したがって、メッセージ ID を冪等リポジトリーに格納してもほとんど価値がありません。ただし、このオプションを使用すると、何らかの理由でメッセージ ID を保存できます。 | true | boolean |
searchTerm (filter) | 件名、本文、送信元、特定の日付以降に送信されたものなどの検索条件に基づいてメールをフィルタリングできる javax.mail.search.SearchTerm を参照します。 | SearchTerm | |
backoffErrorThreshold (scheduler) | backoffMultipler が開始する前に発生する必要がある後続のエラーポーリング (エラーによって失敗した) の数。 | int | |
backoffIdleThreshold (scheduler) | backoffMultipler が開始する前に発生する必要がある後続のアイドルポーリングの数。 | int | |
backoffMultiplier (scheduler) | 後続のアイドル状態/エラーが連続して発生した場合に、スケジュールされたポーリング consumer のバックオフを許可します。乗数は、実際に次の試行が行われる前にスキップされるポーリングの数です。このオプションが使用されている場合は、backoffIdleThreshold や backoffErrorThreshold も設定する必要があります。 | int | |
delay (scheduler) | 次のポーリングまでの時間 (ミリ秒単位)。 | 60000 | long |
greedy (scheduler) | greedy が有効で、以前の実行が 1 つ以上のメッセージをポーリングした場合、ScheduledPollConsumer は即座に再度実行されます。 | false | boolean |
initialDelay (scheduler) | 最初のポーリングが開始されるまでの時間 (ミリ秒単位)。 | 1000 | long |
repeatCount (スケジューラー) | 実行の最大数を指定します。そのため、これを 1 に設定するとスケジューラーは 1 度だけ実行されます。これを 5 に設定した場合、5 回だけ実行されます。0 または負の値を設定すると、無制限に実行されます。 | 0 | long |
runLoggingLevel (scheduler) | consumer はポーリング時に開始/完了のログ行を記録します。このオプションを使用すると、ログレベルを設定できます。 列挙値:
| TRACE | LoggingLevel |
scheduledExecutorService (scheduler) | consumer に使用するカスタム/共有スレッドプールを設定できます。デフォルトでは、各 consumer に独自の単一スレッドのスレッドプールがあります。 | ScheduledExecutorService | |
scheduler (スケジューラー) | camel-spring または camel-quartz コンポーネントから cron スケジューラーを使用します。スケジューラーにビルドされた値 spring または quartz を使用。 | none | オブジェクト |
schedulerProperties (スケジューラー) | カスタムスケジューラーまたは Quartz や Spring ベースのスケジューラーを使用する場合に、追加のプロパティーを設定します。 | マップ | |
startScheduler (scheduler) | スケジューラーを自動起動するかどうか。 | true | boolean |
timeUnit (scheduler) | initialDelay および delay オプションの時間単位。 列挙値:
| MILLISECONDS | TimeUnit |
useFixedDelay (scheduler) | 固定遅延または固定レートを使用するかどうかを制御します。詳細は、JDK の ScheduledExecutorService を参照してください。 | true | boolean |
password (セキュリティー) | ログイン用のパスワード。setAuthenticator (MailAuthenticator) も参照してください。 | String | |
sslContextParameters (security) | SSLContextParameters を使用してセキュリティーを設定する場合。 | SSLContextParameters | |
username (セキュリティー) | ログイン用のユーザー名。setAuthenticator (MailAuthenticator) も参照してください。 | String | |
sortTerm (並べ替え) | メッセージのソート順。IMAP でのみネイティブにサポートされています。POP3 を使用する場合、または IMAP サーバーに SORT 機能がない場合に、ある程度エミュレートされます。 | SortTerm[] |
38.4.3. サンプルエンドポイント
通常、次のようにログイン認証情報を含む URI を指定します (例として SMTP を取り上げます)。
smtp://[username@]host[:port][?password=somepwd]
または、ユーザー名とパスワードの両方をクエリーオプションとして指定することもできます。
smtp://host[:port]?password=somepwd&username=someuser
以下に例を示します。
smtp://mycompany.mailserver:30?password=tiger&username=scott
38.4.4. コンポーネントのエイリアス名
- IMAP
- IMAPs
- POP3s
- SMTP
- SMTPs
38.4.5. デフォルトのポート
デフォルトのポート番号がサポートされています。ポート番号が省略された場合、Camel はプロトコルに基づいて使用するポート番号を決定します。
Protocol | デフォルトのポート番号 |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
38.5. SSL サポート
基礎となるメールフレームワークは、SSL サポートの提供を担当します。必要な Java Mail API 設定オプションを完全に指定して SSL/TLS サポートを設定するか、コンポーネントまたはエンドポイント設定を通じて設定済みの SSLContextParameters を提供することができます。
38.5.1. JSSE 設定ユーティリティーの使用
メールコンポーネントは、Camel JSSE Configuration Utility を介して SSL/TLS 設定をサポートします。このユーティリティーは、記述する必要があるコンポーネント固有のコードの量を大幅に削減し、エンドポイントおよびコンポーネントレベルで設定できます。次の例は、メールコンポーネントでユーティリティーを使用する方法を示しています。
エンドポイントのプログラムによる設定
KeyStoreParameters ksp = new KeyStoreParameters(); ksp.setResource("/users/home/server/truststore.jks"); ksp.setPassword("keystorePassword"); TrustManagersParameters tmp = new TrustManagersParameters(); tmp.setKeyStore(ksp); SSLContextParameters scp = new SSLContextParameters(); scp.setTrustManagers(tmp); Registry registry = ... registry.bind("sslContextParameters", scp); ... from(...) .to("smtps://smtp.google.com?username=user@gmail.com&password=password&sslContextParameters=#sslContextParameters");
エンドポイントの Spring DSL ベースの設定
... <camel:sslContextParameters id="sslContextParameters"> <camel:trustManagers> <camel:keyStore resource="/users/home/server/truststore.jks" password="keystorePassword"/> </camel:trustManagers> </camel:sslContextParameters>... ... <to uri="smtps://smtp.google.com?username=user@gmail.com&password=password&sslContextParameters=#sslContextParameters"/>...
38.5.2. JavaMail を直接設定する
Camel は Jakarta JavaMail を使用します。これは、よく知られている認証局 (デフォルトの JVM 信頼設定) によって発行された証明書のみを信頼します。独自の証明書を発行する場合は、CA 証明書を JVM の Java 信頼/キーストアファイルにインポートし、デフォルトの JVM 信頼/キーストアファイルを上書きする必要があります (詳細については、JavaMail の SSLNOTES.txt
を参照してください)。
38.6. メールメッセージの内容
Camel は、メッセージ交換の IN 本文を MimeMessage テキストコンテンツとして使用します。ボディは String.class に変換されます。
Camel は、交換のすべての IN ヘッダーを MimeMessage ヘッダーにコピーします。
MimeMessage の件名は、IN メッセージのヘッダープロパティーを使用して設定できます。以下のコードはこれを示しています。
同じことが受信者などの他の MimeMessage ヘッダーにも当てはまるため、ヘッダープロパティーを To として使用できます。
MailProducer を使用してメールをサーバーに送信する場合、Camel メッセージヘッダーからキー CamelMailMessageId を使用して MimeMessage のメッセージ ID を取得できるはずです。
38.7. ヘッダーは事前設定された受信者よりも優先されます
メッセージヘッダーで指定された受信者は、エンドポイント URI で事前設定された受信者より常に優先されます。アイデアは、メッセージヘッダーに受信者を指定すると、それが得られるというものです。エンドポイント URI で事前設定された受信者は、フォールバックとして扱われます。
以下のサンプルコードでは、電子メールメッセージは davsclaus@apache.org
に送信されます。これは、事前設定された受信者 info@mycompany.com
よりも優先されるためです。エンドポイント URI の CC
および BCC
設定も無視され、それらの受信者はメールを受信しません。ヘッダーと事前設定された設定の選択は、すべてかゼロ か です。メールコンポーネントは、受信者をヘッダーから排他的に取得するか、事前設定済みの設定から排他的に取得します。ヘッダーと事前設定済みの設定を混在させることはできません。
Map<String, Object> headers = new HashMap<String, Object>(); headers.put("to", "davsclaus@apache.org"); template.sendBodyAndHeaders("smtp://admin@localhost?to=info@mycompany.com", "Hello World", headers);
38.8. 設定を容易にする複数の受信者
コンマ区切りまたはセミコロン区切りのリストを使用して、複数の受信者を設定できます。これは、ヘッダー設定とエンドポイント URI の設定の両方に適用されます。以下に例を示します。
Map<String, Object> headers = new HashMap<String, Object>(); headers.put("to", "davsclaus@apache.org ; jstrachan@apache.org ; ningjiang@apache.org");
前の例では、セミコロン ;
を使用しています。、区切り文字として。
38.9. 送信者名と電子メールの設定
name <email>
の形式で受信者を指定して、受信者の名前と電子メールアドレスの両方を含めることができます。
たとえば、メッセージで次のヘッダーを定義します。
Map headers = new HashMap(); map.put("To", "Claus Ibsen <davsclaus@apache.org>"); map.put("From", "James Strachan <jstrachan@apache.org>"); map.put("Subject", "Camel is cool");
38.10. JavaMail API (ex SUN JavaMail)
JavaMail API は、メールの消費と生成のために内部で使用されます。エンドユーザーが POP3 または IMAP プロトコルを使用する場合は、これらのリファレンスを参照することをお勧めします。特に、POP3 の機能セットは IMAP よりもはるかに限定されていることに注意してください。
- JavaMail POP3 API
- JavaMail IMAP API
- そして、一般的に MAIL フラグ について
38.11. サンプル
JMS キューから受信したメッセージを電子メールとして送信する単純なルートから始めます。電子メールアカウントは mymailserver.com
の admin
アカウントです。
from("jms://queue:subscription").to("smtp://admin@mymailserver.com?password=secret");
次のサンプルでは、毎分 1 回メールボックスをポーリングして新しい電子メールを探します。
from("imap://admin@mymailserver.com?password=secret&unseen=true&delay=60000") .to("seda://mails");
38.12. 添付ファイル付きメール送信サンプル
アタッチメントはすべての Camel コンポーネントでサポートされているわけではありません
添付ファイル API は Java Activation Framework に基づいており、通常はメール API でのみ使用されます。他の Camel コンポーネントの多くはアタッチメントをサポートしていないため、アタッチメントがルートに沿って伝播するにつれて、アタッチメントが失われる可能性があります。したがって、経験則として、メールエンドポイントにメッセージを送信する直前に添付を追加します。
メールコンポーネントは添付をサポートしています。以下のサンプルでは、ロゴファイルが添付されたプレーンテキストメッセージを含むメールメッセージを送信します。
38.13. SSL サンプル
このサンプルでは、Google メールの受信トレイでメールをポーリングします。メールをローカルメールクライアントにダウンロードするには、Google メールで SSL を有効にして設定する必要があります。これを行うには、Google メールアカウントにログインし、設定を変更して IMAP アクセスを許可します。Google には、これを行う方法に関する広範なドキュメントがあります。
from("imaps://imap.gmail.com?username=YOUR_USERNAME@gmail.com&password=YOUR_PASSWORD" + "&delete=false&unseen=true&delay=60000").to("log:newmail");
上記のルートは、毎分 1 回、Google メールの受信トレイに新しいメールがないかどうかをポーリングし、受信したメッセージを newmail
ロガーカテゴリーに記録します。DEBUG
ログを有効にしてサンプルを実行すると、ログで進行状況を監視できます。
2008-05-08 06:32:09,640 DEBUG MailConsumer - Connecting to MailStore imaps//imap.gmail.com:993 (SSL enabled), folder=INBOX 2008-05-08 06:32:11,203 DEBUG MailConsumer - Polling mailfolder: imaps//imap.gmail.com:993 (SSL enabled), folder=INBOX 2008-05-08 06:32:11,640 DEBUG MailConsumer - Fetching 1 messages. Total 1 messages. 2008-05-08 06:32:12,171 DEBUG MailConsumer - Processing message: messageNumber=[332], from=[James Bond <007@mi5.co.uk>], to=YOUR_USERNAME@gmail.com], subject=[... 2008-05-08 06:32:12,187 INFO newmail - Exchange[MailMessage: messageNumber=[332], from=[James Bond <007@mi5.co.uk>], to=YOUR_USERNAME@gmail.com], subject=[...
38.14. 添付ファイル付きメールの利用例
このサンプルでは、メールボックスをポーリングし、メールのすべての添付ファイルをファイルとして保存します。まず、メールボックスをポーリングするルートを定義します。このサンプルは Google メールに基づいているため、SSL サンプルに示されているのと同じルートを使用します。
from("imaps://imap.gmail.com?username=YOUR_USERNAME@gmail.com&password=YOUR_PASSWORD" + "&delete=false&unseen=true&delay=60000").process(new MyMailProcessor());
メールをログに記録する代わりに、Java コードからメールを処理できるプロセッサーを使用します。
public void process(Exchange exchange) throws Exception { // the API is a bit clunky so we need to loop AttachmentMessage attachmentMessage = exchange.getMessage(AttachmentMessage.class); Map<String, DataHandler> attachments = attachmentMessage.getAttachments(); if (attachments.size() > 0) { for (String name : attachments.keySet()) { DataHandler dh = attachments.get(name); // get the file name String filename = dh.getName(); // get the content and convert it to byte[] byte[] data = exchange.getContext().getTypeConverter() .convertTo(byte[].class, dh.getInputStream()); // write the data to a file FileOutputStream out = new FileOutputStream(filename); out.write(data); out.flush(); out.close(); } } }
ご覧のとおり、添付を処理するための API は少し不格好ですが、javax.activation.DataHandler
を取得できるので、標準 API を使用して添付を処理できます。
38.15. 添付ファイル付きのメールメッセージを分割する方法
この例では、多数の添付ファイルを含む可能性のあるメールメッセージを使用します。やりたいことは、個々の添付ファイルごとにスプリッタ EIP を使用して、添付ファイルを個別に処理することです。たとえば、メールメッセージに 5 つの添付ファイルがある場合、Splitter は、それぞれに 1 つの添付ファイルを持つ 5 つのメッセージを処理する必要があります。これを行うには、単一の添付ファイルを持つ 5 つのメッセージを含む List<Message> を提供するスプリッターにカスタム式を提供する必要があります。
このコードは、camel-mail
コンポーネントの Camel 2.10 以降でそのまま提供されます。コードはクラス: org.apache.camel.component.mail.SplitAttachmentsExpression
にあり、ソースコードは こちら にあります。
Camel ルートでは、次に示すようにルートでこの式を使用する必要があります。
XML DSL を使用する場合は、以下に示すように、Splitter でメソッド呼び出し式を宣言する必要があります。
<split> <method beanType="org.apache.camel.component.mail.SplitAttachmentsExpression"/> <to uri="mock:split"/> </split>
添付ファイルをバイト[]として分割して、メッセージ本文として保存することもできます。これは、ブール値 true で式を作成することによって行われます
SplitAttachmentsExpression split = SplitAttachmentsExpression(true);
次に、式をスプリッター EIP で使用します。
38.16. カスタム SearchTerm の使用
MailEndpoint
で searchTerm
を設定して、不要なメールを除外することができます。
たとえば、件名または本文に Camel が含まれるようにメールをフィルタリングするには、次のようにします。
<route> <from uri="imaps://mymailseerver?username=foo&password=secret&searchTerm.subjectOrBody=Camel"/> <to uri="bean:myBean"/> </route>
"searchTerm.subjectOrBody"
をパラメーターキーとして使用して、"Camel" という単語を含むメールの件名または本文を検索することを示していることに注意してください。
クラス org.apache.camel.component.mail.SimpleSearchTerm
には、設定可能な多くのオプションがあります。
または、目に見えない新しいメールを 24 時間さかのぼって取得することもできます。"now-24h" 構文に注意してください。詳細については、下の表を参照してください。
<route> <from uri="imaps://mymailseerver?username=foo&password=secret&searchTerm.fromSentDate=now-24h"/> <to uri="bean:myBean"/> </route>
エンドポイント uri 設定に複数の searchTerm を含めることができます。次に、AND 演算子を使用してそれらを結合します。たとえば、両方の条件が一致する必要があります。たとえば、メールの件名に Camel が含まれる 24 時間前にさかのぼる最後の未読メールを取得するには、次のようにします。
<route> <from uri="imaps://mymailseerver?username=foo&password=secret&searchTerm.subject=Camel&searchTerm.fromSentDate=now-24h"/> <to uri="bean:myBean"/> </route>
SimpleSearchTerm
は POJO から簡単に設定できるように設計されているため、XML の <bean> スタイルを使用して設定することもできます。
<bean id="mySearchTerm" class="org.apache.camel.component.mail.SimpleSearchTerm"> <property name="subject" value="Order"/> <property name="to" value="acme-order@acme.com"/> <property name="fromSentDate" value="now"/> </bean>
次に示すように、Camel ルートで #beanId を使用して、この Bean を参照できます。
<route> <from uri="imaps://mymailseerver?username=foo&password=secret&searchTerm=#mySearchTerm"/> <to uri="bean:myBean"/> </route>
Java には、org.apache.camel.component.mail.SearchTermBuilder
クラスを使用して複合 SearchTerms
を構築するビルダークラスがあります。これにより、次のような複雑な用語を作成できます。
// we just want the unseen mails which is not spam SearchTermBuilder builder = new SearchTermBuilder(); builder.unseen().body(Op.not, "Spam").subject(Op.not, "Spam") // which was sent from either foo or bar .from("foo@somewhere.com").from(Op.or, "bar@somewhere.com"); // .. and we could continue building the terms SearchTerm term = builder.build();
38.17. ポーリングの最適化
パラメーター maxMessagePerPoll と fetchSize を使用すると、各ポーリングで処理するメッセージの数を制限できます。これらのパラメーターは、大量のメッセージを含むフォルダーを操作する際のパフォーマンスの低下を防ぐのに役立ちます。以前のバージョンでは、これらのパラメーターの評価が遅すぎたため、メールボックスが大きいと依然としてパフォーマンスの問題が発生する可能性がありました。Camel 3.1 では、これらの問題を回避するために、これらのパラメーターがポーリング中に早期に評価されます。
38.18. 追加の Java Mail Sender プロパティーでヘッダーを使用する
メールを送信する場合、Exchange から JavaMailSender
の動的な Java メールプロパティーを、java.smtp.
で始まるキーを持つメッセージヘッダーとして提供できます。
Java Mail ドキュメントにある java.smtp
プロパティーのいずれかを設定できます。
たとえば、java.smtp.from
(SMTP MAIL コマンド) で動的 uuid を提供するには:
.setHeader("from", constant("reply2me@foo.com")); .setHeader("java.smtp.from", method(UUID.class, "randomUUID")); .to("smtp://mymailserver:1234");
これは、カスタム JavaMailSender
を使用して いない 場合にのみサポートされます。
38.19. Spring Boot 自動設定
Spring Boot で imap を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-mail-starter</artifactId> </dependency>
コンポーネントは、以下に記載される 50 のオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.component.mail.additional-java-mail-properties | 他のすべてのオプションに基づいて設定されたデフォルトプロパティーを追加/オーバーライドする追加の Java メールプロパティーを設定します。これは、いくつかの特別なオプションを追加する必要があるが、他のオプションはそのままにしておきたい場合に便利です。オプションは java.util.Properties タイプです。 | プロパティー | |
camel.component.mail.alternative-body-header | 代替電子メール本文を含む IN メッセージヘッダーのキーを指定します。たとえば、メールを text/html 形式で送信し、HTML 以外のメールクライアントに代替メール本文を提供する場合は、このキーをヘッダーとして使用して代替メール本文を設定します。 | CamelMailAlternativeBody | String |
camel.component.mail.attachments-content-transfer-encoding-resolver | カスタムの AttachmentsContentTransferEncodingResolver を使用して、添付ファイルに使用する content-type-encoding を解決するには。オプションは org.apache.camel.component.mail.AttachmentsContentTransferEncodingResolver タイプです。 | AttachmentsContentTransferEncodingResolver | |
camel.component.mail.authenticator | ログインのオーセンティケーター。設定すると、パスワードとユーザー名は無視されます。有効期限が切れる可能性があるため、動的に読み取る必要があるトークンに使用できます。オプションは org.apache.camel.component.mail.MailAuthenticator タイプです。 | MailAuthenticator | |
camel.component.mail.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.mail.bcc | BCC メールアドレスを設定します。複数の電子メールアドレスはコンマで区切ります。 | String | |
camel.component.mail.bridge-error-handler | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | Boolean |
camel.component.mail.cc | CC メールアドレスを設定します。複数の電子メールアドレスはコンマで区切ります。 | String | |
camel.component.mail.close-folder | ポーリング後に consumer がフォルダーを閉じる必要があるかどうか。このオプションを false に設定し、disconnect=false も設定すると、consumer はポーリング間でフォルダーを開いたままにします。 | true | Boolean |
camel.component.mail.configuration | メール設定を設定します。オプションは org.apache.camel.component.mail.MailConfiguration タイプです。 | MailConfiguration | |
camel.component.mail.connection-timeout | ミリ秒単位の接続タイムアウト。 | 30000 | Integer |
camel.component.mail.content-type | メールメッセージのコンテンツタイプ。HTML メールには text/html を使用します。 | text/plain | String |
camel.component.mail.content-type-resolver | 添付の Content-Type を決定するリゾルバー。オプションは org.apache.camel.component.mail.ContentTypeResolver タイプです。 | ContentTypeResolver | |
camel.component.mail.copy-to | メールメッセージを処理した後、指定された名前のメールフォルダーにコピーできます。キー copyTo を含むヘッダーを使用して、この設定値をオーバーライドできます。これにより、実行時に設定されたフォルダー名にメッセージをコピーできます。 | String | |
camel.component.mail.debug-mode | 基礎となるメールフレームワークでデバッグモードを有効にします。SUN メールフレームワークは、デフォルトでデバッグメッセージを System.out に記録します。 | false | Boolean |
camel.component.mail.decode-filename | true に設定すると、MimeUtility.decodeText メソッドを使用してファイル名がデコードされます。これは、JVM システムプロパティー mail.mime.encodefilename の設定に似ています。 | false | Boolean |
camel.component.mail.delete | 処理後にメッセージを削除します。これは、メールメッセージに DELETED フラグを設定することによって行われます。false の場合、代わりに SEEN フラグが設定されます。Camel 2.10 では、メールを削除するかどうかを決定するキー delete でヘッダーを設定することにより、この設定オプションをオーバーライドできます。 | false | Boolean |
camel.component.mail.disconnect | ポーリング後に consumer を切断するかどうか。有効にすると、各ポーリングで Camel が強制的に接続されます。 | false | Boolean |
camel.component.mail.enabled | mail コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.mail.fetch-size | ポーリング中に消費するメッセージの最大数を設定します。これは、メールボックスフォルダーに大量のメッセージが含まれている場合に、メールサーバーの過負荷を回避するために使用できます。デフォルト値の -1 は、フェッチサイズがなく、すべてのメッセージが消費されることを意味します。値を 0 に設定するのは、Camel がメッセージをまったく消費しない特殊なケースです。 | -1 | Integer |
camel.component.mail.folder-name | ポーリングするフォルダー。 | INBOX | String |
camel.component.mail.from | 差出人の電子メールアドレス。 | camel@localhost | String |
camel.component.mail.handle-failed-message | mail consumer が特定のメールメッセージを取得できない場合、このオプションを使用すると、consumer のエラーハンドラーによって発生した例外を処理できます。consumer でブリッジエラーハンドラーを有効にすると、代わりに Camel ルーティングエラーハンドラーが例外を処理できます。デフォルトの動作では、consumer が例外を出力し、バッチからのメールは Camel によってルーティングできません。 | false | Boolean |
camel.component.mail.header-filter-strategy | カスタムの org.apache.camel.spi.HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルターします。このオプションは org.apache.camel.spi.HeaderFilterStrategy タイプです。 | HeaderFilterStrategy | |
camel.component.mail.ignore-unsupported-charset | メール送信時にローカル JVM でサポートされていない文字セットを Camel が無視できるようにするオプション。文字セットがサポートされていない場合は、charset=XXX (XXX はサポートされていない文字セットを表す) が content-type から削除され、代わりにプラットフォームのデフォルトに依存します。 | false | Boolean |
camel.component.mail.ignore-uri-scheme | メール送信時にローカル JVM でサポートされていない文字セットを Camel が無視できるようにするオプション。文字セットがサポートされていない場合は、charset=XXX (XXX はサポートされていない文字セットを表す) が content-type から削除され、代わりにプラットフォームのデフォルトに依存します。 | false | Boolean |
camel.component.mail.java-mail-properties | Java メールオプションを設定します。デフォルトのプロパティーをすべてクリアし、このメソッドに提供されているプロパティーのみを使用します。オプションは java.util.Properties タイプです。 | プロパティー | |
camel.component.mail.java-mail-sender | メールの送信にカスタム org.apache.camel.component.mail.JavaMailSender を使用するには。オプションは org.apache.camel.component.mail.JavaMailSender タイプです。 | JavaMailSender | |
camel.component.mail.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
camel.component.mail.map-mail-message | Camel が受信したメールメッセージを Camel の本文/ヘッダー/添付ファイルにマップするかどうかを指定します。true に設定すると、メールメッセージの本文は Camel IN メッセージの本文にマップされ、メールヘッダーは IN ヘッダーにマップされ、添付ファイルは Camel IN 添付メッセージにマップされます。このオプションが false に設定されている場合、IN メッセージには生の javax.mail.Message が含まれます。exchange.getIn ().getBody (javax.mail.Message.class) を呼び出して、この生のメッセージを取得できます。 | true | Boolean |
camel.component.mail.mime-decode-headers | このオプションは、メールヘッダーの透過的な MIME デコードとデプロイメントを有効にします。 | false | Boolean |
camel.component.mail.move-to | メールメッセージを処理した後、指定された名前のメールフォルダーに移動できます。キー moveTo を含むヘッダーを使用して、この設定値をオーバーライドできます。これにより、実行時に設定されたフォルダー名にメッセージを移動できます。 | String | |
camel.component.mail.password | ログイン用のパスワード。setAuthenticator (MailAuthenticator) も参照してください。 | String | |
camel.component.mail.peek | メールメッセージを処理する前に、javax.mail.Message をピークとしてマークします。これは、IMAPMessage メッセージタイプにのみ適用されます。peek を使用すると、メールはメールサーバー上で SEEN としてマークされません。これにより、Camel でエラー処理が発生した場合にメールメッセージをロールバックできます。 | true | Boolean |
camel.component.mail.reply-to | Reply-To 受信者 (応答メールの受信者)。複数のメールアドレスはコンマで区切ります。 | String | |
camel.component.mail.session | camel がすべてのメールインタラクションに使用するメールセッションを指定します。メールセッションが JavaEE コンテナーなどの他のリソースによって作成および管理されるシナリオで役立ちます。カスタムメールセッションを使用する場合、メールセッションのホスト名とポートが使用されます (セッションで設定されている場合)。オプションは javax.mail.Session タイプです。 | Session | |
camel.component.mail.skip-failed-message | mail consumer が特定のメールメッセージを取得できない場合、このオプションを使用すると、メッセージをスキップして次のメールメッセージの取得に進むことができます。デフォルトの動作では、consumer が例外を出力し、バッチからのメールは Camel によってルーティングできません。 | false | Boolean |
camel.component.mail.ssl-context-parameters | SSLContextParameters を使用してセキュリティーを設定する場合。オプションは org.apache.camel.support.jsse.SSLContextParameters タイプです。 | SSLContextParameters | |
camel.component.mail.subject | 送信されるメッセージの件名。注: ヘッダーに件名を設定すると、このオプションよりも優先されます。 | String | |
camel.component.mail.to | 宛先メールアドレスを設定します。複数の電子メールアドレスはコンマで区切ります。 | String | |
camel.component.mail.unseen | 未読メールのみで制限するかどうか。 | true | Boolean |
camel.component.mail.use-global-ssl-context-parameters | グローバル SSL コンテキストパラメーターの使用を有効にします。 | false | Boolean |
camel.component.mail.use-inline-attachments | ディスポジションインラインまたは添付ファイルを使用するかどうか。 | false | Boolean |
camel.component.mail.username | ログイン用のユーザー名。setAuthenticator (MailAuthenticator) も参照してください。 | String | |
camel.dataformat.mime-multipart.binary-content | MIME マルチパートのバイナリーパートのコンテンツがバイナリー (true) か Base-64 エンコード (false) かを定義します。デフォルトは false です。 | false | Boolean |
camel.dataformat.mime-multipart.enabled | mime-multipart データ形式の自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.dataformat.mime-multipart.headers-inline | MIME-Multipart ヘッダーがメッセージ本文の一部であるか (true)、Camel ヘッダーとして設定されているか (false) を定義します。デフォルトは false です。 | false | Boolean |
camel.dataformat.mime-multipart.include-headers | MIME マルチパートに MIME ヘッダーとして含まれる Camel ヘッダーを定義する正規表現。これは、headersInline が true に設定されている場合にのみ機能します。デフォルトでは、ヘッダーは含まれません。 | String | |
camel.dataformat.mime-multipart.multipart-sub-type | MIME マルチパートのサブタイプを指定します。デフォルトは混合です。 | mixed | String |
camel.dataformat.mime-multipart.multipart-without-attachment | 添付のないメッセージも MIME マルチパート (ボディパーツが 1 つだけ) にマーシャリングされるかどうかを定義します。デフォルトは false です。 | false | Boolean |
第39章 Microsoft Oauth のメール
Camel 3.18.4 以降
メール Microsoft OAuth2 は、org.apache.camel.component.mail.MailAuthenticator
の実装を提供して、IMAP/POP/SMTP 接続を認証し、Spring のメールサポートと基盤となる JavaMail システムを介してメールにアクセスします。
このコンポーネントの pom.xml
に次の依存関係を追加します。
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-mail-microsoft-oauth</artifactId> <version>3.20.1.redhat-00031</version> <!-- use the same version as your Camel core version --> </dependency>
camel-mail-microsoft-oauth
をインポートすると、camel-mail コンポーネントが自動的にインポートされます。
39.1. Microsoft Exchange Online OAuth2 Mail Authenticator IMAP サンプル
OAuth を使用するには、アプリケーションを Azure Active Directory に登録する必要があります。指示に従って、新しいアプリケーションを登録します。
手順
- アプリケーションがクライアントクレデンシャルフローを介して Exchange メールボックスにアクセスできるようにします。詳細については、OAuth を使用して IMAP、POP、または SMTP 接続を認証する を参照してください。
-
すべての設定が完了したら、レジストリーで
org.apache.camel.component.mail.MicrosoftExchangeOnlineOAuth2MailAuthenticator
のインスタンスを宣言して登録します。 - たとえば、Spring Boot アプリケーションでは次のようになります。
@BindToRegistry("auth") public MicrosoftExchangeOnlineOAuth2MailAuthenticator exchangeAuthenticator(){ return new MicrosoftExchangeOnlineOAuth2MailAuthenticator(tenantId, clientId, clientSecret, "jon@doe.com"); }
- 次に、Camel URI で次のように参照します。
from("imaps://outlook.office365.com:993" + "?authenticator=#auth" + "&mail.imaps.auth.mechanisms=XOAUTH2" + "&debugMode=true" + "&delete=false")
第40章 MapStruct
Camel 3.19 以降
producer のみサポート対象。
camel-mapstruct コンポーネントは、を使用して POJO を変換するために使用されます。
40.1. URI 形式
mapstruct:className[?options]
className
は、変換先の POJO の完全修飾クラス名です。
40.2. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
40.2.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
40.2.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
40.3. コンポーネントオプション
MapStruct コンポーネントは、以下に示す 4 つのオプションをサポートしています。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
mapperPackageName (producer) | 必須 Camel が Mapstruct マッピングクラスを検出する必要のあるパッケージ名。複数のパッケージ名をコンマで区切ることができます。 | 文字列 | |
autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
mapStructConverter (上級) | Autowired 特別なランタイムへの適応など、カスタム MapStructConverter を使用します。 | MapStructMapperFinder |
40.4. エンドポイントオプション
MapStruct エンドポイントは、URI 構文を使用して設定されます。
mapstruct:className
パスおよびクエリーパラメーターを使用します。
40.4.1. パスパラメーター(1 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
className (producer) | 必須 mapstruct が変換する POJO の完全修飾クラス名 (ターゲット)。 | 文字列 |
40.4.2. クエリーパラメーター (2 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
mandatory (producer) | POJO に変換する mapstruct コンバーターが存在する必要があるかどうか。 | true | boolean |
lazyStartProducer (producer (上級)) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
40.5. MapStruct のセットアップ
camel-mapstruct コンポーネントは、クラスパススキャン MapStruct Mapper
クラスのために、1 つ以上のパッケージ名で設定する必要があります。これが必要なのは、Mapper
クラスが MapStruct で POJO を変換するために使用されるためです。
たとえば、2 つのパッケージをセットアップするには、次のようにします。
MapstructComponent mc = context.getComponent("mapstruct", MapstructComponent.class); mc.setMapperPackageName("com.foo.mapper,com.bar.mapper");
これは application.properties
で設定することもできます:
camel.component.mapstruct.mapper-package-name = com.foo.mapper,com.bar.mapper
Camel は起動時にこれらのパッケージをスキャンして、名前が Mapper
で終わるクラスを探します。次に、これらのクラスをイントロスペクトして、マッピングメソッドを検出します。これらのマッピングメソッドは、Camel レジストリーに登録されます。これは、型コンバーターを使用して、次のように MapStruct で POJO を変換することもできることを意味します。
from("direct:foo") .convertBodyTo(MyFooDto.class);
MyFooDto
は、MapStruct が変換できる POJO です。
40.6. Spring Boot 自動設定
Spring Boot で mapstruct を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-mapstruct-starter</artifactId> </dependency>
コンポーネントは、以下に示す 5 個のオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.component.mapstruct.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.mapstruct.enabled | mapstruct コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.mapstruct.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
camel.component.mapstruct.map-struct-converter | 特別なランタイムへの適応など、カスタム MapStructConverter を使用するため。オプションは org.apache.camel.component.mapstruct.MapStructMapperFinder タイプです。 | MapStructMapperFinder | |
camel.component.mapstruct.mapper-package-name | Camel が Mapstruct マッピングクラスを検出する必要があるパッケージ名。複数のパッケージ名をコンマで区切ることができます。 | 文字列 |
第41章 マスター
consumer のみがサポートされている
Camel-Master エンドポイントは、クラスター内の単一の consumer のみが特定のエンドポイントから消費するようにする方法を提供します。その JVM が停止した場合の自動フェイルオーバー。
これは、同時消費をサポートしていないレガシーバックエンドから消費する必要がある場合、または商業的または安定性の理由により、任意の時点で 1 つの接続しか持てない場合に非常に役立ちます。
41.1. マスターエンドポイントの使用
camel エンドポイントの前に master:someName: を付けるだけです。ここで、someName は論理名であり、マスターロックを取得するために使用されます。例えば
from("master:cheese:jms:foo").to("activemq:wine");
この例では、マスターコンポーネントによって、ルートがクラスター内の任意の時点で 1 つのノードでのみアクティブになることが保証されます。したがって、クラスターに 8 つのノードがある場合、マスターコンポーネントは 1 つのルートをリーダーとして選択し、このルートのみがアクティブになるため、このルートのみが jms:foo
からのメッセージを消費します。このルートが停止または予期せず終了した場合、マスターコンポーネントはこれを検出し、アクティブになる別のノードを再選択します。その後、アクティブになり、jms:foo
からのメッセージの消費を開始します。
Apache ActiveMQ 5.x には、Exclusive Consumers と呼ばれるすぐに使える機能があります。
41.2. URI 形式
master:namespace:endpoint[?options]
endpoint は、マスター/スレーブモードで実行する任意の Camel エンドポイントです。
41.3. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
41.3.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
41.3.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
41.4. コンポーネントオプション
マスターコンポーネントは、以下に示す 4 つのオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
service (上級) | 使用するサービスを注入します。 | CamelClusterService | |
serviceSelector (上級) | 使用する CamelClusterService を検索するために使用されるサービスセレクターを挿入します。 | セレクター |
41.5. エンドポイントオプション
マスターエンドポイントは、URI 構文を使用して設定されます。
master:namespace:delegateUri
パスおよびクエリーパラメーターを使用します。
41.5.1. パスパラメーター (2 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
namespace (consumer) | 必須 使用するクラスター名前空間の名前。 | String | |
delegateUri (consumer) | 必須 マスター/スレーブモードで使用するエンドポイント uri。 | String |
41.5.2. クエリーパラメーター (3 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
exceptionHandler (consumer (上級)) | consumer によるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、consumer は例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
exchangePattern (consumer (上級)) | consumer がエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern |
41.6. 例
クラスター化された Camel アプリケーションを保護して、1 つのアクティブノードからのファイルのみを消費することができます。
// the file endpoint we want to consume from String url = "file:target/inbox?delete=true"; // use the camel master component in the clustered group named myGroup // to run a master/slave mode in the following Camel url from("master:myGroup:" + url) .log(name + " - Received file: ${file:name}") .delay(delay) .log(name + " - Done file: ${file:name}") .to("file:target/outbox");
マスターコンポーネントは、次を使用して設定できる CamelClusterService を活用します。
Java
ZooKeeperClusterService service = new ZooKeeperClusterService(); service.setId("camel-node-1"); service.setNodes("myzk:2181"); service.setBasePath("/camel/cluster"); context.addService(service)
Xml (Spring/ブループリント)
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd"> <bean id="cluster" class="org.apache.camel.component.zookeeper.cluster.ZooKeeperClusterService"> <property name="id" value="camel-node-1"/> <property name="basePath" value="/camel/cluster"/> <property name="nodes" value="myzk:2181"/> </bean> <camelContext xmlns="http://camel.apache.org/schema/spring" autoStartup="false"> ... </camelContext> </beans>
Spring boot
camel.component.zookeeper.cluster.service.enabled = true camel.component.zookeeper.cluster.service.id = camel-node-1 camel.component.zookeeper.cluster.service.base-path = /camel/cluster camel.component.zookeeper.cluster.service.nodes = myzk:2181
41.7. 実装
Camel は、次の ClusterService 実装を提供します。
- camel-consul
- camel-file
- camel-infinispan
- camel-jgroups-raft
- camel-jgroups
- camel-kubernetes
- camel-zookeeper
41.8. Spring Boot 自動設定
Spring Boot で master を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-master-starter</artifactId> </dependency>
コンポーネントは、以下に示す 5 個のオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.component.master.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.master.bridge-error-handler | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | Boolean |
camel.component.master.enabled | マスターコンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.master.service | 使用するサービスを注入します。オプションは org.apache.camel.cluster.CamelClusterService タイプです。 | CamelClusterService | |
camel.component.master.service-selector | 使用する CamelClusterService を検索するために使用されるサービスセレクターを挿入します。オプションは org.apache.camel.cluster.CamelClusterService.Selector タイプです。 | CamelClusterService$Selector |
第42章 Minio
Since Camel 3.5
producer と consumer の両方がサポート対象
Minio コンポーネントは、Minio サービスとの間でのオブジェクトの保存と取得をサポートします。
42.1. 前提条件
バケット/フォルダーへのアクセスを承認するには、有効な認証情報が必要です。詳細は、Minio を参照してください。
42.2. URI 形式
minio://bucketName[?options]
バケットがまだ存在しない場合は作成されます。URI には、次の形式でクエリーオプションを追加できます。
?options=value&option2=value&…
たとえば、バケット helloBucket
からファイル hello.txt
を読み取るには、次のスニペットを使用します。
from("minio://helloBucket?accessKey=yourAccessKey&secretKey=yourSecretKey&prefix=hello.txt") .to("file:/var/downloaded");
42.3. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
42.3.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
42.3.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
42.4. コンポーネントオプション
Minio コンポーネントは、以下に示す 47 個のオプションをサポートしています。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
autoCreateBucket (共通) | バケット名が存在しない場合のバケットの自動作成の設定。 | true | boolean |
configuration (共通) | コンポーネントの設定。 | MinioConfiguration | |
customHttpClient (共通) | 認証済みアクセス用のカスタム HTTP クライアントを設定します。 | OkHttpClient | |
エンドポイント (共通) | エンドポイントには、URL、ドメイン名、IPv4 アドレス、または IPv6 アドレスを指定できます。 | String | |
minioClient (共通) | レジストリー内の Minio Client オブジェクトへの Autowired 参照。 | MinioClient | |
objectLock (共通) | バケットの新規作成時に設定します。 | false | boolean |
policy (共通) | メソッドで設定するこのキューのポリシー。 | String | |
proxyPort (共通) | TCP/IP ポート番号。HTTP と HTTPS のデフォルトとして 80 と 443 が使用されます。 | Integer | |
region (共通) | Minio クライアントが動作する必要がある地域。このパラメーターを使用する場合、設定はリージョンの小文字の名前 (ap-east-1 など) を想定します。Region.EU_WEST_1.id() という名前を使用する必要があります。 | String | |
secure (共通) | minio サービスへのセキュアな接続を使用するかどうかを示すフラグ。 | false | boolean |
serverSideEncryption (共通) | サーバー側の暗号化。 | ServerSideEncryption | |
serverSideEncryptionCustomerKey (共通) | オブジェクトのコピー/移動中のソースオブジェクトのサーバー側暗号化。 | ServerSideEncryptionCustomerKey | |
autoCloseBody (consumer) | このオプションが true で、includeBody が true の場合、エクスチェンジの完了時に MinioObject.close() メソッドが呼び出されます。このオプションは includeBody オプションと密接に関係しています。includeBody を true に設定し、autocloseBody を false に設定した場合、MinioObject ストリームを閉じるのは呼び出し元次第です。autocloseBody を true に設定すると、MinioObject ストリームが自動的に閉じられます。 | true | boolean |
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
bypassGovernanceMode (consumer) | 特定のオブジェクトを削除するときに GovernanceMode をバイパスする場合は、このフラグを設定します。 | false | boolean |
deleteAfterRead (consumer) | オブジェクトが取得された後、Minio からオブジェクトを削除します。削除は、エクスチェンジがコミットされた場合にのみ実行されます。ロールバックが発生すると、オブジェクトは削除されません。このオプションが false の場合、同じオブジェクトがポーリングで繰り返し取得されます。そのため、ルートで Idempotent Consumer EIP を使用して重複を除外する必要があります。MinioConstants#BUCKET_NAME および MinioConstants#OBJECT_NAME ヘッダー、または MinioConstants#OBJECT_NAME ヘッダーのみを使用してフィルタリングできます。 | true | boolean |
delimiter (consumer) | 関心のあるオブジェクトのみを使用するために ListObjectsRequest で使われる区切り文字。 | String | |
destinationBucketName (consumer) | ソースバケット名。 | String | |
destinationObjectName (consumer) | ソースオブジェクト名。 | String | |
includeBody (consumer) | true の場合、エクスチェンジ本文はファイルの内容へのストリームに設定されます。false の場合、ヘッダーには Minio オブジェクトのメタデータが設定されますが、本文は null になります。このオプションは、autocloseBody オプションと密接に関係します。includeBody を true に設定し、autocloseBody を false に設定した場合、MinioObject ストリームを閉じるのは呼び出し元次第です。autocloseBody を true に設定すると、MinioObject ストリームが自動的に閉じられます。 | true | boolean |
includeFolders (consumer) | インクルードフォルダーを設定するために ListObjectsRequest で使用されるフラグ。 | false | boolean |
includeUserMetadata (consumer) | ユーザーメタデータを持つオブジェクトを取得するために ListObjectsRequest で使用されるフラグ。 | false | boolean |
includeVersions (consumer) | バージョン管理されたオブジェクトを取得するために ListObjectsRequest で使用されるフラグ。 | false | boolean |
length (consumer) | オフセットからのオブジェクトデータのバイト数。 | long | |
matchETag (consumer) | get オブジェクトの一致 ETag パラメーターを設定します。 | String | |
maxConnections (consumer) | minio クライアント設定で maxConnections パラメーターを設定します。 | 60 | int |
maxMessagesPerPoll (consumer) | 各ポーリングのポーリング制限としてメッセージの最大数を取得します。各ポーリングのポーリング制限としてメッセージの最大数を取得します。デフォルト値は 10 です。0 または負の値を使用すると、無制限として設定されます。 | 10 | int |
modifiedSince (consumer) | get オブジェクトの modified since パラメーターを設定します。 | ZonedDateTime | |
moveAfterRead (consumer) | オブジェクトの取得後にバケットから別のバケットに移動します。操作を実行するには、destinationBucket オプションを設定する必要があります。copy bucket 操作は、エクスチェンジがコミットされた場合にのみ実行されます。ロールバックが発生した場合、オブジェクトは移動しません。 | false | boolean |
notMatchETag (consumer) | get オブジェクトの一致しない ETag パラメーターを設定します。 | String | |
objectName (consumer) | 指定されたオブジェクト名でバケットからオブジェクトを取得します。 | String | |
offset (consumer) | オブジェクトデータの開始バイト位置。 | long | |
prefix (consumer) | オブジェクト名は接頭辞で始まります。 | String | |
recursive (consumer) | ディレクトリー構造エミュレーションよりも再帰的にリストします。 | false | boolean |
startAfter (consumer) | このオブジェクト名の後にバケット内のオブジェクトをリストします。 | String | |
unModifiedSince (consumer) | オブジェクトを取得するためのパラメーターを un modified since に設定します。 | ZonedDateTime | |
useVersion1 (consumer) | true の場合、REST API のバージョン 1 が使用されます。 | false | boolean |
versionId (consumer) | オブジェクトを削除するときに、オブジェクトの特定の version_ID を設定します。 | String | |
deleteAfterWrite (producer) | Minio ファイルがアップロードされた後、ファイルオブジェクトを削除します。 | false | boolean |
keyName (producer) | endpoint パラメーター経由でバケットの要素のキー名を設定します。 | String | |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
operation (producer) | ユーザーがアップロードだけをしたくない場合に行う操作。 列挙値:
| MinioOperations | |
pojoRequest (producer) | POJO リクエストをボディーとして使用するかどうか。 | false | boolean |
storageClass (producer) | リクエストで設定するストレージクラス。 | String | |
autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
accessKey (セキュリティー) | Amazon AWS シークレットアクセスキーまたは Minio アクセスキー。設定されていない場合、camel は匿名アクセスのためにサービスに接続します。 | String | |
secretKey (セキュリティー) | Amazon AWS アクセスキー ID または Minio シークレットキー。設定されていない場合、camel は匿名アクセスのためにサービスに接続します。 | String |
42.5. エンドポイントオプション
Minio エンドポイントは、URI 構文を使用して設定されます。
minio:bucketName
パスおよびクエリーパラメーターを使用します。
42.5.1. パスパラメーター(1 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
bucketName (共通) | 必須の バケット名。 | String |
42.5.2. クエリーパラメーター(63 パラメーター):
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
autoCreateBucket (共通) | バケット名が存在しない場合のバケットの自動作成の設定。 | true | boolean |
customHttpClient (共通) | 認証済みアクセス用のカスタム HTTP クライアントを設定します。 | OkHttpClient | |
エンドポイント (共通) | エンドポイントには、URL、ドメイン名、IPv4 アドレス、または IPv6 アドレスを指定できます。 | String | |
minioClient (共通) | レジストリー内の Minio Client オブジェクトへの Autowired 参照。 | MinioClient | |
objectLock (共通) | バケットの新規作成時に設定します。 | false | boolean |
policy (共通) | メソッドで設定するこのキューのポリシー。 | String | |
proxyPort (共通) | TCP/IP ポート番号。HTTP と HTTPS のデフォルトとして 80 と 443 が使用されます。 | Integer | |
region (共通) | Minio クライアントが動作する必要がある地域。このパラメーターを使用する場合、設定はリージョンの小文字の名前 (ap-east-1 など) を想定します。Region.EU_WEST_1.id() という名前を使用する必要があります。 | String | |
secure (共通) | minio サービスへのセキュアな接続を使用するかどうかを示すフラグ。 | false | boolean |
serverSideEncryption (共通) | サーバー側の暗号化。 | ServerSideEncryption | |
serverSideEncryptionCustomerKey (共通) | オブジェクトのコピー/移動中のソースオブジェクトのサーバー側暗号化。 | ServerSideEncryptionCustomerKey | |
autoCloseBody (consumer) | このオプションが true で、includeBody が true の場合、エクスチェンジの完了時に MinioObject.close() メソッドが呼び出されます。このオプションは includeBody オプションと密接に関係しています。includeBody を true に設定し、autocloseBody を false に設定した場合、MinioObject ストリームを閉じるのは呼び出し元次第です。autocloseBody を true に設定すると、MinioObject ストリームが自動的に閉じられます。 | true | boolean |
bypassGovernanceMode (consumer) | 特定のオブジェクトを削除するときに GovernanceMode をバイパスする場合は、このフラグを設定します。 | false | boolean |
deleteAfterRead (consumer) | オブジェクトが取得された後、Minio からオブジェクトを削除します。削除は、エクスチェンジがコミットされた場合にのみ実行されます。ロールバックが発生すると、オブジェクトは削除されません。このオプションが false の場合、同じオブジェクトがポーリングで繰り返し取得されます。そのため、ルートで Idempotent Consumer EIP を使用して重複を除外する必要があります。MinioConstants#BUCKET_NAME および MinioConstants#OBJECT_NAME ヘッダー、または MinioConstants#OBJECT_NAME ヘッダーのみを使用してフィルタリングできます。 | true | boolean |
delimiter (consumer) | 関心のあるオブジェクトのみを使用するために ListObjectsRequest で使われる区切り文字。 | String | |
destinationBucketName (consumer) | ソースバケット名。 | String | |
destinationObjectName (consumer) | ソースオブジェクト名。 | String | |
includeBody (consumer) | true の場合、エクスチェンジ本文はファイルの内容へのストリームに設定されます。false の場合、ヘッダーには Minio オブジェクトのメタデータが設定されますが、本文は null になります。このオプションは、autocloseBody オプションと密接に関係します。includeBody を true に設定し、autocloseBody を false に設定した場合、MinioObject ストリームを閉じるのは呼び出し元次第です。autocloseBody を true に設定すると、MinioObject ストリームが自動的に閉じられます。 | true | boolean |
includeFolders (consumer) | インクルードフォルダーを設定するために ListObjectsRequest で使用されるフラグ。 | false | boolean |
includeUserMetadata (consumer) | ユーザーメタデータを持つオブジェクトを取得するために ListObjectsRequest で使用されるフラグ。 | false | boolean |
includeVersions (consumer) | バージョン管理されたオブジェクトを取得するために ListObjectsRequest で使用されるフラグ。 | false | boolean |
length (consumer) | オフセットからのオブジェクトデータのバイト数。 | long | |
matchETag (consumer) | get オブジェクトの一致 ETag パラメーターを設定します。 | String | |
maxConnections (consumer) | minio クライアント設定で maxConnections パラメーターを設定します。 | 60 | int |
maxMessagesPerPoll (consumer) | 各ポーリングのポーリング制限としてメッセージの最大数を取得します。各ポーリングのポーリング制限としてメッセージの最大数を取得します。デフォルト値は 10 です。0 または負の値を使用すると、無制限として設定されます。 | 10 | int |
modifiedSince (consumer) | get オブジェクトの modified since パラメーターを設定します。 | ZonedDateTime | |
moveAfterRead (consumer) | オブジェクトの取得後にバケットから別のバケットに移動します。操作を実行するには、destinationBucket オプションを設定する必要があります。copy bucket 操作は、エクスチェンジがコミットされた場合にのみ実行されます。ロールバックが発生した場合、オブジェクトは移動しません。 | false | boolean |
notMatchETag (consumer) | get オブジェクトの一致しない ETag パラメーターを設定します。 | String | |
objectName (consumer) | 指定されたオブジェクト名でバケットからオブジェクトを取得します。 | String | |
offset (consumer) | オブジェクトデータの開始バイト位置。 | long | |
prefix (consumer) | オブジェクト名は接頭辞で始まります。 | String | |
recursive (consumer) | ディレクトリー構造エミュレーションよりも再帰的にリストします。 | false | boolean |
sendEmptyMessageWhenIdle (consumer) | ポーリング consumer がファイルをポーリングしなかった場合、このオプションを有効にして、代わりに空のメッセージ (ボディーなし) を送信できます。 | false | boolean |
startAfter (consumer) | このオブジェクト名の後にバケット内のオブジェクトをリストします。 | String | |
unModifiedSince (consumer) | オブジェクトを取得するためのパラメーターを un modified since に設定します。 | ZonedDateTime | |
useVersion1 (consumer) | true の場合、REST API のバージョン 1 が使用されます。 | false | boolean |
versionId (consumer) | オブジェクトを削除するときに、オブジェクトの特定の version_ID を設定します。 | String | |
bridgeErrorHandler (consumer (上級)) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
exceptionHandler (consumer (上級)) | consumer によるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、consumer は例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
exchangePattern (consumer (上級)) | consumer がエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
pollStrategy (consumer (上級)) | プラグ可能な org.apache.camel.PollingConsumerPollingStrategy を使用すると、エクスチェンジが作成され、Camel でルーティングされる前に、通常はポーリング操作中に発生するエラー処理を制御するカスタム実装が提供できます。 | PollingConsumerPollStrategy | |
deleteAfterWrite (producer) | Minio ファイルがアップロードされた後、ファイルオブジェクトを削除します。 | false | boolean |
keyName (producer) | endpoint パラメーター経由でバケットの要素のキー名を設定します。 | String | |
operation (producer) | ユーザーがアップロードだけをしたくない場合に行う操作。 列挙値:
| MinioOperations | |
pojoRequest (producer) | POJO リクエストをボディーとして使用するかどうか。 | false | boolean |
storageClass (producer) | リクエストで設定するストレージクラス。 | String | |
lazyStartProducer (producer (上級)) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
backoffErrorThreshold (scheduler) | backoffMultipler が開始する前に発生する必要がある後続のエラーポーリング (エラーによって失敗した) の数。 | int | |
backoffIdleThreshold (scheduler) | backoffMultipler が開始する前に発生する必要がある後続のアイドルポーリングの数。 | int | |
backoffMultiplier (scheduler) | 後続のアイドル状態/エラーが連続して発生した場合に、スケジュールされたポーリング consumer のバックオフを許可します。乗数は、実際に次の試行が行われる前にスキップされるポーリングの数です。このオプションが使用されている場合は、backoffIdleThreshold や backoffErrorThreshold も設定する必要があります。 | int | |
delay (scheduler) | 次のポーリングまでの時間 (ミリ秒単位)。 | 500 | long |
greedy (scheduler) | greedy が有効で、以前の実行が 1 つ以上のメッセージをポーリングした場合、ScheduledPollConsumer は即座に再度実行されます。 | false | boolean |
initialDelay (scheduler) | 最初のポーリングが開始されるまでの時間 (ミリ秒単位)。 | 1000 | long |
repeatCount (スケジューラー) | 実行の最大数を指定します。そのため、これを 1 に設定するとスケジューラーは 1 度だけ実行されます。これを 5 に設定した場合、5 回だけ実行されます。0 または負の値を設定すると、無制限に実行されます。 | 0 | long |
runLoggingLevel (scheduler) | consumer はポーリング時に開始/完了のログ行を記録します。このオプションを使用すると、ログレベルを設定できます。 列挙値:
| TRACE | LoggingLevel |
scheduledExecutorService (scheduler) | consumer に使用するカスタム/共有スレッドプールを設定できます。デフォルトでは、各 consumer に独自の単一スレッドのスレッドプールがあります。 | ScheduledExecutorService | |
scheduler (スケジューラー) | camel-spring または camel-quartz コンポーネントから cron スケジューラーを使用します。スケジューラーにビルドされた値 spring または quartz を使用。 | none | オブジェクト |
schedulerProperties (スケジューラー) | カスタムスケジューラーまたは Quartz や Spring ベースのスケジューラーを使用する場合に、追加のプロパティーを設定します。 | マップ | |
startScheduler (scheduler) | スケジューラーを自動起動するかどうか。 | true | boolean |
timeUnit (scheduler) | initialDelay および delay オプションの時間単位。 列挙値:
| MILLISECONDS | TimeUnit |
useFixedDelay (scheduler) | 固定遅延または固定レートを使用するかどうかを制御します。詳細は、JDK の ScheduledExecutorService を参照してください。 | true | boolean |
accessKey (セキュリティー) | Amazon AWS シークレットアクセスキーまたは Minio アクセスキー。設定されていない場合、camel は匿名アクセスのためにサービスに接続します。 | String | |
secretKey (セキュリティー) | Amazon AWS アクセスキー ID または Minio シークレットキー。設定されていない場合、camel は匿名アクセスのためにサービスに接続します。 | String |
Minio にアクセスするには、レジストリーに minioClient を指定するか、accessKey と secretKey を指定する必要があります。
42.6. バッチ consumer
このコンポーネントは、Batch Consumer を実装します。
これにより、たとえば、このバッチに存在するメッセージの数を知ることができ、たとえば、Aggregator にこの数のメッセージを集約させることができます。
42.7. メッセージヘッダー
Minio コンポーネントは、以下に示す 21 個のメッセージヘッダーをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
CamelMinioBucketName (共通) 定数: BUCKET_NAME | producer: このオブジェクトが保存されるバケット名、または現在の操作に使用されるバケット名。consumer: このオブジェクトが含まれるバケットの名前。 | String | |
CamelMinioDestinationBucketName (producer) | 現在の操作に使用されるバケット宛先名。 | String | |
CamelMinioContentControl (共通) 定数: CACHE_CONTROL | producer: このオブジェクトのコンテンツコントロール。consumer: オプションの Cache-Control HTTP ヘッダー。これにより、ユーザーは HTTP 要求/応答チェーンに沿ってキャッシュ動作を指定できます。 | String | |
CamelMinioContentDisposition (共通) | producer: このオブジェクトのコンテンツの配置。consumer: オプションの Content-Disposition HTTP ヘッダー。保存するオブジェクトの推奨ファイル名などの表示情報を指定します。 | String | |
CamelMinioContentEncoding (共通) 定数: CONTENT_ENCODING | producer: このオブジェクトのコンテンツエンコーディング。consumer: オブジェクトに適用されたコンテンツエンコーディングと、Content-Type フィールドによって参照されるメディアタイプを取得するために適用する必要があるデコードメカニズムを指定する、オプションの Content-Encoding HTTP ヘッダー。 | String | |
CamelMinioContentLength (共通) 定数: CONTENT_LENGTH | Producer: このオブジェクトのコンテンツの長さ。consumer: 関連付けられたオブジェクトのサイズをバイト単位で示す Content-Length HTTP ヘッダー。 | Long | |
CamelMinioContentMD5 (共通) 定数: CONTENT_MD5 | producer: このオブジェクトの md5 チェックサム。RFC 1864 に従って、関連付けられたオブジェクト (ヘッダーを含まないコンテンツ) の base64 でエンコードされた 128 ビット MD5 ダイジェスト。このデータは、Minio が受信したデータが発信者が送信したデータと同じであることを確認するためのメッセージ整合性チェックとして使用されます。 | String | |
CamelMinioContentType (共通) 定数: CONTENT_TYPE | producer: このオブジェクトのコンテンツタイプ。consumer: 関連付けられたオブジェクトに格納されているコンテンツのタイプを示す Content-Type HTTP ヘッダー。このヘッダーの値は、標準の MIME タイプです。 | String | |
CamelMinioETag (共通) 定数: E_TAG | producer: 新しくアップロードされたオブジェクトの ETag 値。consumer: RFC 1864 に従って、関連付けられたオブジェクトの 16 進数でエンコードされた 128 ビット MD5 ダイジェスト。このデータは、呼び出し元によって受信されたデータが Minio によって送信されたデータと同じであることを確認するための整合性チェックとして使用されます。 | String | |
CamelMinioObjectName (共通) 定数: OBJECT_NAME | producer: このオブジェクトが格納されるキー、または現在の操作に使用されるキー。consumer: このオブジェクトが格納されるキー。 | String | |
CamelMinioDestinationObjectName (producer) | 現在の操作に使用される宛先キー。 | String | |
CamelMinioLastModified (共通) 定数: LAST_MODIFIED | producer: このオブジェクトの最終変更のタイムスタンプ。consumer: Last-Modified ヘッダーの値。Amazon S3 が関連付けられたオブジェクトへの変更を最後に記録した日時を示します。 | 日付 | |
CamelMinioStorageClass (producer) 定数: STORAGE_CLASS | このオブジェクトのストレージクラス。 | String | |
CamelMinioVersionId (共通) 定数: VERSION_ID | producer: 現在の操作から格納または返されるオブジェクトのバージョン ID。consumer: 関連する Minio オブジェクトのバージョン ID (利用可能な場合)。バージョン ID は、オブジェクトのバージョニングが有効になっている Minio バケットにオブジェクトがアップロードされた場合にのみ、オブジェクトに割り当てられます。 | String | |
CamelMinioCannedAcl (producer) 定数: CANNED_ACL | オブジェクトに適用される既定の ACL。許可されている値については、com.amazonaws.services.s3.model.CannedAccessControlList を参照してください。 | String | |
CamelMinioOperation (producer) 定数: MINIO_OPERATION | 実行する操作。 列挙値:
| MinioOperations | |
CamelMinioServerSideEncryption (共通) | producer: Minio が管理するキーを使用してオブジェクトを暗号化するときに、サーバー側の暗号化アルゴリズムを設定します。たとえば、AES256 を使用します。consumer: Minio マネージドキーを使用してオブジェクトを暗号化するときのサーバー側の暗号化アルゴリズム。 | String | |
CamelMinioExpirationTime (共通) 定数: EXPIRATION_TIME | 有効期限。 | String | |
CamelMinioReplicationStatus (共通) | 複製ステータス。 | String | |
CamelMinioOffset (producer) 定数: OFFSET | オフセット。 | String | |
CamelMinioLength (producer) 定数: LENGTH | 長さ。 | String |
42.7.1. Minio producer の操作
Camel-Minio コンポーネントは、producer 側で次の操作を提供します。
- copyObject
- deleteObject
- deleteObjects
- listBuckets
- deleteBucket
- listObjects
- getObject (これは MinioObject インスタンスを返します)
- getObjectRange (これは MinioObject インスタンスを返します)
42.7.2. 高度な Minio 設定
Camel アプリケーションがファイアウォールの背後で実行されている場合、または MinioClient
インスタンス設定をより詳細に制御する必要がある場合は、独自のインスタンスを作成して、Camel minio コンポーネント設定で参照できます。
from("minio://MyBucket?minioClient=#client&delay=5000&maxMessagesPerPoll=5") .to("mock:result");
42.7.3. Minio Producer 操作例
- CopyObject: この操作は、あるバケットから別のバケットにオブジェクトをコピーします
from("direct:start").process(new Processor() { @Override public void process(Exchange exchange) throws Exception { exchange.getIn().setHeader(MinioConstants.DESTINATION_BUCKET_NAME, "camelDestinationBucket"); exchange.getIn().setHeader(MinioConstants.OBJECT_NAME, "camelKey"); exchange.getIn().setHeader(MinioConstants.DESTINATION_OBJECT_NAME, "camelDestinationKey"); } }) .to("minio://mycamelbucket?minioClient=#minioClient&operation=copyObject") .to("mock:result");
この操作は、ヘッダー camelDestinationKey で表された名前を持つオブジェクトを、バケット mycamelbucket から camelDestinationBucket バケットにコピーします。
- DeleteObject: この操作は、バケットからオブジェクトを削除します
from("direct:start").process(new Processor() { @Override public void process(Exchange exchange) throws Exception { exchange.getIn().setHeader(MinioConstants.OBJECT_NAME, "camelKey"); } }) .to("minio://mycamelbucket?minioClient=#minioClient&operation=deleteObject") .to("mock:result");
この操作により、オブジェクト camelKey がバケット mycamelbucket から削除されます。
- ListBuckets: この操作は、このリージョン内のこのアカウントのバケットを一覧表示します
from("direct:start") .to("minio://mycamelbucket?minioClient=#minioClient&operation=listBuckets") .to("mock:result");
この操作は、このアカウントのバケットを一覧表示します
- DeleteBucket: この操作は、URI パラメーターまたはヘッダーとして指定されたバケットを削除します
from("direct:start") .to("minio://mycamelbucket?minioClient=#minioClient&operation=deleteBucket") .to("mock:result");
この操作により、バケット mycamelbucket が削除されます
- ListObjects: 特定のバケット内のこのオペレーションリストオブジェクト
from("direct:start") .to("minio://mycamelbucket?minioClient=#minioClient&operation=listObjects") .to("mock:result");
この操作は、mycamelbucket バケット内のオブジェクトを一覧表示します
- GetObject: この操作は、特定のバケット内の単一のオブジェクトを取得します
from("direct:start").process(new Processor() { @Override public void process(Exchange exchange) throws Exception { exchange.getIn().setHeader(MinioConstants.OBJECT_NAME, "camelKey"); } }) .to("minio://mycamelbucket?minioClient=#minioClient&operation=getObject") .to("mock:result");
このオペレーションは、mycamelbucket バケットの camelKey オブジェクトに関連する MinioObject インスタンスを返します。
- GetObjectRange: この操作は、特定のバケット内の単一のオブジェクト範囲を取得します
from("direct:start").process(new Processor() { @Override public void process(Exchange exchange) throws Exception { exchange.getIn().setHeader(MinioConstants.OBJECT_NAME, "camelKey"); exchange.getIn().setHeader(MinioConstants.OFFSET, "0"); exchange.getIn().setHeader(MinioConstants.LENGTH, "9"); } }) .to("minio://mycamelbucket?minioClient=#minioClient&operation=getObjectRange") .to("mock:result");
このオペレーションは、0 から 9 までのバイトを含む、mycamelbucket バケット内の camelKey オブジェクトに関連する MinioObject インスタンスを返します。
42.8. バケットの自動作成
オプション autoCreateBucket
を使用すると、Minio バケットが存在しない場合に、ユーザーは Minio バケットの自動作成を回避できます。このオプションのデフォルトは true
です。false に設定すると、Minio に存在しないバケットに対する操作は成功せず、エラーが返されます。
42.9. レジストリー内の Minio クライアントの自動検出
このコンポーネントは、Minio Bean がレジストリーに存在することを検出できます。そのタイプの唯一のインスタンスである場合、それはクライアントとして使用され、上記の例のように uri パラメーターとして定義する必要はありません。これは、エンドポイントのよりスマートな設定に非常に役立つ場合があります。
42.10. バケットと別のバケットの間でスタッフを移動する
一部のユーザーは、このコンポーネントの copyObject 機能を使用せずに、バケットからコンテンツを消費し、コンテンツを別のバケットに移動することを好みます。この場合、consumer の受信交換から bucketName ヘッダーを削除することを忘れないでください。そうしないと、ファイルは常に同じ元のバケットで上書きされます。
42.11. MoveAfterRead consumer オプション
deleteAfterRead に加えて、moveAfterRead という別のオプションが追加されました。このオプションを有効にすると、消費されたオブジェクトは削除されるだけでなく、ターゲットの destinationBucket に移動されます。これには、destinationBucket オプションを指定する必要があります。例として:
from("minio://mycamelbucket?minioClient=#minioClient&moveAfterRead=true&destinationBucketName=myothercamelbucket") .to("mock:result");
この場合、消費されたオブジェクトは myothercamelbucket バケットに移動され、元のバケットから削除されます (deleteAfterRead がデフォルトで true に設定されているため)。
42.12. POJO を本体として使用する
複数のオプションがあるため、Minio Request のビルドが複雑になる場合があります。POJO を本体として使用する可能性を紹介します。Minio には、送信できる複数の操作があります。たとえば、リストブローカーリクエストの場合、次のようなことができます。
from("direct:minio") .setBody(ListObjectsArgs.builder() .bucket(bucketName) .recursive(getConfiguration().isRecursive()))) .to("minio://test?minioClient=#minioClient&operation=listObjects&pojoRequest=true")
このようにして、この操作に特に関連するヘッダーやオプションを渡す必要なく、リクエストを直接渡します。
42.13. Dependencies
Maven ユーザーは、以下の依存関係を pom.xml に追加する必要があります。
pom.xml
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-minio</artifactId> <version>${camel-version}</version> </dependency>
$3.18.3
は Camel の実際のバージョンに置き換える必要があります。
42.14. Spring Boot 自動設定
Spring Boot で minio を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-minio-starter</artifactId> </dependency>
コンポーネントは、以下に記載される 48 のオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.component.minio.access-key | Amazon AWS シークレットアクセスキーまたは Minio アクセスキー。設定されていない場合、camel は匿名アクセスのためにサービスに接続します。 | String | |
camel.component.minio.auto-close-body | このオプションが true で、includeBody が true の場合、エクスチェンジの完了時に MinioObject.close() メソッドが呼び出されます。このオプションは includeBody オプションと密接に関係しています。includeBody を true に設定し、autocloseBody を false に設定した場合、MinioObject ストリームを閉じるのは呼び出し元次第です。autocloseBody を true に設定すると、MinioObject ストリームが自動的に閉じられます。 | true | Boolean |
camel.component.minio.auto-create-bucket | バケット名が存在しない場合のバケットの自動作成の設定。 | true | Boolean |
camel.component.minio.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.minio.bridge-error-handler | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | Boolean |
camel.component.minio.bypass-governance-mode | 特定のオブジェクトを削除するときに GovernanceMode をバイパスする場合は、このフラグを設定します。 | false | Boolean |
camel.component.minio.configuration | コンポーネントの設定。オプションは org.apache.camel.component.minio.MinioConfiguration タイプです。 | MinioConfiguration | |
camel.component.minio.custom-http-client | 認証済みアクセス用のカスタム HTTP クライアントを設定します。オプションは、okhttp3.OkHttpClient タイプです。 | OkHttpClient | |
camel.component.minio.delete-after-read | オブジェクトが取得された後、Minio からオブジェクトを削除します。削除は、エクスチェンジがコミットされた場合にのみ実行されます。ロールバックが発生すると、オブジェクトは削除されません。このオプションが false の場合、同じオブジェクトがポーリングで繰り返し取得されます。そのため、ルートで Idempotent Consumer EIP を使用して重複を除外する必要があります。MinioConstants#BUCKET_NAME および MinioConstants#OBJECT_NAME ヘッダー、または MinioConstants#OBJECT_NAME ヘッダーのみを使用してフィルタリングできます。 | true | Boolean |
camel.component.minio.delete-after-write | Minio ファイルがアップロードされた後、ファイルオブジェクトを削除します。 | false | Boolean |
camel.component.minio.delimiter | 関心のあるオブジェクトのみを使用するために ListObjectsRequest で使われる区切り文字。 | String | |
camel.component.minio.destination-bucket-name | ソースバケット名。 | String | |
camel.component.minio.destination-object-name | ソースオブジェクト名。 | String | |
camel.component.minio.enabled | minio コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.minio.endpoint | エンドポイントには、URL、ドメイン名、IPv4 アドレス、または IPv6 アドレスを指定できます。 | String | |
camel.component.minio.include-body | true の場合、エクスチェンジ本文はファイルの内容へのストリームに設定されます。false の場合、ヘッダーには Minio オブジェクトのメタデータが設定されますが、本文は null になります。このオプションは、autocloseBody オプションと密接に関係します。includeBody を true に設定し、autocloseBody を false に設定した場合、MinioObject ストリームを閉じるのは呼び出し元次第です。autocloseBody を true に設定すると、MinioObject ストリームが自動的に閉じられます。 | true | Boolean |
camel.component.minio.include-folders | インクルードフォルダーを設定するために ListObjectsRequest で使用されるフラグ。 | false | Boolean |
camel.component.minio.include-user-metadata | ユーザーメタデータを持つオブジェクトを取得するために ListObjectsRequest で使用されるフラグ。 | false | Boolean |
camel.component.minio.include-versions | バージョン管理されたオブジェクトを取得するために ListObjectsRequest で使用されるフラグ。 | false | Boolean |
camel.component.minio.key-name | endpoint パラメーター経由でバケットの要素のキー名を設定します。 | String | |
camel.component.minio.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
camel.component.minio.length | オフセットからのオブジェクトデータのバイト数。 | Long | |
camel.component.minio.match-e-tag | get オブジェクトの一致 ETag パラメーターを設定します。 | String | |
camel.component.minio.max-connections | minio クライアント設定で maxConnections パラメーターを設定します。 | 60 | Integer |
camel.component.minio.max-messages-per-poll | 各ポーリングのポーリング制限としてメッセージの最大数を取得します。各ポーリングのポーリング制限としてメッセージの最大数を取得します。デフォルト値は 10 です。0 または負の値を使用すると、無制限として設定されます。 | 10 | Integer |
camel.component.minio.minio-client | レジストリー内の Minio Client オブジェクトへの参照。オプションは io.minio.MinioClient タイプです。 | MinioClient | |
camel.component.minio.modified-since | get オブジェクトの modified since パラメーターを設定します。オプションは java.time.ZonedDateTime タイプです。 | ZonedDateTime | |
camel.component.minio.move-after-read | オブジェクトの取得後にバケットから別のバケットに移動します。操作を実行するには、destinationBucket オプションを設定する必要があります。copy bucket 操作は、エクスチェンジがコミットされた場合にのみ実行されます。ロールバックが発生した場合、オブジェクトは移動しません。 | false | Boolean |
camel.component.minio.not-match-e-tag | get オブジェクトの一致しない ETag パラメーターを設定します。 | String | |
camel.component.minio.object-lock | バケットの新規作成時に設定します。 | false | Boolean |
camel.component.minio.object-name | 指定されたオブジェクト名でバケットからオブジェクトを取得します。 | String | |
camel.component.minio.offset | オブジェクトデータの開始バイト位置。 | Long | |
camel.component.minio.operation | ユーザーがアップロードだけをしたくない場合に行う操作。 | MinioOperations | |
camel.component.minio.pojo-request | POJO リクエストをボディーとして使用するかどうか。 | false | Boolean |
camel.component.minio.policy | メソッドで設定するこのキューのポリシー。 | String | |
camel.component.minio.prefix | オブジェクト名は接頭辞で始まります。 | String | |
camel.component.minio.proxy-port | TCP/IP ポート番号。HTTP と HTTPS のデフォルトとして 80 と 443 が使用されます。 | Integer | |
camel.component.minio.recursive | ディレクトリー構造エミュレーションよりも再帰的にリストします。 | false | Boolean |
camel.component.minio.region | Minio クライアントが動作する必要がある地域。このパラメーターを使用する場合、設定はリージョンの小文字の名前 (ap-east-1 など) を想定します。Region.EU_WEST_1.id() という名前を使用する必要があります。 | String | |
camel.component.minio.secret-key | Amazon AWS アクセスキー ID または Minio シークレットキー。設定されていない場合、camel は匿名アクセスのためにサービスに接続します。 | String | |
camel.component.minio.secure | minio サービスへのセキュアな接続を使用するかどうかを示すフラグ。 | false | Boolean |
camel.component.minio.server-side-encryption | サーバー側の暗号化。オプションは io.minio.ServerSideEncryption タイプです。 | ServerSideEncryption | |
camel.component.minio.server-side-encryption-customer-key | オブジェクトのコピー/移動中のソースオブジェクトのサーバー側暗号化。オプションは io.minio.ServerSideEncryptionCustomerKey タイプです。 | ServerSideEncryptionCustomerKey | |
camel.component.minio.start-after | このオブジェクト名の後にバケット内のオブジェクトをリストします。 | String | |
camel.component.minio.storage-class | リクエストで設定するストレージクラス。 | String | |
camel.component.minio.un-modified-since | オブジェクトを取得するためのパラメーターを un modified since に設定します。オプションは java.time.ZonedDateTime タイプです。 | ZonedDateTime | |
camel.component.minio.use-version1 | true の場合、REST API のバージョン 1 が使用されます。 | false | Boolean |
camel.component.minio.version-id | オブジェクトを削除するときに、オブジェクトの特定の version_ID を設定します。 | String |
第43章 MLLP
producer と consumer の両方がサポート対象
MLLP コンポーネントは、MLLP プロトコルのニュアンスを処理し、医療機関が MLLP プロトコルを使用して他のシステムと通信するために必要な機能を提供するように特別に設計されています。
MLLP コンポーネントは、単純な設定 URI、自動化された HL7 確認応答生成、および自動確認応答問い合わせを提供します。
MLLP プロトコルは、通常、多数の同時 TCP 接続を使用しません。通常、1 つのアクティブな TCP 接続が使用されます。したがって、MLLP コンポーネントは、標準の Java ソケットに基づく単純な接続ごとのスレッドモデルを使用します。これにより、実装がシンプルに保たれ、Camel 自体への依存関係のみが排除されます。
コンポーネントは以下をサポートします。
- TCP サーバーを使用する Camel consumer
- TCP クライアントを使用する Camel producer
MLLP コンポーネントは byte[]
ペイロードを使用し、Camel 型変換に依存して byte[]
を他の型に変換します。
Maven ユーザーは、このコンポーネントの pom.xml に以下の依存関係を追加する必要があります。
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-mllp</artifactId> <version>{CamelSBVersion}</version> <!-- use the same version as your Camel core version --> </dependency>
43.1. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
43.1.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
43.1.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
43.2. コンポーネントオプション
MLLP コンポーネントは、以下に示す 30 のオプションをサポートしています。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
autoAck (共通) | MLLP 確認応答 MLLP consumer のみの自動生成を有効または無効にします。 | true | boolean |
charsetName (共通) | 使用するデフォルトの文字セットを設定します。 | String | |
configuration (共通) | MLLP エンドポイントの作成時に使用する既定の設定を設定します。 | MllpConfiguration | |
hl7Headers (共通) | HL7 メッセージ MLLP consumer のみからのメッセージヘッダーの自動生成を有効または無効にします。 | true | boolean |
requireEndOfData (共通) | MLLP 標準への厳密な準拠を有効/無効にします。MLLP 標準は START_OF_BLOCKhl7 ペイロード END_OF_BLOCKEND_OF_DATA を指定していますが、一部のシステムは最後の END_OF_DATA バイトを送信しません。この設定は、最後の END_OF_DATA バイトが必須かオプションかを制御します。 | true | boolean |
stringPayload (共通) | ペイロードの文字列への変換を有効または無効にします。有効にすると、外部システムから受信した HL7 ペイロードが検証され、文字列に変換されます。charsetName プロパティーが設定されている場合、その文字セットが変換に使用されます。charsetName プロパティーが設定されていない場合、適切な文字セットを決定するために MSH-18 の値が使用されます。MSH-18 が設定されていない場合、デフォルトの ISO-8859-1 文字セットが使用されます。 | true | boolean |
validatePayload (共通) | HL7 ペイロードの検証を有効/無効にする 有効にすると、外部システムから受信した HL7 ペイロードが検証されます (検証の詳細については、Hl7Util.generateInvalidPayloadExceptionMessage を参照してください)。無効なペイロードが検出された場合、MllpInvalidMessageException (consumer の場合) または MllpInvalidAcknowledgementException が出力されます。 | false | boolean |
acceptTimeout (consumer) | TCP 接続の待機中のタイムアウト (ミリ秒単位) TCP サーバーのみ。 | 60000 | int |
backlog (consumer) | 着信接続指示 (接続要求) の最大キュー長は、backlog パラメーターに設定されます。キューがいっぱいのときに接続指示が到着すると、接続は拒否されます。 | 5 | Integer |
bindRetryInterval (consumer) | TCP サーバーのみ - バインド試行間で待機するミリ秒数。 | 5000 | int |
bindTimeout (consumer) | TCP サーバーのみ - サーバーポートへのバインドを再試行するミリ秒数。 | 30000 | int |
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。無効にすると、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外を WARN または ERROR レベルでログに記録し、無視することで例外を処理します。 | true | boolean |
lenientBind (consumer) | TCP サーバーのみ - TCP ServerSocket がバインドされる前にエンドポイントを開始できるようにします。一部の環境では、TCP ServerSocket がバインドされる前にエンドポイントを開始できるようにすることが望ましい場合があります。 | false | boolean |
maxConcurrentConsumers (consumer) | 許可される concurrent MLLP consumer接続の最大数。新しい接続が受信され、最大数がすでに確立されている場合、新しい接続はすぐにリセットされます。 | 5 | int |
reuseAddress (consumer) | SO_REUSEADDR ソケットオプションを有効/無効にします。 | false | Boolean |
exchangePattern (consumer (上級)) | consumer がエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| InOut | ExchangePattern |
connectTimeout (producer) | TCP 接続を確立するためのタイムアウト (ミリ秒単位)。TCP クライアントのみ。 | 30000 | int |
idleTimeoutStrategy (producer) | アイドルタイムアウトが発生したときに実行するアクションを決定します。可能な値は次のとおりです : RESET: SO_LINGER を 0 に設定し、ソケットをリセットします。CLOSE: ソケットを適切に閉じます。デフォルトは RESET です。 列挙値:
| リセット | MllpIdleTimeoutStrategy |
keepAlive (producer) | SO_KEEPALIVE ソケットオプションを有効/無効にします。 | true | Boolean |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
tcpNoDelay (producer) | TCP_NODELAY ソケットオプションを有効/無効にします。 | true | Boolean |
autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
defaultCharset (上級) | バイトから文字列への変換に使用するデフォルトの文字セットを設定します。 | ISO-8859-1 | String |
logPhi (上級) | PHI をログに記録するかどうか。 | true | Boolean |
logPhiMaxBytes (上級) | ログエントリーに記録される PHI の最大バイト数を設定します。 | 5120 | Integer |
readTimeout (上級) | MLLP フレームの開始後に使用される SO_TIMEOUT 値 (ミリ秒単位) が受信されました。 | 5000 | int |
receiveBufferSize (上級) | SO_RCVBUF オプションを指定された値 (バイト単位) に設定します。 | 8192 | Integer |
receiveTimeout (上級) | MLLP フレームの開始を待機するときに使用される SO_TIMEOUT 値 (ミリ秒単位)。 | 15000 | int |
sendBufferSize (上級) | SO_SNDBUF オプションを指定された値 (バイト単位) に設定します。 | 8192 | Integer |
idleTimeout (tcp) | クライアント TCP 接続がリセットされるまでに許容されるおおよそのアイドル時間。null 値またはゼロ以下の値は、アイドルタイムアウトを無効にします。 | Integer |
43.3. エンドポイントオプション
MLLP エンドポイントは、URI 構文を使用して設定されます。
mllp:hostname:port
パスおよびクエリーパラメーターを使用します。
43.3.1. パスパラメーター (2 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
hostname (共通) | TCP 接続の接続に 必要な ホスト名または IP。デフォルト値は null で、これは任意のローカル IP アドレスを意味します。 | String | |
port (共通) | 必須 TCP 接続のポート番号。 | int |
43.3.2. クエリーパラメーター (26 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
autoAck (共通) | MLLP 確認応答 MLLP consumer のみの自動生成を有効または無効にします。 | true | boolean |
charsetName (共通) | 使用するデフォルトの文字セットを設定します。 | String | |
hl7Headers (共通) | HL7 メッセージ MLLP consumer のみからのメッセージヘッダーの自動生成を有効または無効にします。 | true | boolean |
requireEndOfData (共通) | MLLP 標準への厳密な準拠を有効/無効にします。MLLP 標準は START_OF_BLOCKhl7 ペイロード END_OF_BLOCKEND_OF_DATA を指定していますが、一部のシステムは最後の END_OF_DATA バイトを送信しません。この設定は、最後の END_OF_DATA バイトが必須かオプションかを制御します。 | true | boolean |
stringPayload (共通) | ペイロードの文字列への変換を有効または無効にします。有効にすると、外部システムから受信した HL7 ペイロードが検証され、文字列に変換されます。charsetName プロパティーが設定されている場合、その文字セットが変換に使用されます。charsetName プロパティーが設定されていない場合、適切な文字セットを決定するために MSH-18 の値が使用されます。MSH-18 が設定されていない場合、デフォルトの ISO-8859-1 文字セットが使用されます。 | true | boolean |
validatePayload (共通) | HL7 ペイロードの検証を有効/無効にする 有効にすると、外部システムから受信した HL7 ペイロードが検証されます (検証の詳細については、Hl7Util.generateInvalidPayloadExceptionMessage を参照してください)。無効なペイロードが検出された場合、MllpInvalidMessageException (consumer の場合) または MllpInvalidAcknowledgementException が出力されます。 | false | boolean |
acceptTimeout (consumer) | TCP 接続の待機中のタイムアウト (ミリ秒単位) TCP サーバーのみ。 | 60000 | int |
backlog (consumer) | 着信接続指示 (接続要求) の最大キュー長は、backlog パラメーターに設定されます。キューがいっぱいのときに接続指示が到着すると、接続は拒否されます。 | 5 | Integer |
bindRetryInterval (consumer) | TCP サーバーのみ - バインド試行間で待機するミリ秒数。 | 5000 | int |
bindTimeout (consumer) | TCP サーバーのみ - サーバーポートへのバインドを再試行するミリ秒数。 | 30000 | int |
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。無効にすると、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外を WARN または ERROR レベルでログに記録し、無視することで例外を処理します。 | true | boolean |
lenientBind (consumer) | TCP サーバーのみ - TCP ServerSocket がバインドされる前にエンドポイントを開始できるようにします。一部の環境では、TCP ServerSocket がバインドされる前にエンドポイントを開始できるようにすることが望ましい場合があります。 | false | boolean |
maxConcurrentConsumers (consumer) | 許可される concurrent MLLP consumer接続の最大数。新しい接続が受信され、最大数がすでに確立されている場合、新しい接続はすぐにリセットされます。 | 5 | int |
reuseAddress (consumer) | SO_REUSEADDR ソケットオプションを有効/無効にします。 | false | Boolean |
exceptionHandler (consumer (上級)) | consumer によるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、consumer は例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
exchangePattern (consumer (上級)) | consumer がエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| InOut | ExchangePattern |
connectTimeout (producer) | TCP 接続を確立するためのタイムアウト (ミリ秒単位)。TCP クライアントのみ。 | 30000 | int |
idleTimeoutStrategy (producer) | アイドルタイムアウトが発生したときに実行するアクションを決定します。可能な値は次のとおりです : RESET: SO_LINGER を 0 に設定し、ソケットをリセットします。CLOSE: ソケットを適切に閉じます。デフォルトは RESET です。 列挙値:
| リセット | MllpIdleTimeoutStrategy |
keepAlive (producer) | SO_KEEPALIVE ソケットオプションを有効/無効にします。 | true | Boolean |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
tcpNoDelay (producer) | TCP_NODELAY ソケットオプションを有効/無効にします。 | true | Boolean |
readTimeout (上級) | MLLP フレームの開始後に使用される SO_TIMEOUT 値 (ミリ秒単位) が受信されました。 | 5000 | int |
receiveBufferSize (上級) | SO_RCVBUF オプションを指定された値 (バイト単位) に設定します。 | 8192 | Integer |
receiveTimeout (上級) | MLLP フレームの開始を待機するときに使用される SO_TIMEOUT 値 (ミリ秒単位)。 | 15000 | int |
sendBufferSize (上級) | SO_SNDBUF オプションを指定された値 (バイト単位) に設定します。 | 8192 | Integer |
idleTimeout (tcp) | クライアント TCP 接続がリセットされるまでに許容されるおおよそのアイドル時間。null 値またはゼロ以下の値は、アイドルタイムアウトを無効にします。 | Integer |
43.4. MLLP consumer
MLLP consumer は、MLLP フレームメッセージの受信と HL7 確認応答の送信をサポートします。MLLP consumer は、HL7 確認応答 (HL7 アプリケーション確認応答のみ - AA、AE、および AR) を自動的に生成するか、CamelMllpAcknowledgement 交換プロパティーを使用して確認応答を指定できます。さらに、生成される確認応答のタイプは、CamelMllpAcknowledgementType 交換プロパティーを設定することで制御できます。自動受信確認が無効で、交換パターンが InOnly の場合、MLLP consumer は HL7 受信確認を送信せずにメッセージを読み取ることができます。
43.4.1. メッセージヘッダー
MLLP consumer は、Camel メッセージに次のヘッダーを追加します。
キー | 説明 |
CamelMllpLocalAddress | ソケットのローカル TCP アドレス |
CamelMllpRemoteAddress | ソケットのローカル TCP アドレス |
CamelMllpSendingApplication | MSH-3 値 |
CamelMllpSendingFacility | MSH-4 値 |
CamelMllpReceivingApplication | MSH-5 値 |
CamelMllpReceivingFacility | MSH-6 値 |
CamelMllpTimestamp | MSH-7 値 |
CamelMllpSecurity | MSH-8 値 |
CamelMllpMessageType | MSH-9 値 |
CamelMllpEventType | MSH-9-1 値 |
CamelMllpTriggerEvent | MSH-9-2 値 |
CamelMllpMessageControlId | MSH-10 値 |
CamelMllpProcessingId | MSH-11 値 |
CamelMllpVersionId | MSH-12 値 |
CamelMllpCharset | MSH-18 値 |
すべてのヘッダーは文字列型です。ヘッダー値が欠落している場合、その値は null です。
43.4.2. エクスチェンジプロパティー
MLLP consumer が生成する確認応答のタイプと TCP ソケットの状態は、Camel 交換の次のプロパティーによって制御できます。
キー | タイプ | 説明 |
---|---|---|
CamelMllpAcknowledgement | byte[] | 存在する場合、このプロパティーは MLLP 確認応答としてクライアントに送信されます |
CamelMllpAcknowledgementString | String | 存在し、CamelMllpAcknowledgement が存在しない場合、このプロパティーは MLLP 確認としてクライアントに送信されます |
CamelMllpAcknowledgementMsaText | String | CamelMllpAcknowledgement も CamelMllpAcknowledgementString も存在せず、autoAck が true の場合、このプロパティーを使用して、生成された HL7 確認応答で MSA-3 の内容を指定できます。 |
CamelMllpAcknowledgementType | String | CamelMllpAcknowledgement も CamelMllpAcknowledgementString も存在せず、autoAck が true の場合、このプロパティーを使用して HL7 確認応答タイプ (つまり、AA、AE、AR) を指定できます。 |
CamelMllpAutoAcknowledge | Boolean | autoAck クエリーパラメーターをオーバーライドします |
CamelMllpCloseConnectionBeforeSend | Boolean | true の場合、データを送信する前にソケットが閉じられます |
CamelMllpResetConnectionBeforeSend | Boolean | true の場合、データを送信する前にソケットがリセットされます |
CamelMllpCloseConnectionAfterSend | Boolean | true の場合、Socket はデータ送信直後に閉じられます |
CamelMllpResetConnectionAfterSend | Boolean | true の場合、データを送信した直後にソケットがリセットされます |
43.5. MLLP producer
MLLP Producer は、MLLP フレームメッセージの送信と HL7 確認応答の受信をサポートしています。MLLP producer は HL7 確認応答を調べ、否定応答を受信した場合は例外を発生させます。受信した確認応答が調査され、否定応答の場合は例外が発生します。MLLP producer は、InOnly 交換パターンで設定されている場合、確認応答を無視できます。
43.5.1. メッセージヘッダー
MLLP producer は、Camel メッセージに次のヘッダーを追加します。
キー | 説明 |
---|---|
CamelMllpLocalAddress | ソケットのローカル TCP アドレス |
CamelMllpRemoteAddress | ソケットのリモート TCP アドレス |
CamelMllpAcknowledgement | 受信した HL7 確認バイト[] |
CamelMllpAcknowledgementString | 受信した HL7 確認応答を文字列に変換 |
43.5.2. エクスチェンジプロパティー
TCP ソケットの状態は、Camel 交換の次のプロパティーによって制御できます。
キー | タイプ | 説明 |
---|---|---|
CamelMllpCloseConnectionBeforeSend | Boolean | true の場合、データを送信する前にソケットが閉じられます |
CamelMllpResetConnectionBeforeSend | Boolean | true の場合、データを送信する前にソケットがリセットされます |
CamelMllpCloseConnectionAfterSend | Boolean | true の場合、Socket はデータ送信直後に閉じられます |
CamelMllpResetConnectionAfterSend | Boolean | true の場合、データを送信した直後にソケットがリセットされます |
43.6. Spring Boot 自動設定
Spring Boot で mllp を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-mllp-starter</artifactId> </dependency>
コンポーネントは、以下に記載される 31 のオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.component.mllp.accept-timeout | TCP 接続の待機中のタイムアウト (ミリ秒単位) TCP サーバーのみ。 | 60000 | Integer |
camel.component.mllp.auto-ack | MLLP 確認応答 MLLP consumer のみの自動生成を有効または無効にします。 | true | Boolean |
camel.component.mllp.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.mllp.backlog | 着信接続指示 (接続要求) の最大キュー長は、backlog パラメーターに設定されます。キューがいっぱいのときに接続指示が到着すると、接続は拒否されます。 | 5 | Integer |
camel.component.mllp.bind-retry-interval | TCP サーバーのみ - バインド試行間で待機するミリ秒数。 | 5000 | Integer |
camel.component.mllp.bind-timeout | TCP サーバーのみ - サーバーポートへのバインドを再試行するミリ秒数。 | 30000 | Integer |
camel.component.mllp.bridge-error-handler | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。無効にすると、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外を WARN または ERROR レベルでログに記録し、無視することで例外を処理します。 | true | Boolean |
camel.component.mllp.charset-name | 使用するデフォルトの文字セットを設定します。 | String | |
camel.component.mllp.configuration | MLLP エンドポイントの作成時に使用する既定の設定を設定します。オプションは org.apache.camel.component.mllp.MllpConfiguration タイプです。 | MllpConfiguration | |
camel.component.mllp.connect-timeout | TCP 接続を確立するためのタイムアウト (ミリ秒単位)。TCP クライアントのみ。 | 30000 | Integer |
camel.component.mllp.default-charset | バイトから文字列への変換に使用するデフォルトの文字セットを設定します。 | ISO-8859-1 | String |
camel.component.mllp.enabled | mllp コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.mllp.exchange-pattern | consumer がエクスチェンジを作成する際に交換パターンを設定します。 | ExchangePattern | |
camel.component.mllp.hl7-headers | HL7 メッセージ MLLP consumer のみからのメッセージヘッダーの自動生成を有効または無効にします。 | true | Boolean |
camel.component.mllp.idle-timeout | クライアント TCP 接続がリセットされるまでに許容されるおおよそのアイドル時間。null 値またはゼロ以下の値は、アイドルタイムアウトを無効にします。 | Integer | |
camel.component.mllp.idle-timeout-strategy | アイドルタイムアウトが発生したときに実行するアクションを決定します。可能な値は次のとおりです : RESET: SO_LINGER を 0 に設定し、ソケットをリセットします。CLOSE: ソケットを適切に閉じます。デフォルトは RESET です。 | MllpIdleTimeoutStrategy | |
camel.component.mllp.keep-alive | SO_KEEPALIVE ソケットオプションを有効/無効にします。 | true | Boolean |
camel.component.mllp.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
camel.component.mllp.lenient-bind | TCP サーバーのみ - TCP ServerSocket がバインドされる前にエンドポイントを開始できるようにします。一部の環境では、TCP ServerSocket がバインドされる前にエンドポイントを開始できるようにすることが望ましい場合があります。 | false | Boolean |
camel.component.mllp.log-phi | PHI をログに記録するかどうか。 | true | Boolean |
camel.component.mllp.log-phi-max-bytes | ログエントリーに記録される PHI の最大バイト数を設定します。 | 5120 | Integer |
camel.component.mllp.max-concurrent-consumers | 許可される concurrent MLLP consumer接続の最大数。新しい接続が受信され、最大数がすでに確立されている場合、新しい接続はすぐにリセットされます。 | 5 | Integer |
camel.component.mllp.read-timeout | MLLP フレームの開始後に使用される SO_TIMEOUT 値 (ミリ秒単位) が受信されました。 | 5000 | Integer |
camel.component.mllp.receive-buffer-size | SO_RCVBUF オプションを指定された値 (バイト単位) に設定します。 | 8192 | Integer |
camel.component.mllp.receive-timeout | MLLP フレームの開始を待機するときに使用される SO_TIMEOUT 値 (ミリ秒単位)。 | 15000 | Integer |
camel.component.mllp.require-end-of-data | MLLP 標準への厳密な準拠を有効/無効にします。MLLP 標準は START_OF_BLOCKhl7 ペイロード END_OF_BLOCKEND_OF_DATA を指定していますが、一部のシステムは最後の END_OF_DATA バイトを送信しません。この設定は、最後の END_OF_DATA バイトが必須かオプションかを制御します。 | true | Boolean |
camel.component.mllp.reuse-address | SO_REUSEADDR ソケットオプションを有効/無効にします。 | false | Boolean |
camel.component.mllp.send-buffer-size | SO_SNDBUF オプションを指定された値 (バイト単位) に設定します。 | 8192 | Integer |
camel.component.mllp.string-payload | ペイロードの文字列への変換を有効または無効にします。有効にすると、外部システムから受信した HL7 ペイロードが検証され、文字列に変換されます。charsetName プロパティーが設定されている場合、その文字セットが変換に使用されます。charsetName プロパティーが設定されていない場合、適切な文字セットを決定するために MSH-18 の値が使用されます。MSH-18 が設定されていない場合、デフォルトの ISO-8859-1 文字セットが使用されます。 | true | Boolean |
camel.component.mllp.tcp-no-delay | TCP_NODELAY ソケットオプションを有効/無効にします。 | true | Boolean |
camel.component.mllp.validate-payload | HL7 ペイロードの検証を有効/無効にする 有効にすると、外部システムから受信した HL7 ペイロードが検証されます (検証の詳細については、Hl7Util.generateInvalidPayloadExceptionMessage を参照してください)。無効なペイロードが検出された場合、MllpInvalidMessageException (consumer の場合) または MllpInvalidAcknowledgementException が出力されます。 | false | Boolean |
第44章 Mock
producer のみサポート対象
分散処理と非同期処理のテストは、非常に難しいことで知られています。Mock、Test、および DataSet エンドポイントは Camel テストフレームワークとうまく連携し、エンタープライズ統合パターン と Camel の幅広いコンポーネントを強力な Bean 統合と共に使用して、ユニットと統合のテストを簡素化します。
モックコンポーネントは強力な宣言型テストメカニズムを提供します。これは、テスト開始前に任意のモックエンドポイントで宣言型期待値を作成できるという点で jMock に似ています。次に、テストが実行され、通常は 1 つ以上のエンドポイントにメッセージが送信されます。最後に、システムが期待どおりに機能することを確認するために、テストケースで期待値をアサートできます。
これにより、次のようなさまざまなことをテストできます。
モックエンドポイントである テストエンドポイント もありますが、2 番目のエンドポイントを使用して、予想されるメッセージ本文のリストを提供し、モックエンドポイントアサーションを自動的に設定します。つまり、たとえば File や database 内のいくつかのサンプルメッセージからアサーションを自動的にセットアップするモックエンドポイントです。
モックエンドポイントは、受信した Exchange を無期限にメモリーに保持します。
Mock はテスト用に設計されていることを思い出してください。モックエンドポイントをルートに追加すると、エンドポイントに送信された各 Exchange は、明示的にリセットするか、JVM を再起動するまで、(後で検証できるようにするために) メモリーに格納されます。大量のメッセージや大きなメッセージを送信すると、メモリーが過剰に使用される可能性があります。デプロイメント可能なルートをインラインでテストすることが目標の場合は、モックエンドポイントをルートに直接追加する代わりに、テストで NotifyBuilder または AdviceWith を使用することを検討してください。Mock エンドポイントがメモリーに保持するメッセージの数を制限するために使用できる、retainFirst と retainLast の 2 つの新しいオプションがあります。
44.1. URI 形式
mock:someName[?options]
someName
は、エンドポイントを一意に識別する任意の文字列にすることができます。
44.2. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
44.2.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
44.2.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
44.3. コンポーネントオプション
Mock コンポーネントは、以下に示す 4 個のオプションをサポートしています。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
log (producer) | モックが着信メッセージを受信したときにロギングをオンにします。これは、着信メッセージの INFO レベルで 1 回だけログに記録されます。より詳細なログを取得するには、ロガーを org.apache.camel.component.mock.MockEndpoint クラスの DEBUG レベルに設定します。 | false | boolean |
autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
exchangeFormatter (上級) | Autowired カスタム ExchangeFormatter を設定して、Exchange をログに適した文字列に変換します。指定しない場合は、デフォルトで DefaultExchangeFormatter になります。 | ExchangeFormatter |
44.4. エンドポイントオプション
Mock エンドポイントは、URI 構文を使用して設定されます。
mock:name
パスおよびクエリーパラメーターを使用します。
44.4.1. パスパラメーター(1 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
name (producer) | 必須 モックエンドポイントの名前。 | String |
44.4.2. クエリーパラメーター (12 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
assertPeriod (producer) | 暫定的なアサーションがまだ有効であることを確認するために、モックエンドポイントが再アサートするまでの猶予期間を設定します。これは、たとえば、正確な数のメッセージが到着したことをアサートするために使用されます。たとえば、expectedMessageCount (int) が 5 に設定されている場合、5 つ以上のメッセージが到着するとアサーションが満たされます。正確に 5 つのメッセージが到着するようにするには、それ以上メッセージが到着しないように少し待つ必要があります。これが、このメソッドを使用できるものです。デフォルトでは、この期間は無効になっています。 | long | |
expectedCount (producer) | このエンドポイントが受信するメッセージ交換の予想数を指定します。注意: 0 のメッセージを期待したい場合は、特別な注意が必要です。0 はテストの開始時に一致するため、アサート期間を設定して、テストをしばらく実行し、まだメッセージが到着していないことを確認する必要があります。;そのためには setAssertPeriod (long) を使用します。別の方法として、NotifyBuilder を使用し、モックで assertIsSatisfied () メソッドを呼び出す前に、NotifyBuilder を使用して、Camel がいくつかのメッセージのルーティングを完了したことを知ることができます。これにより、固定アサート期間を使用せずにテスト時間を短縮できます。正確に n 番目のメッセージがこのモックエンドポイントに到着することをアサートする場合は、詳細について setAssertPeriod (long) メソッドも参照してください。 | -1 | int |
failFast (producer) | assertIsSatisfied () が最初に検出された失敗した期待で高速に失敗する必要があるかどうかを設定しますが、それ以外の場合は、期待されるすべてのメッセージが到着するのを待ってから、期待の検証を実行します。デフォルトでは true です。Camel 2.x のような動作を使用するには、false に設定します。 | false | boolean |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
log (producer) | モックが着信メッセージを受信したときにロギングをオンにします。これは、着信メッセージの INFO レベルで 1 回だけログに記録されます。より詳細なログを取得するには、ロガーを org.apache.camel.component.mock.MockEndpoint クラスの DEBUG レベルに設定します。 | false | boolean |
reportGroup (producer) | サイズのグループに基づいてスループットログを有効にするために使用される数値。 | int | |
resultMinimumWaitTime (producer) | ラッチが満たされるまで assertIsSatisfied () が待機する最小予想時間 (ミリ秒単位) を設定します。 | long | |
resultWaitTime (producer) | ラッチが満たされるまで assertIsSatisfied () が待機する最大時間 (ミリ秒単位) を設定します。 | long | |
retainFirst (producer) | 受信した Exchange の最初の n 番目の数だけを保持するように指定します。これは、ビッグデータでテストするときに使用され、このモックエンドポイントが受信するすべての Exchange のコピーを保存しないことでメモリー消費を削減します。重要: この制限を使用する場合、getReceivedCounter() は受信した Exchange の実際の数を返します。たとえば、5000 の交換を受信し、最初の 10 の交換のみを保持するように設定した場合、getReceivedCounter () は引き続き 5000 を返しますが、getExchanges () および getReceivedExchanges () メソッドには最初の 10 の交換しかありません。このメソッドを使用する場合、他の期待値メソッドの一部はサポートされません。たとえば、expectedBodiesReceived(Object…) は、受信した最初の数のボディに期待値を設定します。setRetainFirst(int) メソッドと setRetainLast(int) メソッドの両方を設定して、最初と最後の受信の両方を制限できます。 | -1 | int |
retainLast (producer) | 受信した Exchange の最後の n 番目の数だけを保持するように指定します。これは、ビッグデータでテストするときに使用され、このモックエンドポイントが受信するすべての Exchange のコピーを保存しないことでメモリー消費を削減します。重要: この制限を使用する場合、getReceivedCounter() は受信した Exchange の実際の数を返します。たとえば、5000 の交換を受信し、最後の 20 の交換のみを保持するように設定した場合、getReceivedCounter () は引き続き 5000 を返しますが、getExchanges () および getReceivedExchanges () メソッドには最後の 20 の交換しかありません。このメソッドを使用する場合、他の期待値メソッドの一部はサポートされません。たとえば、expectedBodiesReceived(Object…) は、受信した最初の数のボディに期待値を設定します。setRetainFirst(int) メソッドと setRetainLast(int) メソッドの両方を設定して、最初と最後の受信の両方を制限できます。 | -1 | int |
sleepForEmptyTest (producer) | expectedMessageCount (int) がゼロで呼び出されたときに、このエンドポイントが実際に空であることを確認するために待機するスリープを指定できるようにします。 | long | |
copyOnExchange (producer (上級)) | このモックエンドポイントで受信したときに受信 Exchange のディープコピーを作成するかどうかを設定します。デフォルトでは true です。 | true | boolean |
44.5. 簡単な例
使用中の Mock エンドポイントの簡単な例を次に示します。まず、エンドポイントがコンテキストで解決されます。次に、期待値を設定し、テストが実行された後、期待値が満たされていることをアサートします。
MockEndpoint resultEndpoint = context.getEndpoint("mock:foo", MockEndpoint.class); // set expectations resultEndpoint.expectedMessageCount(2); // send some messages // now lets assert that the mock:foo endpoint received 2 messages resultEndpoint.assertIsSatisfied();
通常は、テストの実行後に期待が満たされていることをテストするために、常にメソッドを呼び出します。
assertIsSatisfied ()
が呼び出されると、Camel はデフォルトで 10 秒間待機します。これは setResultWaitTime (millis)
メソッドを設定することで設定できます。
44.6. assertPeriod の使用
アサーションが満たされると、Camel は待機を停止し、assertIsSatisfied
メソッドから続行します。つまり、少し遅れて新しいメッセージがモックエンドポイントに到着した場合、その到着はアサーションの結果に影響しません。一定期間後に新しいメッセージが到着しないことをテストしたい場合は、setAssertPeriod
メソッドを設定することでそれを行うことができます。次に例を示します。
MockEndpoint resultEndpoint = context.getEndpoint("mock:foo", MockEndpoint.class); resultEndpoint.setAssertPeriod(5000); resultEndpoint.expectedMessageCount(2); // send some messages // now lets assert that the mock:foo endpoint received 2 messages resultEndpoint.assertIsSatisfied();
44.7. 期待値の設定
MockEndpoint の Javadoc から、期待値を設定するために使用できるさまざまなヘルパーメソッドを確認できます。主な方法は次のとおりです。
メソッド | 説明 |
---|---|
エンドポイントで予想されるメッセージ数を定義します。 | |
エンドポイントで予想されるメッセージの最小数を定義します。 | |
受信する必要があると予想される本文を (順番に) 定義します。 | |
受信する必要があるヘッダーを定義するには | |
指定された式を使用してメッセージを比較し、メッセージが順番に受信されるという期待を追加します。 | |
指定された式を使用してメッセージを比較し、メッセージが順番に受信されるという期待を追加します。 | |
重複したメッセージが受信されないという期待を追加するには;式を使用して、各メッセージの一意の識別子を計算します。これは、JMS を使用している場合は |
別の例を次に示します。
resultEndpoint.expectedBodiesReceived("firstMessageBody", "secondMessageBody", "thirdMessageBody");
44.8. 特定のメッセージに期待を追加する
さらに、message (int messageIndex)
メソッドを使用して、受信した特定のメッセージに関するアサーションを追加できます。
たとえば、最初のメッセージのヘッダーまたは本文の予期を追加するには (java.util.List
などのゼロから始まるインデックスを使用)、次のコードを使用できます。
resultEndpoint.message(0).header("foo").isEqualTo("bar");
camel-core
プロセッサーテスト で使用されている Mock エンドポイントの例がいくつかあります。
44.9. 既存のエンドポイントのモック
Camel では、Camel ルートで既存のエンドポイントを自動的にモックできるようになりました。
使い方
エンドポイントはまだ動作中です。異なるのは、Mock エンドポイントが注入され、最初にメッセージを受信してから、メッセージをターゲットエンドポイントに委任する点です。これは、一種のインターセプトおよびデリゲートまたはエンドポイントリスナーと見なすことができます。
以下の特定のルートがあるとします。
ルート
@Override protected RouteBuilder createRouteBuilder() throws Exception { return new RouteBuilder() { @Override public void configure() throws Exception { from("direct:start").routeId("start") .to("direct:foo").to("log:foo").to("mock:result"); from("direct:foo").routeId("foo") .transform(constant("Bye World")); } }; }
次に示すように、Camel の adviceWith
機能を使用して、単体テストから特定のルートのすべてのエンドポイントをモックできます。
adviceWith
すべてのエンドポイントをモックする
@Test public void testAdvisedMockEndpoints() throws Exception { // advice the start route using the inlined AdviceWith lambda style route builder // which has extended capabilities than the regular route builder AdviceWith.adviceWith(context, "start", a -> // mock all endpoints a.mockEndpoints()); getMockEndpoint("mock:direct:start").expectedBodiesReceived("Hello World"); getMockEndpoint("mock:direct:foo").expectedBodiesReceived("Hello World"); getMockEndpoint("mock:log:foo").expectedBodiesReceived("Bye World"); getMockEndpoint("mock:result").expectedBodiesReceived("Bye World"); template.sendBody("direct:start", "Hello World"); assertMockEndpointsSatisfied(); // additional test to ensure correct endpoints in registry assertNotNull(context.hasEndpoint("direct:start")); assertNotNull(context.hasEndpoint("direct:foo")); assertNotNull(context.hasEndpoint("log:foo")); assertNotNull(context.hasEndpoint("mock:result")); // all the endpoints was mocked assertNotNull(context.hasEndpoint("mock:direct:start")); assertNotNull(context.hasEndpoint("mock:direct:foo")); assertNotNull(context.hasEndpoint("mock:log:foo")); }
モックエンドポイントには、mock:direct:foo
などの URI mock:<endpoint>
が指定されていることに注意してください。Camel は、モックされているエンドポイントを INFO
レベルでログに記録します。
INFO Adviced endpoint [direct://foo] with mock endpoint [mock:direct:foo]
モックされたエンドポイントにはパラメーターがありません
モックされたエンドポイントは、パラメーターが取り除かれます。たとえば、エンドポイント log:foo?showAll=true
は、次のエンドポイント mock:log:foo
にモックされます。パラメーターが削除されていることに注意してください。
パターンを使用して特定のエンドポイントのみをモックすることもできます。たとえば、すべての log
エンドポイントをモックするには、次のようにします。
adviceWith
パターンを使用してログエンドポイントのみをモックする
@Test public void testAdvisedMockEndpointsWithPattern() throws Exception { // advice the start route using the inlined AdviceWith lambda style route builder // which has extended capabilities than the regular route builder AdviceWith.adviceWith(context, "start", a -> // mock only log endpoints a.mockEndpoints("log*")); // now we can refer to log:foo as a mock and set our expectations getMockEndpoint("mock:log:foo").expectedBodiesReceived("Bye World"); getMockEndpoint("mock:result").expectedBodiesReceived("Bye World"); template.sendBody("direct:start", "Hello World"); assertMockEndpointsSatisfied(); // additional test to ensure correct endpoints in registry assertNotNull(context.hasEndpoint("direct:start")); assertNotNull(context.hasEndpoint("direct:foo")); assertNotNull(context.hasEndpoint("log:foo")); assertNotNull(context.hasEndpoint("mock:result")); // only the log:foo endpoint was mocked assertNotNull(context.hasEndpoint("mock:log:foo")); assertNull(context.hasEndpoint("mock:direct:start")); assertNull(context.hasEndpoint("mock:direct:foo")); }
サポートされるパターンは、ワイルドカードまたは正規表現です。Camel で使用されるのと同じマッチング関数として、Intercept で詳細を参照してください。
エンドポイントをモックすると、メッセージがモックに到着したときにメッセージがコピーされることに注意してください。
つまり、Camel はより多くのメモリーを使用します。大量のメッセージを送信する場合、これは適切ではない場合があります。
44.10. camel-test
コンポーネントを使用して既存のエンドポイントをモックする
エンドポイントのモックを Camel に指示するのに adviceWith
を使用する代わりに、camel-test
テストキットを使用するときにこの動作を簡単に有効にすることができます。
同じルートを次のようにテストできます。Camel にすべてのエンドポイントをモックするように指示する isMockEndpoints
メソッドから "*"
を返すことに注意してください。
すべての log
エンドポイントのみをモックしたい場合は、代わりに "log*"
を返すことができます。
isMockEndpoints
using camel-test kit
public class IsMockEndpointsJUnit4Test extends CamelTestSupport { @Override public String isMockEndpoints() { // override this method and return the pattern for which endpoints to mock. // use * to indicate all return "*"; } @Test public void testMockAllEndpoints() throws Exception { // notice we have automatic mocked all endpoints and the name of the endpoints is "mock:uri" getMockEndpoint("mock:direct:start").expectedBodiesReceived("Hello World"); getMockEndpoint("mock:direct:foo").expectedBodiesReceived("Hello World"); getMockEndpoint("mock:log:foo").expectedBodiesReceived("Bye World"); getMockEndpoint("mock:result").expectedBodiesReceived("Bye World"); template.sendBody("direct:start", "Hello World"); assertMockEndpointsSatisfied(); // additional test to ensure correct endpoints in registry assertNotNull(context.hasEndpoint("direct:start")); assertNotNull(context.hasEndpoint("direct:foo")); assertNotNull(context.hasEndpoint("log:foo")); assertNotNull(context.hasEndpoint("mock:result")); // all the endpoints was mocked assertNotNull(context.hasEndpoint("mock:direct:start")); assertNotNull(context.hasEndpoint("mock:direct:foo")); assertNotNull(context.hasEndpoint("mock:log:foo")); } @Override protected RouteBuilder createRouteBuilder() throws Exception { return new RouteBuilder() { @Override public void configure() throws Exception { from("direct:start").to("direct:foo").to("log:foo").to("mock:result"); from("direct:foo").transform(constant("Bye World")); } }; } }
44.11. XML DSL を使用した既存のエンドポイントのモック
上記のように単体テストに camel-test
コンポーネントを使用しない場合は、ルートに XML ファイルを使用するときに別のアプローチを使用できます。
解決策は、単体テストで使用される新しい XML ファイルを作成し、テストするルートを含む目的の XML ファイルを含めることです。
camel-route.xml
ファイルにルートがあるとします。
camel-route.xml
<!-- this camel route is in the camel-route.xml file --> <camelContext xmlns="http://camel.apache.org/schema/spring"> <route> <from uri="direct:start"/> <to uri="direct:foo"/> <to uri="log:foo"/> <to uri="mock:result"/> </route> <route> <from uri="direct:foo"/> <transform> <constant>Bye World</constant> </transform> </route> </camelContext>
次に、次のように新しい XML ファイルを作成します。このファイルには camel-route.xml
ファイルが含まれ、Camel にすべてのエンドポイントをモックするように指示するクラス org.apache.camel.impl.InterceptSendToMockEndpointStrategy
で Spring Bean を定義します。
test-camel-route.xml
<!-- the Camel route is defined in another XML file --> <import resource="camel-route.xml"/> <!-- bean which enables mocking all endpoints --> <bean id="mockAllEndpoints" class="org.apache.camel.component.mock.InterceptSendToMockEndpointStrategy"/>
次に、ユニットテストで、camel-route.xml
の代わりに新しい XML ファイル (test-camel-route.xml
) を読み込みます。
すべての Log エンドポイントのみをモックするには、Bean のコンストラクターでパターンを定義できます。
<bean id="mockAllEndpoints" class="org.apache.camel.impl.InterceptSendToMockEndpointStrategy"> <constructor-arg index="0" value="log*"/> </bean>
44.12. エンドポイントをモックし、元のエンドポイントへの送信をスキップする
特定のエンドポイントへの送信を簡単にモックしてスキップしたい場合があります。したがって、メッセージは迂回され、モックエンドポイントのみに送信されます。AdviceWith を使用して、mockEndpointsAndSkip
メソッドを使用できるようになりました。以下の例では、2 つのエンドポイント "direct:foo"
と "direct:bar"
への送信をスキップします。
エンドポイントへの送信をモックしてスキップするアドバイス
@Test public void testAdvisedMockEndpointsWithSkip() throws Exception { // advice the first route using the inlined AdviceWith route builder // which has extended capabilities than the regular route builder AdviceWith.adviceWith(context.getRouteDefinitions().get(0), context, new AdviceWithRouteBuilder() { @Override public void configure() throws Exception { // mock sending to direct:foo and direct:bar and skip send to it mockEndpointsAndSkip("direct:foo", "direct:bar"); } }); getMockEndpoint("mock:result").expectedBodiesReceived("Hello World"); getMockEndpoint("mock:direct:foo").expectedMessageCount(1); getMockEndpoint("mock:direct:bar").expectedMessageCount(1); template.sendBody("direct:start", "Hello World"); assertMockEndpointsSatisfied(); // the message was not send to the direct:foo route and thus not sent to // the seda endpoint SedaEndpoint seda = context.getEndpoint("seda:foo", SedaEndpoint.class); assertEquals(0, seda.getCurrentQueueSize()); }
テストキットを使用した同じ例
isMockEndpointsAndSkip using camel-test kit
public class IsMockEndpointsAndSkipJUnit4Test extends CamelTestSupport { @Override public String isMockEndpointsAndSkip() { // override this method and return the pattern for which endpoints to mock, // and skip sending to the original endpoint. return "direct:foo"; } @Test public void testMockEndpointAndSkip() throws Exception { // notice we have automatic mocked the direct:foo endpoints and the name of the endpoints is "mock:uri" getMockEndpoint("mock:result").expectedBodiesReceived("Hello World"); getMockEndpoint("mock:direct:foo").expectedMessageCount(1); template.sendBody("direct:start", "Hello World"); assertMockEndpointsSatisfied(); // the message was not send to the direct:foo route and thus not sent to the seda endpoint SedaEndpoint seda = context.getEndpoint("seda:foo", SedaEndpoint.class); assertEquals(0, seda.getCurrentQueueSize()); } @Override protected RouteBuilder createRouteBuilder() throws Exception { return new RouteBuilder() { @Override public void configure() throws Exception { from("direct:start").to("direct:foo").to("mock:result"); from("direct:foo").transform(constant("Bye World")).to("seda:foo"); } }; } }
44.13. 保持するメッセージの数を制限する
Mock エンドポイントは、デフォルトで、受信したすべての Exchange のコピーを保持します。したがって、大量のメッセージでテストすると、メモリーが消費されます。
最初または最後の Exchange の N 番目のみを保持するように指定するために使用できる、retainFirst
と retainLast
の 2 つのオプションを導入しました。
たとえば、以下のコードでは、モックが受信した最初の 5 回と最後の 5 回の Exchange のコピーのみを保持したいと考えています。
MockEndpoint mock = getMockEndpoint("mock:data"); mock.setRetainFirst(5); mock.setRetainLast(5); mock.expectedMessageCount(2000); mock.assertIsSatisfied();
これを使用するには、いくつかの制限があります。MockEndpoint
の getExchanges()
および getReceivedExchanges ()
メソッドは、Exchange の保持されたコピーのみを返します。したがって、上記の例では、リストには 10 の Exchange が含まれます。最初の 5 つと最後の 5 つ。retainFirst
オプションと retainLast
オプションにも、使用できる期待値メソッドに関する制限があります。たとえば、メッセージの本文やヘッダーなどで動作する expectedXXX
メソッドは、保持されたメッセージでのみ動作します。上記の例では、保持された 10 個のメッセージに対する期待のみをテストできます。
44.14. 到着時間のテスト
Mock エンドポイントは、メッセージの到着時間を Exchange のプロパティーとして保存します。
Date time = exchange.getProperty(Exchange.RECEIVED_TIMESTAMP, Date.class);
この情報を使用して、メッセージがいつモックに到着したかを知ることができます。しかし、モックに到着した前のメッセージと次のメッセージの間の時間間隔を知るための基礎も提供します。これを使用して、Mock エンドポイントで arrives
DSL を使用して期待値を設定できます。
たとえば、次のメッセージの 0-2 秒前に最初のメッセージが到着するようにするには、次のようにします。
mock.message(0).arrives().noLaterThan(2).seconds().beforeNext();
これを、2 番目のメッセージ (0 インデックスベース) が前のメッセージから 0-2 秒以内に到着するように定義することもできます。
mock.message(1).arrives().noLaterThan(2).seconds().afterPrevious();
between を使用して下限を設定することもできます。たとえば、1-4 秒の間である必要があるとします。
mock.message(1).arrives().between(1, 4).seconds().afterPrevious();
すべてのメッセージに期待値を設定することもできます。たとえば、メッセージ間のギャップは最大 1 秒にする必要があります。
mock.allMessages().arrives().noLaterThan(1).seconds().beforeNext();
時間単位
上記の例では時間単位として seconds
を使用していますが、Camel は milliseconds
と minutes
も提供しています。
44.15. Spring Boot 自動設定
Spring Boot で mock を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-mock-starter</artifactId> </dependency>
コンポーネントは、以下に示す 5 個のオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.component.mock.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.mock.enabled | モックコンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.mock.exchange-formatter | カスタム ExchangeFormatter を設定して、Exchange をログに適した文字列に変換します。指定しない場合は、デフォルトで DefaultExchangeFormatter になります。オプションは org.apache.camel.spi.ExchangeFormatter タイプです。 | ExchangeFormatter | |
camel.component.mock.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
camel.component.mock.log | モックが着信メッセージを受信したときにロギングをオンにします。これは、着信メッセージの INFO レベルで 1 回だけログに記録されます。より詳細なログを取得するには、ロガーを org.apache.camel.component.mock.MockEndpoint クラスの DEBUG レベルに設定します。 | false | Boolean |
第45章 MongoDB
producer と consumer の両方がサポート対象
ウィキペディアによると、NoSQL は、リレーショナルデータベースと ACID 保証の長い歴史を破る、大まかに定義された非リレーショナルデータストアのクラスを促進する運動です。 ここ数年、NoSQL ソリューションの人気が高まっており、Facebook、LinkedIn、Twitter などの非常によく使用される主要なサイトやサービスは、スケーラビリティとアジリティを実現するために NoSQL ソリューションを広く使用することが知られています。
基本的に、NoSQL ソリューションは従来の RDBMS (リレーショナルデータベース管理システム) とは異なり、SQL をクエリー言語として使用せず、一般に ACID のようなトランザクション動作やリレーショナルデータを提供しません。代わりに、それらは柔軟なデータ構造とスキーマ (つまり、固定スキーマを持つデータベーステーブルの従来の概念が削除されたもの)、コモディティハードウェアでの極端なスケーラビリティ、および超高速処理の概念に基づいて設計されています。
MongoDB は非常に人気のある NoSQL ソリューションであり、camel-mongodb コンポーネントは Camel を MongoDB と統合し、MongoDB コレクションを producer (コレクションに対して操作を実行する) と producer (MongoDB コレクションからドキュメントを消費する) の両方として操作できるようにします。
MongoDB は、ドキュメント (オフィスドキュメントではなく、JSON/BSON で定義された階層データ) とコレクションの概念を中心にデプロイメントしています。このコンポーネントページは、それらに精通していることを前提としています。それ以外の場合は、http://www.mongodb.org/ にアクセスしてください。
MongoDB Camel コンポーネントは、Mongo Java Driver 4.x を使用します。
Maven ユーザーは、このコンポーネントの pom.xml
に以下の依存関係を追加する必要があります。
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-mongodb</artifactId> <version>{CamelSBVersion}</version> <!-- use the same version as your Camel core version --> </dependency>
45.1. URI 形式
mongodb:connectionBean?database=databaseName&collection=collectionName&operation=operationName[&moreOptions...]
45.2. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
45.2.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
45.2.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
45.3. コンポーネントオプション
MongoDB コンポーネントは、以下に示す 4 つのオプションをサポートしています。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
mongoConnection (共通) | 接続に使用される Autowired 共有クライアント。コンポーネントから生成されたすべてのエンドポイントは、この接続クライアントを共有します。 | MongoClient | |
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
45.4. エンドポイントオプション
MongoDB エンドポイントは、URI 構文を使用して設定されます。
mongodb:connectionBean
パスおよびクエリーパラメーターを使用します。
45.4.1. パスパラメーター(1 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
connectionBean (共通) | 必須 データベースに接続するためにクライアントをルックアップするために使用される接続 Bean 参照を設定します。 | String |
45.4.2. クエリーパラメーター (27 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
collection (共通) | このエンドポイントにバインドする MongoDB コレクションの名前を設定します。 | String | |
collectionIndex (共通) | コレクションのインデックスを設定します (JSON FORMAT : \\{ field1 : order1、field2 : order2})。 | String | |
createCollection (共通) | コレクションが存在しない場合は、初期化中にコレクションを作成します。デフォルトは true です。 | true | boolean |
database (共通) | ターゲットに設定する MongoDB データベースの名前を設定します。 | String | |
hosts (共通) | host:port 形式の mongodb サーバーのホストアドレス。ホストのコンマ区切りリストとして、複数のアドレスを使用することもできます: host1:port1,host2:port2。hosts パラメーターが指定されている場合、指定された connectionBean は無視されます。 | String | |
mongoConnection (共通) | データベースに接続するためのクライアントとして使用される接続 Bean を設定します。 | MongoClient | |
operation (共通) | このエンドポイントが MongoDB に対して実行する操作を設定します。 列挙値:
| MongoDbOperation | |
outputType (共通) | プロデューサの出力を選択したタイプ (DocumentList Document または MongoIterable) に変換します。DocumentList または MongoIterable は、findAll および aggregate に適用されます。ドキュメントは、他のすべての操作に適用されます。 列挙値:
| MongoDbOutputType | |
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
consumerType (consumer) | consumer タイプ。 | String | |
exceptionHandler (consumer (上級)) | consumer によるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、consumer は例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
exchangePattern (consumer (上級)) | consumer がエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
cursorRegenerationDelay (上級) | MongoDB の Tailable カーソルは、新しいデータが到着するまでブロックされます。新しいデータが挿入されない場合、しばらくするとカーソルが自動的に解放され、MongoDB サーバーによって閉じられます。クライアントは、必要に応じてカーソルを再生成する必要があります。この値は、新しいカーソルのフェッチを試行するまでの待機時間と、試行が失敗した場合に次の試行が行われるまでの時間を指定します。デフォルト値は 1000ms です。 | 1000 | long |
dynamicity (上級) | このエンドポイントが受信 Exchange プロパティーからターゲットデータベースとコレクションを動的に解決しようとするかどうかを設定します。それ以外の場合は静的なエンドポイント URI で指定されたデータベースとコレクションを実行時にオーバーライドするために使用できます。パフォーマンスを向上させるために、デフォルトでは無効になっています。有効にすると、パフォーマンスへの影響は最小限に抑えられます。 | false | boolean |
readPreference (上級) | MongoDB クライアントが読み取り操作をレプリカセットのメンバーにルーティングする方法を設定します。可能な値は、PRIMARY、PRIMARY_PREFERRED、SECONDARY、SECONDARY_PREFERRED、または NEAREST です。 列挙値:
| PRIMARY | String |
writeConcern (上級) | スタンドアロンの mongod、レプリカセット、またはクラスターへの書き込み操作のために MongoDB から要求された確認応答のレベルで接続 Bean を設定します。可能な値は、ACKNOWLEDGED、W1、W2、W3、UNACKNOWLEDGED、JOURNALED、または MAJORITY です。 列挙値:
| ACKNOWLEDGED | String |
writeResultAsHeader (上級) | 書き込み操作では、OUT メッセージのボディとして WriteResult を返す代わりに、IN メッセージを OUT に転送し、WriteResult をヘッダーとして添付するかどうかを決定します。 | false | boolean |
streamFilter (changeStream) | 変更ストリーム consumer のフィルター条件。 | String | |
password (セキュリティー) | mongodb 接続のユーザーパスワード。 | String | |
username (セキュリティー) | mongodb 接続のユーザー名。 | String | |
persistentId (tail) | 1 つのテールトラッキングコレクションで、複数のテーラブル consumer 用に多数のトラッカーをホストできます。それらを分離しておくために、各トラッカーには独自の固有の persistentId が必要です。 | String | |
persistentTailTracking (tail) | 永続的な tail トラッキングを有効にします。これは、システムの再起動時に最後に消費されたメッセージを追跡するメカニズムです。次にシステムが起動すると、エンドポイントは最後にレコードを一気に読み込むのを停止した地点からカーソルを回復します。 | false | boolean |
tailTrackCollection (tail) | テールトラッキング情報が保持されるコレクション。指定しない場合、MongoDbTailTrackingConfig#DEFAULT_COLLECTION がデフォルトで使用されます。 | String | |
tailTrackDb (tail) | テールトラッキングメカニズムが保持されるデータベースを示します。指定しない場合、現在のデータベースがデフォルトで選択されます。動的性は有効になっていても考慮されません。つまり、テールトラッキングデータベースは、エンドポイントの初期化を過ぎても変化しません。 | String | |
tailTrackField (tail) | 最後に追跡された値が配置されるフィールド。指定しない場合、MongoDbTailTrackingConfig#DEFAULT_FIELD がデフォルトで使用されます。 | String | |
tailTrackIncreasingField (tail) | 増加する性質の着信レコードの相関フィールドであり、生成されるたびに tail カーソルを配置するために使用されます。カーソルは次のタイプの tailTrackIncreasingField で (再) 作成されます:整数、日付、文字列などの型にすることができます。注: 現時点ではドット表記がサポートされていないため、フィールドはドキュメントの最上位にある必要があります。 | String |
45.5. Spring XML でのデータベースの設定
次の Spring XML は、MongoDB インスタンスへの接続を定義する Bean を作成します。
mongo Java driver 3 以降、WriteConcern および readPreference オプションは動的に変更できません。それらは mongoClient オブジェクトで定義されています
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mongo="http://www.springframework.org/schema/data/mongo" xsi:schemaLocation="http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/data/mongo http://www.springframework.org/schema/data/mongo/spring-mongo.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <mongo:mongo-client id="mongoBean" host="${mongo.url}" port="${mongo.port}" credentials="${mongo.user}:${mongo.pass}@${mongo.dbname}"> <mongo:client-options write-concern="NORMAL" /> </mongo:mongo-client> </beans>
45.6. サンプルルート
Spring XML で定義された次のルートは、コレクションに対して操作 getDbStats
を実行します。
指定されたコレクションの DB 統計を取得する
<route> <from uri="direct:start" /> <!-- using bean 'mongoBean' defined above --> <to uri="mongodb:mongoBean?database=${mongodb.database}&collection=${mongodb.collection}&operation=getDbStats" /> <to uri="direct:result" /> </route>
45.7. MongoDB 操作 - producer エンドポイント
45.7.1. クエリー操作
45.7.1.1. findById
この操作は、_id フィールドが IN メッセージ本文の内容と一致するコレクションから 1 つの要素のみを取得します。着信オブジェクトは、Bson
型と同等のものであれば何でもかまいません。http://bsonspec.org/spec.html および http://www.mongodb.org/display/DOCS/Java+Types を参照してください。
from("direct:findById") .to("mongodb:myDb?database=flights&collection=tickets&operation=findById") .to("mock:resultFindById");
デフォルトの _id は Mongo によって ObjectId
タイプとして扱われるため、適切に変換する必要がある場合があることに注意してください。
from("direct:findById") .convertBodyTo(ObjectId.class) .to("mongodb:myDb?database=flights&collection=tickets&operation=findById") .to("mock:resultFindById");
オプションのパラメーターをサポート
この操作は射影演算子をサポートしています。フィールドフィルターの指定 (プロジェクション) を参照。
45.7.1.2. findOneByQuery
MongoDB クエリーセレクターに一致するコレクションから最初の要素を取得します。CamelMongoDbCriteria
ヘッダーが設定されている場合、その値はクエリーセレクターとして使用されます。CamelMongoDbCriteria
ヘッダーが null の場合、IN メッセージ本文がクエリーセレクターとして使用されます。どちらの場合も、クエリーセレクターは Bson
型であるか、Bson
に変換可能である必要があります (たとえば、JSON 文字列または HashMap
)。詳細については、型変換を参照してください。
MongoDB ドライバーが提供する Filters
を使用して、クエリーセレクターを作成します。
45.7.1.3. クエリーセレクターを使用しない例 (コレクション内の最初のドキュメントを返します)
from("direct:findOneByQuery") .to("mongodb:myDb?database=flights&collection=tickets&operation=findOneByQuery") .to("mock:resultFindOneByQuery");
45.7.1.4. クエリーセレクターを使用した例 (コレクション内で最初に一致したドキュメントを返します):
from("direct:findOneByQuery") .setHeader(MongoDbConstants.CRITERIA, constant(Filters.eq("name", "Raul Kripalani"))) .to("mongodb:myDb?database=flights&collection=tickets&operation=findOneByQuery") .to("mock:resultFindOneByQuery");
オプションのパラメーターをサポート
この操作は、射影演算子とソート句をサポートしています。フィールドフィルター (射影) の指定、並べ替え句の指定を参照してください。
45.7.1.5. findAll
findAll
オペレーションは、クエリーに一致するすべてのドキュメントを返すか、またはまったく一致しないドキュメントを返します。この場合、コレクションに含まれるすべてのドキュメントが返されます。クエリーオブジェクトは CamelMongoDbCriteria
ヘッダーから抽出されます。CamelMongoDbCriteria ヘッダーが null の場合、クエリーオブジェクトは抽出されたメッセージ本文です。つまり、タイプ Bson
であるか、または Bson
に変換可能である必要があります。JSON 文字列または Hashmap にすることができます。詳細については、型変換を参照してください。
45.7.1.5.1. クエリーセレクターを使用しない例 (コレクション内のすべてのドキュメントを返します)
from("direct:findAll") .to("mongodb:myDb?database=flights&collection=tickets&operation=findAll") .to("mock:resultFindAll");
45.7.1.5.2. クエリーセレクターを使用した例 (コレクション内の一致するすべてのドキュメントを返します)
from("direct:findAll") .setHeader(MongoDbConstants.CRITERIA, Filters.eq("name", "Raul Kripalani")) .to("mongodb:myDb?database=flights&collection=tickets&operation=findAll") .to("mock:resultFindAll");
ページングと効率的な検索は、次のヘッダーを介してサポートされています。
ヘッダーのキー | クイック定数 | 説明 (MongoDB API ドキュメントから抜粋) | 想定されるタイプ |
---|---|---|---|
|
| カーソルの先頭にある指定された数の要素を破棄します。 | int/Integer |
|
| 返される要素の数を制限します。 | int/Integer |
|
| 1 つのバッチで返される要素の数を制限します。通常、カーソルは結果オブジェクトのバッチをフェッチし、ローカルに保存します。batchSize が正の場合、取得されたオブジェクトの各バッチのサイズを表します。パフォーマンスを最適化し、データ転送を制限するように調整できます。batchSize が負の場合、最大バッチサイズ制限 (通常は 4MB) 内に収まる数のオブジェクトが返され、カーソルが閉じられます。たとえば、batchSize が -10 の場合、サーバーは最大 10 個のドキュメントを 4MB に収まる数だけ返し、カーソルを閉じます。この機能は、ドキュメントが最大サイズ内に収まる必要があるという点で limit() とは異なり、サーバー側でカーソルを閉じる要求を送信する必要がないことに注意してください。バッチサイズは、カーソルが反復された後でも変更できます。その場合、設定は次のバッチ取得に適用されます。 | int/Integer |
|
| allowDiskUse MongoDB フラグを設定します。これは、MongoDB Server 4.3.1 以降でサポートされています。このヘッダーを古い MongoDB サーバーバージョンで使用すると、クエリーが失敗する可能性があります。 | boolean/Boolean |
45.7.1.5.3. オプション outputType=MongoIterable とバッチサイズの例
from("direct:findAll") .setHeader(MongoDbConstants.BATCH_SIZE).constant(10) .setHeader(MongoDbConstants.CRITERIA, constant(Filters.eq("name", "Raul Kripalani"))) .to("mongodb:myDb?database=flights&collection=tickets&operation=findAll&outputType=MongoIterable") .to("mock:resultFindAll");
ページングを使用している場合、findAll
操作は次の OUT ヘッダーも返し、結果ページを反復処理できるようにします。
ヘッダーのキー | クイック定数 | 説明 (MongoDB API ドキュメントから抜粋) | データのタイプ |
---|---|---|---|
|
| クエリーに一致するオブジェクトの数。これは、制限/スキップを考慮していません。 | int/Integer |
|
| クエリーに一致するオブジェクトの数。これは、制限/スキップを考慮していません。 | int/Integer |
オプションのパラメーターをサポート
この操作は、射影演算子とソート句をサポートしています。フィールドフィルター (射影) の指定、並べ替え句の指定を参照してください。
45.7.1.6. count
コレクション内のオブジェクトの総数を返し、OUT メッセージ本文として Long を返します。
次の例では、dynamicCollectionName コレクション内のレコード数をカウントします。動的性が有効になっていることに注意してください。その結果、操作は "notableScientists" コレクションではなく、"dynamicCollectionName" コレクションに対して実行されます。
// from("direct:count").to("mongodb:myDb?database=tickets&collection=flights&operation=count&dynamicity=true"); Long result = template.requestBodyAndHeader("direct:count", "irrelevantBody", MongoDbConstants.COLLECTION, "dynamicCollectionName"); assertTrue("Result is not of type Long", result instanceof Long);
クエリーを提供でき ますクエリーオブジェクトは CamelMongoDbCriteria
ヘッダーから抽出されます。CamelMongoDbCriteria ヘッダーが null の場合、クエリーオブジェクトは抽出されたメッセージ本文です。つまり、タイプ Bson
または Bson
に変換可能である必要があり、操作はこの条件に一致するドキュメントの量を返します。
Document query = ... Long count = template.requestBodyAndHeader("direct:count", query, MongoDbConstants.COLLECTION, "dynamicCollectionName");
45.7.1.7. フィールドフィルターの指定 (プロジェクション)
デフォルトでは、クエリー操作は、一致するオブジェクト全体を (すべてのフィールドとともに) 返します。ドキュメントが大きく、フィールドのサブセットのみを取得する必要がある場合は、関連する Bson
(または JSON 文字列、マップなどの Bson
に変換可能な型) を設定するだけで、すべてのクエリー操作でフィールドフィルターを指定できます。) CamelMongoDbFieldsProjection
ヘッダーの定数ショートカット: MongoDbConstants.FIELDS_PROJECTION
。
これは、MongoDB の Projections
を使用して Bson の作成を簡素化する例です。_id
と boringField
を除くすべてのフィールドを取得します。
// route: from("direct:findAll").to("mongodb:myDb?database=flights&collection=tickets&operation=findAll") Bson fieldProjection = Projection.exclude("_id", "boringField"); Object result = template.requestBodyAndHeader("direct:findAll", ObjectUtils.NULL, MongoDbConstants.FIELDS_PROJECTION, fieldProjection);
これは、MongoDB の Projections
を使用して Bson の作成を簡素化する例です。_id
と boringField
を除くすべてのフィールドを取得します。
// route: from("direct:findAll").to("mongodb:myDb?database=flights&collection=tickets&operation=findAll") Bson fieldProjection = Projection.exclude("_id", "boringField"); Object result = template.requestBodyAndHeader("direct:findAll", ObjectUtils.NULL, MongoDbConstants.FIELDS_PROJECTION, fieldProjection);
45.7.1.8. ソート句の指定
Bson の作成を簡素化するために、MongoDB の Sorts
を使用する特定のフィールドによるソートに基づいて、コレクションから最小/最大レコードを取得する必要があることがよくあります。_id
と boringField
を除くすべてのフィールドを取得します。
// route: from("direct:findAll").to("mongodb:myDb?database=flights&collection=tickets&operation=findAll") Bson sorts = Sorts.descending("_id"); Object result = template.requestBodyAndHeader("direct:findAll", ObjectUtils.NULL, MongoDbConstants.SORT_BY, sorts);
Camel ルートでは、SORT_BY ヘッダーを findOneByQuery 操作で使用して、同じ結果を得ることができます。FIELDS_PROJECTION ヘッダーも指定されている場合、操作は、別のコンポーネント (たとえば、パラメーター化された MyBatis SELECT クエリー) に直接渡すことができる単一のフィールド/値のペアを返します。この例では、コレクションから一時的に最新のドキュメントをフェッチし、結果を documentTimestamp
フィールドに基づいて 1 つのフィールドに削減する方法を示します。
.from("direct:someTriggeringEvent") .setHeader(MongoDbConstants.SORT_BY).constant(Sorts.descending("documentTimestamp")) .setHeader(MongoDbConstants.FIELDS_PROJECTION).constant(Projection.include("documentTimestamp")) .setBody().constant("{}") .to("mongodb:myDb?database=local&collection=myDemoCollection&operation=findOneByQuery") .to("direct:aMyBatisParameterizedSelect");
45.7.2. 操作の作成/更新
45.7.2.1. insert
IN メッセージ本文から取得した新しいオブジェクトを MongoDB コレクションに挿入します。Document
または List
に変換するために型変換が試行されます。
シングル挿入とマルチ挿入の 2 つのモードがサポートされています。複数の挿入の場合、エンドポイントは、Document であるか、または Document
に変換できる限り、任意のタイプのオブジェクトのリスト、配列、またはコレクションを期待します。以下に例を示します。
from("direct:insert") .to("mongodb:myDb?database=flights&collection=tickets&operation=insert");
オペレーションは WriteResult を返します 。WriteConcern
または invokeGetLastError
オプションの値に応じて、getLastError()
がすでに呼び出されているかどうかが決まります。書き込み操作の最終的な結果にアクセスする場合は、WriteResult
で getLastError()
または getCachedLastError()
を呼び出して CommandResult
を取得する必要があります。次に、CommandResult.ok()
、CommandResult.getErrorMessage()
および/または CommandResult.getException()
を呼び出して結果を確認できます。
新しいオブジェクトの _id
はコレクション内で一意である必要があることに注意してください。値を指定しない場合、MongoDB が自動的に値を生成します。ただし、指定しても一意でない場合、挿入操作は失敗します (Camel が気付くには、invokeGetLastError を有効にするか、書き込み結果を待機する WriteConcern を設定する必要があります)。
これはコンポーネントの制限ではありませんが、MongoDB でより高いスループットを実現する方法です。カスタム _id
を使用している場合は、アプリケーションレベルで一意であることを確認する必要があります (これも良い方法です)。
挿入されたレコードの OID は、CamelMongoOid
キー (MongoDbConstants.OID
定数) の下のメッセージヘッダーに格納されます。保存される値は、単一の挿入の場合は org.bson.types.ObjectId
、複数のレコードが挿入された場合は java.util.List<org.bson.types.ObjectId>
です。
MongoDB Java Driver 3.x では、insertOne および insertMany オペレーションは void を返します。Camel 挿入操作は、挿入されたドキュメントまたはドキュメントのリストを返します。必要に応じて、各ドキュメントが新しい OID によって更新されることに注意してください。
45.7.2.2. save
保存操作は upsert (UPdate、inSERT) 操作と同等で、レコードが更新され、レコードが存在しない場合は挿入されます。これらはすべて 1 つのアトミック操作で行われます。MongoDB は _id
フィールドに基づいてマッチングを実行します。
更新の場合、オブジェクトは完全に置き換えられ、MongoDB の $modifiers の使用は許可されないことに注意してください。したがって、オブジェクトがすでに存在する場合にそのオブジェクトを操作する場合は、次の 2 つのオプションがあります。
- 最初にオブジェクト全体とそのすべてのフィールドを取得するためのクエリーを実行し (効率的でない場合があります)、Camel 内で変更してから保存します。
- $modifiers で更新操作を使用すると、代わりにサーバー側で更新が実行されます。upsert フラグを有効にできます。この場合、挿入が必要な場合、MongoDB は $modifiers をフィルタークエリーオブジェクトに適用し、結果を挿入します。
保存するドキュメントに _id
属性が含まれていない場合、操作は挿入になり、作成された新しい _id
が CamelMongoOid
ヘッダーに配置されます。
以下に例を示します。
from("direct:insert") .to("mongodb:myDb?database=flights&collection=tickets&operation=save");
// route: from("direct:insert").to("mongodb:myDb?database=flights&collection=tickets&operation=save"); org.bson.Document docForSave = new org.bson.Document(); docForSave.put("key", "value"); Object result = template.requestBody("direct:insert", docForSave);
45.7.2.3. update
コレクションの 1 つまたは複数のレコードを更新します。フィルタークエリーと更新ルールが必要です。
MongoDBConstants.CRITERIA ヘッダーを使用してフィルターを Bson
として定義し、更新ルールを本文で Bson
として定義できます。
エンリッチ後の更新Bson
として MongoDBConstants.CRITERIA ヘッダーを使用してフィルターを定義し、更新前に mongodb にクエリーを実行する際に、集約ストラテジーでエンリッチパターンを使用してから mongodb 更新を適用する場合に、集約中に結果の camel エクスチェンジからフィルターを削除する必要があることに注意してください。集約中にこのヘッダーを削除しない場合、および/または camel エクスチェンジを mongodb producer エンドポイントに送信する前に MongoDBConstants.CRITERIA ヘッダーを再定義しない場合、mongodb の更新中に無効なcamel エクスチェンジペイロードが発生する可能性があります。
2 番目の方法は、正確に 2 つの要素を含む IN メッセージボディーとして List<Bson> を要求します。
- 要素 1 (インデックス 0) ⇒ フィルタークエリー ⇒ 通常のクエリーオブジェクトと同じように、影響を受けるオブジェクトを決定します
- 要素 2 (インデックス 1) ⇒ 更新ルール ⇒ 一致したオブジェクトがどのように更新されるか。MongoDB からのすべての 修飾子操作 がサポートされています。
Multiupdates
デフォルトでは、MongoDB は、複数のオブジェクトがフィルタークエリーに一致する場合でも、1 つのオブジェクトのみを更新します。一致する すべての レコードを更新するように MongoDB に指示するには、CamelMongoDbMultiUpdate
IN メッセージヘッダーを true
に設定します。
キー CamelMongoDbRecordsAffected
を持つヘッダーが返されます (MongoDbConstants.RECORDS_AFFECTED
定数) 更新されたレコードの数 (WriteResult.getN()
からコピーされます)。
次の IN メッセージヘッダーをサポートします。
ヘッダーのキー | クイック定数 | 説明 (MongoDB API ドキュメントから抜粋) | 想定されるタイプ |
---|---|---|---|
|
| 一致するすべてのオブジェクトに更新を適用する必要がある場合。http://www.mongodb.org/display/DOCS/Atomic+Operations を参照してください。 | boolean/Boolean |
|
| 存在しない場合にデータベースが要素を作成する必要があるかどうか | boolean/Boolean |
たとえば、次の例では、"scientist" フィールドの値を "Darwin" に設定することで、filterField フィールドが true に等しい すべての レコードを更新します。
// route: from("direct:update").to("mongodb:myDb?database=science&collection=notableScientists&operation=update"); List<Bson> body = new ArrayList<>(); Bson filterField = Filters.eq("filterField", true); body.add(filterField); BsonDocument updateObj = new BsonDocument().append("$set", new BsonDocument("scientist", new BsonString("Darwin"))); body.add(updateObj); Object result = template.requestBodyAndHeader("direct:update", body, MongoDbConstants.MULTIUPDATE, true);
// route: from("direct:update").to("mongodb:myDb?database=science&collection=notableScientists&operation=update"); Maps<String, Object> headers = new HashMap<>(2); headers.add(MongoDbConstants.MULTIUPDATE, true); headers.add(MongoDbConstants.FIELDS_FILTER, Filters.eq("filterField", true)); String updateObj = Updates.set("scientist", "Darwin");; Object result = template.requestBodyAndHeaders("direct:update", updateObj, headers);
// route: from("direct:update").to("mongodb:myDb?database=science&collection=notableScientists&operation=update"); String updateObj = "[{\"filterField\": true}, {\"$set\", {\"scientist\", \"Darwin\"}}]"; Object result = template.requestBodyAndHeader("direct:update", updateObj, MongoDbConstants.MULTIUPDATE, true);
45.7.3. 操作の削除
45.7.3.1. remove
コレクションから一致するレコードを削除します。IN メッセージ本文は、削除フィルタークエリーとして機能し、DBObject
タイプまたはそれに変換可能なタイプであることが期待されます。
次の例では、科学データベースの notableScientists コレクションで、フィールド 'conditionField' が true に等しいすべてのオブジェクトを削除します。
// route: from("direct:remove").to("mongodb:myDb?database=science&collection=notableScientists&operation=remove"); Bson conditionField = Filters.eq("conditionField", true); Object result = template.requestBody("direct:remove", conditionField);
キー CamelMongoDbRecordsAffected
を持つヘッダーが返されます (MongoDbConstants.RECORDS_AFFECTED
定数)。タイプは int
で、削除された (WriteResult.getN()
からコピーされた) レコードの数を含みます。
45.7.4. 一括書き込み操作
45.7.4.1. bulkWrite
実行順序を制御して書き込み操作を一括で実行します。挿入、更新、および削除操作のコマンドを含む IN メッセージ本文として List<WriteModel<Document>>
が必要です。
次の例では、新しい科学者 "Pierre Curie" を挿入し、"scientist" フィールドの値を "Marie Curie" に設定して ID "5" のレコードを更新し、ID "3" のレコードを削除します。
// route: from("direct:bulkWrite").to("mongodb:myDb?database=science&collection=notableScientists&operation=bulkWrite"); List<WriteModel<Document>> bulkOperations = Arrays.asList( new InsertOneModel<>(new Document("scientist", "Pierre Curie")), new UpdateOneModel<>(new Document("_id", "5"), new Document("$set", new Document("scientist", "Marie Curie"))), new DeleteOneModel<>(new Document("_id", "3"))); BulkWriteResult result = template.requestBody("direct:bulkWrite", bulkOperations, BulkWriteResult.class);
デフォルトでは、操作は順番に実行され、最初の書き込みエラーで中断され、リスト内の残りの書き込み操作は処理されません。リスト内の残りの書き込み操作の処理を続行するように MongoDB に指示するには、CamelMongoDbBulkOrdered
IN メッセージヘッダーを false
に設定します。順序付けされていない操作は並行して実行され、この動作は保証されません。
ヘッダーのキー | クイック定数 | 説明 (MongoDB API ドキュメントから抜粋) | 想定されるタイプ |
---|---|---|---|
|
| 順序付きまたは順序なしの操作実行を実行します。デフォルトは true です。 | boolean/Boolean |
45.7.5. その他の操作
45.7.5.1. aggregate
本文に含まれる特定のパイプラインを使用して集計を実行します。集約は、長く重い操作になる可能性があります。注意して使用してください。
// route: from("direct:aggregate").to("mongodb:myDb?database=science&collection=notableScientists&operation=aggregate"); List<Bson> aggregate = Arrays.asList(match(or(eq("scientist", "Darwin"), eq("scientist", group("$scientist", sum("count", 1))); from("direct:aggregate") .setBody().constant(aggregate) .to("mongodb:myDb?database=science&collection=notableScientists&operation=aggregate") .to("mock:resultAggregate");
次の IN メッセージヘッダーをサポートします。
ヘッダーのキー | クイック定数 | 説明 (MongoDB API ドキュメントから抜粋) | 想定されるタイプ |
---|---|---|---|
|
| バッチごとに返すドキュメントの数を設定します。 | int/Integer |
|
| 集約パイプラインステージを有効にして、データを一時ファイルに書き込みます。 | boolean/Boolean |
デフォルトでは、すべての結果のリストが返されます。結果のサイズによっては、これはメモリーを大量に消費する可能性があります。より安全な代替手段は、outputType=MongoIterable を設定することです。次の Processor は、メッセージ本文に iterable を表示し、結果を 1 つずつ処理できるようにします。したがって、バッチサイズを設定して iterable を返すと、結果の効率的な取得と処理が可能になります。
例は次のようになります。
List<Bson> aggregate = Arrays.asList(match(or(eq("scientist", "Darwin"), eq("scientist", group("$scientist", sum("count", 1))); from("direct:aggregate") .setHeader(MongoDbConstants.BATCH_SIZE).constant(10) .setBody().constant(aggregate) .to("mongodb:myDb?database=science&collection=notableScientists&operation=aggregate&outputType=MongoIterable") .split(body()) .streaming() .to("mock:resultAggregate");
.split (body ())
を呼び出すだけでエントリーを 1 つずつルートに送信できますが、最初にすべてのエントリーをメモリーにロードすることに注意してください。したがって、データをバッチでメモリーにロードするには、.streaming()
を呼び出す必要があります。
45.7.5.2. getDbStats
MongoDB シェルで db.stats()
コマンドを実行するのと同じです。これは、データベースに関する有用な統計値を表示します。
以下に例を示します。
> db.stats(); { "db" : "test", "collections" : 7, "objects" : 719, "avgObjSize" : 59.73296244784423, "dataSize" : 42948, "storageSize" : 1000058880, "numExtents" : 9, "indexes" : 4, "indexSize" : 32704, "fileSize" : 1275068416, "nsSizeMB" : 16, "ok" : 1 }
使用例:
// from("direct:getDbStats").to("mongodb:myDb?database=flights&collection=tickets&operation=getDbStats"); Object result = template.requestBody("direct:getDbStats", "irrelevantBody"); assertTrue("Result is not of type Document", result instanceof Document);
この操作は、シェルに表示されるものと同様のデータ構造を、OUT メッセージ本文の Document
の形式で返します。
45.7.5.3. getColStats
コレクションに関する有用な統計値を表示する、MongoDB シェルで db.collection.stats()
コマンドを実行するのと同じです。
以下に例を示します。
> db.camelTest.stats(); { "ns" : "test.camelTest", "count" : 100, "size" : 5792, "avgObjSize" : 57.92, "storageSize" : 20480, "numExtents" : 2, "nindexes" : 1, "lastExtentSize" : 16384, "paddingFactor" : 1, "flags" : 1, "totalIndexSize" : 8176, "indexSizes" : { "_id_" : 8176 }, "ok" : 1 }
使用例:
// from("direct:getColStats").to("mongodb:myDb?database=flights&collection=tickets&operation=getColStats"); Object result = template.requestBody("direct:getColStats", "irrelevantBody"); assertTrue("Result is not of type Document", result instanceof Document);
この操作は、シェルに表示されるものと同様のデータ構造を、OUT メッセージ本文の Document
の形式で返します。
45.7.5.4. command
データベースで本体をコマンドとして実行します。ホスト情報、レプリケーション、またはシャーディングステータスを取得するなどの管理操作に役立ちます。
コレクションパラメーターは、この操作では使用されません。
// route: from("command").to("mongodb:myDb?database=science&operation=command"); DBObject commandBody = new BasicDBObject("hostInfo", "1"); Object result = template.requestBody("direct:command", commandBody);
45.7.6. 動的操作
エクスチェンジは、MongoDbConstants.OPERATION_HEADER
定数で定義された CamelMongoDbOperation
ヘッダーを設定することにより、エンドポイントの固定操作をオーバーライドできます。
サポートされる値は、MongoDbOperation 列挙によって決定され、エンドポイント URI の operation
パラメーターで受け入れられる値と一致します。
以下に例を示します。
// from("direct:insert").to("mongodb:myDb?database=flights&collection=tickets&operation=insert"); Object result = template.requestBodyAndHeader("direct:insert", "irrelevantBody", MongoDbConstants.OPERATION_HEADER, "count"); assertTrue("Result is not of type Long", result instanceof Long);
45.8. Consumers
consumer にはいくつかのタイプがあります。
- Tailable Cursor consumer
- Change Streams consumer
45.8.1. Tailable Cursor consumer
MongoDB は、*nix システムの tail -f
コマンドのようにカーソルを開いたままにすることで、コレクションから進行中のデータを瞬時に消費するメカニズムを提供します。このメカニズムは、クライアントがスケジュールされた間隔で ping を返して新しいデータを取得するのではなく、新しいデータが利用可能になったときにサーバーがクライアントにプッシュするため、スケジュールされたポーリングよりもはるかに効率的です。また、冗長なネットワークトラフィックも削減されます。
tailable カーソルを使用するための必要条件は 1 つだけです。つまり、コレクションは " 上限付きコレクション " である必要があります。これは、N 個のオブジェクトのみを保持することを意味し、制限に達すると、MongoDB は最初に挿入されたのと同じ順序で古いオブジェクトをフラッシュします。詳細は、http://www.mongodb.org/display/DOCS/Tailable+Cursors を参照してください。
Camel MongoDB コンポーネントは、tailable cursor consumer を実装しているため、この機能を Camel ルートで使用できるようになります。新しいオブジェクトが挿入されると、MongoDB はそれらを Document
として自然な順序で tailable カーソルconsumer にプッシュします。tailable cursor consumer はそれらをエクスチェンジに変換し、ルートロジックをトリガーします。
45.9. tailable cursor consumer の仕組み
カーソルを tailable カーソルに変えるには、最初にカーソルを生成するときに、いくつかの特別なフラグを MongoDB に通知する必要があります。作成されると、カーソルは開いたままになり、新しいデータが到着するまで MongoCursor.next()
メソッドを呼び出すとブロックされます。ただし、MongoDB サーバーは、不確定な期間が経過しても新しいデータが表示されない場合、カーソルを強制終了する権利を留保します。新しいデータを引き続き使用する場合は、カーソルを再生成する必要があります。そのためには、中断した位置を覚えておく必要があります。そうしないと、もう一度最初から消費し始めます。
Camel MongoDB tailable cursor consumer は、これらすべてのタスクを処理します。タイムスタンプ、シーケンシャル ID など、再生成されるたびにカーソルを配置するマーカーとして機能する、増加する性質のデータ内のフィールドにキーを提供するだけで済みます。MongoDB でサポートされている任意のデータ型にすることができます。日付、文字列、および整数がうまく機能することがわかっています。このコンポーネントのコンテキストでは、このメカニズムをテールトラッキングと呼びます。
consumer はこのフィールドの最後の値を記憶し、カーソルが再生成されるたびに、次のようなフィルターを使用してクエリーを実行します。increasingField > lastValue
のようなフィルタでクエリを実行し、未読のデータのみが消費されるようにします。
増加フィールドの設定: エンドポイント URI の tailTrackingIncreasingField
オプションで増加フィールドのキーを設定します。Camel 2.10 では、このフィールドのネストされたナビゲーションがまだサポートされていないため、データの最上位フィールドである必要があります。つまり、"timestamp" フィールドは問題ありませんが、"nested.timestamp" は機能しません。ネストされた増加するフィールドのサポートが必要な場合は、Camel JIRA でチケットを開いてください。
カーソル再生成の遅延: 注意すべきことの 1 つは、初期化時に新しいデータがまだ利用できない場合、MongoDB はカーソルを即座に強制終了することです。この場合、サーバーに負荷をかけたくないので、cursorRegenerationDelay
オプションが導入されています (デフォルト値は 1000 ミリ秒です)。これは、ニーズに合わせて変更できます。
以下に例を示します。
from("mongodb:myDb?database=flights&collection=cancellations&tailTrackIncreasingField=departureTime") .id("tailableCursorConsumer1") .autoStartup(false) .to("mock:test");
上記のルートは、departureTime を増加フィールドとして使用し、デフォルトの再生成カーソル遅延を 1000 ミリ秒にして、flights.cancellations キャップコレクションから消費します。
45.10. 永続的なテールトラッキング
標準のテールトラッキングは揮発性であり、最後の値はメモリーにのみ保持されます。ただし、実際には Camel コンテナーを時々再起動する必要がありますが、最後の値は失われ、tailable cursor consumer は再び先頭から消費を開始し、ルートに重複レコードを送信する可能性が非常に高くなります。
この状況を克服するために、永続的なテール追跡 機能を有効にして、MongoDB データベース内の特別なコレクションで最後に消費された増加値を追跡することもできます。consumer が再び初期化されると、最後に追跡された値が復元され、何も起こらなかったかのように続行されます。
最後に読み取られた値は、カーソルが再生成されるたびと consumer がシャットダウンするときの 2 つの場合に保持されます。需要があれば、堅牢性を高めるために、将来的には定期的な間隔 (5 秒ごとにフラッシュ) で永続化することも検討する可能性があります。この機能をリクエストするには、Camel JIRA でチケットを開いてください。
45.11. 永続的なテールトラッキングを有効にする
この機能を有効にするには、エンドポイント URI で少なくとも次のオプションを設定します。
-
persistentTailTracking
オプションをtrue
に設定 -
この consumer の一意の識別子に
persistentId
オプションを追加して、同じコレクションを多くの consumer で再利用できるようにします
さらに、tailTrackDb
、tailTrackCollection
、および tailTrackField
オプションを設定して、ランタイム情報が保存される場所をカスタマイズできます。各オプションの説明については、このページの上部にあるエンドポイントオプションの表を参照してください。
たとえば、次のルートは、departureTime を増加フィールドとして使用し、デフォルトの再生成カーソル遅延を 1000 ミリ秒に設定して、永続的なテールトラッキングをオンにし、cancellationsTracker の下で永続化して、flights.cancellations キャップコレクションから消費します。flights.camelTailTracking の id で、最後に処理された値を lastTrackingValue フィールドに格納します (camelTailTracking
と lastTrackingValue
はデフォルトです)。
from("mongodb:myDb?database=flights&collection=cancellations&tailTrackIncreasingField=departureTime&persistentTailTracking=true" + "&persistentId=cancellationsTracker") .id("tailableCursorConsumer2") .autoStartup(false) .to("mock:test");
以下は、上記と同じ別の例ですが、永続的なテールトラッキングランタイム情報が trackers.camelTrackers コレクションの lastProcessedDepartureTime フィールドに格納されます。
from("mongodb:myDb?database=flights&collection=cancellations&tailTrackIncreasingField=departureTime&persistentTailTracking=true" + "&persistentId=cancellationsTracker&tailTrackDb=trackers&tailTrackCollection=camelTrackers" + "&tailTrackField=lastProcessedDepartureTime") .id("tailableCursorConsumer3") .autoStartup(false) .to("mock:test");
45.11.1. Change Streams consumer
変更ストリームを使用すると、MongoDB oplog を追跡する複雑さやリスクなしに、アプリケーションはリアルタイムのデータ変更にアクセスできます。アプリケーションは変更ストリームを使用して、コレクションのすべてのデータ変更をサブスクライブし、すぐに対応できます。変更ストリームは集約フレームワークを使用するため、アプリケーションは特定の変更をフィルタリングしたり、通知を自由に変換したりすることもできます。交換本体には、変更の完全なドキュメントが含まれます。
Change Streams Consumer を設定するには、consumerType
、database
、collection
、およびオプションの JSON プロパティー streamFilter
を指定して、イベントをフィルタリングする必要があります。その JSON プロパティーは、MongoDB の標準的な $match
集計です。XML DSL 設定を使用して簡単に指定できます。
<route id="filterConsumer"> <from uri="mongodb:myDb?consumerType=changeStreams&database=flights&collection=tickets&streamFilter={ '$match':{'$or':[{'fullDocument.stringValue': 'specificValue'}]} }"/> <to uri="mock:test"/> </route>
Java 設定:
from("mongodb:myDb?consumerType=changeStreams&database=flights&collection=tickets&streamFilter={ '$match':{'$or':[{'fullDocument.stringValue': 'specificValue'}]} }") .to("mock:test");
streamFilter 値をプロパティープレースホルダーに外部化することで、エンドポイント URI パラメーターを よりクリーン で読みやすくすることができます。
changeStreams
consumer タイプは、次の OUT ヘッダーも返します。
ヘッダーのキー | クイック定数 | 説明 (MongoDB API ドキュメントから抜粋) | データのタイプ |
---|---|---|---|
|
| 発生した操作のタイプ。値は、insert、delete、replace、update、drop、rename、dropDatabase、invalidate のいずれかです。 | String |
|
| 挿入、置換、削除、更新操作 (つまり、CRUD 操作) によって作成または変更されたドキュメントの _id を含むドキュメント。シャードコレクションの場合、ドキュメントの完全なシャードキーも表示されます。_id フィールドは、すでにシャードキーの一部である場合は繰り返されません。 | ObjectId |
45.12. 型変換
camel-mongodb コンポーネントに含まれる MongoDbBasicConverters
型コンバーターは、次の変換を提供します。
名前 | タイプから | 入力し | どのように変更を加えればよいですか ? |
---|---|---|---|
fromMapToDocument |
|
|
|
fromDocumentToMap |
|
|
|
fromStringToDocument |
|
|
|
fromStringToObjectId |
|
|
|
fromFileToDocument |
|
|
内部で |
fromInputStreamToDocument |
|
|
入力ストリームのバイトを |
fromStringToList |
|
|
|
この型コンバーターは自動検出されるため、手動で設定する必要はありません。
45.13. Spring Boot 自動設定
Spring Boot で mongodb を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-mongodb-starter</artifactId> </dependency>
コンポーネントは、以下に示す 5 個のオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.component.mongodb.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.mongodb.bridge-error-handler | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | Boolean |
camel.component.mongodb.enabled | mongodb コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | Boolean | |
camel.component.mongodb.lazy-start-producer | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | Boolean |
camel.component.mongodb.mongo-connection | 接続に使用される共有クライアント。コンポーネントから生成されたすべてのエンドポイントは、この接続クライアントを共有します。オプションは com.mongodb.client.MongoClient タイプです。 | MongoClient |
第46章 Netty
producer と consumer の両方がサポート対象
Camel の Netty コンポーネントは、Netty プロジェクトバージョン 4 に基づくソケット通信コンポーネントです。
Netty は、プロトコルサーバーやクライアントなどの networkServerInitializerFactory アプリケーションの迅速かつ簡単な開発を可能にする NIO クライアントサーバーフレームワークです。
Netty は、TCP や UDP ソケットサーバーなどのネットワークプログラミングを大幅に簡素化および合理化します。
この camel コンポーネントは、producer エンドポイントと consumer エンドポイントの両方をサポートします。
Netty コンポーネントにはいくつかのオプションがあり、多数の TCP/UDP 通信パラメーター (バッファーサイズ、keepAlive、tcpNoDelay など) をきめ細かく制御し、Camel ルートでの In-Only 通信と In-Out 通信の両方を容易にします。
Maven ユーザーは、このコンポーネントの pom.xml
に以下の依存関係を追加する必要があります。
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-netty</artifactId> <version>{CamelSBVersion}</version> <!-- use the same version as your Camel core version --> </dependency>
46.1. URI 形式
netty コンポーネントの URI スキームは次のとおりです。
netty:tcp://0.0.0.0:99999[?options] netty:udp://remotehost:99999/[?options]
このコンポーネントは、TCP と UDP の両方の producer エンドポイントと consumer エンドポイントをサポートします。
46.2. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
46.2.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml
)、または直接 Java コードで実行できます。
46.2.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定する タイプセーフ 方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
46.3. コンポーネントオプション
Netty コンポーネントは、以下に示す 73 個のオプションをサポートしています。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
configuration (共通) | エンドポイントの作成時に NettyConfiguration を設定として使用するには。 | NettyConfiguration | |
disconnect (共通) | 使用直後に Netty Channel を切断 (クローズ) するかどうか。consumer と producer の両方に使用できます。 | false | boolean |
keepAlive (共通) | 非アクティブのためにソケットが閉じられないようにするための設定。 | true | boolean |
reuseAddress (共通) | ソケットの多重化を容易にするための設定。 | true | boolean |
reuseChannel (共通) | このオプションにより、producer と consumer (クライアントモード) は、エクスチェンジを処理するライフサイクルで同じ Netty チャネルを再利用できます。これは、Camel ルートでサーバーを複数回呼び出す必要があり、同じネットワーク接続を使用したい場合に便利です。これを使用すると、チャネルはエクスチェンジが完了するまで接続プールに返されません。または、切断オプションが true に設定されている場合は切断されます。再利用されたチャネルは、キー NettyConstants#NETTY_CHANNEL を持つエクスチェンジプロパティーとしてエクスチェンジに保存されます。これにより、ルーティング中にチャネルを取得して使用することもできます。 | false | boolean |
sync (共通) | エンドポイントを一方向または要求応答として設定する設定。 | true | boolean |
tcpNoDelay (共通) | TCP プロトコルのパフォーマンスを向上させるための設定。 | true | boolean |
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
broadcast (consumer) | UDP 経由のマルチキャストを選択するための設定。 | false | boolean |
clientMode (consumer) | clientMode が true の場合、netty consumer はアドレスを TCP クライアントとして接続します。 | false | boolean |
reconnect (consumer) | consumer の clientMode でのみ使用されます。これが有効になっている場合、consumer は切断時に再接続を試みます。 | true | boolean |
reconnectInterval (consumer) | 再接続し、clientMode が有効になっている場合に使用されます。再接続を試みる間隔 (ミリ秒)。 | 10000 | int |
backlog (consumer (上級)) | netty consumer (server) のバックログを設定できます。バックログは、OS によってはベストエフォートであることに注意してください。このオプションを 200、500、1000 などの値に設定すると、TCP スタックに受け入れキューの長さが通知されます。このオプションが設定されていない場合、バックログは OS の設定に依存します。 | int | |
bossCount (consumer (上級)) | netty が nio モードで動作する場合、Netty のデフォルトの BossCount パラメーターである 1 を使用します。ユーザーはこのオプションを使用して、Netty のデフォルトの BossCount をオーバーライドできます。 | 1 | int |
bossGroup (consumer (上級)) | NettyEndpoint を介してサーバー側の新しい接続を処理するために使用できる BossGroup を設定します。 | EventLoopGroup | |
disconnectOnNoReply (consumer (上級)) | 同期が有効になっている場合、このオプションは、返信がない場合に NettyConsumer を切断するかどうかを指定します。 | true | boolean |
executorService (consumer (上級)) | 指定された EventExecutorGroup を使用します。 | EventExecutorGroup | |
maximumPoolSize (consumer (上級)) | netty consumer が注文したスレッドプールの最大スレッドプールサイズを設定します。デフォルトのサイズは 2 x cpu_core プラス 1 です。この値をたとえば 10 に設定すると、2 x cpu_core に 1 を加えた値がより高い値でない限り、10 スレッドが使用され、オーバーライドされて使用されます。たとえば、8 つのコアがある場合、consumer スレッドプールは 17 になります。このスレッドプールは、Netty から受信したメッセージを Camel がルーティングするために使用されます。メッセージの順序を確認するために別のスレッドプールを使用します。また、一部のメッセージがブロックされた場合に備えて、nettys ワーカースレッド (イベントループ) は影響を受けません。 | int | |
nettyServerBootstrapFactory (consumer (上級)) | カスタム NettyServerBootstrapFactory を使用するには。 | NettyServerBootstrapFactory | |
networkInterface (consumer (上級)) | UDP を使用する場合、このオプションを使用してネットワークインターフェイスをその名前で指定できます (マルチキャストグループに参加するための eth0 など)。 | String | |
noReplyLogLevel (consumer (上級)) | 同期が有効になっている場合、このオプションは NettyConsumer がログに記録するときに使用するログレベルを決定し、返信する応答がありません。 列挙値:
| WARN | LoggingLevel |
serverClosedChannelExceptionCaughtLogLevel (consumer (上級)) | サーバー (NettyConsumer) が java.nio.channels.ClosedChannelException をキャッチすると、このログレベルを使用してログに記録されます。これは、クローズドチャネル例外のログ記録を回避するために使用されます。これは、クライアントが突然切断され、Netty サーバーでクローズド例外のフラッドが発生する可能性があるためです。 列挙値:
| DEBUG | LoggingLevel |
serverExceptionCaughtLogLevel (consumer (上級)) | サーバー (NettyConsumer) が例外をキャッチすると、このログレベルを使用してログに記録されます。 列挙値:
| WARN | LoggingLevel |
serverInitializerFactory (consumer (上級)) | カスタム ServerInitializerFactory を使用するには。 | ServerInitializerFactory | |
usingExecutorService (consumer (上級)) | 順序付けられたスレッドプールを使用して、イベントが同じチャネルで順番に処理されるかどうか。 | true | boolean |
connectTimeout (producer) | ソケット接続が使用可能になるまで待機する時間。値はミリ秒単位です。 | 10000 | int |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
requestTimeout (producer) | リモートサーバーを呼び出すときに、Netty producer のタイムアウトを使用できるようにします。デフォルトでは、タイムアウトは使用されていません。値はミリ秒単位なので、たとえば 30000 は 30 秒です。requestTimeout は、Netty の ReadTimeoutHandler を使用してタイムアウトをトリガーしています。 | long | |
clientInitializerFactory (producer (上級)) | カスタム ClientInitializerFactory を使用するには。 | ClientInitializerFactory | |
correlationManager (producer (上級)) | カスタム相関マネージャーを使用して、netty producer で要求/応答を使用するときに、要求メッセージと応答メッセージがどのようにマップされるかを管理します。これは、要求メッセージと応答メッセージの両方に相関 ID がある場合など、要求を応答と一緒にマップする方法がある場合にのみ使用してください。これは、netty の同じチャネル (別名接続) で同時メッセージを多重化したい場合に使用できます。これを行う場合、リクエストメッセージと応答メッセージを相互に関連付ける方法が必要です。これにより、継続してルーティングされる前に、進行中の Camel エクスチェンジに正しい応答を格納できます。カスタム相関マネージャーを作成するときは、TimeoutCorrelationManagerSupport を拡張することをお勧めします。これにより、タイムアウトや他の方法で実装する必要があるその他の複雑さもサポートされます。詳細については、producerPoolEnabled オプションも参照してください。 | NettyCamelStateCorrelationManager | |
lazyChannelCreation (producer (上級)) | Camel producer の起動時にリモートサーバーが稼働していない場合は、例外を回避するためにチャネルを遅延作成できます。 | true | boolean |
producerPoolEnabled (producer (上級)) | producer プールが有効かどうか。重要: これをオフにすると、リクエスト/リプライを実行している場合にも、単一の共有接続が producer に使用されます。つまり、返信が順不同で戻ってきた場合、インタリーブされた応答に問題が生じる可能性があります。したがって、Camel でメッセージの処理を継続するロールを持つ Camel コールバックに応答を適切に関連付けることができるように、要求メッセージと応答メッセージの両方に相関 ID が必要です。これを行うには、NettyCamelStateCorrelationManager を相関マネージャーとして実装し、correlationManager オプションを介して設定する必要があります。詳細は、correlationManager オプションも参照してください。 | true | boolean |
producerPoolMaxIdle (producer (上級)) | プール内のアイドルインスタンス数の上限を設定します。 | 100 | int |
producerPoolMaxTotal (producer (上級)) | 特定の時間にプールによって割り当てられる (クライアントにチェックアウトされるか、チェックアウトを待機するアイドル) オブジェクトの数に上限を設定します。無制限の場合は負の値を使用します。 | -1 | int |
producerPoolMinEvictableIdle (producer (上級)) | アイドル状態のオブジェクト Evictor によるエビクションの対象となる前に、オブジェクトがプール内でアイドル状態になる最小時間 (ミリ単位の値) を設定します。 | 300000 | long |
producerPoolMinIdle (producer (上級)) | evictor スレッド (アクティブな場合) が新しいオブジェクトを生成する前に、producer プールで許可されるインスタンスの最小数を設定します。 | int | |
udpConnectionlessSending (producer (上級)) | このオプションは接続のない UDP 送信をサポートします。接続された udp send は、受信ポートでリッスンしている人がいない場合、PortUnreachableException を受け取ります。 | false | boolean |
useByteBuf (producer (上級)) | useByteBuf が true の場合、netty producer はメッセージ本文を送信する前に ByteBuf に変換します。 | false | boolean |
ホスト名検証 (セキュリティー) | SSLEngine でのホスト名検証を有効または無効にします。 | false | boolean |
allowSerializedHeaders (上級) | transferExchange が true の場合にのみ TCP に使用されます。true に設定すると、ヘッダーとプロパティーのシリアル化可能なオブジェクトが交換に追加されます。そうしないと、Camel はシリアル化できないオブジェクトを除外し、WARN レベルでログに記録します。 | false | boolean |
autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
channelGroup (上級) | 明示的な ChannelGroup を使用するには。 | ChannelGroup | |
nativeTransport (上級) | NIO の代わりにネイティブトランスポートを使用するかどうか。ネイティブトランスポートはホストオペレーティングシステムを利用し、一部のプラットフォームでのみサポートされます。使用しているホストオペレーティングシステムの netty JAR を追加する必要があります。詳細については、を参照してください。 | false | boolean |
options (上級) | オプションを使用して、追加の netty オプションを設定できます。接頭辞として。たとえば、netty オプション child.keepAlive=false を設定するには、option.child.keepAlive=false とします。使用可能なオプションについては、Netty のドキュメントを参照してください。 | Map | |
receiveBufferSize (上級) | インバウンド通信中に使用される TCP/UDP バッファーサイズ。サイズはバイトです。 | 65536 | int |
receiveBufferSizePredictor (上級) | バッファーサイズプレディクターを設定します。詳細は、Jetty のドキュメントとこのメールスレッドを参照してください。 | int | |
sendBufferSize (上級) | アウトバウンド通信中に使用される TCP/UDP バッファーサイズ。サイズはバイトです。 | 65536 | int |
transferExchange (上級) | TCP にのみ使用されます。ボディーだけでなく、ネットワーク経由でエクスチェンジを転送することができます。In body、Out body、fault body、In ヘッダー、Out ヘッダー、Fault ヘッダー、exchange プロパティー、exchange 例外フィールドが転送されます。これには、オブジェクトがシリアライズ可能である必要があります。Camel はシリアル化できないオブジェクトを除外し、WARN レベルでログに記録します。 | false | boolean |
udpByteArrayCodec (上級) | UDP 専用です。Java シリアライゼーションプロトコルの代わりにバイト配列コーデックの使用を有効にした場合。 | false | boolean |
workerCount (上級) | netty が nio モードで動作する場合、Netty のデフォルトの workerCount パラメーター (cpu_core_threads x 2) を使用します。ユーザーはこのオプションを使用して、Netty のデフォルトの workerCount をオーバーライドできます。 | int | |
workerGroup (上級) | ボススレッドプールとして明示的な EventLoopGroup を使用するには。たとえば、スレッドプールを複数の consumer または producer と共有する場合などです。デフォルトでは、各 consumer または producer には、2 x CPU カウントのコアスレッドを備えた独自のワーカープールがあります。 | EventLoopGroup | |
allowDefaultCodec (codec) | netty コンポーネントは、encoder/decoder が null で textline が false の場合、デフォルトのコーデックをインストールします。allowDefaultCodec を false に設定すると、netty コンポーネントがデフォルトコーデックをフィルターチェーンの最初の要素としてインストールするのを防ぎます。 | true | boolean |
autoAppendDelimiter (codec) | テキストラインコーデックを使用して送信するときに、不足している終了区切り文字を自動追加するかどうか。 | true | boolean |
decoderMaxLineLength (codec) | テキストラインコーデックに使用する行の最大長。 | 1024 | int |
decoders (codec) | 使用するデコーダーのリスト。コンマで区切られた値を持つ文字列を使用して、値をレジストリーで検索することができます。Camel がルックアップする必要があることを認識できるように、値の前に # を付けることを忘れないでください。 | リスト | |
delimiter (codec) | テキストラインコーデックに使用する区切り文字。可能な値は LINE と NULL です。 列挙値:
| LINE | TextLineDelimiter |
encoders (codec) | 使用するエンコーダーのリスト。コンマで区切られた値を持つ文字列を使用して、値をレジストリーで検索することができます。Camel がルックアップする必要があることを認識できるように、値の前に # を付けることを忘れないでください。 | リスト | |
encoding (codec) | テキスト行コーデックに使用するエンコーディング (文字セット名)。指定しない場合、Camel は JVM のデフォルトの文字セットを使用します。 | String | |
textline (codec) | TCP にのみ使用されます。コーデックが指定されていない場合、このフラグを使用して、テキスト行ベースのコーデックを示すことができます。指定されていない場合、または値が false の場合、オブジェクトのシリアル化は TCP 経由であると想定されますが、デフォルトでシリアル化できるのは文字列のみです。 | false | boolean |
enabledProtocols (セキュリティー) | SSL を使用するときに有効にするプロトコル。 | TLSv1,TLSv1.1,TLSv1.2 | String |
keyStoreFile (セキュリティー) | 暗号化に使用されるクライアント側の証明書キーストア。 | File | |
keyStoreFormat (security) | ペイロードの暗号化に使用されるキーストア形式。設定されていない場合、デフォルトで JKS になります。 | String | |
keyStoreResource (security) | 暗号化に使用されるクライアント側の証明書キーストア。デフォルトではクラスパスからロードされますが、classpath:、file:、または http: をプレフィックとして指定して、異なるシステムからリソースをロードすることもできます。 | String | |
needClientAuth (security) | SSL の使用時にサーバーがクライアント認証を必要とするかどうかを設定します。 | false | boolean |
パスフレーズ (セキュリティー) | SSH を使用して送信されたペイロードを暗号化/復号化するために使用するパスワード設定。 | String | |
securityProvider (security) | ペイロードの暗号化に使用するセキュリティープロバイダー。設定されていない場合、デフォルトは SunX509 です。 | String | |
ssl (セキュリティー) | このエンドポイントに SSL 暗号化を適用するかどうかを指定する設定。 | false | boolean |
sslClientCertHeaders (security) | 有効で SSL モードの場合、Netty consumer は、サブジェクト名、発行者名、シリアル番号、有効な日付範囲などのクライアント証明書に関する情報を含むヘッダーで Camel メッセージを強化します。 | false | boolean |
sslContextParameters (security) | SSLContextParameters を使用してセキュリティーを設定する場合。 | SSLContextParameters | |
sslHandler (セキュリティー) | SSL ハンドラーを返すために使用できるクラスへの参照。 | SslHandler | |
trustStoreFile (セキュリティー) | 暗号化に使用されるサーバー側の証明書キーストア。 | File | |
trustStoreResource (security) | 暗号化に使用されるサーバー側の証明書キーストア。デフォルトではクラスパスからロードされますが、classpath:、file:、または http: をプレフィックとして指定して、異なるシステムからリソースをロードすることもできます。 | String | |
useGlobalSslContextParameters (security) | グローバル SSL コンテキストパラメーターの使用を有効にします。 | false | boolean |
46.4. エンドポイントオプション
Netty エンドポイントは、URI 構文を使用して設定されます。
netty:protocol://host:port
パスおよびクエリーパラメーターを使用します。
46.4.1. パスパラメーター (3 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
protocol (共通) | 必須 tcp または udp の使用するプロトコル。 列挙値:
| String | |
host (共通) | 必須 ホスト名。consumer の場合、ホスト名は localhost または 0.0.0.0 です。producer の場合、ホスト名は接続先のリモートホストです。 | String | |
port (共通) | 必須 ホストのポート番号。 | int |
46.4.2. クエリーパラメーター (71 パラメーター)
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
disconnect (共通) | 使用直後に Netty Channel を切断 (クローズ) するかどうか。consumer と producer の両方に使用できます。 | false | boolean |
keepAlive (共通) | 非アクティブのためにソケットが閉じられないようにするための設定。 | true | boolean |
reuseAddress (共通) | ソケットの多重化を容易にするための設定。 | true | boolean |
reuseChannel (共通) | このオプションにより、producer と consumer (クライアントモード) は、エクスチェンジを処理するライフサイクルで同じ Netty チャネルを再利用できます。これは、Camel ルートでサーバーを複数回呼び出す必要があり、同じネットワーク接続を使用したい場合に便利です。これを使用すると、チャネルはエクスチェンジが完了するまで接続プールに返されません。または、切断オプションが true に設定されている場合は切断されます。再利用されたチャネルは、キー NettyConstants#NETTY_CHANNEL を持つエクスチェンジプロパティーとしてエクスチェンジに保存されます。これにより、ルーティング中にチャネルを取得して使用することもできます。 | false | boolean |
sync (共通) | エンドポイントを一方向または要求応答として設定する設定。 | true | boolean |
tcpNoDelay (共通) | TCP プロトコルのパフォーマンスを向上させるための設定。 | true | boolean |
bridgeErrorHandler (consumer) | consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
broadcast (consumer) | UDP 経由のマルチキャストを選択するための設定。 | false | boolean |
clientMode (consumer) | clientMode が true の場合、netty consumer はアドレスを TCP クライアントとして接続します。 | false | boolean |
reconnect (consumer) | consumer の clientMode でのみ使用されます。これが有効になっている場合、consumer は切断時に再接続を試みます。 | true | boolean |
reconnectInterval (consumer) | 再接続し、clientMode が有効になっている場合に使用されます。再接続を試みる間隔 (ミリ秒)。 | 10000 | int |
backlog (consumer (上級)) | netty consumer (server) のバックログを設定できます。バックログは、OS によってはベストエフォートであることに注意してください。このオプションを 200、500、1000 などの値に設定すると、TCP スタックに受け入れキューの長さが通知されます。このオプションが設定されていない場合、バックログは OS の設定に依存します。 | int | |
bossCount (consumer (上級)) | netty が nio モードで動作する場合、Netty のデフォルトの BossCount パラメーターである 1 を使用します。ユーザーはこのオプションを使用して、Netty のデフォルトの BossCount をオーバーライドできます。 | 1 | int |
bossGroup (consumer (上級)) | NettyEndpoint を介してサーバー側の新しい接続を処理するために使用できる BossGroup を設定します。 | EventLoopGroup | |
disconnectOnNoReply (consumer (上級)) | 同期が有効になっている場合、このオプションは、返信がない場合に NettyConsumer を切断するかどうかを指定します。 | true | boolean |
exceptionHandler (consumer (上級)) | consumer によるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、consumer は例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
exchangePattern (consumer (上級)) | consumer がエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
nettyServerBootstrapFactory (consumer (上級)) | カスタム NettyServerBootstrapFactory を使用するには。 | NettyServerBootstrapFactory | |
networkInterface (consumer (上級)) | UDP を使用する場合、このオプションを使用してネットワークインターフェイスをその名前で指定できます (マルチキャストグループに参加するための eth0 など)。 | String | |
noReplyLogLevel (consumer (上級)) | 同期が有効になっている場合、このオプションは NettyConsumer がログに記録するときに使用するログレベルを決定し、返信する応答がありません。 列挙値:
| WARN | LoggingLevel |
serverClosedChannelExceptionCaughtLogLevel (consumer (上級)) | サーバー (NettyConsumer) が java.nio.channels.ClosedChannelException をキャッチすると、このログレベルを使用してログに記録されます。これは、クローズドチャネル例外のログ記録を回避するために使用されます。これは、クライアントが突然切断され、Netty サーバーでクローズド例外のフラッドが発生する可能性があるためです。 列挙値:
| DEBUG | LoggingLevel |
serverExceptionCaughtLogLevel (consumer (上級)) | サーバー (NettyConsumer) が例外をキャッチすると、このログレベルを使用してログに記録されます。 列挙値:
| WARN | LoggingLevel |
serverInitializerFactory (consumer (上級)) | カスタム ServerInitializerFactory を使用するには。 | ServerInitializerFactory | |
usingExecutorService (consumer (上級)) | 順序付けられたスレッドプールを使用して、イベントが同じチャネルで順番に処理されるかどうか。 | true | boolean |
connectTimeout (producer) | ソケット接続が使用可能になるまで待機する時間。値はミリ秒単位です。 | 10000 | int |
lazyStartProducer (producer) | 最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
requestTimeout (producer) | リモートサーバーを呼び出すときに、Netty producer のタイムアウトを使用できるようにします。デフォルトでは、タイムアウトは使用されていません。値はミリ秒単位なので、たとえば 30000 は 30 秒です。requestTimeout は、Netty の ReadTimeoutHandler を使用してタイムアウトをトリガーしています。 | long | |
clientInitializerFactory (producer (上級)) | カスタム ClientInitializerFactory を使用するには。 | ClientInitializerFactory | |
correlationManager (producer (上級)) | カスタム相関マネージャーを使用して、netty producer で要求/応答を使用するときに、要求メッセージと応答メッセージがどのようにマップされるかを管理します。これは、要求メッセージと応答メッセージの両方に相関 ID がある場合など、要求を応答と一緒にマップする方法がある場合にのみ使用してください。これは、netty の同じチャネル (別名接続) で同時メッセージを多重化したい場合に使用できます。これを行う場合、リクエストメッセージと応答メッセージを相互に関連付ける方法が必要です。これにより、継続してルーティングされる前に、進行中の Camel エクスチェンジに正しい応答を格納できます。カスタム相関マネージャーを作成するときは、TimeoutCorrelationManagerSupport を拡張することをお勧めします。これにより、タイムアウトや他の方法で実装する必要があるその他の複雑さもサポートされます。詳細については、producerPoolEnabled オプションも参照してください。 | NettyCamelStateCorrelationManager | |
lazyChannelCreation (producer (上級)) | Camel producer の起動時にリモートサーバーが稼働していない場合は、例外を回避するためにチャネルを遅延作成できます。 | true | boolean |
producerPoolEnabled (producer (上級)) | producer プールが有効かどうか。重要: これをオフにすると、リクエスト/リプライを実行している場合にも、単一の共有接続が producer に使用されます。つまり、返信が順不同で戻ってきた場合、インタリーブされた応答に問題が生じる可能性があります。したがって、Camel でメッセージの処理を継続するロールを持つ Camel コールバックに応答を適切に関連付けることができるように、要求メッセージと応答メッセージの両方に相関 ID が必要です。これを行うには、NettyCamelStateCorrelationManager を相関マネージャーとして実装し、correlationManager オプションを介して設定する必要があります。詳細は、correlationManager オプションも参照してください。 | true | boolean |
producerPoolMaxIdle (producer (上級)) | プール内のアイドルインスタンス数の上限を設定します。 | 100 | int |
producerPoolMaxTotal (producer (上級)) | 特定の時間にプールによって割り当てられる (クライアントにチェックアウトされるか、チェックアウトを待機するアイドル) オブジェクトの数に上限を設定します。無制限の場合は負の値を使用します。 | -1 | int |
producerPoolMinEvictableIdle (producer (上級)) | アイドル状態のオブジェクト Evictor によるエビクションの対象となる前に、オブジェクトがプール内でアイドル状態になる最小時間 (ミリ単位の値) を設定します。 | 300000 | long |
producerPoolMinIdle (producer (上級)) | evictor スレッド (アクティブな場合) が新しいオブジェクトを生成する前に、producer プールで許可されるインスタンスの最小数を設定します。 | int | |
udpConnectionlessSending (producer (上級)) | このオプションは接続のない UDP 送信をサポートします。接続された udp send は、受信ポートでリッスンしている人がいない場合、PortUnreachableException を受け取ります。 | false | boolean |
useByteBuf (producer (上級)) | useByteBuf が true の場合、netty producer はメッセージ本文を送信する前に ByteBuf に変換します。 | false | boolean |
ホスト名検証 (セキュリティー) | SSLEngine でのホスト名検証を有効または無効にします。 | false | boolean |
allowSerializedHeaders (上級) | transferExchange が true の場合にのみ TCP に使用されます。true に設定すると、ヘッダーとプロパティーのシリアル化可能なオブジェクトが交換に追加されます。そうしないと、Camel はシリアル化できないオブジェクトを除外し、WARN レベルでログに記録します。 | false | boolean |
channelGroup (上級) | 明示的な ChannelGroup を使用するには。 | ChannelGroup | |
nativeTransport (上級) | NIO の代わりにネイティブトランスポートを使用するかどうか。ネイティブトランスポートはホストオペレーティングシステムを利用し、一部のプラットフォームでのみサポートされます。使用しているホストオペレーティングシステムの netty JAR を追加する必要があります。詳細については、を参照してください。 | false | boolean |
options (上級) | オプションを使用して、追加の netty オプションを設定できます。接頭辞として。たとえば、netty オプション child.keepAlive=false を設定するには、option.child.keepAlive=false とします。使用可能なオプションについては、Netty のドキュメントを参照してください。 | Map | |
receiveBufferSize (上級) | インバウンド通信中に使用される TCP/UDP バッファーサイズ。サイズはバイトです。 | 65536 | int |
receiveBufferSizePredictor (上級) | バッファーサイズプレディクターを設定します。詳細は、Jetty のドキュメントとこのメールスレッドを参照してください。 | int | |
sendBufferSize (上級) | アウトバウンド通信中に使用される TCP/UDP バッファーサイズ。サイズはバイトです。 | 65536 | int |
synchronous (上級) | 同期処理を厳密に使用するかどうかを設定します。 | false | boolean |
transferExchange (上級) | TCP にのみ使用されます。ボディーだけでなく、ネットワーク経由でエクスチェンジを転送することができます。In body、Out body、fault body、In ヘッダー、Out ヘッダー、Fault ヘッダー、exchange プロパティー、exchange 例外フィールドが転送されます。これには、オブジェクトがシリアライズ可能である必要があります。Camel はシリアル化できないオブジェクトを除外し、WARN レベルでログに記録します。 | false | boolean |
udpByteArrayCodec (上級) | UDP 専用です。Java シリアライゼーションプロトコルの代わりにバイト配列コーデックの使用を有効にした場合。 | false | boolean |
workerCount (上級) | netty が nio モードで動作する場合、Netty のデフォルトの workerCount パラメーター (cpu_core_threads x 2) を使用します。ユーザーはこのオプションを使用して、Netty のデフォルトの workerCount をオーバーライドできます。 | int | |
workerGroup (上級) | ボススレッドプールとして明示的な EventLoopGroup を使用するには。たとえば、スレッドプールを複数の consumer または producer と共有する場合などです。デフォルトでは、各 consumer または producer には、2 x CPU カウントのコアスレッドを備えた独自のワーカープールがあります。 | EventLoopGroup | |
allowDefaultCodec (codec) | netty コンポーネントは、encoder/decoder が null で textline が false の場合、デフォルトのコーデックをインストールします。allowDefaultCodec を false に設定すると、netty コンポーネントがデフォルトコーデックをフィルターチェーンの最初の要素としてインストールするのを防ぎます。 | true | boolean |
autoAppendDelimiter (codec) | テキストラインコーデックを使用して送信するときに、不足している終了区切り文字を自動追加するかどうか。 | true | boolean |
decoderMaxLineLength (codec) | テキストラインコーデックに使用する行の最大長。 | 1024 | int |
decoders (codec) | 使用するデコーダーのリスト。コンマで区切られた値を持つ文字列を使用して、値をレジストリーで検索することができます。Camel がルックアップする必要があることを認識できるように、値の前に # を付けることを忘れないでください。 | リスト | |
delimiter (codec) | テキストラインコーデックに使用する区切り文字。可能な値は LINE と NULL です。 列挙値:
| LINE | TextLineDelimiter |
encoders (codec) | 使用するエンコーダーのリスト。コンマで区切られた値を持つ文字列を使用して、値をレジストリーで検索することができます。Camel がルックアップする必要があることを認識できるように、値の前に # を付けることを忘れないでください。 | リスト | |
encoding (codec) | テキスト行コーデックに使用するエンコーディング (文字セット名)。指定しない場合、Camel は JVM のデフォルトの文字セットを使用します。 | String | |
textline (codec) | TCP にのみ使用されます。コーデックが指定されていない場合、このフラグを使用して、テキスト行ベースのコーデックを示すことができます。指定されていない場合、または値が false の場合、オブジェクトのシリアル化は TCP 経由であると想定されますが、デフォルトでシリアル化できるのは文字列のみです。 | false | boolean |
enabledProtocols (セキュリティー) | SSL を使用するときに有効にするプロトコル。 | TLSv1,TLSv1.1,TLSv1.2 | String |
keyStoreFile (セキュリティー) | 暗号化に使用されるクライアント側の証明書キーストア。 | File | |
keyStoreFormat (security) | ペイロードの暗号化に使用されるキーストア形式。設定されていない場合、デフォルトで JKS になります。 | String | |
keyStoreResource (security) | 暗号化に使用されるクライアント側の証明書キーストア。デフォルトではクラスパスからロードされますが、classpath:、file:、または http: をプレフィックとして指定して、異なるシステムからリソースをロードすることもできます。 | String | |
needClientAuth (security) | SSL の使用時にサーバーがクライアント認証を必要とするかどうかを設定します。 | false | boolean |
パスフレーズ (セキュリティー) | SSH を使用して送信されたペイロードを暗号化/復号化するために使用するパスワード設定。 | String | |
securityProvider (security) | ペイロードの暗号化に使用するセキュリティープロバイダー。設定されていない場合、デフォルトは SunX509 です。 | String | |
ssl (セキュリティー) | このエンドポイントに SSL 暗号化を適用するかどうかを指定する設定。 | false | boolean |
sslClientCertHeaders (security) | 有効で SSL モードの場合、Netty consumer は、サブジェクト名、発行者名、シリアル番号、有効な日付範囲などのクライアント証明書に関する情報を含むヘッダーで Camel メッセージを強化します。 | false | boolean |
sslContextParameters (security) | SSLContextParameters を使用してセキュリティーを設定する場合。 | SSLContextParameters | |
sslHandler (セキュリティー) | SSL ハンドラーを返すために使用できるクラスへの参照。 | SslHandler | |
trustStoreFile (セキュリティー) | 暗号化に使用されるサーバー側の証明書キーストア。 | File | |
trustStoreResource (security) | 暗号化に使用されるサーバー側の証明書キーストア。デフォルトではクラスパスからロードされますが、classpath:、file:、または http: をプレフィックとして指定して、異なるシステムからリソースをロードすることもできます。 | String |
46.5. レジストリーベースのオプション
コーデックハンドラーと SSL キーストアは、Spring XML ファイルなどのレジストリーに登録できます。渡すことができる値は次のとおりです。
名前 | 説明 |
---|---|
| SSH を使用して送信されたペイロードを暗号化/復号化するために使用するパスワード設定 |
| ペイロードの暗号化に使用されるキーストア形式。設定されていない場合、デフォルトは JKS |
| ペイロードの暗号化に使用するセキュリティープロバイダー。設定されていない場合、デフォルトは SunX509 です。 |
| 非推奨: 暗号化に使用されるクライアント側の証明書キーストア |
| 非推奨: 暗号化に使用されるサーバー側の証明書キーストア |
|
暗号化に使用されるクライアント側の証明書キーストア。デフォルトではクラスパスからロードされますが、 |
|
暗号化に使用されるサーバー側の証明書キーストア。デフォルトではクラスパスからロードされますが、 |
| SSL ハンドラーを返すために使用できるクラスへの参照 |
|
送信ペイロードの特別なマーシャリングを実行するために使用できるカスタム |
| 使用するエンコーダーのリスト。コンマで区切られた値を持つ文字列を使用して、値をレジストリーで検索することができます。Camel がルックアップする必要があることを認識できるように、値の前に # を付けることを忘れないでください。 |
|
受信ペイロードの特別なマーシャリングを実行するために使用できるカスタム |
| 使用するデコーダーのリスト。コンマで区切られた値を持つ文字列を使用して、値をレジストリーで検索することができます。Camel がルックアップする必要があることを認識できるように、値の前に # を付けることを忘れないでください。 |
共有不可能なエンコーダー/デコーダーの使用については、以下をお読みください。
46.6. Netty エンドポイントとの間でメッセージを送信する
46.6.1. Netty producer
Producer モードでは、コンポーネントは、TCP または UDP プロトコル (オプションの SSL サポート付き) を使用してペイロードをソケットエンドポイントに送信する機能を提供します。
producer モードは、一方向および要求/応答ベースの操作の両方をサポートします。
46.6.2. Netty consumer
consumer モードでは、コンポーネントは次の機能を提供します。
- TCP または UDP プロトコル (オプションの SSL サポート付き) を使用して、指定されたソケットでリッスンします。
- text/xml、バイナリーおよびシリアライズされたオブジェクトベースのペイロードを使用してソケットでリクエストを受信し、
- メッセージ交換としてルートに沿ってそれらを送信します。
consumer モードは、一方向および要求/応答ベースの操作の両方をサポートします。
46.7. 例
46.7.1. Request-Reply とシリアライズされたオブジェクトペイロードを使用する UDP Netty エンドポイント
オブジェクトのシリアライズはデフォルトでは許可されていないため、デコーダーを設定する必要があることに注意してください。
@BindToRegistry("decoder") public ChannelHandler getDecoder() throws Exception { return new DefaultChannelHandlerFactory() { @Override public ChannelHandler newChannelHandler() { return new DatagramPacketObjectDecoder(ClassResolvers.weakCachingResolver(null)); } }; } RouteBuilder builder = new RouteBuilder() { public void configure() { from("netty:udp://0.0.0.0:5155?sync=true&decoders=#decoder") .process(new Processor() { public void process(Exchange exchange) throws Exception { Poetry poetry = (Poetry) exchange.getIn().getBody(); // Process poetry in some way exchange.getOut().setBody("Message received); } } } };
46.7.2. 一方向通信を使用する TCP ベースの Netty consumer エンドポイント
RouteBuilder builder = new RouteBuilder() { public void configure() { from("netty:tcp://0.0.0.0:5150") .to("mock:result"); } };
46.7.3. Request-Reply 通信を使用する SSL/TCP ベースの Netty consumer エンドポイント
JSSE 設定ユーティリティーの使用
Netty コンポーネントは、Camel JSSE Configuration Utility を介して SSL/TLS 設定をサポートします。このユーティリティーは、記述する必要があるコンポーネント固有のコードの量を大幅に削減し、エンドポイントおよびコンポーネントレベルで設定できます。次の例は、Netty コンポーネントでユーティリティーを使用する方法を示しています。
コンポーネントのプログラムによる設定
KeyStoreParameters ksp = new KeyStoreParameters(); ksp.setResource("/users/home/server/keystore.jks"); ksp.setPassword("keystorePassword"); KeyManagersParameters kmp = new KeyManagersParameters(); kmp.setKeyStore(ksp); kmp.setKeyPassword("keyPassword"); SSLContextParameters scp = new SSLContextParameters(); scp.setKeyManagers(kmp); NettyComponent nettyComponent = getContext().getComponent("netty", NettyComponent.class); nettyComponent.setSslContextParameters(scp);
エンドポイントの Spring DSL ベースの設定
... <camel:sslContextParameters id="sslContextParameters"> <camel:keyManagers keyPassword="keyPassword"> <camel:keyStore resource="/users/home/server/keystore.jks" password="keystorePassword"/> </camel:keyManagers> </camel:sslContextParameters>... ... <to uri="netty:tcp://0.0.0.0:5150?sync=true&ssl=true&sslContextParameters=#sslContextParameters"/> ...
Jetty コンポーネントでの基本的な SSL/TLS 設定の使用
Registry registry = context.getRegistry(); registry.bind("password", "changeit"); registry.bind("ksf", new File("src/test/resources/keystore.jks")); registry.bind("tsf", new File("src/test/resources/keystore.jks")); context.addRoutes(new RouteBuilder() { public void configure() { String netty_ssl_endpoint = "netty:tcp://0.0.0.0:5150?sync=true&ssl=true&passphrase=#password" + "&keyStoreFile=#ksf&trustStoreFile=#tsf"; String return_string = "When You Go Home, Tell Them Of Us And Say," + "For Your Tomorrow, We Gave Our Today."; from(netty_ssl_endpoint) .process(new Processor() { public void process(Exchange exchange) throws Exception { exchange.getOut().setBody(return_string); } } } });
SSLSession とクライアント証明書へのアクセスを取得する
たとえば、クライアント証明書に関する詳細を取得する必要がある場合は、javax.net.ssl.SSLSession
にアクセスできます。ssl=true
の場合、以下に示すように、Netty コンポーネントは SSLSession
を Camel メッセージのヘッダーとして保存します。
SSLSession session = exchange.getIn().getHeader(NettyConstants.NETTY_SSL_SESSION, SSLSession.class); // get the first certificate which is client certificate javax.security.cert.X509Certificate cert = session.getPeerCertificateChain()[0]; Principal principal = cert.getSubjectDN();
クライアントを認証するには、必ず needClientAuth=true
を設定してください。そうしないと、SSLSession
はクライアント証明書に関する情報にアクセスできず、例外 javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
が発生する可能性があります。クライアント証明書の有効期限が切れているか、有効でない場合などにも、この例外が発生する可能性があります。
オプション sslClientCertHeaders を
true
に設定すると、Camel メッセージがクライアント証明書に関する詳細を含むヘッダーで強化されます。たとえば、サブジェクト名はヘッダー CamelNettySSLClientCertSubjectName
ですぐに利用できます。
46.7.4. 複数のコーデックの使用
場合によっては、エンコーダーとデコーダーのチェーンを netty パイプラインに追加する必要があります。複数のコーデックを camel netty エンドポイントに追加するには、'encoders' および 'decoders' uri パラメーターを使用する必要があります。encoder および decoder パラメーターと同様に、パイプラインに追加する必要がある参照 (ChannelUpstreamHandlers および ChannelDownstreamHandlers のリスト) を提供するために使用されます。エンコーダーが指定されている場合、デコーダーとデコーダーのパラメーターと同様に、エンコーダーのパラメーターは無視されることに注意してください。
共有不可能なエンコーダー/デコーダーの使用については、上記をお読みください。
エンドポイントの作成時に解決できるように、コーデックのリストを Camel のレジストリーに追加する必要があります。
ChannelHandlerFactory lengthDecoder = ChannelHandlerFactories.newLengthFieldBasedFrameDecoder(1048576, 0, 4, 0, 4); StringDecoder stringDecoder = new StringDecoder(); registry.bind("length-decoder", lengthDecoder); registry.bind("string-decoder", stringDecoder); LengthFieldPrepender lengthEncoder = new LengthFieldPrepender(4); StringEncoder stringEncoder = new StringEncoder(); registry.bind("length-encoder", lengthEncoder); registry.bind("string-encoder", stringEncoder); List<ChannelHandler> decoders = new ArrayList<ChannelHandler>(); decoders.add(lengthDecoder); decoders.add(stringDecoder); List<ChannelHandler> encoders = new ArrayList<ChannelHandler>(); encoders.add(lengthEncoder); encoders.add(stringEncoder); registry.bind("encoders", encoders); registry.bind("decoders", decoders);
Spring のネイティブコレクションサポートを使用して、アプリケーションコンテキストでコーデックリストを指定できます。
<util:list id="decoders" list-class="java.util.LinkedList"> <bean class="org.apache.camel.component.netty.ChannelHandlerFactories" factory-method="newLengthFieldBasedFrameDecoder"> <constructor-arg value="1048576"/> <constructor-arg value="0"/> <constructor-arg value="4"/> <constructor-arg value="0"/> <constructor-arg value="4"/> </bean> <bean class="io.netty.handler.codec.string.StringDecoder"/> </util:list> <util:list id="encoders" list-class="java.util.LinkedList"> <bean class="io.netty.handler.codec.LengthFieldPrepender"> <constructor-arg value="4"/> </bean> <bean class="io.netty.handler.codec.string.StringEncoder"/> </util:list> <bean id="length-encoder" class="io.netty.handler.codec.LengthFieldPrepender"> <constructor-arg value="4"/> </bean> <bean id="string-encoder" class="io.netty.handler.codec.string.StringEncoder"/> <bean id="length-decoder" class="org.apache.camel.component.netty.ChannelHandlerFactories" factory-method="newLengthFieldBasedFrameDecoder"> <constructor-arg value="1048576"/> <constructor-arg value="0"/> <constructor-arg value="4"/> <constructor-arg value="0"/> <constructor-arg value="4"/> </bean> <bean id="string-decoder" class="io.netty.handler.codec.string.StringDecoder"/>
Bean 名は、netty エンドポイント定義でコンマ区切りのリストとして使用するか、リストに含めることができます。
from("direct:multiple-codec").to("netty:tcp://0.0.0.0:{{port}}?encoders=#encoders&sync=false"); from("netty:tcp://0.0.0.0:{{port}}?decoders=#length-decoder,#string-decoder&sync=false").to("mock:multiple-codec");
または XML 経由。
<camelContext id="multiple-netty-codecs-context" xmlns="http://camel.apache.org/schema/spring"> <route> <from uri="direct:multiple-codec"/> <to uri="netty:tcp://0.0.0.0:5150?encoders=#encoders&sync=false"/> </route> <route> <from uri="netty:tcp://0.0.0.0:5150?decoders=#length-decoder,#string-decoder&sync=false"/> <to uri="mock:multiple-codec"/> </route> </camelContext>
46.8. 完了時にチャネルを閉じる
サーバーとして機能している場合、たとえばクライアントの変換が終了したときにチャネルを閉じたい場合があります。
これは、エンドポイントオプションの disconnect=true
を設定するだけで実行できます。
ただし、次のようにメッセージごとに Camel に指示することもできます。
Camel にチャネルを閉じるように指示するには、キー CamelNettyCloseChannelWhenComplete
をブール値 true
に設定したヘッダーを追加する必要があります。
たとえば、次の例では、bye メッセージをクライアントに書き戻した後にチャネルを閉じます。
from("netty:tcp://0.0.0.0:8080").process(new Processor() { public void process(Exchange exchange) throws Exception { String body = exchange.getIn().getBody(String.class); exchange.getOut().setBody("Bye " + body); // some condition which determines if we should close if (close) { exchange.getOut().setHeader(NettyConstants.NETTY_CLOSE_CHANNEL_WHEN_COMPLETE, true); } } });
カスタムチャネルパイプラインファクトリーを追加して、作成されたパイプラインを完全に制御します。
46.9. カスタムパイプライン
カスタムチャネルパイプラインは、Netty エンドポイント URL で非常に簡単な方法で指定することなく、カスタムハンドラー、エンコーダー、デコーダーを挿入することで、ハンドラー/インターセプターチェーンを完全に制御します。
カスタムパイプラインを追加するには、カスタムチャネルパイプラインファクトリーを作成し、コンテキストレジストリー (Registry、または camel-spring ApplicationContextRegistry など) を介してコンテキストに登録する必要があります。
カスタムパイプラインファクトリーは、次のように構築する必要があります。
-
producer にリンクされたチャネルパイプラインファクトリーは、抽象クラス
ClientPipelineFactory
を拡張する必要があります。 -
consumer リンクチャネルパイプラインファクトリーは、抽象クラス
ServerInitializerFactory
を拡張する必要があります。 -
カスタムハンドラー、エンコーダ、およびデコーダを挿入するには、クラスで initChannel () メソッドをオーバーライドする必要があります。
initChannel()
メソッドをオーバーライドしないと、パイプラインに接続されたハンドラー、エンコーダー、またはデコーダーのないパイプラインが作成されます。
以下の例は、ServerInitializerFactory ファクトリーを作成する方法を示しています。
46.9.1. カスタムパイプラインファクトリーの使用
public class SampleServerInitializerFactory extends ServerInitializerFactory { private int maxLineSize = 1024; protected void initChannel(Channel ch) throws Exception { ChannelPipeline channelPipeline = ch.pipeline(); channelPipeline.addLast("encoder-SD", new StringEncoder(CharsetUtil.UTF_8)); channelPipeline.addLast("decoder-DELIM", new DelimiterBasedFrameDecoder(maxLineSize, true, Delimiters.lineDelimiter())); channelPipeline.addLast("decoder-SD", new StringDecoder(CharsetUtil.UTF_8)); // here we add the default Camel ServerChannelHandler for the consumer, to allow Camel to route the message etc. channelPipeline.addLast("handler", new ServerChannelHandler(consumer)); } }
次に、カスタムチャネルパイプラインファクトリーをレジストリーに追加し、次の方法でキャメルルートでインスタンス化/利用できます。
Registry registry = camelContext.getRegistry(); ServerInitializerFactory factory = new TestServerInitializerFactory(); registry.bind("spf", factory); context.addRoutes(new RouteBuilder() { public void configure() { String netty_ssl_endpoint = "netty:tcp://0.0.0.0:5150?serverInitializerFactory=#spf" String return_string = "When You Go Home, Tell Them Of Us And Say," + "For Your Tomorrow, We Gave Our Today."; from(netty_ssl_endpoint) .process(new Processor() { public void process(Exchange exchange) throws Exception { exchange.getOut().setBody(return_string); } } } });
46.10. Netty ボスおよびワーカースレッドプールの再利用
Netty には、ボスとワーカーの 2 種類のスレッドプールがあります。デフォルトでは、各 Netty consumer と producer にはプライベートスレッドプールがあります。複数の consumer または producer 間でこれらのスレッドプールを再利用する場合は、スレッドプールを作成してレジストリーに登録する必要があります。
たとえば、Spring XML を使用すると、以下に示すように、2 つのワーカースレッドを持つ NettyWorkerPoolBuilder
を使用して共有ワーカースレッドプールを作成できます。
<!-- use the worker pool builder to help create the shared thread pool --> <bean id="poolBuilder" class="org.apache.camel.component.netty.NettyWorkerPoolBuilder"> <property name="workerCount" value="2"/> </bean> <!-- the shared worker thread pool --> <bean id="sharedPool" class="org.jboss.netty.channel.socket.nio.WorkerPool" factory-bean="poolBuilder" factory-method="build" destroy-method="shutdown"> </bean>
Boss スレッドプールには、Netty consumer 用の org.apache.camel.component.netty.NettyServerBossPoolBuilder
ビルダーと、Netty producer 用の org.apache.camel.component.netty.NettyClientBossPoolBuilder
があります。
次に、Camel ルートで、以下に示すように URI で workerPool
オプションを設定することにより、このワーカープールを参照できます。
<route> <from uri="netty:tcp://0.0.0.0:5021?textline=true&sync=true&workerPool=#sharedPool&usingExecutorService=false"/> <to uri="log:result"/> ... </route>
別のルートがある場合は、共有ワーカープールを参照できます。
<route> <from uri="netty:tcp://0.0.0.0:5022?textline=true&sync=true&workerPool=#sharedPool&usingExecutorService=false"/> <to uri="log:result"/> ... </route>
などがあります。
46.11. リクエスト/リプライによる単一接続での同時メッセージの多重化
netty producer を介した要求/応答メッセージングに Netty を使用する場合、デフォルトでは、各メッセージは非共有接続 (プール) を介して送信されます。これにより、返信が自動的に正しいリクエストスレッドにマップされ、Camel でさらにルーティングできるようになります。言い換えると、リクエスト/リプライメッセージ間の相関関係は、リクエストの送信に使用されたのと同じ接続でリプライが返されるため、すぐに使用できます。この接続は他のユーザーと共有されません。応答が戻ってくると、接続は接続プールに戻され、他のユーザーが再利用できるようになります。
ただし、単一の共有接続で同時要求/応答を多重化したい場合は、producerPoolEnabled=false
を設定して接続プールをオフにする必要があります。これは、返信が順不同で戻ってきた場合、インタリーブされた応答に潜在的な問題があることを意味します。したがって、Camel でメッセージの処理を継続するロールを持つ Camel コールバックに応答を適切に関連付けることができるように、要求メッセージと応答メッセージの両方に相関 ID が必要です。これを行うには、NettyCamelStateCorrelationManager
を相関マネージャーとして実装し、correlationManager=#myManager
オプションを介して設定する必要があります。
カスタム相関マネージャーを作成するときは、TimeoutCorrelationManagerSupport
を拡張することをお勧めします。これにより、タイムアウトや他の方法で実装する必要があるその他の複雑さもサポートされます。
camel-example-netty-custom-correlation
ディレクトリーの下の examples ディレクトリーに、Apache Camel ソースコードの例があります。
46.12. Spring Boot 自動設定
Spring Boot で Netty を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-netty-starter</artifactId> </dependency>
コンポーネントは、以下に記載される 74 のオプションをサポートします。
名前 | 説明 | デフォルト | タイプ |
---|---|---|---|
camel.component.netty.allow-default-codec | netty コンポーネントは、encoder/decoder が null で textline が false の場合、デフォルトのコーデックをインストールします。allowDefaultCodec を false に設定すると、netty コンポーネントがデフォルトコーデックをフィルターチェーンの最初の要素としてインストールするのを防ぎます。 | true | Boolean |
camel.component.netty.allow-serialized-headers | transferExchange が true の場合にのみ TCP に使用されます。true に設定すると、ヘッダーとプロパティーのシリアル化可能なオブジェクトが交換に追加されます。そうしないと、Camel はシリアル化できないオブジェクトを除外し、WARN レベルでログに記録します。 | false | Boolean |
camel.component.netty.auto-append-delimiter | テキストラインコーデックを使用して送信するときに、不足している終了区切り文字を自動追加するかどうか。 | true | Boolean |
camel.component.netty.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | Boolean |
camel.component.netty.backlog | netty consumer (server) のバックログを設定できます。バックログは、OS によってはベストエフォートであることに注意してください。このオプションを 200、500、1000 などの値に設定すると、TCP スタックに受け入れキューの長さが通知されます。このオプションが設定されていない場合、バックログは OS の設定に依存します。 | Integer | |
camel.component.netty.boss-count | netty が nio モードで動作する場合、Netty のデフォルトの BossCount パラメーターである 1 を使用します。ユーザーはこのオプションを使用して、Netty のデフォルトの BossCount をオーバーライドできます。 | 1 | Integer |
camel.component.netty.boss-group | NettyEndpoint を介してサーバー側の新しい接続を処理するために使用できる BossGroup を設定します。オプションは io.nett |