Camel Spring Boot リファレンス


Red Hat Integration 2023.q2

Camel Spring Boot リファレンス

Red Hat Integration Documentation Team Integration Support Team http://access.redhat.com/support

概要

本ガイドでは、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 のいずれかです。

列挙値:

  • 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
  • CACHE_CONNECTION
  • CACHE_CONSUMER
  • CACHE_NONE
  • CACHE_SESSION

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 が決まります。

列挙値:

  • Simple (単純)
  • デフォルト
  • カスタム

デフォルト

ConsumerType

defaultTaskExecutorType (consumer (上級))

consumer エンドポイントとプロデューサエンドポイントの ReplyTo consumer の両方に対して、DefaultMessageListenerContainer で使用するデフォルトの TaskExecutor タイプを指定します。可能な値: SimpleAsync (Spring の SimpleAsyncTaskExecutor を使用) または ThreadPool (Spring の ThreadPoolTaskExecutor を最適な値で使用 - キャッシュされたスレッドプールのようなもの)。設定されていない場合は、デフォルトで以前の動作になり、consumer エンドポイントにはキャッシュされたスレッドプールが使用され、応答 consumer には SimpleAsync が使用されます。ThreadPool の使用は、同時 consumer が動的に増減するエラスティック設定でスレッドのゴミを減らすために推奨されます。

列挙値:

  • ThreadPool
  • SimpleAsync
 

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 が決まります。

列挙値:

  • Simple (単純)
  • デフォルト
  • カスタム

デフォルト

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。

列挙値:

  • 1
  • 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 オプションも有効にする必要があります。

列挙値:

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

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 のドキュメントを参照してください。特に、クラスター化された環境で実行する場合の影響に関する注意事項と、共有応答キューは代替の一時および排他的キューよりもパフォーマンスが低いという事実を参照してください。

列挙値:

  • Temporary
  • 共有
  • 排他的
 

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 などのより高い値を使用する必要があります。

列挙値:

  • CACHE_AUTO
  • CACHE_CONNECTION
  • CACHE_CONSUMER
  • CACHE_NONE
  • 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 の独自の実装を提供し、# 表記を使用して参照できます。

列挙値:

  • default
  • パススルー
 

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 ログレベルを設定できます。

列挙値:

  • TRACE
  • DEBUG
  • INFO
  • WARN
  • ERROR
  • OFF

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
  • topic
  • temp-queue
  • temp-topic

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 のいずれかです。

列挙値:

  • 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
  • CACHE_CONNECTION
  • CACHE_CONSUMER
  • CACHE_NONE
  • CACHE_SESSION

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 が決まります。

列挙値:

  • Simple (単純)
  • デフォルト
  • カスタム

デフォルト

ConsumerType

defaultTaskExecutorType (consumer (上級))

consumer エンドポイントとプロデューサエンドポイントの ReplyTo consumer の両方に対して、DefaultMessageListenerContainer で使用するデフォルトの TaskExecutor タイプを指定します。可能な値: SimpleAsync (Spring の SimpleAsyncTaskExecutor を使用) または ThreadPool (Spring の ThreadPoolTaskExecutor を最適な値で使用 - キャッシュされたスレッドプールのようなもの)。設定されていない場合は、デフォルトで以前の動作になり、consumer エンドポイントにはキャッシュされたスレッドプールが使用され、応答 consumer には SimpleAsync が使用されます。ThreadPool の使用は、同時 consumer が動的に増減するエラスティック設定でスレッドのゴミを減らすために推奨されます。

列挙値:

  • ThreadPool
  • SimpleAsync
 

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 がエクスチェンジを作成する際に交換パターンを設定します。

列挙値:

  • InOnly
  • InOut
  • InOptionalOut
 

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 が決まります。

列挙値:

  • Simple (単純)
  • デフォルト
  • カスタム

デフォルト

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。

列挙値:

  • 1
  • 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 オプションも有効にする必要があります。

列挙値:

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

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 のドキュメントを参照してください。特に、クラスター化された環境で実行する場合の影響に関する注意事項と、共有応答キューは代替の一時および排他的キューよりもパフォーマンスが低いという事実を参照してください。

列挙値:

  • Temporary
  • 共有
  • 排他的
 

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 などのより高い値を使用する必要があります。

列挙値:

  • CACHE_AUTO
  • CACHE_CONNECTION
  • CACHE_CONSUMER
  • CACHE_NONE
  • 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 の独自の実装を提供し、# 表記を使用して参照できます。

列挙値:

  • default
  • パススルー
 

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 ログレベルを設定できます。

列挙値:

  • TRACE
  • DEBUG
  • INFO
  • WARN
  • ERROR
  • OFF

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 クライアントをインスタンス化する際にプロキシープロトコルを定義します。

列挙値:

  • HTTP
  • HTTPS

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 クライアントをインスタンス化する際にプロキシープロトコルを定義します。

列挙値:

  • HTTP
  • HTTPS

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 によって評価されるメッセージヘッダー

ヘッダータイプ説明

CamelAwsCwMetricName

String

Amazon CW メトリクス名。

CamelAwsCwMetricValue

double

Amazon CW メトリクス値。

CamelAwsCwMetricUnit

String

Amazon CW メトリクスユニット。

CamelAwsCwMetricNamespace

String

Amazon CW メトリクス namespace。

CamelAwsCwMetricTimestamp

日付

Amazon CW メトリクスのタイムスタンプ。

CamelAwsCwMetricDimensionName

String

Amazon CW メトリクスディメンション名。

CamelAwsCwMetricDimensionValue

String

Amazon CW メトリクスディメンション値。

CamelAwsCwMetricDimensions

Map<String, String>

ディメンション名とディメンション値のマップ。

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)

実行する操作。

列挙値:

  • BatchGetItems
  • DeleteItem
  • DeleteTable
  • DescribeTable
  • GetItem
  • PutItem
  • クエリー
  • スキャン
  • UpdateItem
  • UpdateTable

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 クライアントをインスタンス化する際にプロキシープロトコルを定義します。

列挙値:

  • HTTP
  • HTTPS

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)

実行する操作。

列挙値:

  • BatchGetItems
  • DeleteItem
  • DeleteTable
  • DescribeTable
  • GetItem
  • PutItem
  • クエリー
  • スキャン
  • UpdateItem
  • UpdateTable

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 クライアントをインスタンス化する際にプロキシープロトコルを定義します。

列挙値:

  • HTTP
  • HTTPS

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 によって評価されるメッセージヘッダー

ヘッダータイプ説明

CamelAwsDdbBatchItems

Map<String, KeysAndAttributes>

プライマリーキーによって取得するテーブル名と対応する項目のマップ。

CamelAwsDdbTableName

String

この操作のテーブル名。

CamelAwsDdbKey

キー

テーブル内の各項目を一意に識別するプライマリーキー。

CamelAwsDdbReturnValues

String

変更前または変更後の属性の名前および値のペアを取得する場合は、このパラメーターを使用します (NONE、ALL_OLD、UPDATED_OLD、ALL_NEW、UPDATED_NEW)。

CamelAwsDdbUpdateCondition

Map<String, ExpectedAttributeValue>

条件変更の属性を指定します。

CamelAwsDdbAttributeNames

Collection<String>

属性名が指定されていない場合、すべての属性が返されます。

CamelAwsDdbConsistentRead

Boolean

true に設定すると、一貫性のある読み取りが発行されます。それ以外の場合は、最終的に一貫性が使用されます。

CamelAwsDdbIndexName

String

設定されている場合、クエリー操作のセカンダリーインデックスとして使用されます。

CamelAwsDdbItem

Map<String, AttributeValue>

アイテムの属性のマップ。アイテムを定義するプライマリーキー値を含める必要があります。

CamelAwsDdbExactCount

Boolean

true に設定すると、Amazon DynamoDB は、一致する項目とその属性のリストではなく、クエリーパラメーターに一致する項目の総数を返します。

CamelAwsDdbKeyConditions

Map<String, Condition>

このヘッダーはクエリーの選択基準を指定し、2 つの古いヘッダー CamelAwsDdbHashKeyValue および CamelAwsDdbScanRangeKeyCondition をマージします。

CamelAwsDdbStartKey

キー

以前のクエリーを続行するアイテムのプライマリーキー。

CamelAwsDdbHashKeyValue

AttributeValue

複合プライマリーキーのハッシュコンポーネントの値。

CamelAwsDdbLimit

Integer

返すアイテムの最大数。

CamelAwsDdbScanRangeKeyCondition

状態

クエリーに使用する属性値および比較 Operator のコンテナー。

CamelAwsDdbScanIndexForward

Boolean

インデックスの順方向または逆方向のトラバーサルを指定します。

CamelAwsDdbScanFilter

Map<String, Condition>

スキャン結果を評価し、目的の値のみを返します。

CamelAwsDdbUpdateValues

Map<String, AttributeValueUpdate>

更新の新しい値とアクションへの属性名のマップ。

3.5.3. BatchGetItems 操作中に設定されたメッセージヘッダー

ヘッダータイプ説明

CamelAwsDdbBatchResponse

Map<String,BatchResponse>

テーブル名およびテーブルの各項目属性。

CamelAwsDdbUnprocessedKeys

Map<String,KeysAndAttributes>

テーブルのマップと、現在の応答で処理されなかった対応するキーが含まれます。

3.5.4. DeleteItem 操作時に設定されたメッセージヘッダー

ヘッダータイプ説明

CamelAwsDdbAttributes

Map<String, AttributeValue>

操作によって返される属性の一覧。

3.5.5. DeleteTable 操作時に設定されたメッセージヘッダー

ヘッダータイプ説明

CamelAwsDdbProvisionedThroughput

  

ProvisionedThroughputDescription

 

このテーブルの ProvisionedThroughput プロパティーの値

CamelAwsDdbCreationDate

日付

このテーブルの DateTime の作成。

CamelAwsDdbTableItemCount

Long

このテーブルのアイテム数。

CamelAwsDdbKeySchema

KeySchema

このテーブルのプライマリーキーを識別する KeySchema。Camel 2.16.0 以降、このヘッダーのタイプは List<KeySchemaElement> であり、KeySchema ではありません。

CamelAwsDdbTableName

String

テーブル名。

CamelAwsDdbTableSize

Long

テーブルサイズ(バイト単位)。

CamelAwsDdbTableStatus

String

テーブルのステータス: CREATING、UPDATING、DELETING、ACTIVE

3.5.6. DescribeTable 操作中に設定されたメッセージヘッダー

ヘッダータイプ説明

CamelAwsDdbProvisionedThroughput

\{{ProvisionedThroughputDescription}}

このテーブルの ProvisionedThroughput プロパティーの値

CamelAwsDdbCreationDate

日付

このテーブルの DateTime の作成。

CamelAwsDdbTableItemCount

Long

このテーブルのアイテム数。

CamelAwsDdbKeySchema

\{{KeySchema}}

このテーブルのプライマリーキーを識別する KeySchema。

CamelAwsDdbTableName

String

テーブル名。

CamelAwsDdbTableSize

Long

テーブルサイズ(バイト単位)。

CamelAwsDdbTableStatus

String

テーブルのステータス: CREATING、UPDATING、DELETING、ACTIVE

CamelAwsDdbReadCapacity

Long

このテーブルの ReadCapacityUnits プロパティー。

CamelAwsDdbWriteCapacity

Long

このテーブルの WriteCapacityUnits プロパティー。

3.5.7. GetItem 操作時に設定されたメッセージヘッダー

ヘッダータイプ説明

CamelAwsDdbAttributes

Map<String, AttributeValue>

操作によって返される属性の一覧。

3.5.8. PutItem 操作中に設定されたメッセージヘッダー

ヘッダータイプ説明

CamelAwsDdbAttributes

Map<String, AttributeValue>

操作によって返される属性の一覧。

3.5.9. Query 操作時に設定されたメッセージヘッダー

ヘッダータイプ説明

CamelAwsDdbItems

List<java.util.Map<String,AttributeValue>>

操作によって返される属性の一覧。

CamelAwsDdbLastEvaluatedKey

キー

前の結果セットを含む、クエリー操作が停止した項目のプライマリーキー。

CamelAwsDdbConsumedCapacity

double

操作中に消費された、テーブルのプロビジョニングされたスループットのキャパシティーユニットの数。

CamelAwsDdbCount

Integer

応答のアイテム数。

3.5.10. Scan 操作時に設定されたメッセージヘッダー

ヘッダータイプ説明

CamelAwsDdbItems

List<java.util.Map<String,AttributeValue>>

操作によって返される属性の一覧。

CamelAwsDdbLastEvaluatedKey

キー

前の結果セットを含む、クエリー操作が停止した項目のプライマリーキー。

CamelAwsDdbConsumedCapacity

double

操作中に消費された、テーブルのプロビジョニングされたスループットのキャパシティーユニットの数。

CamelAwsDdbCount

Integer

応答のアイテム数。

CamelAwsDdbScannedCount

Integer

フィルターが適用される前の完全なスキャン内のアイテムの数。

3.5.11. UpdateItem 操作時に設定されたメッセージヘッダー

ヘッダータイプ説明

CamelAwsDdbAttributes

Map<String, AttributeValue>

操作によって返される属性の一覧。

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 クライアントをインスタンス化する際にプロキシープロトコルを定義します。

列挙値:

  • HTTP
  • HTTPS

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 ストリーム内でレコードの取得を開始する場所を定義します。

列挙値:

  • AT_SEQUENCE_NUMBER
  • AFTER_SEQUENCE_NUMBER
  • TRIM_HORIZON
  • LATEST
  • AT_TIMESTAMP
  • null

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
  • fail
  • silent

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 クライアントをインスタンス化する際にプロキシープロトコルを定義します。

列挙値:

  • HTTP
  • HTTPS

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 ストリーム内でレコードの取得を開始する場所を定義します。

列挙値:

  • AT_SEQUENCE_NUMBER
  • AFTER_SEQUENCE_NUMBER
  • TRIM_HORIZON
  • LATEST
  • AT_TIMESTAMP
  • null

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
  • fail
  • silent

ignore

Kinesis2ShardClosedStrategyEnum

shardId (consumer)

Kinesis ストリームでどの shardId からレコードを取得するかを定義します。

 

String

exceptionHandler (consumer (上級))

consumer によるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、consumer は例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

 

ExceptionHandler

exchangePattern (consumer (上級))

consumer がエクスチェンジを作成する際に交換パターンを設定します。

列挙値:

  • InOnly
  • InOut
  • InOptionalOut
 

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
  • DEBUG
  • INFO
  • WARN
  • ERROR
  • OFF

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
  • SECONDS
  • 時間

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 によって設定されるメッセージヘッダー

ヘッダータイプ説明

CamelAwsKinesisSequenceNumber

String

このレコードのシーケンス番号。これは、サイズが API によって定義されていないため、文字列として表されます。数値型として使用する場合は、次を使用します

CamelAwsKinesisApproximateArrivalTimestamp

String

AWS がレコードの到着時間として割り当てた時間。

CamelAwsKinesisPartitionKey

String

データレコードが割り当てられているストリーム内のシャードを識別します。

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[] であることを期待しています。

ヘッダータイプ説明

CamelAwsKinesisPartitionKey

String

このレコードを保存するために Kinesis に渡す PartitionKey。

CamelAwsKinesisSequenceNumber

String

このレコードのシーケンス番号を示すオプションのパラメーター。

4.6.6. レコードの保存が成功したときに Kinesis producer によって設定されるメッセージヘッダー

ヘッダータイプ説明

CamelAwsKinesisSequenceNumber

String

Response Syntax で定義されているレコードのシーケンス番号

CamelAwsKinesisShardId

String

レコードが保存された場所のシャード 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 のいずれかです。

列挙値:

  • listFunctions
  • getFunction
  • createAlias
  • deleteAlias
  • getAlias
  • listAliases
  • createFunction
  • deleteFunction
  • invokeFunction
  • updateFunction
  • createEventSourceMapping
  • deleteEventSourceMapping
  • listEventSourceMapping
  • listTags
  • tagResource
  • untagResource
  • publishVersion
  • listVersions

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 クライアントをインスタンス化するときにプロキシープロトコルを定義します。

列挙値:

  • HTTP
  • HTTPS

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 のいずれかです。

列挙値:

  • listFunctions
  • getFunction
  • createAlias
  • deleteAlias
  • getAlias
  • listAliases
  • createFunction
  • deleteFunction
  • invokeFunction
  • updateFunction
  • createEventSourceMapping
  • deleteEventSourceMapping
  • listEventSourceMapping
  • listTags
  • tagResource
  • untagResource
  • publishVersion
  • listVersions

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 クライアントをインスタンス化するときにプロキシープロトコルを定義します。

列挙値:

  • HTTP
  • HTTPS

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 によって評価されるメッセージヘッダー

操作ヘッダータイプ説明必須

すべて

CamelAwsLambdaOperation

String

実行する操作。クエリーパラメーターとして渡されたオーバーライド操作

はい

createFunction

CamelAwsLambdaS3Bucket

String

デプロイパッケージを含む .zip ファイルが保存される Amazon S3 バケット名。このバケットは、Lambda 関数を作成しているのと同じ AWS リージョンに存在する必要があります。

いいえ

createFunction

CamelAwsLambdaS3Key

String

アップロードする Amazon S3 オブジェクト (デプロイパッケージ) のキー名。

いいえ

createFunction

CamelAwsLambdaS3ObjectVersion

String

アップロードする Amazon S3 オブジェクト (デプロイパッケージ) のバージョン。

いいえ

createFunction

CamelAwsLambdaZipFile

String

zip ファイル (デプロイメントパッケージ) のローカルパス。zip ファイルの内容をメッセージ本文に入れることもできます。

いいえ

createFunction

CamelAwsLambdaRole

String

Lambda が関数を実行して他のアマゾンウェブサービス (AWS) リソースにアクセスするときに引き受ける IAM ロールの Amazon リソースネーム (ARN)。

はい

createFunction

CamelAwsLambdaRuntime

String

アップロードする Lambda 関数のランタイム環境。(nodejs、nodejs4.3、nodejs6.10、java8、python2.7、python3.6、dotnetcore1.0、odejs4.3-edge)

はい

createFunction

CamelAwsLambdaHandler

String

実行を開始するために Lambda が呼び出すコード内の関数。Node.js の場合は、関数の module-name.export 値です。Java の場合は、package.class-name::handler または package.class-name にすることができます。

はい

createFunction

CamelAwsLambdaDescription

String

ユーザー提供の説明。

いいえ

createFunction

CamelAwsLambdaTargetArn

String

Amazon SQS キューまたは Amazon SNS トピックのターゲット ARN (Amazon リソースネーム) を含む親オブジェクト。

いいえ

createFunction

CamelAwsLambdaMemorySize

Integer

関数用に設定したメモリーサイズ (MB 単位)。64 MB の倍数である必要があります。

いいえ

createFunction

CamelAwsLambdaKMSKeyArn

String

関数の環境変数を暗号化するために使用される KMS キーの Amazon リソースネーム (ARN)。指定しない場合、AWS Lambda はデフォルトのサービスキーを使用します。

いいえ

createFunction

CamelAwsLambdaPublish

Boolean

このブール値パラメーターを使用して、AWS Lambda に Lambda 関数を作成し、バージョンをアトミック操作として発行するようにリクエストできます。

いいえ

createFunction

CamelAwsLambdaTimeout

Integer

Lambda が関数を終了する関数実行時間。デフォルトは 3 秒です。

いいえ

createFunction

CamelAwsLambdaTracingConfig

String

関数のトレース設定 (Active または PassThrough)。

いいえ

createFunction

CamelAwsLambdaEnvironmentVariables

Map<String, String>

環境の設定設定を表すキーと値のペア。

いいえ

createFunction

CamelAwsLambdaEnvironmentTags

Map<String, String>

新しい関数に割り当てられたタグ (キーと値のペア) のリスト。

いいえ

createFunction

CamelAwsLambdaSecurityGroupIds

List<String>

Lambda 関数が VPC 内のリソースにアクセスする場合、VPC 内の 1 つ以上のセキュリティーグループ ID のリスト。

いいえ

createFunction

CamelAwsLambdaSubnetIds

List<String>

Lambda 関数が VPC 内のリソースにアクセスする場合、VPC 内の 1 つ以上のサブネット ID のリスト。

いいえ

createAlias

CamelAwsLambdaFunctionVersion

String

エイリアスに設定する関数のバージョン

はい

createAlias

CamelAwsLambdaAliasFunctionName

String

エイリアスに設定する関数名

はい

createAlias

CamelAwsLambdaAliasFunctionDescription

String

エイリアスに設定する関数の説明

いいえ

deleteAlias

CamelAwsLambdaAliasFunctionName

String

エイリアスの関数名

はい

getAlias

CamelAwsLambdaAliasFunctionName

String

エイリアスの関数名

はい

listAliases

CamelAwsLambdaFunctionVersion

String

エイリアスに設定する関数のバージョン

いいえ

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 クライアントをインスタンス化するときにプロキシープロトコルを定義します。

列挙値:

  • HTTP
  • HTTPS

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
  • random

progressive

AWSS3NamingStrategyEnum

operation (producer)

ユーザーがアップロードだけをしたくない場合に行う操作。

列挙値:

  • copyObject
  • listObjects
  • deleteObject
  • deleteBucket
  • listBuckets
  • getObject
  • getObjectRange
  • createDownloadLink
 

AWS2S3Operations

partSize (producer)

マルチパートのアップロードで使用される partSize を設定します。デフォルトのサイズは 25M です。

26214400

long

restartingPolicy (producer)

ストリーミングのアップロードモードで使用する再起動ポリシー。

列挙値:

  • override
  • lastPart

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 クライアントをインスタンス化するときにプロキシープロトコルを定義します。

列挙値:

  • HTTP
  • HTTPS

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 がエクスチェンジを作成する際に交換パターンを設定します。

列挙値:

  • InOnly
  • InOut
  • InOptionalOut
 

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
  • random

progressive

AWSS3NamingStrategyEnum

operation (producer)

ユーザーがアップロードだけをしたくない場合に行う操作。

列挙値:

  • copyObject
  • listObjects
  • deleteObject
  • deleteBucket
  • listBuckets
  • getObject
  • getObjectRange
  • createDownloadLink
 

AWS2S3Operations

partSize (producer)

マルチパートのアップロードで使用される partSize を設定します。デフォルトのサイズは 25M です。

26214400

long

restartingPolicy (producer)

ストリーミングのアップロードモードで使用する再起動ポリシー。

列挙値:

  • override
  • lastPart

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
  • DEBUG
  • INFO
  • WARN
  • ERROR
  • OFF

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
  • SECONDS
  • 時間

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 によって評価されるメッセージヘッダー

ヘッダータイプ説明

CamelAwsS3BucketName

String

このオブジェクトが保存されるバケット名、または現在の操作に使用されるバケット名

CamelAwsS3BucketDestinationName

String

現在の操作に使用されるバケット宛先名

CamelAwsS3ContentLength

Long

このオブジェクトのコンテンツの長さ。

CamelAwsS3ContentType

String

このオブジェクトのコンテンツタイプ。

CamelAwsS3ContentControl

String

このオブジェクトのコンテンツコントロール。

CamelAwsS3ContentDisposition

String

このオブジェクトのコンテンツの配置。

CamelAwsS3ContentEncoding

String

このオブジェクトのコンテンツエンコーディング。

CamelAwsS3ContentMD5

String

このオブジェクトの md5 チェックサム。

CamelAwsS3DestinationKey

String

現在の操作に使用される宛先キー

CamelAwsS3Key

String

このオブジェクトが格納されるキー、または現在の操作に使用されるキー

CamelAwsS3LastModified

java.util.Date

このオブジェクトの最終変更のタイムスタンプ。

CamelAwsS3Operation

String

実行する操作。許可されている値は、copyObject、deleteObject、listBuckets、deleteBucket、listObjects です。

CamelAwsS3StorageClass

String

このオブジェクトのストレージクラス。

CamelAwsS3CannedAcl

String

オブジェクトに適用される既定の ACL。許可されている値については、software.amazon.awssdk.services.s3.model.ObjectCannedACL を参照してください。

CamelAwsS3Acl

software.amazon.awssdk.services.s3.model.BucketCannedACL

適切に設定された Amazon S3 アクセスコントロールリストオブジェクト。詳細については、software.amazon.awssdk.services.s3.model.BucketCannedACL を参照してください。

CamelAwsS3ServerSideEncryption

String

AWS が管理するキーを使用してオブジェクトを暗号化するときに、サーバー側の暗号化アルゴリズムを設定します。たとえば、AES256 を使用します。

CamelAwsS3VersionId

String

現在の操作から格納または返されるオブジェクトのバージョン ID

CamelAwsS3Metadata

Map<String, String>

S3 のオブジェクトと共に保存されるメタデータのマップ。メタデータの詳細。

6.6.2. S3 producer によって設定されたメッセージヘッダー

ヘッダータイプ説明

CamelAwsS3ETag

String

新しくアップロードされたオブジェクトの ETag 値。

CamelAwsS3VersionId

String

新しくアップロードされたオブジェクトの オプション のバージョン ID。

6.6.3. S3 consumer によって設定されたメッセージヘッダー

ヘッダータイプ説明

CamelAwsS3Key

String

このオブジェクトが格納されるキー。

CamelAwsS3BucketName

String

このオブジェクトが含まれるバケットの名前。

CamelAwsS3ETag

String

RFC 1864 に従って、関連付けられたオブジェクトの 16 進数でエンコードされた 128 ビット MD5 ダイジェスト。このデータは、呼び出し元によって受信されたデータが Amazon S3 によって送信されたデータと同じであることを確認するための整合性チェックとして使用されます。

CamelAwsS3LastModified

日付

Last-Modified ヘッダーの値。Amazon S3 が関連付けられたオブジェクトへの変更を最後に記録した日時を示します。

CamelAwsS3VersionId

String

関連する Amazon S3 オブジェクトのバージョン ID (利用可能な場合)。バージョン ID は、オブジェクトのバージョニングが有効になっている Amazon S3 バケットにオブジェクトがアップロードされた場合にのみ、オブジェクトに割り当てられます。

CamelAwsS3ContentType

String

関連付けられたオブジェクトに格納されているコンテンツのタイプを示す Content-Type HTTP ヘッダー。このヘッダーの値は、標準の MIME タイプです。

CamelAwsS3ContentMD5

String

RFC 1864 に従って、関連付けられたオブジェクト (ヘッダーを含まないコンテンツ) の base64 でエンコードされた 128 ビット MD5 ダイジェスト。このデータは、Amazon S3 が受信したデータが発信者が送信したデータと同じであることを確認するためのメッセージ整合性チェックとして使用されます。

CamelAwsS3ContentLength

Long

関連付けられたオブジェクトのサイズをバイト単位で示す Content-Length HTTP ヘッダー。

CamelAwsS3ContentEncoding

String

オブジェクトに適用されたコンテンツエンコーディングと、Content-Type フィールドによって参照されるメディアタイプを取得するために適用する必要があるデコードメカニズムを指定する、オプション の Content-Encoding HTTP ヘッダー。

CamelAwsS3ContentDisposition

String

オプション の Content-Disposition HTTP ヘッダー。保存するオブジェクトの推奨ファイル名などの表示情報を指定します。

CamelAwsS3ContentControl

String

ユーザーが HTTP 要求/応答チェーンに沿ってキャッシュ動作を指定できるようにする、オプション の Cache-Control HTTP ヘッダー。

CamelAwsS3ServerSideEncryption

String

AWS が管理するキーを使用してオブジェクトを暗号化するときのサーバー側の暗号化アルゴリズム。

CamelAwsS3Metadata

Map<String, String>

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&region=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 が残した最後のパーツ番号から再開します。

  1. プログレッシブ命名戦略でルートを開始し、keyname は camel.txt に等しく、batchMessageNumber は 20 に等しく、restartingPolicy は lastPart に等しい - 70 個のメッセージを送信します。
  2. ルートを停止
  3. S3 バケットには、次の 4 つのファイルが表示されます: * camel.txt

    • camel-1.txt
    • camel-2.txt
    • camel-3.txt

      最初の 3 つには 20 件のメッセージが含まれますが、最後の 1 つには 10 件しかありません。

  4. ルートを再開します。
  5. メッセージを 25 回送信します。
  6. ルートを停止します。
  7. バケットには他に 2 つのファイルがあります。camel-5.txt と camel-6.txt です。最初のファイルには 20 件のメッセージがあり、2 つ目のファイルには 5 件のメッセージがあります。
  8. どうぞ

ランダムな命名戦略を使用する場合、これは必要ありません。

反対に、オーバーライドの 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
  • useContentBasedDeduplication

useExchangeId

String

messageGroupIdStrategy (producer)

FIFO トピックのみ。メッセージに messageGroupId を設定するストラテジー。useConstant、useExchangeId、usePropertyValue のいずれかをオプションとして使用できます。usePropertyValue オプションでは、CamelAwsMessageGroupId プロパティーの値が使用されます。

列挙値:

  • useConstant
  • useExchangeId
  • usePropertyValue
 

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 クライアントをインスタンス化するときにプロキシープロトコルを定義します。

列挙値:

  • HTTP
  • HTTPS

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
  • useContentBasedDeduplication

useExchangeId

String

messageGroupIdStrategy (producer)

FIFO トピックのみ。メッセージに messageGroupId を設定するストラテジー。useConstant、useExchangeId、usePropertyValue のいずれかをオプションとして使用できます。usePropertyValue オプションでは、CamelAwsMessageGroupId プロパティーの値が使用されます。

列挙値:

  • useConstant
  • useExchangeId
  • usePropertyValue
 

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 クライアントをインスタンス化するときにプロキシープロトコルを定義します。

列挙値:

  • HTTP
  • HTTPS

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 によって評価されるメッセージヘッダー

ヘッダータイプ説明

CamelAwsSnsSubject

String

Amazon SNS メッセージの件名。設定されていない場合は、SnsConfiguration の件名が使用されます。

7.5.3. SNS producer によって設定されるメッセージヘッダー

ヘッダータイプ説明

CamelAwsSnsMessageId

String

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 クライアントをインスタンス化するときにプロキシープロトコルを定義します。

列挙値:

  • HTTP
  • HTTPS

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
  • useContentBasedDeduplication

useExchangeId

String

messageGroupIdStrategy (producer)

FIFO キューの場合のみ。メッセージに messageGroupId を設定するストラテジー。useConstant、useExchangeId、usePropertyValue のいずれかをオプションとして使用できます。usePropertyValue オプションでは、CamelAwsMessageGroupId プロパティーの値が使用されます。

列挙値:

  • useConstant
  • useExchangeId
  • usePropertyValue
 

String

operation (producer)

ユーザーがメッセージだけを送信したくない場合に行う操作。

列挙値:

  • sendBatchMessage
  • deleteMessage
  • listQueues
  • purgeQueue
  • deleteQueue
 

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 クライアントをインスタンス化するときにプロキシープロトコルを定義します。

列挙値:

  • HTTP
  • HTTPS

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 がエクスチェンジを作成する際に交換パターンを設定します。

列挙値:

  • InOnly
  • InOut
  • InOptionalOut
 

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
  • useContentBasedDeduplication

useExchangeId

String

messageGroupIdStrategy (producer)

FIFO キューの場合のみ。メッセージに messageGroupId を設定するストラテジー。useConstant、useExchangeId、usePropertyValue のいずれかをオプションとして使用できます。usePropertyValue オプションでは、CamelAwsMessageGroupId プロパティーの値が使用されます。

列挙値:

  • useConstant
  • useExchangeId
  • usePropertyValue
 

String

operation (producer)

ユーザーがメッセージだけを送信したくない場合に行う操作。

列挙値:

  • sendBatchMessage
  • deleteMessage
  • listQueues
  • purgeQueue
  • deleteQueue
 

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
  • DEBUG
  • INFO
  • WARN
  • ERROR
  • OFF

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
  • SECONDS
  • 時間

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 and 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 認証情報のドキュメント を参照してください。

8.6.2. SQS producer によって設定されるメッセージヘッダー

ヘッダータイプ説明

CamelAwsSqsMD5OfBody

String

Amazon SQS メッセージの MD5 チェックサム。

CamelAwsSqsMessageId

String

Amazon SQS メッセージ ID。

CamelAwsSqsDelaySeconds

Integer

Amazon SQS メッセージが他のユーザーに表示される遅延秒数。

8.6.3. SQS consumer によって設定されるメッセージヘッダー

ヘッダータイプ説明

CamelAwsSqsMD5OfBody

String

Amazon SQS メッセージの MD5 チェックサム。

CamelAwsSqsMessageId

String

Amazon SQS メッセージ ID。

CamelAwsSqsReceiptHandle

String

Amazon SQS メッセージ受信ハンドル。

CamelAwsSqsMessageAttributes

Map<String, String>

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. サーバー側の暗号化

キューには一連のサーバー側暗号化属性があります。関連するオプションは、serverSideEncryptionEnabledkeyMasterKeyId、および 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_FILTEREDtrue に設定して、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)&region=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)&region=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)&region=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)&region=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)&region=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
  • AmqpWebSockets

AMQP

AmqpTransportType

clientOptions (共通)

このビルダーから構築されたクライアントから送信される ClientOptions を設定し、特定のプロパティーのカスタマイズを有効にし、カスタムヘッダー情報の追加をサポートします。詳細は、ClientOptions のドキュメントを参照してください。

 

ClientOptions

configuration (common)

コンポーネントの設定。

 

ServiceBusConfiguration

proxyOptions (共通)

ServiceBusSenderAsyncClient に使用するプロキシー設定を設定します。プロキシーが設定されている場合は、AmqpTransportType#AMQP_WEB_SOCKETS をトランスポートタイプに使用する必要があります。

 

ProxyOptions

serviceBusType (common)

必須 実行するサービスバスの接続の種類。キューは、サブスクリプションベースのモデルの典型的なキューオプションとトピックです。

列挙値:

  • queue
  • topic

queue

ServiceBusType

bridgeErrorHandler (consumer)

consumer の Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、consumer が受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、consumer は org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。

false

boolean

consumerOperation (consumer)

consumer で使用する目的の操作を設定します。

列挙値:

  • receiveMessages
  • peekMessages

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
  • RECEIVE_AND_DELETE

PEEK_LOCK

ServiceBusReceiveMode

subQueue (consumer)

接続先の SubQueue のタイプを設定します。

列挙値:

  • NONE
  • DEAD_LETTER_QUEUE
  • TRANSFER_DEAD_LETTER_QUEUE
 

SubQueue

subscriptionName (consumer)

リッスンするトピックのサブスクリプションの名前を設定します。topicOrQueueName および serviceBusType=topic も設定する必要があります。このプロパティーは、serviceBusType=topic であり、consumer が使用されている場合に必要です。

 

文字列

lazyStartProducer (producer)

最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。

false

boolean

ProducerOperation (producer)

producer で使用する目的の操作を設定します。

列挙値:

  • sendMessages
  • scheduleMessages

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
  • AmqpWebSockets

AMQP

AmqpTransportType

clientOptions (共通)

このビルダーから構築されたクライアントから送信される ClientOptions を設定し、特定のプロパティーのカスタマイズを有効にし、カスタムヘッダー情報の追加をサポートします。詳細は、ClientOptions のドキュメントを参照してください。

 

ClientOptions

proxyOptions (共通)

ServiceBusSenderAsyncClient に使用するプロキシー設定を設定します。プロキシーが設定されている場合は、AmqpTransportType#AMQP_WEB_SOCKETS をトランスポートタイプに使用する必要があります。

 

ProxyOptions

serviceBusType (common)

必須 実行するサービスバスの接続の種類。キューは、サブスクリプションベースのモデルの典型的なキューオプションとトピックです。

列挙値:

  • queue
  • topic

queue

ServiceBusType

consumerOperation (consumer)

consumer で使用する目的の操作を設定します。

列挙値:

  • receiveMessages
  • peekMessages

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
  • RECEIVE_AND_DELETE

PEEK_LOCK

ServiceBusReceiveMode

subQueue (consumer)

接続先の SubQueue のタイプを設定します。

列挙値:

  • NONE
  • DEAD_LETTER_QUEUE
  • TRANSFER_DEAD_LETTER_QUEUE
 

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 がエクスチェンジを作成する際に交換パターンを設定します。

列挙値:

  • InOnly
  • InOut
  • InOptionalOut
 

ExchangePattern

ProducerOperation (producer)

producer で使用する目的の操作を設定します。

列挙値:

  • sendMessages
  • scheduleMessages

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)

定数: APPLICATION_PROPERTIES

producer と consumer によってそれぞれ送受信されるメッセージのアプリケーションプロパティー (カスタムプロパティーとも呼ばれます)。

 

Map

CamelAzureServiceBusContentType (consumer)

定数: CONTENT_TYPE

メッセージのコンテンツタイプを取得します。

 

文字列

CamelAzureServiceBusCorrelationId (consumer)

定数: CORRELATION_ID

相関識別子を取得します。

 

文字列

CamelAzureServiceBusDeadLetterErrorDescription (consumer)

定数: DEAD_LETTER_ERROR_DESCRIPTION

デッドレターキューに追加されたメッセージの説明を取得します。

 

文字列

CamelAzureServiceBusDeadLetterReason (consumer)

定数: DEAD_LETTER_REASON

メッセージがデッドレターキューに追加された理由を取得します。

 

文字列

CamelAzureServiceBusDeadLetterSource (consumer)

定数: DEAD_LETTER_SOURCE

このメッセージがキューに格納されたキューまたはサブスクリプションの名前を取得してから、デッドレターに追加されます。

 

文字列

CamelAzureServiceBusDeliveryCount (consumer)

定数: DELIVERY_COUNT

このメッセージがクライアントに配信された回数を取得します。

 

long

CamelAzureServiceBusEnqueuedSequenceNumber (consumer)

定数: ENQUEUED_SEQUENCE_NUMBER

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)

定数: REPLY_TO_SESSION_ID

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)

定数: SCHEDULED_ENQUEUE_TIME

(producer) メッセージが Service Bus キューまたはトピックに表示される OffsetDateTime をオーバーライドします。(consumer) このメッセージのスケジュールされたエンキュー時刻を取得します。

 

OffsetDateTime

CamelAzureServiceBusServiceBusTransactionContext (producer)

定数: SERVICE_BUS_TRANSACTION_CONTEXT

サービス中のトランザクションをオーバーライドします。このオブジェクトにはトランザクション ID のみが含まれます。

 

ServiceBusTransactionContext

CamelAzureServiceBusProducerOperation (producer)

定数: PRODUCER_OPERATION

producer で使用する目的の操作をオーバーライドします。

列挙値:

  • sendMessages
  • scheduleMessages
 

ServiceBusProducerOperationDefinition

9.5.1. メッセージボディー

producer では、このコンポーネントは String 型または List<String> のメッセージ本文を受け入れてバッチメッセージを送信します。

cosumer では、返されるメッセージ本文は String.type になります。

9.5.2. Azure ServiceBus producer の操作

操作説明

sendMessages

バッチアプローチを使用して、一連のメッセージを Service Bus キューまたはトピックに送信します。

scheduleMessages

この送信者が接続されている Azure Service Bus エンティティーにスケジュールされたメッセージを送信します。スケジュールされたメッセージはキューに入れられ、スケジュールされたエンキュー時間にのみ受信者が利用できるようになります。

9.5.3. Azure ServiceBus consumer の操作

操作説明

receiveMessages

Service Bus エンティティーから <b>無限</b> のメッセージストリームを受信します。

peekMessages

受信側またはメッセージソースの状態を変更せずに、アクティブメッセージの次のバッチを読み取ります。

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 の場合、accountNamecontainerName が必要です。producer の場合、要求される操作によって異なります。たとえば、操作がコンテナーレベルである場合、たとえば createContainer の場合、accountNamecontainerName のみが必要ですが、BLOB レベルで操作が要求される場合、たとえば、getBlobaccountNamecontainerName、および 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
  • appendblob
  • pageblob

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
  • コミットされていない
  • all

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
  • createBlobContainer
  • deleteBlobContainer
  • listBlobs
  • getBlob
  • deleteBlob
  • downloadBlobToFile
  • downloadLink
  • uploadBlockBlob
  • stageBlockBlobList
  • commitBlobBlockList
  • getBlobBlockList
  • createAppendBlob
  • commitAppendBlob
  • createPageBlob
  • uploadPageBlob
  • resizePageBlob
  • clearPageBlob
  • getPageBlobRanges

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
  • appendblob
  • pageblob

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 がエクスチェンジを作成する際に交換パターンを設定します。

列挙値:

  • InOnly
  • InOut
  • InOptionalOut
 

ExchangePattern

pollStrategy (consumer (上級))

プラグ可能な org.apache.camel.PollingConsumerPollingStrategy を使用すると、エクスチェンジが作成され、Camel でルーティングされる前に、通常はポーリング操作中に発生するエラー処理を制御するカスタム実装が提供できます。

 

PollingConsumerPollStrategy

blobSequenceNumber (producer)

リクエストの追跡に使用できるユーザー制御の値。シーケンス番号の値は、0 から 263 - 1 の間でなければなりません。デフォルト値は 0 です。

0

Long

blockListType (producer)

返すブロックのタイプを指定します。

列挙値:

  • committed
  • コミットされていない
  • all

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
  • createBlobContainer
  • deleteBlobContainer
  • listBlobs
  • getBlob
  • deleteBlob
  • downloadBlobToFile
  • downloadLink
  • uploadBlockBlob
  • stageBlockBlobList
  • commitBlobBlockList
  • getBlobBlockList
  • createAppendBlob
  • commitAppendBlob
  • createPageBlob
  • uploadPageBlob
  • resizePageBlob
  • clearPageBlob
  • getPageBlobRanges

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
  • DEBUG
  • INFO
  • WARN
  • ERROR
  • OFF

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
  • SECONDS
  • 時間

MILLISECONDS

TimeUnit

useFixedDelay (scheduler)

固定遅延または固定レートを使用するかどうかを制御します。詳細は、JDK の ScheduledExecutorService を参照してください。

true

boolean

accessKey (security)

Azure Blob サービスでの認証に使用される、関連付けられた Azure アカウント名のアクセスキー。

 

String

sourceBlobAccessKey (セキュリティー)

ソース Blob アクセスキー: copyblob 操作では、コピーするソース Blob の accessKey が必要です。accessKey をヘッダーとして渡すと、安全ではないため、キーとして設定できます。

 

String

必須情報オプション

このコンポーネントを使用するには、必要な Azure 認証情報を提供するための 3 つのオプションがあります。

  • Azure アカウントの accountNameaccessKey を指定します。これが最も簡単な開始方法です。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 によって評価されるメッセージヘッダー

ヘッダー変数名タイプ操作説明

CamelAzureStorageBlobTimeout

BlobConstants.TIMEOUT

期間

すべて

それを超えると {@link RuntimeException} が発生する任意のタイムアウト値。

CamelAzureStorageBlobMetadata

BlobConstants.METADATA

Map<String,String>

コンテナーと BLOB に関する操作

コンテナーまたは BLOB に関連付けるメタデータ。

CamelAzureStorageBlobPublicAccessType

BlobConstants.PUBLIC_ACCESS_TYPE

PublicAccessType

createContainer

このコンテナー内のデータを公開する方法を指定します。パブリックアクセスがない場合は null を渡します。

CamelAzureStorageBlobRequestCondition

BlobConstants.BLOB_REQUEST_CONDITION

BlobRequestConditions

コンテナーと BLOB に関する操作

これには、さまざまな要求の正常な動作を現在の条件に制限する値が含まれています。これらの条件は完全にオプションです。

CamelAzureStorageBlobListDetails

BlobConstants.BLOB_LIST_DETAILS

BlobListDetails

listBlobs

特定のブロブを一覧表示するための詳細

CamelAzureStorageBlobPrefix

BlobConstants.PREFIX

String

listBlobs,getBlob

結果をフィルター処理して、名前が指定された接頭辞で始まる BLOB のみを返します。すべての BLOB を返すには null の場合があります。

CamelAzureStorageBlobMaxResultsPerPage

BlobConstants.MAX_RESULTS_PER_PAGE

Integer

listBlobs

すべての BlobPrefix 要素を含め、返される BLOB の最大数を指定します。要求で maxResultsPerPage が指定されていないか、5,000 を超える値が指定されている場合、サーバーは最大 5,000 項目を返します。

CamelAzureStorageBlobListBlobOptions

BlobConstants.LIST_BLOB_OPTIONS

ListBlobsOptions

listBlobs

{@link BlobContainerClient} オブジェクトで listBlobsFlatSegment への呼び出しの動作を設定するために使用できるオプションを定義します。

CamelAzureStorageBlobHttpHeaders

BlobConstants.BLOB_HTTP_HEADERS

BlobHttpHeaders

uploadBlockBlob, commitBlobBlockList, createAppendBlob, createPageBlob

一連の操作の追加パラメーター。

CamelAzureStorageBlobAccessTier

BlobConstants.ACCESS_TIER

AccessTier

uploadBlockBlobcommitBlobBlockList

AccessTier の値を定義します。

CamelAzureStorageBlobContentMD5

BlobConstants.CONTENT_MD5

byte[]

BLOB のアップロードに関連するほとんどの操作

ブロックコンテンツの MD5 ハッシュ。このハッシュは、転送中にブロックの整合性を検証するために使用されます。このヘッダーが指定されている場合、ストレージサービスは、到着したコンテンツのハッシュとこのヘッダー値を比較します。この MD5 ハッシュは BLOB には保存されないことに注意してください。2 つのハッシュが一致しない場合、操作は失敗します。

CamelAzureStorageBlobPageBlobRange

BlobConstants.PAGE_BLOB_RANGE

PageRange

ページブロブに関連する操作

{@link PageRange} オブジェクト。ページを 512 バイトの境界に揃える必要がある場合、開始オフセットは 512 の係数である必要があり、終了オフセットは 512 - 1 の係数である必要があります。有効なバイト範囲の例は、0 - 511、512 - 1023 などです。

CamelAzureStorageBlobCommitBlobBlockListLater

BlobConstants.COMMIT_BLOCK_LIST_LATER

boolean

stageBlockBlobList

true に設定されていると、ステージングされたブロックは直接コミットされません。

CamelAzureStorageBlobCreateAppendBlob

BlobConstants.CREATE_APPEND_BLOB

boolean

commitAppendBlob

true に設定されていると、追加ブロックのコミット時に追加ブロックが作成されます。

CamelAzureStorageBlobCreatePageBlob

BlobConstants.CREATE_PAGE_BLOB

boolean

uploadPageBlob

true に設定すると、ページブロブのアップロード時にページ Blob が作成されます。

CamelAzureStorageBlobBlockListType

BlobConstants.BLOCK_LIST_TYPE

BlockListType

getBlobBlockList

返すブロックのタイプを指定します。

CamelAzureStorageBlobPageBlobSize

BlobConstants.PAGE_BLOB_SIZE

Long

createPageBlob, resizePageBlob

ページ BLOB の最大サイズを 8 TB まで指定します。ページ BLOB のサイズは、512 バイトの境界に合わせる必要があります。

CamelAzureStorageBlobSequenceNumber

BlobConstants.BLOB_SEQUENCE_NUMBER

Long

createPageBlob

リクエストの追跡に使用できるユーザー制御の値。シーケンス番号の値は、0 から 2^63 - 1 の間でなければなりません。デフォルト値は 0 です。

CamelAzureStorageBlobDeleteSnapshotsOptionType

BlobConstants.DELETE_SNAPSHOT_OPTION_TYPE

DeleteSnapshotsOptionType

deleteBlob

この BLOB のスナップショットを削除するための動作を指定します。\{@code Include} は、ベース BLOB とすべてのスナップショットを削除します。\{@code Only} はスナップショットのみを削除します。スナップショットが削除されている場合は、null を渡す必要があります。

CamelAzureStorageBlobListBlobContainersOptions

BlobConstants.LIST_BLOB_CONTAINERS_OPTIONS

ListBlobContainersOptions

listBlobContainers

サービスによって返されるデータを指定する {@link ListBlobContainersOptions}。

CamelAzureStorageBlobParallelTransferOptions

BlobConstants.PARALLEL_TRANSFER_OPTIONS

ParallelTransferOptions

downloadBlobToFile

ファイルへのダウンロードに使用する {@link ParallelTransferOptions}。並列転送数パラメーターは無視されます。

CamelAzureStorageBlobFileDir

BlobConstants.FILE_DIR

String

downloadBlobToFile

ダウンロードした BLOB が保存されるファイルディレクトリー。

CamelAzureStorageBlobDownloadLinkExpiration

BlobConstants.DOWNLOAD_LINK_EXPIRATION

Long

downloadLink

URL ダウンロードリンクのデフォルトの有効期限 (ミリ秒) をオーバーライドします。

CamelAzureStorageBlobBlobName

BlobConstants.BLOB_NAME

String

ブロブに関連する操作

交換ヘッダーの BLOB 名をオーバーライド/設定します。

CamelAzureStorageBlobContainerName

BlobConstants.BLOB_CONTAINER_NAME

String

コンテナーと BLOB に関する操作

交換ヘッダーのコンテナー名をオーバーライド/設定します。

CamelAzureStorageBlobOperation

BlobConstants.BLOB_OPERATION

BlobOperationsDefinition

すべて

実行する producer 操作を指定します。producer 操作に関連するこのページのドキュメントを参照してください。

CamelAzureStorageBlobRegex

BlobConstants.REGEX

String

listBlobs,getBlob

結果をフィルタリングして、指定された正規表現と名前が一致する BLOB のみを返します。すべてを返すには null の場合があります。接頭辞と正規表現の両方が設定されている場合、正規表現が優先され、接頭辞は無視されます。

CamelAzureStorageBlobChangeFeedStartTime

BlobConstants.CHANGE_FEED_START_TIME

OffsetDateTime

getChangeFeed

結果をフィルタリングして、開始時刻の前後のイベントを返します。注意: 前の時間に属するいくつかのイベントも返される可能性があります。この時間に属するいくつかのイベントが欠落している可能性があります。その時間のすべてのイベントが確実に返されるようにするには、開始時間を 1 時間単位で切り捨てます。

CamelAzureStorageBlobChangeFeedEndTime

BlobConstants.CHANGE_FEED_END_TIME

OffsetDateTime

getChangeFeed

結果をフィルタリングして、終了時刻のほぼ前にイベントを返します。注意: 次の 1 時間に属するいくつかのイベントも返される可能性があります。この時間に属するいくつかのイベントが欠落している可能性があります。その時間のすべてのイベントが確実に返されるようにするには、終了時間を 1 時間単位で切り上げます。

CamelAzureStorageBlobChangeFeedContext

BlobConstants.CHANGE_FEED_CONTEXT

コンテキスト

getChangeFeed

これにより、サービス呼び出し中に Http パイプラインを介して渡される追加のコンテキストが提供されます。

CamelAzureStorageBlobSourceBlobAccountName

BlobConstants.SOURCE_BLOB_ACCOUNT_NAME

String

copyBlob

コピー BLOB 操作でソースアカウント名として使用されるソース BLOB アカウント名

CamelAzureStorageBlobSourceBlobContainerName

BlobConstants.SOURCE_BLOB_CONTAINER_NAME

String

copyBlob

コピー BLOB 操作でソースコンテナー名として使用されるソース BLOB コンテナー名

10.5.2. コンポーネントの producer または consumer によって設定されるメッセージヘッダー

ヘッダー変数名タイプ説明

CamelAzureStorageBlobAccessTier

BlobConstants.ACCESS_TIER

AccessTier

BLOB のアクセス層。

CamelAzureStorageBlobAccessTierChangeTime

BlobConstants.ACCESS_TIER_CHANGE_TIME

OffsetDateTime

BLOB のアクセス層が最後に変更された日時。

CamelAzureStorageBlobArchiveStatus

BlobConstants.ARCHIVE_STATUS

ArchiveStatus

BLOB のアーカイブステータス。

CamelAzureStorageBlobCreationTime

BlobConstants.CREATION_TIME

OffsetDateTime

ブロブの作成時間。

CamelAzureStorageBlobSequenceNumber

BlobConstants.BLOB_SEQUENCE_NUMBER

Long

ページ BLOB の現在のシーケンス番号。

CamelAzureStorageBlobBlobSize

BlobConstants.BLOB_SIZE

long

ブロブのサイズ。

CamelAzureStorageBlobBlobType

BlobConstants.BLOB_TYPE

BlobType

ブロブのタイプ。

CamelAzureStorageBlobCacheControl

BlobConstants.CACHE_CONTROL

String

BLOB に指定されたキャッシュコントロール。

CamelAzureStorageBlobCommittedBlockCount

BlobConstants.COMMITTED_BLOCK_COUNT

Integer

追加 BLOB にコミットされたブロックの数

CamelAzureStorageBlobContentDisposition

BlobConstants.CONTENT_DISPOSITION

String

BLOB に指定されたコンテンツの配置。

CamelAzureStorageBlobContentEncoding

BlobConstants.CONTENT_ENCODING

String

BLOB に指定されたコンテンツエンコーディング。

CamelAzureStorageBlobContentLanguage

BlobConstants.CONTENT_LANGUAGE

String

BLOB に指定されたコンテンツ言語。

CamelAzureStorageBlobContentMd5

BlobConstants.CONTENT_MD5

byte[]

BLOB に指定されたコンテンツ MD5。

CamelAzureStorageBlobContentType

BlobConstants.CONTENT_TYPE

String

BLOB に指定されたコンテンツタイプ。

CamelAzureStorageBlobCopyCompletionTime

BlobConstants.COPY_COMPILATION_TIME

OffsetDateTime

BLOB に対する最後のコピー操作が完了した日時。

CamelAzureStorageBlobCopyDestinationSnapshot

BlobConstants.COPY_DESTINATION_SNAPSHOT

String

BLOB の最後の増分コピースナップショットのスナップショット識別子。

CamelAzureStorageBlobCopyId

BlobConstants.COPY_ID

String

BLOB に対して実行された最後のコピー操作の識別子。

CamelAzureStorageBlobCopyProgress

BlobConstants.COPY_PROGRESS

String

BLOB に対して実行された最後のコピー操作の状態。

CamelAzureStorageBlobCopySource

BlobConstants.COPY_SOURCE

String

BLOB に対して実行された最後のコピー操作のソース。

CamelAzureStorageBlobCopyStatus

BlobConstants.COPY_STATUS

CopyStatusType

BLOB に対して実行された最後のコピー操作の状態。

CamelAzureStorageBlobCopyStatusDescription

BlobConstants.COPY_STATUS_DESCRIPTION

String

BLOB に対する最後のコピー操作の説明。

CamelAzureStorageBlobETag

BlobConstants.E_TAG

String

ブロブの E タグ

CamelAzureStorageBlobIsAccessTierInferred

BlobConstants.IS_ACCESS_TIER_INFRRRED

boolean

BLOB のアクセス層が BLOB のプロパティーから推測されたかどうかを示すフラグ。

CamelAzureStorageBlobIsIncrementalCopy

BlobConstants.IS_INCREMENTAL_COPY

boolean

BLOB が増分コピーされたかどうかを示すフラグ。

CamelAzureStorageBlobIsServerEncrypted

BlobConstants.IS_SERVER_ENCRYPTED

boolean

BLOB のコンテンツがサーバー上で暗号化されているかどうかを示すフラグ。

CamelAzureStorageBlobLastModified

BlobConstants.LAST_MODIFIED

OffsetDateTime

BLOB が最後に変更された日時。

CamelAzureStorageBlobLeaseDuration

BlobConstants.LEASE_DURATION

LeaseDurationType

BLOB のリースの種類。

CamelAzureStorageBlobLeaseState

BlobConstants.LEASE_STATE

LeaseStateType

BLOB のリースの状態。

CamelAzureStorageBlobLeaseStatus

BlobConstants.LEASE_STATUS

LeaseStatusType

BLOB のリースのステータス。

CamelAzureStorageBlobMetadata

BlobConstants.METADATA

Map<String, String>

BLOB に関連付けられた追加のメタデータ。

CamelAzureStorageBlobAppendOffset

BlobConstants.APPEND_OFFSET

String

ブロックがブロック BLOB にコミットされたオフセット。

CamelAzureStorageBlobFileName

BlobConstants.FILE_NAME

String

操作 downloadBlobToFile からダウンロードされたファイル名。

CamelAzureStorageBlobDownloadLink

BlobConstants.DOWNLOAD_LINK

String

downloadLink 操作によって生成されたダウンロードリンク。

CamelAzureStorageBlobRawHttpHeaders

BlobConstants.RAW_HTTP_HEADERS

HttpHeaders

ユーザーが使用できる解析されていない 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必要 です。

操作説明

listBlobContainers

ブロブの内容を取得します。この操作の出力をブロブ範囲に制限できます。

getChangeFeed

ストレージアカウント内の BLOB と BLOB メタデータに発生したすべての変更のトランザクションログを返します。変更フィードは、これらの変更の順序付けられた、保証された、永続的で不変の読み取り専用ログを提供します。

コンテナーレベルでの操作

これらの操作には、accountNamecontainerName必要です

操作説明

createBlobContainer

ストレージアカウント内に新しいコンテナーを作成します。同じ名前のコンテナーがすでに存在する場合、producer はそれを無視します。

deleteBlobContainer

ストレージアカウント内の指定されたコンテナーを削除します。コンテナーが存在しない場合、操作は失敗します。

listBlobs

フォルダー構造がフラット化された、このコンテナー内の BLOB のリストを返します。

BLOB レベルでの操作

これらの操作では、accountNamecontainerName、および blobName必須です

操作ブロブの種類説明

getBlob

共通

ブロブの内容を取得します。この操作の出力をブロブ範囲に制限できます。

deleteBlob

共通

ブロブを削除します。

downloadBlobToFile

共通

パスで指定されたファイルに BLOB 全体をダウンロードします。ファイルが作成されますが、存在してはなりません。ファイルがすでに存在する場合、{@link FileAlreadyExistsException} が出力されます。

downloadLink

共通

Shared Access Signature (SAS) を使用して、指定された BLOB のダウンロードリンクを生成します。デフォルトでは、これは許可されたアクセスを 1 時間に制限します。ただし、ヘッダーを使用してデフォルトの有効期限をオーバーライドできます。

uploadBlockBlob

BlockBlob

新しいブロック BLOB を作成するか、既存のブロック BLOB の内容を更新します。既存のブロック BLOB を更新すると、BLOB の既存のメタデータが上書きされます。PutBlob では部分的な更新はサポートされていません。既存の BLOB のコンテンツは新しいコンテンツで上書きされます。

stageBlockBlobList

BlockBlob

指定されたブロックをブロック BLOB のステージング領域にアップロードし、後で commitBlobBlockList の呼び出しによってコミットします。ただし、ヘッダー CamelAzureStorageBlobCommitBlobBlockListLater または config commitBlockListLater が false に設定されている場合、これはブロックをステージングした直後にブロックをコミットします。

commitBlobBlockList

BlockBlob

BLOB を設定するブロック ID のリストを指定して、BLOB を書き込みます。ブロックが BLOB の一部として書き込まれるためには、ブロックが前の stageBlockBlobList 操作でサーバーに正常に書き込まれている必要があります。commitBlobBlockList を呼び出して、変更されたブロックのみをアップロードし、新しいブロックと既存のブロックを一緒にコミットすることで、BLOB を更新できます。ブロックリストに指定されておらず、完全に削除されたブロック。

getBlobBlockList

BlockBlob

指定されたブロックリストフィルターを使用して、ブロック BLOB の一部としてアップロードされたブロックのリストを返します。

createAppendBlob

AppendBlob

長さ 0 の追加 BLOB を作成します。commitAppendBlo`b 操作を呼び出して、追加 BLOB にデータを追加します。

commitAppendBlob

AppendBlob

新しいデータブロックを既存の追加 BLOB の末尾にコミットします。ヘッダー CamelAzureStorageBlobCreateAppendBlob または config createAppendBlob が true に設定されている場合、コミットする前にまず createAppendBlob 操作への内部呼び出しを通じて appendBlob の作成を試みます。

createPageBlob

PageBlob

指定された長さのページ BLOB を作成します。uploadPageBlob 操作を呼び出して、データデータをページ BLOB にアップロードします。

uploadPageBlob

PageBlob

1 つ以上のページをページ BLOB に書き込みます。書き込みサイズは 512 の倍数である必要があります。ヘッダー CamelAzureStorageBlobCreatePageBlob または config createPageBlob が true に設定されている場合、アップロードする前にまず createPageBlob 操作への内部呼び出しを通じて appendBlob の作成を試みます。

resizePageBlob

PageBlob

ページ BLOB のサイズを指定されたサイズ (512 の倍数である必要があります) に変更します。

clearPageBlob

PageBlob

指定されたページをページ BLOB から解放します。範囲のサイズは 512 の倍数でなければなりません。

getPageBlobRanges

PageBlob

ページ BLOB またはページ BLOB のスナップショットの有効なページ範囲のリストを返します。

copyBlob

共通

異なるアカウントからでも、あるコンテナーから別のコンテナーに 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 へのキューサービス操作のヒント。

列挙値:

  • listQueues
  • createQueue
  • deleteQueue
  • clearQueue
  • sendMessage
  • deleteMessage
  • receiveMessages
  • peekMessages
  • updateMessage
 

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 がエクスチェンジを作成する際に交換パターンを設定します。

列挙値:

  • InOnly
  • InOut
  • InOptionalOut
 

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 へのキューサービス操作のヒント。

列挙値:

  • listQueues
  • createQueue
  • deleteQueue
  • clearQueue
  • sendMessage
  • deleteMessage
  • receiveMessages
  • peekMessages
  • updateMessage
 

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
  • DEBUG
  • INFO
  • WARN
  • ERROR
  • OFF

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
  • SECONDS
  • 時間

MILLISECONDS

TimeUnit

useFixedDelay (scheduler)

固定遅延または固定レートを使用するかどうかを制御します。詳細は、JDK の ScheduledExecutorService を参照してください。

true

boolean

accessKey (security)

azure キューサービスでの認証に使用される、関連付けられた azure アカウント名のアクセスキー。

 

String

認証情報 (セキュリティー)

StorageSharedKeyCredential を挿入して Azure クライアントを作成できます。これには重要な認証情報が保持されます。

 

StorageSharedKeyCredential

必須情報オプション

このコンポーネントを使用するには、必要な Azure 認証情報を提供するための 3 つのオプションがあります。

  • Azure アカウントの accountNameaccessKey を指定します。これが最も簡単な開始方法です。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 によって評価されるメッセージヘッダー

ヘッダー変数名タイプ操作説明

CamelAzureStorageQueueSegmentOptions

QueueConstants.QUEUES_SEGMENT_OPTIONS

QueuesSegmentOptions

listQueues

キューを一覧表示するためのオプション

CamelAzureStorageQueueTimeout

QueueConstants.TIMEOUT

期間

すべて

それを超えると \{@link RuntimeException} が発生する任意のタイムアウト値。

CamelAzureStorageQueueMetadata

QueueConstants.METADATA

Map<String,String>

createQueue

キューに関連付けるメタデータ

CamelAzureStorageQueueTimeToLive

QueueConstants.TIME_TO_LIVE

期間

sendMessage

メッセージがキュー内で存続する時間。設定されていない場合、値はデフォルトで 7 日になります。-1 が渡されると、メッセージは期限切れになりません。存続時間は -1 または任意の正の数でなければなりません。

CamelAzureStorageQueueVisibilityTimeout

QueueConstants.VISIBILITY_TIMEOUT

期間

sendMessage, receiveMessages, updateMessage

メッセージがキューに表示されないタイムアウト期間。設定されていない場合、値はデフォルトで 0 になり、メッセージはすぐに表示されます。タイムアウトは 0 秒から 7 日の間にする必要があります。

CamelAzureStorageQueueCreateQueue

QueueConstants.CREATE_QUEUE

boolean

sendMessage

true に設定すると、メッセージを送信するときにキューが自動的に作成されます。

CamelAzureStorageQueuePopReceipt

QueueConstants.POP_RECEIPT

String

deleteMessage, updateMessage

メッセージを削除または更新するために一致する必要がある一意の識別子。

CamelAzureStorageQueueMessageId

QueueConstants.MESSAGE_ID

String

deleteMessage, updateMessage

削除または更新するメッセージの ID。

CamelAzureStorageQueueMaxMessages

QueueConstants.MAX_MESSAGES

Integer

receiveMessagespeekMessages

取得するメッセージの最大数。要求された数よりもキューに存在するメッセージが少ない場合は、すべてのメッセージが返されます。空のままにすると、1 つのメッセージのみが取得されます。許可される範囲は 1 から 32 のメッセージです。

CamelAzureStorageQueueOperation

QueueConstants.QUEUE_OPERATION

QueueOperationDefinition

すべて

実行する producer 操作を指定します。producer 操作に関連するこのページのドキュメントを参照してください。

CamelAzureStorageQueueName

QueueConstants.QUEUE_NAME

String

すべて

キュー名をオーバーライドします。

11.5.2. コンポーネントの producer または consumer によって設定されるメッセージヘッダー

ヘッダー変数名タイプ説明

CamelAzureStorageQueueMessageId

QueueConstants.MESSAGE_ID

String

キューに送信されるメッセージの ID。

CamelAzureStorageQueueInsertionTime

QueueConstants.INSERTION_TIME

OffsetDateTime

メッセージがキューに挿入された時刻。

CamelAzureStorageQueueExpirationTime

QueueConstants.EXPIRATION_TIME

OffsetDateTime

メッセージが期限切れになり、自動的に削除される時間。

CamelAzureStorageQueuePopReceipt

QueueConstants.POP_RECEIPT

String

この値は、メッセージを削除/更新するために必要です。この popreceipt を使用して削除に失敗した場合、メッセージは別のクライアントによってキューから取り出されています。

CamelAzureStorageQueueTimeNextVisible

QueueConstants.TIME_NEXT_VISIBLE

OffsetDateTime

メッセージが再びキューに表示される時間。

CamelAzureStorageQueueDequeueCount

QueueConstants.DEQUEUE_COUNT

long

メッセージがデキューされた回数。

CamelAzureStorageQueueRawHttpHeaders

QueueConstants.RAW_HTTP_HEADERS

HttpHeaders

ユーザーが使用できる解析されていない 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必要 です。

操作説明

listQueues

指定されたマーカーから開始して、フィルターを通過するストレージアカウント内のキューを一覧表示します。

キューレベルでの操作

これらの操作には、accountNamequeueName必要です

操作説明

createQueue

新しいキューを作成します。

deleteQueue

キューを完全に削除します。

clearQueue

キュー内のすべてのメッセージを削除します..

sendMessage

デフォルトのプロデューサ操作 指定された存続時間とメッセージがキューに表示されないタイムアウト期間を指定してメッセージを送信します。メッセージテキストは、Exchange メッセージ本文から評価されます。デフォルトでは、キューが存在しない場合、最初に空のキューが作成されます。これを無効にする場合は、config createQueue またはヘッダー CamelAzureStorageQueueCreateQueuefalse に設定します。

deleteMessage

指定されたメッセージをキューから削除します。

receiveMessages

キューからメッセージを最大数まで取得し、タイムアウト期間中は他の操作から非表示にします。ただし、信頼性の理由から、キューからメッセージをデキューしません。

peekMessages

キューの先頭からメッセージの最大数までメッセージをピークします。

updateMessage

キュー内の特定のメッセージを新しいメッセージで更新し、表示タイムアウトをリセットします。メッセージテキストは、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 レジストリーに委譲され、設定に応じてシングルトンまたはプロトタイプスコープのいずれかとして機能します。したがって、いつプロトタイプを使用するかは委譲されたレジストリーにより異なります。

列挙値:

  • シングルトン
  • Request
  • プロトタイプ

シングルトン

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 レジストリーに委譲され、設定に応じてシングルトンまたはプロトタイプスコープのいずれかとして機能します。したがって、いつプロトタイプを使用するかは委譲されたレジストリーにより異なります。

列挙値:

  • シングルトン
  • Request
  • プロトタイプ

シングルトン

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: エンドポイントを入力として使用することを検討してください。

ProxyHelpercreateProxy() メソッドを使用して、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 がエクスチェンジを作成する際に交換パターンを設定します。

列挙値:

  • InOnly
  • InOut
  • InOptionalOut
 

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 (共通)

使用する一貫性レベル。

列挙値:

  • 任意
  • ONE
  • TWO
  • THREE
  • QUORUM
  • ALL
  • LOCAL_ONE
  • LOCAL_QUORUM
  • EACH_QUORUM
  • SERIAL
  • LOCAL_SERIAL
 

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 がエクスチェンジを作成する際に交換パターンを設定します。

列挙値:

  • InOnly
  • InOut
  • InOptionalOut
 

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
  • DEBUG
  • INFO
  • WARN
  • ERROR
  • OFF

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
  • SECONDS
  • 時間

MILLISECONDS

TimeUnit

useFixedDelay (scheduler)

固定遅延または固定レートを使用するかどうかを制御します。詳細は、JDK の ScheduledExecutorService を参照してください。

true

boolean

15.4. エンドポイント接続の構文

エンドポイントは、Cassandra 接続を開始するか、既存のものを使用できます。

URI説明

cql:localhost/keyspace

単一ホスト、デフォルトポート、通常はテスト用

cql:host1,host2/keyspace

マルチホスト、デフォルトポート

cql:host1,host2:9042/keyspace

マルチホスト、カスタムポート

cql:host1,host2

デフォルトのポートとキースペース

cql:bean:sessionRef

提供されたセッション参照

cql:bean:clusterRef/keyspace

提供されたクラスター参照

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> (resultSetConversionStrategyALL または LIMIT_0-9+ の場合)
  • resultSetConversionStrategyONE の場合h Single` Row`
  • その他 (resultSetConversionStrategyResultSetConversionStrategy のカスタム実装である場合)

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 列がなく、別のデータモデルを使用するように拡張できます。

オプションデフォルト説明

table

CAMEL_IDEMPOTENT

テーブル名

pkColumns

NAME,` KEY`

主キー列

name

 

リポジトリー名、NAME 列に使用される値

ttl

 

重要な生存期間

writeConsistencyLevel

 

キーの挿入/削除に使用される一貫性レベル: ANYONETWOQUORUMLOCAL_QUORUM

readConsistencyLevel

 

キーの読み取り/チェックに使用される一貫性レベル: ONETWOQUORUMLOCAL_QUORUM

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 列がなく、別のデータモデルを使用するように拡張できます。

オプションデフォルト説明

table

CAMEL_AGGREGATION

テーブル名

pkColumns

NAME,KEY

主キー列

exchangeIdColumn

EXCHANGE_ID

交換 ID 列

exchangeColumn

EXCHANGE

交換内容欄

name

 

リポジトリー名、NAME 列に使用される値

ttl

 

生存時間の交換

writeConsistencyLevel

 

交換の挿入/削除に使用される一貫性レベル: ANYONETWOQUORUMLOCAL_QUORUM

readConsistencyLevel

 

交換の読み取り/チェックに使用される整合性レベル: ONETWOQUORUMLOCAL_QUORUM

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. コマンド

コマンド説明

route

routeIdaction パラメーターを使用してルートを制御します。

言語

メッセージ本文の評価に使用するを指定できます。評価の結果があれば、その結果がメッセージ本文に入れられます。

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)

必要な コマンドは、ルートまたは言語のいずれかです。

列挙値:

  • route
  • 言語
 

String

language (producer)

メッセージ本文の評価に使用する言語の名前を指定できます。評価の結果があれば、その結果がメッセージ本文に入れられます。

列挙値:

  • bean
  • constant
  • el
  • exchangeProperty
  • file
  • groovy
  • header
  • jsonpath
  • mvel
  • ognl
  • ref
  • simple
  • spel
  • sql
  • terser
  • tokenize
  • xpath
  • xquery
  • xtokenize
 

言語

16.4.1.1. クエリーパラメーター (6 パラメーター)
名前説明デフォルトタイプ

action (producer)

開始、停止、またはステータスのいずれかのアクションを示す。ルートを開始または停止するか、ルートのステータスをメッセージ本文の出力として取得します。Camel 2.11.1 以降では、サスペンドとレジュームを使用して、ルートをサスペンドまたはレジュームできます。また、Camel 2.11.1 以降では、stats を使用して、パフォーマンスの統計を XML 形式で取得できます。routeId オプションを使用して、パフォーマンス統計を取得するルートを定義できます。routeId が定義されていない場合は、CamelContext 全体の統計を取得します。再起動アクションはルートを再起動します。

列挙値:

  • start
  • stop
  • suspend
  • 再開
  • restart
  • status
  • stats
 

String

async (producer)

コントロールバスタスクを非同期で実行するかどうか。重要: このオプションを有効にすると、タスクの結果は Exchange に設定されません。これは、タスクを同期的に実行する場合にのみ可能です。

false

boolean

lazyStartProducer (producer)

最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。

false

boolean

loggingLevel (producer)

タスクが完了したとき、またはタスクの処理中に例外が発生した場合にログに使用されるログレベル。

列挙値:

  • TRACE
  • DEBUG
  • INFO
  • WARN
  • ERROR
  • OFF

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 形式です。ManagedRouteMBeandumpRouteStatsAsXml 操作を使用して 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 がエクスチェンジを作成する際に交換パターンを設定します。

列挙値:

  • InOnly
  • InOut
  • InOptionalOut
 

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 形式

このエンドポイントには、cxfEndpointsomeAddress の 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 エンドポイントでサポートされるデータタイプメッセージ。

列挙値:

  • PAYLOAD
  • RAW
  • MESSAGE
  • CXF_MESSAGE
  • POJO

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 がエクスチェンジを作成する際に交換パターンを設定します。

列挙値:

  • InOnly
  • InOut
  • InOptionalOut
 

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

serviceNameportNameQNames であるため、これらを指定する場合は、上記の例に示すように {namespace} を前に付けてください。

18.4.3. データ形式の説明

Apache Camel では、Camel CXF コンポーネントがルートを Web サービスと統合するための鍵となります。Camel CXF コンポーネントを使用して、次のいずれかの方法で使用できる CXF エンドポイントを作成できます。

  • consumer — (ルートの開始時) は、ルートと統合される Web サービスインスタンスを表します。ルートに挿入されるペイロードのタイプは、エンドポイントの dataFormat オプションの値によって異なります。
  • producer — (ルートの他のポイントで) WS クライアントプロキシーを表し、現在の交換オブジェクトをリモート Web サービスでの操作呼び出しに変換します。現在の交換の形式は、エンドポイントの dataFormat 設定と一致する必要があります。
DataFormat説明

POJO

POJO (Plain old Java objects) は、ターゲットサーバーで呼び出されるメソッドへの Java パラメーターです。プロトコル JAX-WS ハンドラーと論理 JAX-WS ハンドラーの両方がサポートされています。

PAYLOAD

PAYLOAD は、CXF エンドポイントのメッセージ設定が適用された後のメッセージペイロード (soap:body の内容) です。Protocol JAX-WS ハンドラーのみがサポートされています。論理 JAX-WS ハンドラーはサポートされていません。

RAW

RAW モードは、トランスポート層から受信した生のメッセージストリームを提供します。ストリームに触れたり変更したりすることはできません。この種の DataFormat を使用している場合、CXF インターセプターの一部が削除されるため、camel-cxf consumer の後に SOAP ヘッダーが表示されません。JAX-WS ハンドラーはサポートされていません。

CXF_MESSAGE

CXF_MESSAGE を使用すると、トランスポート層からのメッセージを生の SOAP メッセージに変換することで、CXF インターセプターの全機能を呼び出すことができます。

交換プロパティー CamelCXFDataFormat を取得することで、交換のデータ形式モードを判別できます。交換キー定数は org.apache.camel.component.cxf.common.message.CxfConstants.DATA_FORMAT_PROPERTY で定義されています。

18.4.4. CXF の LoggingOutInterceptor を RAW モードで有効にする方法

CXF の LoggingOutInterceptor は、ロギングシステム (Java Util Logging) に送信されるアウトバウンドメッセージを出力します。LoggingOutInterceptorPRE_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 エンドポイントで消費する必要がある場合、relayHeaderstrue に設定する必要があります。デフォルト値。

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"/>

ここでヘッダーをリレー/ドロップする方法を示すテストを見てください。

https://github.com/apache/camel/blob/main/components/camel-cxf/src/test/java/org/apache/camel/component/cxf/soap/headers/CxfMessageHeadersRelayTest.java

  • 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 で設定できます。
名前必須説明

relayHeaders

いいえ

すべてのメッセージヘッダーは、メッセージヘッダーフィルターによって処理されます タイプ: booleanデフォルト: true

relayAllMessageHeaders

いいえ

すべてのメッセージヘッダーが伝達されます (メッセージヘッダーフィルターによる処理なし) タイプ: booleanデフォルト: false

allowFilterNamespaceClash

いいえ

アクティベーション名前空間で 2 つのフィルターが重複する場合、プロパティーはその処理方法を制御します。値が true の場合、最後のものが優先されます。値が false の場合、例外が出力されます Type : boolean Default : false

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 要素は、多くの追加属性をサポートしています。

名前

PortName

このサービスが実装しているエンドポイント名で、wsdl:port@name にマップされます。ns:PORT_NAME の形式で、ns はこのスコープで有効な名前空間接頭辞です。

serviceName

このサービスが実装しているサービス名で、wsdl:service@name にマップされます。ns:SERVICE_NAME の形式で、ns はこのスコープで有効な名前空間接頭辞です。

wsdlURL

WSDL のロケーション。クラスパス、ファイルシステム、またはリモートでホストできます。

bindingId

使用するサービスモデルの bindingId

address

サービス公開アドレス。

bus

JAX-WS エンドポイントで使用されるバス名。

serviceClass

JSR181 アノテーションを持つかどうかにかかわらず、SEI (Service Endpoint Interface) クラスのクラス名。

また、多くの子要素もサポートしています。

名前

cxf:inInterceptors

このエンドポイントの着信インターセプター。<bean> または <ref> のリスト。

cxf:inFaultInterceptors

このエンドポイントの着信障害インターセプター。<bean> または <ref> のリスト。

cxf:outInterceptors

このエンドポイントの発信インターセプター。<bean> または <ref> のリスト。

cxf:outFaultInterceptors

このエンドポイントの送信障害インターセプター。<bean> または <ref> のリスト。

cxf:properties

JAX-WS エンドポイントに提供する必要があるプロパティーマップ。以下を参照してください。

cxf:handlers

JAX-WS エンドポイントに提供する必要がある JAX-WS ハンドラーリスト。以下を参照してください。

cxf:dataBinding

エンドポイントで使用する DataBinding を指定できます。これは、Spring <bean class="MyDataBinding"/> 構文を使用して提供できます。

cxf:binding

このエンドポイントが使用する BindingFactory を指定できます。これは、Spring <bean class="MyBindingFactory"/> 構文を使用して提供できます。

cxf:features

このエンドポイントのインターセプターを保持する機能。Bean または参照のリスト

cxf:schemaLocations

エンドポイントが使用するスキーマの場所。schemaLocations のリスト

cxf:serviceFactory

このエンドポイントが使用するサービスファクトリー。これは、Spring <bean class="MyServiceFactory"/> 構文を使用して提供できます

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 であり、そのリストから結果を取得できます。

メッセージヘッダーで操作名を指定しない場合、CxfProducerCxfEndpoint から defaultOperationName を使用しようとします。CxfEndpointdefaultOperationName が設定されていない場合、操作リストから最初の 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 を使用できます。POJOPAYLOAD、および 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)

マーシャリングまたはアンマーシャリングのいずれかを使用するために 必要な 操作。

列挙値:

  • marshal
  • unmarshal
 

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 の両方がサポート対象

分散処理と非同期処理のテストは、非常に難しいことで知られています。MockTest、および DataSet エンドポイントは Camel テストフレームワークとうまく連携し、エンタープライズ統合パターン と Camel の幅広いコンポーネントを強力な Bean 統合と共に使用して、ユニットと統合のテストを簡素化します。

DataSet コンポーネントは、システムの負荷テストとソークテストを簡単に実行するメカニズムを提供します。メッセージのソースとして、またデータセットが受信されたことをアサートする方法として、DataSet インスタンス を作成できるようにすることで機能します。

Camel は、データセットを送信するときに スループットロガー を使用します。

20.1. URI 形式

dataset:name[?options]

name は、レジストリーで DataSet インスタンス を検索するために使用されます

Camel には、独自の DataSet を実装するためのベースとして使用できる org.apache.camel.component.dataset.DataSetorg.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 = ヘッダー値が存在する場合は検証され、存在しない場合は設定されます。

列挙値:

  • strict
  • lenient
  • off

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 がエクスチェンジを作成する際に交換パターンを設定します。

列挙値:

  • InOnly
  • InOut
  • InOptionalOut
 

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 のプロパティー

プロパティータイプデフォルト説明

defaultHeaders

Map<String,Object>

null

デフォルトのメッセージ本文を指定します。SimpleDataSet の場合、これは一定のペイロードです。ただし、メッセージごとにカスタムペイロードを作成する場合は、DataSetSupport の独自の派生を作成します。

outputTransformer

org.apache.camel.Processor

null

 

size

long

10

送信/消費するメッセージの数を指定します。

reportCount

long

-1

進行状況を報告する前に受信するメッセージの数を指定します。大規模な負荷テストの進行状況を表示するのに役立ちます。< 0 の場合は size/5、0 の場合は size、それ以外の場合は reportCount 値に設定されます。

20.8. SimpleDataSet

SimpleDataSetDataSetSupport を拡張し、デフォルトの本文を追加します。

20.8.1. SimpleDataSet の追加プロパティー

プロパティータイプデフォルト説明

defaultBody

Object

<hello>world!</hello>

デフォルトのメッセージ本文を指定します。デフォルトでは、SimpleDataSet は交換ごとに同じ一定のペイロードを生成します。交換ごとにペイロードをカスタマイズする場合は、キャメル プロセッサー を作成し、outputTransformer プロパティーを設定して、それを使用するように SimpleDataSet を設定します。

20.9. ListDataSet

List`DataSet` は DataSetSupport を拡張し、デフォルトボディのリストを追加します。

20.9.1. ListDataSet の追加プロパティー

プロパティータイプデフォルト説明

defaultBodies

List<Object>

empty LinkedList<Object>

デフォルトのメッセージ本文を指定します。デフォルトでは、ListDataSetCamelDataSetIndex を使用して defaultBodies のリストから定数ペイロードを選択します。ペイロードをカスタマイズする場合は、キャメル プロセッサー を作成し、outputTransformer プロパティーを設定して、それを使用するように ListDataSet を設定します。

size

long

defaultBodies リストのサイズ

送信/消費するメッセージの数を指定します。この値は、defaultBodies リストのサイズとは異なる場合があります。値が defaultBodies リストのサイズより小さい場合、一部のリスト要素は使用されません。値が defaultBodies リストのサイズより大きい場合、交換のペイロードは CamelDataSetIndex の係数と defaultBodies リストのサイズを使用して選択されます (つまり、CamelDataSetIndex % defaultBodies.size ())。

20.10. FileDataSet

FileDataSetListDataSet を拡張し、ファイルから本文をロードするためのサポートを追加します。

20.10.1. FileDataSet の追加プロパティー

プロパティータイプデフォルト説明

sourceFile

File

null

ペイロードのソースファイルを指定します

delimiter

String

\z

ファイルを複数のペイロードに分割するために java.util.Scanner によって使用される区切り文字パターンを指定します。

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 がエクスチェンジを作成する際に交換パターンを設定します。

列挙値:

  • InOnly
  • InOut
  • InOptionalOut
 

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)

実行する操作。

列挙値:

  • Index
  • 更新
  • バルク
  • GetById
  • MultiGet
  • MultiSearch
  • Delete
  • DeleteIndex
  • Search
  • Exists
  • Ping
 

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

実行する操作。

列挙値:

  • Index
  • 更新
  • バルク
  • GetById
  • MultiGet
  • MultiSearch
  • Delete
  • DeleteIndex
  • Search
  • Exists
  • Ping
 

ElasticsearchOperation

indexId (producer)

定数: PARAM_INDEX_ID

インデックス付けされたドキュメントの ID。

 

String

indexName (producer)

定数: PARAM_INDEX_NAME

動作させるインデックスの名前。

 

String

documentClass (producer)

定数: PARAM_DOCUMENT_CLASS

アンマーシャリングするドキュメントのクラスの完全修飾名。

ObjectNode

クラス

waitForActiveShards (producer)

定数: PARAM_WAIT_FOR_ACTIVE_SHARDS

インデックスの作成は、シャードの書き込み整合性数が使用可能になるまで待機します

 

Integer

scrollKeepAliveMs (producer)

定数: PARAM_SCROLL_KEEP_ALIVE_MS

応答の開始インデックス。

 

Integer

useScroll (producer)

定数: PARAM_SCROLL

スクロールの使用を有効にするには、true に設定します。

 

Boolean

size (producer)

定数: PARAM_SIZE

レスポンスのサイズ。

 

Integer

from (producer)

定数: PARAM_FROM

応答の開始インデックス。

 

Integer

22.6. メッセージ操作

現在、次の ElasticSearch 操作がサポートされています。操作のキーと次のいずれかに設定された値を使用して、エンドポイント URI オプションまたはエクスチェンジヘッダーを設定するだけです。一部の操作では、他のパラメーターまたはメッセージ本文を設定する必要もあります。

operationメッセージボディーdescription

Index

MapStringbyte[]ReaderInputStream または 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[]InputStreamStringReaderMap、または更新するドキュメントタイプのコンテンツ

コンテンツをインデックスに更新し、本文でコンテンツの 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&amp;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&amp;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&amp;indexName=twitter&amp;useScroll=true&amp;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 (共通)

すべてのリクエストに使用するエンコーディング。

列挙値:

  • JSON
  • XML
 

String

fhirVersion (共通)

使用する FHIR バージョン。

列挙値:

  • DSTU2
  • DSTU2_HL7ORG
  • DSTU2_1
  • DSTU3
  • R4
  • R5

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 パラメーターを使用して、サーバーが応答を変更するように要求します。

列挙値:

  • カウント
  • TEXT
  • DATA
  • TRUE
  • FALSE
 

String

validationMode (上級)

Camel が FHIR Server の適合ステートメントをいつ検証する必要があるか。

列挙値:

  • NEVER
  • ONCE

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 (共通)

必須 実行する操作の種類

列挙値:

  • CAPABILITIES
  • CREATE
  • DELETE
  • HISTORY
  • LOAD_PAGE
  • META
  • OPERATION
  • PATCH
  • READ
  • SEARCH
  • TRANSACTION
  • UPDATE
  • VALIDATE
 

FhirApiName

methodName (共通)

必須: 選択した操作に使用するサブ操作

 

String

23.4.2. クエリーパラメーター (44 パラメーター)

名前説明デフォルトタイプ

encoding (共通)

すべてのリクエストに使用するエンコーディング。

列挙値:

  • JSON
  • XML
 

String

fhirVersion (共通)

使用する FHIR バージョン。

列挙値:

  • DSTU2
  • DSTU2_HL7ORG
  • DSTU2_1
  • DSTU3
  • R4
  • R5

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 がエクスチェンジを作成する際に交換パターンを設定します。

列挙値:

  • InOnly
  • InOut
  • InOptionalOut
 

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 パラメーターを使用して、サーバーが応答を変更するように要求します。

列挙値:

  • カウント
  • TEXT
  • DATA
  • TRUE
  • FALSE
 

String

validationMode (上級)

Camel が FHIR Server の適合ステートメントをいつ検証する必要があるか。

列挙値:

  • NEVER
  • ONCE

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
  • DEBUG
  • INFO
  • WARN
  • ERROR
  • OFF

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
  • SECONDS
  • 時間

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 名タイプ説明

capabilities

両方

サーバーの機能ステートメントをフェッチする API

create

両方

サーバー上に新しいリソースインスタンスを作成する作成操作用の API

delete

両方

サーバーリソースで論理的な削除を実行する、削除操作用の API

history

両方

history メソッドの API

load-page

両方

Atom バンドル内の link type=next タグで指定されたリンクを使用して、ページセットからリソースの前/次のバンドルをロードする API

meta

両方

タグやその他のメタ要素をリソースから、またはサーバー全体で取得、追加、削除するために使用できるメタ操作用の API

operation

両方

拡張 FHIR 操作用の API

patch

両方

サーバーリソースで論理パッチを実行する、パッチ操作用の API

read

両方

読み取り操作の API メソッド

search

両方

特定の基準セットに一致するリソースを検索する API

transaction

両方

トランザクション (リソースの集まり) をサーバーに送信して単体で実行するための API

update

両方

サーバーリソースで論理的な削除を実行する、更新操作用の API

validate

両方

リソースを検証するための API

各 API については、以降のセクションで説明します。

23.5.1. API: 機能

producer と consumer の両方がサポート対象

機能 API は、次の構文で定義されます。

fhir:capabilities/methodName?[parameters]

以下の表にメソッドをリストし、その後に各メソッドの詳細な構文を示します。(API メソッドには、名前の代わりに構文で使用できる省略形の別名を付けることができます)

メソッド説明

ofType

指定されたモデルタイプを使用して適合ステートメントを取得します

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=myParameterNameHereCamelFhir.myParameterNameHere ヘッダーをオーバーライドします。

23.5.2. API: 作成

producer と consumer の両方がサポート対象

作成 API は、構文で次のように定義されます。

fhir:create/methodName?[parameters]

以下の表に 1 つのメソッドをリストし、その後に各メソッドの詳細な構文を示します。(API メソッドには、名前の代わりに構文で使用できる省略形の別名を付けることができます)

メソッド説明

resource

サーバー上に 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=myParameterNameHereCamelFhir.myParameterNameHere ヘッダーをオーバーライドします。

23.5.3. API: 削除

producer と consumer の両方がサポート対象

削除 API は、構文で次のように定義されます。

fhir:delete/methodName?[parameters]

以下の表に 3 つのメソッドをリストし、その後に各メソッドの詳細な構文を示します。(API メソッドには、名前の代わりに構文で使用できる省略形の別名を付けることができます)

メソッド説明

resource

指定されたリソースを削除します

resourceById

リソースタイプ e でリソースを削除する

resourceConditionalByUrl

特定の検索 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=myParameterNameHereCamelFhir.myParameterNameHere ヘッダーをオーバーライドします。

23.5.4. API: 履歴

producer と consumer の両方がサポート対象

履歴 API は、次の構文で定義されます。

fhir:history/methodName?[parameters]

以下の表に 3 つのメソッドをリストし、その後に各メソッドの詳細な構文を示します。(API メソッドには、名前の代わりに構文で使用できる省略形の別名を付けることができます)

メソッド説明

onInstance

サーバー上の特定のリソースのすべてのバージョンに対して (ID とタイプによって) 操作を実行します

onServer

サーバー上のすべてのタイプのすべてのリソースのすべてのバージョンで操作を実行します

onType

サーバー上の指定されたタイプのすべてのリソースのすべてのバージョンで操作を実行します

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=myParameterNameHereCamelFhir.myParameterNameHere ヘッダーをオーバーライドします。

23.5.5. API: ページの読み込み

producer と consumer の両方がサポート対象

ページ読み込み API は、次の構文で定義されます。

fhir:load-page/methodName?[parameters]

以下の表に 3 つのメソッドをリストし、その後に各メソッドの詳細な構文を示します。(API メソッドには、名前の代わりに構文で使用できる省略形の別名を付けることができます)

メソッド説明

byUrl

指定された URL とバンドルタイプを使用して結果のページを読み込み、DSTU1 Atom バンドルを返します

next

バンドル内のリレーション next のリンクを使用して、結果の次のページを読み込みます

previous

バンドル内のリレーション 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=myParameterNameHereCamelFhir.myParameterNameHere ヘッダーをオーバーライドします。

23.5.6. API: メタ

producer と consumer の両方がサポート対象

メタ API は、次の構文で定義されます。

fhir:meta/methodName?[parameters]

以下の表に 5 つのメソッドをリストし、その後に各メソッドの詳細な構文を示します。(API メソッドには、名前の代わりに構文で使用できる省略形の別名を付けることができます)

メソッド説明

add

指定されたメタデータの要素を既存のセットに追加します (削除しないでください)。

delete

指定された ID から指定されたメタデータの要素を削除します

getFromResource

特定のリソースから現在のメタデータを取得する

getFromServer

サーバー全体から現在のメタデータを取得する

getFromType

特定のタイプから現在のメタデータをフェッチする

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=myParameterNameHereCamelFhir.myParameterNameHere ヘッダーをオーバーライドします。

23.5.7. API: 操作

producer と consumer の両方がサポート対象

操作 API は、次の構文で定義されます。

fhir:operation/methodName?[parameters]

以下の表に 5 つのメソッドをリストし、その後に各メソッドの詳細な構文を示します。(API メソッドには、名前の代わりに構文で使用できる省略形の別名を付けることができます)

メソッド説明

onInstance

サーバー上の特定のリソースのすべてのバージョンに対して (ID とタイプによって) 操作を実行します

onInstanceVersion

この操作は、リソースの特定のバージョンで動作します

onServer

サーバー上のすべてのタイプのすべてのリソースのすべてのバージョンで操作を実行します

onType

サーバー上の指定されたタイプのすべてのリソースのすべてのバージョンで操作を実行します

processMessage

この操作は、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=myParameterNameHereCamelFhir.myParameterNameHere ヘッダーをオーバーライドします。

23.5.8. API: パッチ

producer と consumer の両方がサポート対象

パッチ API は、次の構文で定義されます。

fhir:patch/methodName?[parameters]

以下の表に 2 つのメソッドをリストし、その後に各メソッドの詳細な構文を示します。(API メソッドには、名前の代わりに構文で使用できる省略形の別名を付けることができます)

メソッド説明

patchById

指定されたリソース ID にパッチを適用します

patchByUrl

特定の検索 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=myParameterNameHereCamelFhir.myParameterNameHere ヘッダーをオーバーライドします。

23.5.9. API: 読み取り

producer と consumer の両方がサポート対象

読み取り API は、次の構文で定義されます。

fhir:read/methodName?[parameters]

以下の表に 2 つのメソッドをリストし、その後に各メソッドの詳細な構文を示します。(API メソッドには、名前の代わりに構文で使用できる省略形の別名を付けることができます)

メソッド説明

resourceById

サーバー上の IBaseResource を ID で読み取ります

resourceByUrl

サーバー上の 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=myParameterNameHereCamelFhir.myParameterNameHere ヘッダーをオーバーライドします。

23.5.11. API: トランザクション

producer と consumer の両方がサポート対象

トランザクション API は、次の構文で定義されます。

fhir:transaction/methodName?[parameters]

以下の表に 2 つのメソッドをリストし、その後に各メソッドの詳細な構文を示します。(API メソッドには、名前の代わりに構文で使用できる省略形の別名を付けることができます)

メソッド説明

withBundle

指定された生のテキスト (バンドルリソースである必要があります) をトランザクション入力として使用します

withResources

リソースのリストをトランザクション入力として使用する

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=myParameterNameHereCamelFhir.myParameterNameHere ヘッダーをオーバーライドします。

23.5.12. API: 更新

producer と consumer の両方がサポート対象

更新 API は、次の構文で定義されます。

fhir:update/methodName?[parameters]

以下の表に 2 つのメソッドをリストし、その後に各メソッドの詳細な構文を示します。(API メソッドには、名前の代わりに構文で使用できる省略形の別名を付けることができます)

メソッド説明

resource

サーバー上の IBaseResource を ID で更新します

resourceBySearchUrl

検索 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=myParameterNameHereCamelFhir.myParameterNameHere ヘッダーをオーバーライドします。

23.5.13. API: 検証

producer と consumer の両方がサポート対象

検証 API は、構文で次のように定義されます。

fhir:validate/methodName?[parameters]

以下の表に 1 つのメソッドをリストし、その後に各メソッドの詳細な構文を示します。(API メソッドには、名前の代わりに構文で使用できる省略形の別名を付けることができます)

メソッド説明

resource

リソースを検証します

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=myParameterNameHereCamelFhir.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 がエクスチェンジを作成する際に交換パターンを設定します。

列挙値:

  • InOnly
  • InOut
  • InOptionalOut
 

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 サーバーでは高速になる場合があります。

列挙値:

  • オーバーライド
  • Append
  • Fail
  • 無視
  • Move
  • TryRename

オーバーライド

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
  • markerFile
  • fileLock
  • rename
  • changed
  • idempotent
  • idempotent-changed
  • idempotent-rename

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 のみです。

列挙値:

  • TRACE
  • DEBUG
  • INFO
  • WARN
  • ERROR
  • OFF

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
  • DEBUG
  • INFO
  • WARN
  • ERROR
  • OFF

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
  • SECONDS
  • 時間

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 のみ

ヘッダー説明

CamelFileName

書き込むファイルの名前を指定します (エンドポイントディレクトリーに相対的)。この名前は String に指定できます。File 言語 または Simple 言語式を含む 文字列、または式オブジェクト。null の場合、Camel はメッセージの一意の ID に基づいてファイル名を自動生成します。

CamelFileNameProduced

書き込まれた出力ファイルの実際の絶対ファイルパス (パス + 名前)。このヘッダーは Camel によって設定され、その目的は、書き込まれたファイルの名前をエンドユーザーに提供することです。

CamelOverruleFileName

CamelFileName ヘッダーを上書きするために使用され、代わりに値を使用します (ただし、producer はファイルの書き込み後にこのヘッダーを削除するため、一度だけです)。値は文字列のみです。オプション fileName が設定されている場合、これはまだ評価されていることに注意してください。

24.8.2. file consumer のみ

ヘッダー説明

CamelFileName

エンドポイントで設定された開始ディレクトリーからのオフセットを含む相対ファイルパスとしての使用済みファイルの名前。

CamelFileNameOnly

ファイル名のみ (先行パスを含まない名前)。

CamelFileAbsolute

消費されたファイルが絶対パスを示すかどうかを指定する boolean オプション。通常、相対パスの場合は false にする必要があります。通常、絶対パスは使用されませんが、ファイルを絶対パスに移動できるように移動オプションを追加しました。しかし、他の場所でも使用できます。

CamelFileAbsolutePath

ファイルへの絶対パス。相対ファイルの場合、このパスは代わりに相対パスを保持します。

CamelFilePath

ファイルパス。相対ファイルの場合、これは開始ディレクトリー + 相対ファイル名です。絶対ファイルの場合、これは絶対パスです。

CamelFileRelativePath

相対パス。

CamelFileParent

親パス。

CamelFileLength

ファイルサイズを含む long 値。

CamelFileLastModified

ファイルの最終変更タイムスタンプを含む Long 値。

24.9. バッチ consumer

このコンポーネントは、Batch Consumer を実装します。

24.10. Exchange プロパティー (file consumer のみ)

file consumer は BatchConsumer を実装するため、ポーリングするファイルのバッチ処理をサポートします。バッチ処理とは、Camel が次の追加プロパティーを Exchange に追加することを意味します。これにより、ポーリングされたファイルの数、現在のインデックス、およびバッチがすでに完了しているかどうかがわかります。

プロパティー説明

CamelBatchSize

このバッチでポーリングされたファイルの総数。

CamelBatchIndex

バッチの現在のインデックス。0 から始まります。

CamelBatchComplete

バッチ内の最後の Exchange を示す boolean 値。最後のエントリーにのみ true に当てはまります。

これにより、たとえば、このバッチに存在するファイルの数を知ることができ、たとえば、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:namefile: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:namefile: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&amp;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&amp;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&amp;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 を使用して、独自の begincommit、および 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
  • Windows
  • Auto

UNIX

PathSeparator

transferLoggingIntervalSeconds (共通)

進行中のアップロードおよびダウンロード操作の進行状況をログに記録するときに使用する間隔を秒単位で設定します。これは、操作に時間がかかる場合に進行状況を記録するために使用されます。

5

int

transferLoggingLevel (共通)

アップロードおよびダウンロード操作の進行状況をログに記録するときに使用するログレベルを設定します。

列挙値:

  • TRACE
  • DEBUG
  • INFO
  • WARN
  • ERROR
  • OFF

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 がエクスチェンジを作成する際に交換パターンを設定します。

列挙値:

  • InOnly
  • InOut
  • InOptionalOut
 

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 サーバーでは高速になる場合があります。

列挙値:

  • オーバーライド
  • Append
  • Fail
  • 無視
  • Move
  • TryRename

オーバーライド

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
  • markerFile
  • fileLock
  • rename
  • changed
  • idempotent
  • idempotent-changed
  • idempotent-rename

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 のみです。

列挙値:

  • TRACE
  • DEBUG
  • INFO
  • WARN
  • ERROR
  • OFF

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
  • DEBUG
  • INFO
  • WARN
  • ERROR
  • OFF

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
  • SECONDS
  • 時間

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. 接頭辞。

たとえば、FTPClientsetDataTimeout を 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. メッセージヘッダー

次のメッセージヘッダーを使用して、コンポーネントの動作に影響を与えることができます。

ヘッダー説明

CamelFileName

エンドポイントへの送信時に出力メッセージに使用される出力ファイル名 (エンドポイントディレクトリーに関連する) を指定します。これが存在せず、式もない場合は、代わりに生成されたメッセージ ID がファイル名として使用されます。

CamelFileNameProduced

書き込まれた出力ファイルの実際のファイルパス (パス + 名前)。このヘッダーは Camel によって設定され、その目的は、書き込まれたファイルの名前をエンドユーザーに提供することです。

CamelFileNameConsumed

消費されたファイルのファイル名

CamelFileHost

リモートホスト名。

CamelFileLocalWorkPath

ローカル作業ディレクトリーが使用されている場合は、ローカル作業ファイルへのパス。

さらに、FTP/FTPS の consumer と producer は、次のヘッダーを使用してキャメル Message を強化します。

ヘッダー説明

CamelFtpReplyCode

FTP クライアントの応答コード (型は整数)

CamelFtpReplyString

FTP クライアントの応答文字列

25.10.1. エクスチェンジプロパティー

Camel は次の交換プロパティーを設定します

ヘッダー説明

CamelBatchIndex

このバッチで消費されているファイルの総数に対する現在のインデックス。

CamelBatchSize

このバッチで消費されているファイルの総数。

CamelBatchComplete

このバッチにこれ以上ファイルがない場合は true。

25.11. タイムアウトについて

ライブラリーの 2 つのセット (上を参照) には、タイムアウトを設定するための異なる API があります。どちらにも connectTimeout オプションを使用して、ミリ秒単位でタイムアウトを設定し、ネットワーク接続を確立できます。個々の soTimeout は、FTP/FTPS で設定することもできます。これは、ftpClient.soTimeout の使用に対応します。SFTP は自動的に connectTimeoutsoTimeout として使用することに注意してください。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&amp;binary=true&amp;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&amp;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)

定数: PARTITION_DECORATOR

データの挿入時に使用するパーティションを示すパーティションデコレーター。

 

文字列

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
  • NONE

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 がエクスチェンジを作成する際に交換パターンを設定します。

列挙値:

  • InOnly
  • InOut
  • InOptionalOut
 

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 (プロキシー)

使用するプロキシー認証方法。

列挙値:

  • Basic
  • ダイジェスト
  • NTLM
 

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 ヘッダーはこのオプションをオーバーライドできません。

列挙値:

  • GET
  • POST
  • PUT
  • DELETE
  • HEAD
  • オプション
  • TRACE
  • PATCH
 

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 (プロキシー)

使用するプロキシー認証方法。

列挙値:

  • Basic
  • ダイジェスト
  • NTLM
 

String

proxyAuthNtHost (プロキシー)

NTML で使用するプロキシー認証ドメイン (ワークステーション名)。

 

String

proxyAuthPassword (プロキシー)

プロキシー認証パスワード。

 

String

proxyAuthPort (プロキシー)

プロキシー認証ポート。

 

int

proxyAuthScheme (プロキシー)

使用するプロキシー認証スキーム。

列挙値:

  • http
  • https
 

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 のいずれかとして、優先して使用する認証方法。

列挙値:

  • Basic
  • ダイジェスト
  • 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. メッセージヘッダー

名前タイプ説明

Exchange.HTTP_URI

String

呼び出す URI。エンドポイントで直接設定された既存の URI をオーバーライドします。この uri は、呼び出す http サーバーの uri です。セキュリティーなどのエンドポイントオプションを設定できる Camel エンドポイント uri とは異なります。このヘッダーはそれをサポートしていません。http サーバーの唯一の uri です。

Exchange.HTTP_PATH

String

リクエスト URI のパス。ヘッダーは、HTTP_URI でリクエスト URI を構築するために使用されます。

Exchange.HTTP_QUERY

String

URI パラメーター。エンドポイントに直接設定された既存の URI パラメーターをオーバーライドします。

Exchange.HTTP_RESPONSE_CODE

int

外部サーバーからの HTTP 応答コード。OK の場合は 200 です。

Exchange.HTTP_RESPONSE_TEXT

String

外部サーバーからの HTTP 応答テキスト。

Exchange.HTTP_CHARACTER_ENCODING

String

文字エンコーディング。

Exchange.CONTENT_TYPE

String

HTTP コンテンツタイプ。text/html などのコンテンツタイプを提供するために、IN メッセージと OUT メッセージの両方に設定されます。

Exchange.CONTENT_ENCODING

String

HTTP コンテンツエンコーディング。gzip などのコンテンツエンコーディングを提供するために、IN メッセージと OUT メッセージの両方に設定されます。

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 オプション throwExceptionOnFailurefalse に設定して、失敗した応答コードに対して 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
  • PUTASYNC
  • PUTALL
  • PUTALLASYNC
  • プティファブセント
  • PUTIFABSENTASYNC
  • GET
  • GETORDEFAULT
  • CONTAINSKEY
  • CONTAINSVALUE
  • REMOVE
  • REMOVEASYNC
  • REPLACE
  • REPLACEASYNC
  • SIZE
  • CLEAR
  • CLEARASYNC
  • QUERY
  • STATS
  • COMPUTE
  • COMPUTEASYNC

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 がエクスチェンジを作成する際に交換パターンを設定します。

列挙値:

  • InOnly
  • InOut
  • InOptionalOut
 

ExchangePattern

defaultValue (producer)

一部の producer 操作に対して特定のデフォルト値を設定します。

 

オブジェクト

key (producer)

producer 操作用の特定のキーを設定します。

 

オブジェクト

lazyStartProducer (producer)

最初のメッセージで producer をレイジーに起動すべきかどうか。レイジーに起動することで、起動時に producer が失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、producer の作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。

false

boolean

oldValue (producer)

一部の producer 操作に特定の古い値を設定します。

 

オブジェクト

operation (producer)

実行する操作。

列挙値:

  • PUT
  • PUTASYNC
  • PUTALL
  • PUTALLASYNC
  • プティファブセント
  • PUTIFABSENTASYNC
  • GET
  • GETORDEFAULT
  • CONTAINSKEY
  • CONTAINSVALUE
  • REMOVE
  • REMOVEASYNC
  • REPLACE
  • REPLACEASYNC
  • SIZE
  • CLEAR
  • CLEARASYNC
  • QUERY
  • STATS
  • COMPUTE
  • COMPUTEASYNC

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. キャメルオペレーション

このセクションでは、使用可能なすべての操作とそのヘッダー情報を一覧表示します。

表29.1 表 1.プット操作
操作名説明

InfinispanOperation.PUT

オプションで有効期限付きで、キーと値のペアをキャッシュに入れます

InfinispanOperation.PUTASYNC

オプションで有効期限付きで、キーと値のペアを非同期的にキャッシュに入れます

InfinispanOperation.PUTIFABSENT

キーと値のペアが存在しない場合はキャッシュに入れ、オプションで有効期限を設定します

InfinispanOperation.PUTIFABSENTASYNC

キーと値のペアが存在しない場合は、非同期でキャッシュに入れます。オプションで有効期限を設定します

  • 必要なヘッダー:

    • CamelInfinispanKey
    • CamelInfinispanValue
  • 任意のヘッダー:

    • CamelInfinispanLifespanTime
    • CamelInfinispanLifespanTimeUnit
    • CamelInfinispanMaxIdleTime
    • CamelInfinispanMaxIdleTimeUnit
  • 結果ヘッダー:

    • CamelInfinispanOperationResult
表29.2 表 2.すべての操作を入れる
操作名説明

InfinispanOperation.PUTALL

オプションで有効期限付きで、複数のエントリーをキャッシュに追加します

CamelInfinispanOperation.PUTALLASYNC

複数のエントリーをキャッシュに非同期的に追加します。オプションで有効期限を設定します

  • 必要なヘッダー:

    • CamelInfinispanMap
  • 任意のヘッダー:

    • CamelInfinispanLifespanTime
    • CamelInfinispanLifespanTimeUnit
    • CamelInfinispanMaxIdleTime
    • CamelInfinispanMaxIdleTimeUnit
表29.3 表 3.取得操作
操作名説明

InfinispanOperation.GET

特定のキーに関連付けられた値をキャッシュから取得します

InfinispanOperation.GETORDEFAULT

特定のキーに関連付けられた値またはデフォルト値をキャッシュから取得します

  • 必要なヘッダー:

    • CamelInfinispanKey
表29.4 表 4.キー操作が含まれています
操作名説明

InfinispanOperation.CONTAINSKEY

キャッシュに特定のキーが含まれているかどうかを判断します

  • 結果ヘッダー

    • CamelInfinispanKey
  • 結果ヘッダー

    • CamelInfinispanOperationResult
表29.5 表 5.値操作を含む
操作名説明

InfinispanOperation.CONTAINSVALUE

キャッシュに特定の値が含まれているかどうかを判断します

  • 必要なヘッダー:

    • CamelInfinispanKey
表29.6 表 6.操作を削除
操作名説明

InfinispanOperation.REMOVE

オプションで、値が指定された値と一致する場合にのみ、キャッシュからエントリーを削除します

InfinispanOperation.REMOVEASYNC

オプションで、値が指定された値と一致する場合にのみ、キャッシュからエントリーを非同期的に削除します

  • 必要なヘッダー:

    • CamelInfinispanKey
  • 任意のヘッダー:

    • CamelInfinispanValue
  • 結果ヘッダー:

    • CamelInfinispanOperationResult
表29.7 表 7.置換操作
操作名説明

InfinispanOperation.REPLACE

オプションで有効期限付きで、条件付きでキャッシュ内のエントリーを置き換えます

InfinispanOperation.REPLACEASYNC

オプションで有効期限付きで、キャッシュ内のエントリーを条件付きで非同期的に置き換えます

  • 必要なヘッダー:

    • CamelInfinispanKey
    • CamelInfinispanValue
    • CamelInfinispanOldValue
  • 任意のヘッダー:

    • CamelInfinispanLifespanTime
    • CamelInfinispanLifespanTimeUnit
    • CamelInfinispanMaxIdleTime
    • CamelInfinispanMaxIdleTimeUnit
  • 結果ヘッダー:

    • CamelInfinispanOperationResult
表29.8 表 8.クリア操作
操作名説明

InfinispanOperation.CLEAR

キャッシュをクリアします

InfinispanOperation.CLEARASYNC

キャッシュを非同期的にクリアします

表29.9 表 9.サイズ操作
操作名説明

InfinispanOperation.SIZE

キャッシュ内のエントリー数を返します

  • 結果ヘッダー

    • CamelInfinispanOperationResult
表29.10 表 10.統計操作
操作名説明

InfinispanOperation.STATS

キャッシュに関する統計を返します

  • 結果ヘッダー:

    • CamelInfinispanOperationResult
表29.11 表 11.クエリー操作
操作名説明

InfinispanOperation.QUERY

キャッシュでクエリーを実行します

  • 必要なヘッダー:

    • CamelInfinispanQueryBuilder
  • 結果ヘッダー:

    • CamelInfinispanOperationResult
注記

put (key、value) や remove (key) のような書き込みメソッドは、デフォルトでは以前の値を返しません。

29.6. メッセージヘッダー

名前デフォルト値タイプコンテキスト説明

CamelInfinispanCacheName

null

String

共有

操作またはイベントに参加するキャッシュ。

CamelInfinispanOperation

PUT

InfinispanOperation

Producer

実行する操作。

CamelInfinispanMap

null

Map

Producer

CamelInfinispanOperationPutAll 操作の場合に使用する Map

CamelInfinispanKey

null

Object

共有

操作を実行するキー、またはイベントを生成するキー。

CamelInfinispanValue

null

Object

Producer

操作に使用する値。

CamelInfinispanEventType

null

String

Consumer

受信したイベントのタイプ。

CamelInfinispanLifespanTime

null

long

Producer

キャッシュ内の値の有効期間。負の値は無限大として解釈されます。

CamelInfinispanTimeUnit

null

String

Producer

エントリーのライフスパン時間の時間単位。

CamelInfinispanMaxIdleTime

null

long

Producer

エントリーが期限切れと見なされるまでにアイドル状態が許可される最大時間。

CamelInfinispanMaxIdleTimeUnit

null

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 の説明を参照してください。

列挙値:

  • ADDCOMMENT
  • ADDISSUE
  • ATTACH
  • DELETEISSUE
  • NEWISSUES
  • NEWCOMMENTS
  • WATCHUPDATES
  • UPDATEISSUE
  • TRANSITIONISSUE
  • WATCHERS
  • ADDISSUELINK
  • ADDWORKLOG
  • FETCHISSUE
  • FETCHCOMMENTS
 

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 がエクスチェンジを作成する際に交換パターンを設定します。

列挙値:

  • InOnly
  • InOut
  • InOptionalOut
 

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. クライアントファクトリー

レジストリーで JiraRestClientFactoryJiraRestClientFactory という名前でバインドして、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

必須:

オプション:

  • 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. 永続サブスクリプション

永続的なトピックサブスクリプションを使用する場合は、clientIddurableSubscriptionName の両方を指定する必要があります。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 のいずれかです。

列挙値:

  • 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
  • CACHE_CONNECTION
  • CACHE_CONSUMER
  • CACHE_NONE
  • CACHE_SESSION

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 が決まります。

列挙値:

  • Simple (単純)
  • デフォルト
  • カスタム

デフォルト

ConsumerType

defaultTaskExecutorType (consumer (上級))

consumer エンドポイントとプロデューサエンドポイントの ReplyTo consumer の両方に対して、DefaultMessageListenerContainer で使用するデフォルトの TaskExecutor タイプを指定します。可能な値: SimpleAsync (Spring の SimpleAsyncTaskExecutor を使用) または ThreadPool (Spring の ThreadPoolTaskExecutor を最適な値で使用 - キャッシュされたスレッドプールのようなもの)。設定されていない場合は、デフォルトで以前の動作になり、consumer エンドポイントにはキャッシュされたスレッドプールが使用され、応答 consumer には SimpleAsync が使用されます。ThreadPool の使用は、同時 consumer が動的に増減するエラスティック設定でスレッドのゴミを減らすために推奨されます。

列挙値:

  • ThreadPool
  • SimpleAsync
 

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。

列挙値:

  • 1
  • 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 オプションも有効にする必要があります。

列挙値:

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

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 のドキュメントを参照してください。特に、クラスター化された環境で実行する場合の影響に関する注意事項と、共有応答キューは代替の一時および排他的キューよりもパフォーマンスが低いという事実を参照してください。

列挙値:

  • Temporary
  • 共有
  • 排他的
 

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 などのより高い値を使用する必要があります。

列挙値:

  • CACHE_AUTO
  • CACHE_CONNECTION
  • CACHE_CONSUMER
  • CACHE_NONE
  • 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 の独自の実装を提供し、# 表記を使用して参照できます。

列挙値:

  • default
  • パススルー
 

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 ログレベルを設定できます。

列挙値:

  • TRACE
  • DEBUG
  • INFO
  • WARN
  • ERROR
  • OFF

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
  • topic
  • temp-queue
  • temp-topic

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 のいずれかです。

列挙値:

  • 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
  • CACHE_CONNECTION
  • CACHE_CONSUMER
  • CACHE_NONE
  • CACHE_SESSION

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 が決まります。

列挙値:

  • Simple (単純)
  • デフォルト
  • カスタム

デフォルト

ConsumerType

defaultTaskExecutorType (consumer (上級))

consumer エンドポイントとプロデューサエンドポイントの ReplyTo consumer の両方に対して、DefaultMessageListenerContainer で使用するデフォルトの TaskExecutor タイプを指定します。可能な値: SimpleAsync (Spring の SimpleAsyncTaskExecutor を使用) または ThreadPool (Spring の ThreadPoolTaskExecutor を最適な値で使用 - キャッシュされたスレッドプールのようなもの)。設定されていない場合は、デフォルトで以前の動作になり、consumer エンドポイントにはキャッシュされたスレッドプールが使用され、応答 consumer には SimpleAsync が使用されます。ThreadPool の使用は、同時 consumer が動的に増減するエラスティック設定でスレッドのゴミを減らすために推奨されます。

列挙値:

  • ThreadPool
  • SimpleAsync
 

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 がエクスチェンジを作成する際に交換パターンを設定します。

列挙値:

  • InOnly
  • InOut
  • InOptionalOut
 

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。

列挙値:

  • 1
  • 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 オプションも有効にする必要があります。

列挙値:

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

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 のドキュメントを参照してください。特に、クラスター化された環境で実行する場合の影響に関する注意事項と、共有応答キューは代替の一時および排他的キューよりもパフォーマンスが低いという事実を参照してください。

列挙値:

  • Temporary
  • 共有
  • 排他的
 

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 などのより高い値を使用する必要があります。

列挙値:

  • CACHE_AUTO
  • CACHE_CONNECTION
  • CACHE_CONSUMER
  • CACHE_NONE
  • 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 の独自の実装を提供し、# 表記を使用して参照できます。

列挙値:

  • default
  • パススルー
 

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 ログレベルを設定できます。

列挙値:

  • TRACE
  • DEBUG
  • INFO
  • WARN
  • ERROR
  • OFF

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 ChannelJMS を使用する場合、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.Messageorg.apache.camel.Message の間でメッセージを自動的にマップします。

JMS メッセージを送信するとき、Camel はメッセージ本文を次の JMS メッセージタイプに変換します。

ボディタイプJMS MessageComment

String

javax.jms.TextMessage

 

org.w3c.dom.Node

javax.jms.TextMessage

DOM は String に変換されます。

Map

javax.jms.MapMessage

 

java.io.Serializable

javax.jms.ObjectMessage

 

byte[]

javax.jms.BytesMessage

 

java.io.File

javax.jms.BytesMessage

 

java.io.Reader

javax.jms.BytesMessage

 

java.io.InputStream

javax.jms.BytesMessage

 

java.nio.ByteBuffer

javax.jms.BytesMessage

 

JMS メッセージを受信すると、Camel は JMS メッセージを次のボディタイプに変換します。

JMS Messageボディタイプ

javax.jms.TextMessage

String

javax.jms.BytesMessage

byte[]

javax.jms.MapMessage

Map<String, Object>

javax.jms.ObjectMessage

Object

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 の場合、次のルールがヘッダー に適用されます。

  • 値は、プリミティブまたはそのカウンターオブジェクト (IntegerLongCharacter など) である必要があります。タイプ StringCharSequenceDateBigDecimal、および BigInteger はすべて、それらの toString() 表現に変換されます。他のすべてのタイプはドロップされます。

Camel は、特定のヘッダー値を削除すると、カテゴリー org.apache.camel.component.jms.JmsBindingDEBUG レベルでログに記録します。以下に例を示します。

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 に追加します。

プロパティー説明

org.apache.camel.jms.replyDestination

javax.jms.Destination

返信先。

Camel は、JMS メッセージを受信すると、In メッセージヘッダーに次の JMS プロパティーを追加します。

ヘッダータイプ説明

JMSCorrelationID

String

JMS 相関 ID。

JMSDeliveryMode

int

JMS 配信モード。

JMSDestination

javax.jms.Destination

JMS 宛先。

JMSExpiration

long

JMS の有効期限。

JMSMessageID

String

JMS 固有のメッセージ ID。

JMSPriority

int

JMS 優先度 (0 が最低の優先度、9 が最高の優先度)。

JMSRedelivered

boolean

JMS メッセージは再配信されますか。

JMSReplyTo

javax.jms.Destination

JMS 返信先の宛先。

JMSTimestamp

long

JMS タイムスタンプ。

JMSType

String

JMS タイプ。

JMSXGroupID

String

JMS グループ ID。

上記の情報はすべて標準の JMS であるため、詳細については JMS のドキュメント を参照してください。

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

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

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

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

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

31.9.1. JmsProducer

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

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

InOut

-

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

InOut

JMSReplyTo が設定されている

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

InOnly

-

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

InOnly

JMSReplyTo が設定されている

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

31.9.2. JmsConsumer

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

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

InOut

-

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

InOnly

-

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

-

disableReplyTo=true

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

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

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

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

31.10. エンドポイントを再利用し、実行時に計算されたさまざまな宛先に送信します

多くの異なる JMS 宛先にメッセージを送信する必要がある場合は、JMS エンドポイントを再利用して、メッセージヘッダーで実際の宛先を指定するのが理にかなっています。これにより、Camel は同じエンドポイントを再利用できますが、異なる宛先に送信できます。これにより、作成されるエンドポイントの数が大幅に削減され、メモリーとスレッドリソースが節約されます。

次のヘッダーで宛先を指定できます。

ヘッダータイプ説明

CamelJmsDestination

javax.jms.Destination

宛先オブジェクト。

CamelJmsDestinationName

String

宛先名。

たとえば、次のルートは、実行時に宛先を計算し、それを使用して 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説明

Temporary

高速

はい

一時キューは応答キューとして使用され、Camel によって自動作成されます。これを使用するには、replyTo キュー名を指定 しないでください。オプションで、replyToType=Temporary を設定して、一時キューが使用されていることを目立たせることもできます。

共有

Slow

はい

共有永続キューが応答キューとして使用されます。キューは事前に作成する必要がありますが、Apache ActiveMQ などの一部のブローカーはオンザフライで作成できます。これを使用するには、replyTo キュー名を指定する必要があります。オプションで、replyToType=Shared を設定して、共有キューが使用されていることを目立たせることもできます。共有キューは、複数のノードがこの Camel アプリケーションを同時に実行しているクラスター環境で使用できます。すべてが同じ共有応答キューを使用しています。これが可能なのは、予期される応答メッセージを関連付けるために JMS メッセージセレクターが使用されているためです。ただし、これはパフォーマンスに影響します。JMS メッセージセレクターは低速であるため、Temporary キューや Exclusive キューほど高速ではありません。パフォーマンスを向上させるためにこれを微調整する方法については、以下を参照してください。

排他的

高速

No (*Yes)

応答キューとして専用の永続キューが使用されます。キューは事前に作成する必要がありますが、Apache ActiveMQ などの一部のブローカーはオンザフライで作成できます。これを使用するには、replyTo キュー名を指定する必要があります。また、replyToType=Exclusive を設定して Camel に排他的キューを使用するように指示する 必要 があります。replyTo キュー名が設定されている場合はデフォルトで Shared が使用されるためです。排他的応答キューを使用する場合、JMS メッセージセレクターは使用され ない ため、他のアプリケーションもこのキューを使用してはなりません。複数のノードがこの Camel アプリケーションを同時に実行しているクラスター環境では、専用キューを使用 できません。応答キューが要求メッセージを送信したのと同じノードに戻ってきた場合、制御できないためです。これが、共有キューが JMS メッセージセレクターを使用してこれを確認する理由です。ただし、各 Exclusive 応答キューをノードごとに一意の名前で設定すると、クラスター化された環境でこれを実行できます。その後、応答メッセージは、応答メッセージを待機する特定のノードのキューに送り返されます。

concurrentConsumers

高速

はい

使用中の同時メッセージリスナーを使用して、応答メッセージを同時に処理できます。範囲は、concurrentConsumers および maxConcurrentConsumers オプションを使用して指定できます。注意: Shared 応答キューを使用すると、同時リスナーではうまく機能しない可能性があるため、このオプションは注意して使用してください。

maxConcurrentConsumers

高速

はい

使用中の同時メッセージリスナーを使用して、応答メッセージを同時に処理できます。範囲は、concurrentConsumers および maxConcurrentConsumers オプションを使用して指定できます。注意: Shared 応答キューを使用すると、同時リスナーではうまく機能しない可能性があるため、このオプションは注意して使用してください。

JmsProducerInOut を検出し、使用する返信先を含む 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.1. JMS を介したリクエスト/リプライと共有固定リプライキューの使用

以下の例に示すように、JMS を介して Request Reply を実行するときに固定のリプライキューを使用する場合は、注意してください。

from(xxx)
.inOut().to("activemq:queue:foo?replyTo=bar")
.to(yyy)

この例では、bar という名前の固定応答キューが使用されています。デフォルトでは、Camel は、固定応答キューを使用する場合にキューが共有されていると想定するため、JMSSelector を使用して、予想される応答メッセージのみをピックアップします (たとえば、JMSCorrelationID に基づいて)。排他的な固定応答キューについては、次のセクションを参照してください。つまり、一時キューほど高速ではありません。receiveTimeout オプションを使用して、Camel が応答メッセージをプルする頻度を高速化できます。デフォルトでは 1000 ミリ秒です。したがって、より高速にするために、次のように 250 ミリ秒に設定して、1 秒あたり 4 回プルすることができます。

from(xxx)
.inOut().to("activemq:queue:foo?replyTo=bar&receiveTimeout=250")
.to(yyy)

これにより、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 オプション)。もちろん、そのオプションも設定できます。そのため、requestTimeoutdisableTimeToLive の 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 にも querynamedQuery または nativeQuery を 使用できます。parameters の値には、メッセージ本文、ヘッダーなどからパラメーター値を取得できるシンプルな式を使用できます。これらのクエリーは、SELECT JPQL/SQL ステートメントを使用した一連のデータの取得、および UPDATE/DELETE JPQL/SQL ステートメントを使用した一括更新/削除の実行に使用できます。camel は querynativeQuery とは異なり、名前付きクエリーを調べないため、namedQueryUPDATE/DELETE を実行する場合は、useExecuteUpdatetrue に指定する必要があることに注意してください。

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 でロックモードを設定する場合。

列挙値:

  • READ
  • WRITE
  • OPTIMISTIC
  • OPTIMISTIC_FORCE_INCREMENT
  • PESSIMISTIC_READ
  • PESSIMISTIC_WRITE
  • PESSIMISTIC_FORCE_INCREMENT
  • NONE

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 がエクスチェンジを作成する際に交換パターンを設定します。

列挙値:

  • InOnly
  • InOut
  • InOptionalOut
 

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
  • DEBUG
  • INFO
  • WARN
  • ERROR
  • OFF

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
  • SECONDS
  • 時間

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 コンポーネントを設定することを推奨します。そうしないと、各 JpaEndpointEntityManagerFactory の独自のインスタンスを自動作成しますが、これはほとんどの場合、必要なものではありません。

たとえば、次のように、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 がない場合、JpaEndpointTransactionManager の独自のインスタンスを自動的に作成しますが、これはほとんどの場合、必要なものではありません。

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 ベースのべき等リポジトリーを使用するには。

手順

  1. persistence.xml ファイルで persistence-unit を設定します。
  2. org.apache.camel.processor.idempotent.jpa.JpaMessageIdRepository で使用される org.springframework.orm.jpa.JpaTemplate を設定します。
  3. エラー形式のマクロを設定します: snippet: java.lang.IndexOutOfBoundsException: Index: 20、Size: 20
  4. べき等リポジトリーを org.apache.camel.processor.idempotent.jpa.JpaMessageIdRepository として設定します。
  5. 以下に示すように、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)

定数: HEADER_JSLT_STRING

文字列としての JSLT テンプレート。

 

文字列

CamelJsltResourceUri (producer)

定数: HEADER_JSLT_RESOURCE_URI

リソース URI。

 

文字列

33.4. JSLT に値を渡す

Camel は、本体に JSLT 式を適用するときに、交換情報を変数として提供できます。Exchange から使用できる変数は次のとおりです。

namevalue

ヘッダー

json オブジェクトとしての In メッセージのヘッダー

exchange.properties

json オブジェクトとしての Exchange プロパティー。exchange は変数の名前で、properties は交換プロパティーへのパスです。allowContextMapAll オプションが true の場合に使用できます。

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
  • async
  • none

sync

String

autoOffsetReset (consumer)

ZooKeeper に初期オフセットがない場合、またはオフセットが範囲外の場合の対処方法: Early : オフセットを最も古いオフセットに自動的にリセット latest : オフセットを最新のオフセットに自動的にリセット Fail: consumer に例外を出力します。

列挙値:

  • latest
  • earliest
  • none

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 がメッセージを再び消費できるようにする必要がある場合は、手動で開始/再起動する必要があります)。

列挙値:

  • DISCARD
  • ERROR_HANDLER
  • RECONNECT
  • RETRY
  • STOP

ERROR_HANDLER

PollOnError

pollTimeoutMs (consumer)

KafkaConsumer をポーリングするときに使用されるタイムアウト。

5000

Long

resumeStrategy (consumer)

このオプションを使用すると、ユーザーはカスタムの再開方法を設定できます。再開戦略は、パーティションが割り当てられたとき (つまり、接続時または再接続時) に実行されます。これにより、実装は操作を再開する方法をカスタマイズし、seekTo および offsetRepository メカニズムのより柔軟な代替手段として機能できます。実装の詳細については、KafkaConsumerResumeStrategy を参照してください。このオプションは、自動コミット設定には影響しません。この設定を使用する実装は、これと一緒に手動コミットオプションを使用して評価することも必要になる可能性があります。

 

KafkaConsumerResumeStrategy

seekTo (consumer)

KafkaConsumer が起動時に最初または最後から読み取るかどうかを設定します。begin : 最初から読み取る end : 最後から読み取るこれは、以前のプロパティー seekToBeginning を置き換えています。

列挙値:

  • 始まり
  • end
 

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
  • gzip
  • snappy
  • lz4

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
  • 0
  • 1
  • all

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
  • async
  • none

sync

String

autoOffsetReset (consumer)

ZooKeeper に初期オフセットがない場合、またはオフセットが範囲外の場合の対処方法: Early : オフセットを最も古いオフセットに自動的にリセット latest : オフセットを最新のオフセットに自動的にリセット Fail: consumer に例外を出力します。

列挙値:

  • latest
  • earliest
  • none

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 がメッセージを再び消費できるようにする必要がある場合は、手動で開始/再起動する必要があります)。

列挙値:

  • DISCARD
  • ERROR_HANDLER
  • RECONNECT
  • RETRY
  • STOP

ERROR_HANDLER

PollOnError

pollTimeoutMs (consumer)

KafkaConsumer をポーリングするときに使用されるタイムアウト。

5000

Long

resumeStrategy (consumer)

このオプションを使用すると、ユーザーはカスタムの再開方法を設定できます。再開戦略は、パーティションが割り当てられたとき (つまり、接続時または再接続時) に実行されます。これにより、実装は操作を再開する方法をカスタマイズし、seekTo および offsetRepository メカニズムのより柔軟な代替手段として機能できます。実装の詳細については、KafkaConsumerResumeStrategy を参照してください。このオプションは、自動コミット設定には影響しません。この設定を使用する実装は、これと一緒に手動コミットオプションを使用して評価することも必要になる可能性があります。

 

KafkaConsumerResumeStrategy

seekTo (consumer)

KafkaConsumer が起動時に最初または最後から読み取るかどうかを設定します。begin : 最初から読み取る end : 最後から読み取るこれは、以前のプロパティー seekToBeginning を置き換えています。

列挙値:

  • 始まり
  • end
 

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 がエクスチェンジを作成する際に交換パターンを設定します。

列挙値:

  • InOnly
  • InOut
  • InOptionalOut
 

ExchangePattern

kafkaManualCommitFactory (consumer (上級))

KafkaManualCommit インスタンスの作成に使用するファクトリー。これにより、カスタムファクトリーをプラグインしてカスタム KafkaManualCommit インスタンスを作成できます。これは、すぐに使用できるデフォルトの実装から逸脱する手動コミットを行うときに特別なロジックが必要な場合に備えています。

 

KafkaManualCommitFactory

bufferMemorySize (producer)

producer が、サーバーへの送信を待機しているレコードをバッファーリングするために使用できるメモリーの合計バイト数。レコードがサーバーに配信されるよりも速く送信された場合、プロデューサはブロックするか、block.on.buffer.full で指定された設定に基づいて例外を出力します。この設定は、プロデューサが使用する合計メモリーにほぼ対応する必要があります。ただし、プロデューサが使用するすべてのメモリーがバッファーリングに使用されるわけではないため、ハードバウンドではありません。一部の追加メモリーは、圧縮 (圧縮が有効な場合) やインフライトリクエストの維持に使用されます。

33554432

Integer

compressionCodec (producer)

このパラメーターを使用すると、この producer によって生成されるすべてのデータの圧縮コーデックを指定できます。有効な値は none、gzip、snappy です。

列挙値:

  • none
  • gzip
  • snappy
  • lz4

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
  • 0
  • 1
  • all

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 からのメッセージを使用するときに使用できます。

ヘッダー定数ヘッダーの値タイプ説明

KafkaConstants.TOPIC

"kafka.TOPIC"

String

メッセージの発信元のトピック

KafkaConstants.PARTITION

"kafka.PARTITION"

Integer

メッセージが格納されたパーティション

KafkaConstants.OFFSET

"kafka.OFFSET"

Long

メッセージのオフセット

KafkaConstants.KEY

"kafka.KEY"

Object

メッセージのキー (設定されている場合)

KafkaConstants.HEADERS

"kafka.HEADERS"

org.apache.kafka.common.header.Headers

レコードのヘッダー

KafkaConstants.LAST_RECORD_BEFORE_COMMIT

"kafka.LAST_RECORD_BEFORE_COMMIT"

Boolean

コミット前の最後のレコードかどうか (autoCommitEnable エンドポイントパラメーターが false の場合にのみ使用可能)

KafkaConstants.LAST_POLL_RECORD

"kafka.LAST_POLL_RECORD"

Boolean

現在のポーリングリクエスト内の最後のレコードを示します (autoCommitEnable エンドポイントパラメーターが false または allowManualCommittrue の場合にのみ使用可能)

KafkaConstants.MANUAL_COMMIT

"CamelKafkaManualCommit"

KafkaManualCommit

Kafka consumer を使用する場合に手動オフセットコミットを強制するために使用できます。

34.5.2. producer ヘッダー

メッセージを Kafka に送信する前に、次のヘッダーを設定できます。

ヘッダー定数ヘッダーの値タイプ説明

KafkaConstants.KEY

"kafka.KEY"

Object

必須 すべての関連メッセージが同じパーティションに入るようにするためのメッセージのキー

KafkaConstants.OVERRIDE_TOPIC

"kafka.OVERRIDE_TOPIC"

String

メッセージの送信先のトピック (オーバーライドおよび優先)、およびヘッダーは保持されません。

KafkaConstants.OVERRIDE_TIMESTAMP

"kafka.OVERRIDE_TIMESTAMP"

Long

ProducerRecord には、関連付けられたタイムスタンプもあります。ユーザーがタイムスタンプを提供した場合、producer は提供されたタイムスタンプをレコードにスタンプし、ヘッダーは保持されません。

KafkaConstants.PARTITION_KEY

"kafka.PARTITION_KEY"

Integer

パーティションを明示的に指定する

動的トピックにメッセージを送信する場合は、KafkaConstants.OVERRIDE_TOPIC を、producer で削除されるため、メッセージに沿って送信されないワンタイムヘッダーとして使用します。

メッセージが Kafka に送信された後、次のヘッダーを使用できます

ヘッダー定数ヘッダーの値タイプ説明

KafkaConstants.KAFKA_RECORDMETA

"org.apache.kafka.clients.producer.RecordMetadata"

List<RecordMetadata>

メタデータ (recordMetadata エンドポイントパラメーターが true の場合にのみ設定されます)

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 には次のプロパティーがあります。

プロパティー説明

topic

変更をブロードキャストするために使用する Kafka トピックの名前。(必要)

bootstrapServers

内部 Kafka producer および consumer の bootstrap.servers プロパティー。consumerConfigproducerConfig を設定しない場合は、これを省略形として使用します。このコンポーネントを使用すると、producer と consumer に適切なデフォルト設定が適用されます。

producerConfig

変更をブロードキャストする Kafka producer によって使用されるプロパティーを設定します。bootstrapServers をオーバーライドするため、Kafka の bootstrap.servers プロパティー自体を定義する必要があります

consumerConfig

トピックからキャッシュを設定する Kafka consumer によって使用されるプロパティーを設定します。bootstrapServers をオーバーライドするため、Kafka の bootstrap.servers プロパティー自体を定義する必要があります

maxCacheSize

最近使用したキーをメモリーに保存する数 (デフォルトは 1000)。

pollDurationMs

Kafka consumer のポーリング期間。ローカルキャッシュはすぐに更新されます。この値は、トピックからキャッシュを更新する他のピアが、キャッシュアクションメッセージを送信した冪等の consumer インスタンスと比べてどれだけ遅れているかに影響します。このデフォルト値は 100 ミリ秒です。
この値を明示的に設定する場合は、リモートキャッシュのライブ性と、このリポジトリーの consumer と Kafka ブローカー間のネットワークトラフィックの量との間にトレードオフがあることに注意してください。キャッシュウォームアッププロセスは、何も取得しない 1 つのポーリングがあることにも依存します。これは、ストリームが現在の時点まで消費されたことを示します。トピックでメッセージが送信される速度に対してポーリング期間が長すぎる場合、キャッシュがウォームアップできず、キャッシュが追いつくまでピアに対して一貫性のない状態で動作する可能性があります。

topicbootstrapServers を定義してリポジトリーをインスタンス化するか、または 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 またはエンドポイントでオプション allowManualCommittrue に設定して、手動コミットを有効にする必要があります。次に例を示します。

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[] にシリアル化する必要があります。そうしないと、ヘッダーはスキップされます。次のヘッダー値タイプがサポートされています: StringIntegerLongDoubleBooleanbyte[]。注: 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 がエクスチェンジを作成する際に交換パターンを設定します。

列挙値:

  • InOnly
  • InOut
  • InOptionalOut
 

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 コンポーネントは次のことを行います。

  1. 指定された templateId パスパラメーター (この場合は setBody) によって識別されるルートテンプレートからルートをインスタンス化します。
  2. これは 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)

必須 使用する言語の名前を設定します。

列挙値:

  • bean
  • constant
  • exchangeProperty
  • file
  • groovy
  • header
  • javascript
  • jsonpath
  • mvel
  • ognl
  • ref
  • simple
  • spel
  • sql
  • terser
  • tokenize
  • xpath
  • xquery
  • xtokenize
 

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. メッセージヘッダー

次のメッセージヘッダーを使用して、コンポーネントの動作に影響を与えることができます。

ヘッダー説明

CamelLanguageScript

ヘッダーで提供される実行するスクリプト。エンドポイントで設定されたスクリプトよりも優先されます。

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 です。

列挙値:

  • TRACE
  • DEBUG
  • INFO
  • WARN
  • ERROR
  • OFF

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)

使用する出力スタイルを設定します。

列挙値:

  • デフォルト
  • タブ
  • Fixed

デフォルト

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&amp;param2=100"/>

<to uri="log:bar?param1=bar&amp;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 がエクスチェンジを作成する際に交換パターンを設定します。

列挙値:

  • InOnly
  • InOut
  • InOptionalOut
 

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
  • DEBUG
  • INFO
  • WARN
  • ERROR
  • OFF

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
  • SECONDS
  • 時間

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デフォルトのポート番号

SMTP

25

SMTPS

465

POP3

110

POP3S

995

IMAP

143

IMAPS

993

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 よりもはるかに限定されていることに注意してください。

38.11. サンプル

JMS キューから受信したメッセージを電子メールとして送信する単純なルートから始めます。電子メールアカウントは mymailserver.comadmin アカウントです。

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 の使用

MailEndpointsearchTerm を設定して、不要なメールを除外することができます。

たとえば、件名または本文に 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 に登録する必要があります。指示に従って、新しいアプリケーションを登録します。

手順

  1. アプリケーションがクライアントクレデンシャルフローを介して Exchange メールボックスにアクセスできるようにします。詳細については、OAuth を使用して IMAP、POP、または SMTP 接続を認証する を参照してください。
  2. すべての設定が完了したら、レジストリーで org.apache.camel.component.mail.MicrosoftExchangeOnlineOAuth2MailAuthenticator のインスタンスを宣言して登録します。
  3. たとえば、Spring Boot アプリケーションでは次のようになります。
@BindToRegistry("auth")
public MicrosoftExchangeOnlineOAuth2MailAuthenticator exchangeAuthenticator(){
    return new MicrosoftExchangeOnlineOAuth2MailAuthenticator(tenantId, clientId, clientSecret, "jon@doe.com");
}
  1. 次に、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 がエクスチェンジを作成する際に交換パターンを設定します。

列挙値:

  • InOnly
  • InOut
  • InOptionalOut
 

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)

ユーザーがアップロードだけをしたくない場合に行う操作。

列挙値:

  • copyObject
  • listObjects
  • deleteObject
  • deleteObjects
  • deleteBucket
  • listBuckets
  • getObject
  • getObjectRange
 

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 がエクスチェンジを作成する際に交換パターンを設定します。

列挙値:

  • InOnly
  • InOut
  • InOptionalOut
 

ExchangePattern

pollStrategy (consumer (上級))

プラグ可能な org.apache.camel.PollingConsumerPollingStrategy を使用すると、エクスチェンジが作成され、Camel でルーティングされる前に、通常はポーリング操作中に発生するエラー処理を制御するカスタム実装が提供できます。

 

PollingConsumerPollStrategy

deleteAfterWrite (producer)

Minio ファイルがアップロードされた後、ファイルオブジェクトを削除します。

false

boolean

keyName (producer)

endpoint パラメーター経由でバケットの要素のキー名を設定します。

 

String

operation (producer)

ユーザーがアップロードだけをしたくない場合に行う操作。

列挙値:

  • copyObject
  • listObjects
  • deleteObject
  • deleteObjects
  • deleteBucket
  • listBuckets
  • getObject
  • getObjectRange
 

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
  • DEBUG
  • INFO
  • WARN
  • ERROR
  • OFF

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
  • SECONDS
  • 時間

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)

定数: DESTINATION_BUCKET_NAME

現在の操作に使用されるバケット宛先名。

 

String

CamelMinioContentControl (共通)

定数: CACHE_CONTROL

producer: このオブジェクトのコンテンツコントロール。consumer: オプションの Cache-Control HTTP ヘッダー。これにより、ユーザーは HTTP 要求/応答チェーンに沿ってキャッシュ動作を指定できます。

 

String

CamelMinioContentDisposition (共通)

定数: CONTENT_DISPOSITION

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)

定数: DESTINATION_OBJECT_NAME

現在の操作に使用される宛先キー。

 

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

実行する操作。

列挙値:

  • copyObject
  • listObjects
  • deleteObject
  • deleteObjects
  • deleteBucket
  • listBuckets
  • getObject
  • getPartialObject
 

MinioOperations

CamelMinioServerSideEncryption (共通)

定数: SERVER_SIDE_ENCRYPTION

producer: Minio が管理するキーを使用してオブジェクトを暗号化するときに、サーバー側の暗号化アルゴリズムを設定します。たとえば、AES256 を使用します。consumer: Minio マネージドキーを使用してオブジェクトを暗号化するときのサーバー側の暗号化アルゴリズム。

 

String

CamelMinioExpirationTime (共通)

定数: EXPIRATION_TIME

有効期限。

 

String

CamelMinioReplicationStatus (共通)

定数: REPLICATION_STATUS

複製ステータス。

 

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 がエクスチェンジを作成する際に交換パターンを設定します。

列挙値:

  • InOnly
  • InOut
  • InOptionalOut

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 がエクスチェンジを作成する際に交換パターンを設定します。

列挙値:

  • InOnly
  • InOut
  • InOptionalOut

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 のみサポート対象

分散処理と非同期処理のテストは、非常に難しいことで知られています。MockTest、および DataSet エンドポイントは Camel テストフレームワークとうまく連携し、エンタープライズ統合パターン と Camel の幅広いコンポーネントを強力な Bean 統合と共に使用して、ユニットと統合のテストを簡素化します。

モックコンポーネントは強力な宣言型テストメカニズムを提供します。これは、テスト開始前に任意のモックエンドポイントで宣言型期待値を作成できるという点で jMock に似ています。次に、テストが実行され、通常は 1 つ以上のエンドポイントにメッセージが送信されます。最後に、システムが期待どおりに機能することを確認するために、テストケースで期待値をアサートできます。

これにより、次のようなさまざまなことをテストできます。

  • 各エンドポイントで正しい数のメッセージが受信されます。
  • 正しいペイロードが正しい順序で受信され、
  • メッセージは、いくつかの式を使用して順序テスト関数を作成し、エンドポイントに順番に到着します。
  • 到着したメッセージは、特定のヘッダーに特定の値があるなど、ある種の述語に一致するか、XPath または XQuery 式を評価するなどして、メッセージが何らかの述語に一致します。
注記

モックエンドポイントである テストエンドポイント もありますが、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 から、期待値を設定するために使用できるさまざまなヘルパーメソッドを確認できます。主な方法は次のとおりです。

メソッド説明

expectedMessageCount(int)

エンドポイントで予想されるメッセージ数を定義します。

expectedMinimumMessageCount(int)

エンドポイントで予想されるメッセージの最小数を定義します。

expectedBodiesReceived(…​)

受信する必要があると予想される本文を (順番に) 定義します。

expectedHeaderReceived(…​)

受信する必要があるヘッダーを定義するには

expectsAscending(Expression)

指定された式を使用してメッセージを比較し、メッセージが順番に受信されるという期待を追加します。

expectsDescending(Expression)

指定された式を使用してメッセージを比較し、メッセージが順番に受信されるという期待を追加します。

expectsNoDuplicates(Expression)

重複したメッセージが受信されないという期待を追加するには;式を使用して、各メッセージの一意の識別子を計算します。これは、JMS を使用している場合は JMSMessageID のようなものか、メッセージ内の一意の参照番号です。

別の例を次に示します。

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 番目のみを保持するように指定するために使用できる、retainFirstretainLast の 2 つのオプションを導入しました。

たとえば、以下のコードでは、モックが受信した最初の 5 回と最後の 5 回の Exchange のコピーのみを保持したいと考えています。

  MockEndpoint mock = getMockEndpoint("mock:data");
  mock.setRetainFirst(5);
  mock.setRetainLast(5);
  mock.expectedMessageCount(2000);

  mock.assertIsSatisfied();

これを使用するには、いくつかの制限があります。MockEndpointgetExchanges() および 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 は millisecondsminutes も提供しています。

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 に対して実行する操作を設定します。

列挙値:

  • findById
  • findOneByQuery
  • findAll
  • findDistinct
  • insert
  • save
  • update
  • remove
  • bulkWrite
  • aggregate
  • getDbStats
  • getColStats
  • count
  • command
 

MongoDbOperation

outputType (共通)

プロデューサの出力を選択したタイプ (DocumentList Document または MongoIterable) に変換します。DocumentList または MongoIterable は、findAll および aggregate に適用されます。ドキュメントは、他のすべての操作に適用されます。

列挙値:

  • DocumentList
  • Document
  • MongoIterable
 

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 がエクスチェンジを作成する際に交換パターンを設定します。

列挙値:

  • InOnly
  • InOut
  • InOptionalOut
 

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
  • PRIMARY_PREFERRED
  • SECONDARY
  • SECONDARY_PREFERRED
  • NEAREST

PRIMARY

String

writeConcern (上級)

スタンドアロンの mongod、レプリカセット、またはクラスターへの書き込み操作のために MongoDB から要求された確認応答のレベルで接続 Bean を設定します。可能な値は、ACKNOWLEDGED、W1、W2、W3、UNACKNOWLEDGED、JOURNALED、または MAJORITY です。

列挙値:

  • 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}&amp;collection=${mongodb.collection}&amp;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 ドキュメントから抜粋)想定されるタイプ

CamelMongoDbNumToSkip

MongoDbConstants.NUM_TO_SKIP

カーソルの先頭にある指定された数の要素を破棄します。

int/Integer

CamelMongoDbLimit

MongoDbConstants.LIMIT

返される要素の数を制限します。

int/Integer

CamelMongoDbBatchSize

MongoDbConstants.BATCH_SIZE

1 つのバッチで返される要素の数を制限します。通常、カーソルは結果オブジェクトのバッチをフェッチし、ローカルに保存します。batchSize が正の場合、取得されたオブジェクトの各バッチのサイズを表します。パフォーマンスを最適化し、データ転送を制限するように調整できます。batchSize が負の場合、最大バッチサイズ制限 (通常は 4MB) 内に収まる数のオブジェクトが返され、カーソルが閉じられます。たとえば、batchSize が -10 の場合、サーバーは最大 10 個のドキュメントを 4MB に収まる数だけ返し、カーソルを閉じます。この機能は、ドキュメントが最大サイズ内に収まる必要があるという点で limit() とは異なり、サーバー側でカーソルを閉じる要求を送信する必要がないことに注意してください。バッチサイズは、カーソルが反復された後でも変更できます。その場合、設定は次のバッチ取得に適用されます。

int/Integer

CamelMongoDbAllowDiskUse

MongoDbConstants.ALLOW_DISK_USE

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 ドキュメントから抜粋)データのタイプ

CamelMongoDbResultTotalSize

MongoDbConstants.RESULT_TOTAL_SIZE

クエリーに一致するオブジェクトの数。これは、制限/スキップを考慮していません。

int/Integer

CamelMongoDbResultPageSize

MongoDbConstants.RESULT_PAGE_SIZE

クエリーに一致するオブジェクトの数。これは、制限/スキップを考慮していません。

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 の作成を簡素化する例です。_idboringField を除くすべてのフィールドを取得します。

// 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 の作成を簡素化する例です。_idboringField を除くすべてのフィールドを取得します。

// 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 を使用する特定のフィールドによるソートに基づいて、コレクションから最小/最大レコードを取得する必要があることがよくあります。_idboringField を除くすべてのフィールドを取得します。

// 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() がすでに呼び出されているかどうかが決まります。書き込み操作の最終的な結果にアクセスする場合は、WriteResultgetLastError() または 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 つのオプションがあります。

  1. 最初にオブジェクト全体とそのすべてのフィールドを取得するためのクエリーを実行し (効率的でない場合があります)、Camel 内で変更してから保存します。
  2. $modifiers で更新操作を使用すると、代わりにサーバー側で更新が実行されます。upsert フラグを有効にできます。この場合、挿入が必要な場合、MongoDB は $modifiers をフィルタークエリーオブジェクトに適用し、結果を挿入します。

保存するドキュメントに _id 属性が含まれていない場合、操作は挿入になり、作成された新しい _idCamelMongoOid ヘッダーに配置されます。

以下に例を示します。

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 ドキュメントから抜粋)想定されるタイプ

CamelMongoDbMultiUpdate

MongoDbConstants.MULTIUPDATE

一致するすべてのオブジェクトに更新を適用する必要がある場合。http://www.mongodb.org/display/DOCS/Atomic+Operations を参照してください。

boolean/Boolean

CamelMongoDbUpsert

MongoDbConstants.UPSERT

存在しない場合にデータベースが要素を作成する必要があるかどうか

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 ドキュメントから抜粋)想定されるタイプ

CamelMongoDbBulkOrdered

MongoDbConstants.BULK_ORDERED

順序付きまたは順序なしの操作実行を実行します。デフォルトは 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 ドキュメントから抜粋)想定されるタイプ

CamelMongoDbBatchSize

MongoDbConstants.BATCH_SIZE

バッチごとに返すドキュメントの数を設定します。

int/Integer

CamelMongoDbAllowDiskUse

MongoDbConstants.ALLOW_DISK_USE

集約パイプラインステージを有効にして、データを一時ファイルに書き込みます。

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 にはいくつかのタイプがあります。

  1. Tailable Cursor consumer
  2. 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 で再利用できるようにします

さらに、tailTrackDbtailTrackCollection、および tailTrackField オプションを設定して、ランタイム情報が保存される場所をカスタマイズできます。各オプションの説明については、このページの上部にあるエンドポイントオプションの表を参照してください。

たとえば、次のルートは、departureTime を増加フィールドとして使用し、デフォルトの再生成カーソル遅延を 1000 ミリ秒に設定して、永続的なテールトラッキングをオンにし、cancellationsTracker の下で永続化して、flights.cancellations キャップコレクションから消費します。flights.camelTailTracking の id で、最後に処理された値を lastTrackingValue フィールドに格納します (camelTailTrackinglastTrackingValue はデフォルトです)。

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 を設定するには、consumerTypedatabasecollection、およびオプションの JSON プロパティー streamFilter を指定して、イベントをフィルタリングする必要があります。その JSON プロパティーは、MongoDB の標準的な $match 集計です。XML DSL 設定を使用して簡単に指定できます。

<route id="filterConsumer">
    <from uri="mongodb:myDb?consumerType=changeStreams&amp;database=flights&amp;collection=tickets&amp;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 ドキュメントから抜粋)データのタイプ

CamelMongoDbStreamOperationType

MongoDbConstants.STREAM_OPERATION_TYPE

発生した操作のタイプ。値は、insert、delete、replace、update、drop、rename、dropDatabase、invalidate のいずれかです。

String

_id

MongoDbConstants.MONGO_ID

挿入、置換、削除、更新操作 (つまり、CRUD 操作) によって作成または変更されたドキュメントの _id を含むドキュメント。シャードコレクションの場合、ドキュメントの完全なシャードキーも表示されます。_id フィールドは、すでにシャードキーの一部である場合は繰り返されません。

ObjectId

45.12. 型変換

camel-mongodb コンポーネントに含まれる MongoDbBasicConverters 型コンバーターは、次の変換を提供します。

名前タイプから入力しどのように変更を加えればよいですか ?

fromMapToDocument

Map

Document

new Document (Map m) コンストラクターを介して新しい Document を構築します。

fromDocumentToMap

Document

Map

ドキュメントは すでに Map を実装しています。

fromStringToDocument

String

Document

com.mongodb.Document.parse(String s) を使用します。

fromStringToObjectId

String

ObjectId

new ObjectId(s) を介して新しい ObjectId を構築します

fromFileToDocument

File

Document

内部で fromInputStreamToDocument を使用する

fromInputStreamToDocument

InputStream

Document

入力ストリームのバイトを Document に変換します

fromStringToList

String

List<Bson>

org.bson.codecs.configuration.CodecRegistries を使用して BsonArray に変換し、次に List<Bson> に変換します。

この型コンバーターは自動検出されるため、手動で設定する必要はありません。

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 がログに記録するときに使用するログレベルを決定し、返信する応答がありません。

列挙値:

  • TRACE
  • DEBUG
  • INFO
  • WARN
  • ERROR
  • OFF

WARN

LoggingLevel

serverClosedChannelExceptionCaughtLogLevel (consumer (上級))

サーバー (NettyConsumer) が java.nio.channels.ClosedChannelException をキャッチすると、このログレベルを使用してログに記録されます。これは、クローズドチャネル例外のログ記録を回避するために使用されます。これは、クライアントが突然切断され、Netty サーバーでクローズド例外のフラッドが発生する可能性があるためです。

列挙値:

  • TRACE
  • DEBUG
  • INFO
  • WARN
  • ERROR
  • OFF

DEBUG

LoggingLevel

serverExceptionCaughtLogLevel (consumer (上級))

サーバー (NettyConsumer) が例外をキャッチすると、このログレベルを使用してログに記録されます。

列挙値:

  • TRACE
  • DEBUG
  • INFO
  • WARN
  • ERROR
  • OFF

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
  • 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 の使用するプロトコル。

列挙値:

  • 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 がエクスチェンジを作成する際に交換パターンを設定します。

列挙値:

  • InOnly
  • InOut
  • InOptionalOut
 

ExchangePattern

nettyServerBootstrapFactory (consumer (上級))

カスタム NettyServerBootstrapFactory を使用するには。

 

NettyServerBootstrapFactory

networkInterface (consumer (上級))

UDP を使用する場合、このオプションを使用してネットワークインターフェイスをその名前で指定できます (マルチキャストグループに参加するための eth0 など)。

 

String

noReplyLogLevel (consumer (上級))

同期が有効になっている場合、このオプションは NettyConsumer がログに記録するときに使用するログレベルを決定し、返信する応答がありません。

列挙値:

  • TRACE
  • DEBUG
  • INFO
  • WARN
  • ERROR
  • OFF

WARN

LoggingLevel

serverClosedChannelExceptionCaughtLogLevel (consumer (上級))

サーバー (NettyConsumer) が java.nio.channels.ClosedChannelException をキャッチすると、このログレベルを使用してログに記録されます。これは、クローズドチャネル例外のログ記録を回避するために使用されます。これは、クライアントが突然切断され、Netty サーバーでクローズド例外のフラッドが発生する可能性があるためです。

列挙値:

  • TRACE
  • DEBUG
  • INFO
  • WARN
  • ERROR
  • OFF

DEBUG

LoggingLevel

serverExceptionCaughtLogLevel (consumer (上級))

サーバー (NettyConsumer) が例外をキャッチすると、このログレベルを使用してログに記録されます。

列挙値:

  • TRACE
  • DEBUG
  • INFO
  • WARN
  • ERROR
  • OFF

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
  • 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 ファイルなどのレジストリーに登録できます。渡すことができる値は次のとおりです。

名前説明

passphrase

SSH を使用して送信されたペイロードを暗号化/復号化するために使用するパスワード設定

keyStoreFormat

ペイロードの暗号化に使用されるキーストア形式。設定されていない場合、デフォルトは JKS

securityProvider

ペイロードの暗号化に使用するセキュリティープロバイダー。設定されていない場合、デフォルトは SunX509 です。

keyStoreFile

非推奨: 暗号化に使用されるクライアント側の証明書キーストア

trustStoreFile

非推奨: 暗号化に使用されるサーバー側の証明書キーストア

keyStoreResource

暗号化に使用されるクライアント側の証明書キーストア。デフォルトではクラスパスからロードされますが、"classpath:""file:"、または "http:" をプレフィックとして指定して、異なるシステムからリソースをロードすることもできます。

trustStoreResource

暗号化に使用されるサーバー側の証明書キーストア。デフォルトではクラスパスからロードされますが、"classpath:""file:"、または "http:" をプレフィックとして指定して、異なるシステムからリソースをロードすることもできます。

sslHandler

SSL ハンドラーを返すために使用できるクラスへの参照

encoder

送信ペイロードの特別なマーシャリングを実行するために使用できるカスタム ChannelHandler クラス。Must override io.netty.channel.ChannelInboundHandlerAdapter.

encoders

使用するエンコーダーのリスト。コンマで区切られた値を持つ文字列を使用して、値をレジストリーで検索することができます。Camel がルックアップする必要があることを認識できるように、値の前に # を付けることを忘れないでください。

decoder

受信ペイロードの特別なマーシャリングを実行するために使用できるカスタム ChannelHandler クラス。Must override io.netty.channel.ChannelOutboundHandlerAdapter.

decoders

使用するデコーダーのリスト。コンマで区切られた値を持つ文字列を使用して、値をレジストリーで検索することができます。Camel がルックアップする必要があることを認識できるように、値の前に # を付けることを忘れないでください。

注記

共有不可能なエンコーダー/デコーダーの使用については、以下をお読みください。

46.5.1. 共有不可能なエンコーダーまたはデコーダーの使用

エンコーダーまたはデコーダーが共有可能でない場合 (たとえば、@Shareable クラスアノテーションがない場合)、エンコーダー/デコーダーは org.apache.camel.component.netty.ChannelHandlerFactory インターフェイスを実装し、newChannelHandler メソッドで新しいインスタンスを返さなければなりません。これは、エンコーダー/デコーダーを安全に使用できるようにするためです。そうでない場合、Netty コンポーネントは、エンドポイントの作成時に WARN をログに記録します。

Netty コンポーネントは、多くの一般的に使用されるメソッドを持つ org.apache.camel.component.netty.ChannelHandlerFactories ファクトリークラスを提供します。

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&amp;sync=false"/>
    </route>
    <route>
        <from uri="netty:tcp://0.0.0.0:5150?decoders=#length-decoder,#string-decoder&amp;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&amp;sync=true&amp;workerPool=#sharedPool&amp;usingExecutorService=false"/>
  <to uri="log:result"/>
  ...
</route>

別のルートがある場合は、共有ワーカープールを参照できます。

<route>
  <from uri="netty:tcp://0.0.0.0:5022?textline=true&amp;sync=true&amp;workerPool=#sharedPool&amp;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