Camel Spring Boot リファレンス 3.14

Red Hat Integration 2022.q4

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章 AWS CloudWatch

producer のみサポート対象

AWS2 Cloudwatch コンポーネントを使用すると、メッセージを Amazon CloudWatch メトリクスに送信できます。Amazon API の実装は AWS SDK によって提供されます。

前提条件

有効な Amazon Web Services 開発者アカウントを持っていて、Amazon CloudWatch を使用するためにサインアップしている必要がある。詳細は、Amazon CloudWatch を参照してください。

1.1. URI 形式

aws2-cw://namespace[?options]

メトリクスが存在しない場合は作成されます。URI には、?options=value&option2=value&…​ という形式でクエリーオプションを追加できます。

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. コンポーネントオプション

AWS CloudWatch コンポーネントは、以下に示す 18 のオプションをサポートします。

Name説明デフォルトタイプ

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

1.4. エンドポイントオプション

AWS CloudWatch エンドポイントは、URI 構文を使用して設定されます。

aws2-cw:namespace

パスおよびクエリーパラメーターを使用します。

1.4.1. パスパラメーター(1 パラメーター)

Name説明デフォルトタイプ

namespace (producer)

必須。メトリクス namespace。

 

String

1.4.2. クエリーパラメーター(16 パラメーター)

Name説明デフォルトタイプ

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 を指定する必要があります。

1.5. 用途

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

1.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>

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

1.5.3. 高度な CloudWatchClient 設定

CloudWatchClient インスタンス設定をさらに制御する必要がある場合は、独自のインスタンスを作成し、URI から参照できます。

from("direct:start")
.to("aws2-cw://namespace?amazonCwClient=#client");

#client は、レジストリー内の CloudWatchClient を参照します。

1.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 の実際のバージョンに置き換える必要があります。

1.7. 例

1.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");

1.8. Spring Boot Auto-Configuration

Spring Boot で aws2-cw を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-aws2-cw-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</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

ブール値

camel.component.aws2-cw.configuration

コンポーネントの設定。このオプションは org.apache.camel.component.aws2.cw.Cw2Configuration タイプです。

 

Cw2Configuration

camel.component.aws2-cw.enabled

aws2-cw コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.aws2-cw.lazy-start-producer

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

false

ブール値

camel.component.aws2-cw.name

メトリクス名。

 

String

camel.component.aws2-cw.override-endpoint

エンドポイントをオーバーライドする必要性を設定します。このオプションは uriEndpointOverride オプションと併用する必要があります。

false

ブール値

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

ブール値

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

ブール値

camel.component.aws2-cw.value

メトリクス値。

 

double

第2章 AWS DynamoDB

producer のみサポート対象

AWS2 DynamoDB コンポーネントは、サービスとの間でのデータの保存および取得をサポートしています。

前提条件

有効な Amazon Web Services 開発者アカウントを持っていて、Amazon DynamoDB を使用するためにサインアップしている必要がある。詳細は、Amazon DynamoDB を参照してください。

2.1. URI 形式

aws2-ddb://domainName[?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 DynamoDB コンポーネントは 22 のオプションをサポートします。これは以下に記載されています。

Name説明デフォルトタイプ

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

2.4. エンドポイントオプション

AWS DynamoDB エンドポイントは、URI 構文を使用して設定します。

aws2-ddb:tableName

パスおよびクエリーパラメーターを使用します。

2.4.1. パスパラメーター(1 パラメーター)

Name説明デフォルトタイプ

tableName (producer)

必須。現在作業中のテーブルの名前。

 

String

2.4.2. クエリーパラメーター(20 パラメーター)

Name説明デフォルトタイプ

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 を指定する必要があります。

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. 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>

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

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

ヘッダータイプ説明

CamelAwsDdbBatchResponse

Map<String,BatchResponse>

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

CamelAwsDdbUnprocessedKeys

Map<String,KeysAndAttributes>

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

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

ヘッダータイプ説明

CamelAwsDdbAttributes

Map<String, AttributeValue>

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

2.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

2.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 プロパティー。

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

ヘッダータイプ説明

CamelAwsDdbAttributes

Map<String, AttributeValue>

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

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

ヘッダータイプ説明

CamelAwsDdbAttributes

Map<String, AttributeValue>

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

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

ヘッダータイプ説明

CamelAwsDdbItems

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

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

CamelAwsDdbLastEvaluatedKey

キー

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

CamelAwsDdbConsumedCapacity

double

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

CamelAwsDdbCount

Integer

応答のアイテム数。

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

ヘッダータイプ説明

CamelAwsDdbItems

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

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

CamelAwsDdbLastEvaluatedKey

キー

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

CamelAwsDdbConsumedCapacity

double

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

CamelAwsDdbCount

Integer

応答のアイテム数。

CamelAwsDdbScannedCount

Integer

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

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

ヘッダータイプ説明

CamelAwsDdbAttributes

Map<String, AttributeValue>

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

2.5.12. 高度な AmazonDynamoDB 設定

AmazonDynamoDB インスタンス設定をさらに制御する必要がある場合は、独自のインスタンスを作成し、URI から参照できます。

from("direct:start")
.to("aws2-ddb://domainName?amazonDDBClient=#client");

#client は、レジストリー内の DynamoDbClient を参照します。

2.6. サポートされる producer 操作

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

2.7. 例

2.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.14.2 は Camel の実際のバージョンに置き換える必要があります。

2.8. Spring Boot Auto-Configuration

Spring Boot で aws2-ddb を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-aws2-ddb-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 40 のオプションをサポートします。

Name説明デフォルトタイプ

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

ブール値

camel.component.aws2-ddb.configuration

コンポーネントの設定。このオプションは apache.camel.component.aws2.ddb.Ddb2Configuration タイプです。

 

Ddb2Configuration

camel.component.aws2-ddb.consistent-read

データの読み取り時に強力な整合性を適用するべきかどうかを決定します。

false

ブール値

camel.component.aws2-ddb.enabled

aws2-cw コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.aws2-ddb.enabled-initial-describe-table

DDB エンドポイントの最初の Describe テーブル操作を行うべきかどうかを設定します。

true

ブール値

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

ブール値

camel.component.aws2-ddb.operation

実行する操作。

 

Ddb2Operations

camel.component.aws2-ddb.override-endpoint

エンドポイントをオーバーライドする必要性を設定します。このオプションは uriEndpointOverride オプションと併用する必要があります。

false

ブール値

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

ブール値

camel.component.aws2-ddb.uri-endpoint-override

オーバーライドする URI エンドポイントを設定します。このオプションは overrideEndpoint オプションと組み合わせて使用する必要があります。

 

String

camel.component.aws2-ddb.use-default-credentials-provider

デフォルトのクレデンシャルプロバイダー経由でクレデンシャルをロードすること、または静的クレデンシャルが渡されることを S3 クライアントは想定すべきかどうかを設定します。

false

ブール値

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

ブール値

camel.component.aws2-ddbstream.bridge-error-handler

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

false

ブール値

camel.component.aws2-ddbstream.configuration

コンポーネントの設定。このオプションは org.apache.camel.component.aws2.ddbstream.Ddb2StreamConfiguration タイプです。

 

Ddb2StreamConfiguration

camel.component.aws2-ddbstream.enabled

aws2-ddbstream コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.aws2-ddbstream.max-results-per-request

各ポーリングでフェッチされる最大レコード数。

 

Integer

camel.component.aws2-ddbstream.override-endpoint

エンドポイントをオーバーライドする必要性を設定します。このオプションは uriEndpointOverride オプションと併用する必要があります。

false

ブール値

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

ブール値

camel.component.aws2-ddbstream.uri-endpoint-override

オーバーライドする URI エンドポイントを設定します。このオプションは overrideEndpoint オプションと組み合わせて使用する必要があります。

 

String

camel.component.aws2-ddbstream.use-default-credentials-provider

デフォルトのクレデンシャルプロバイダー経由でクレデンシャルをロードすること、または静的クレデンシャルが渡されることを DynamoDB Streams クライアントは想定すべきかどうかを設定します。

false

ブール値

第3章 AWS キネシス

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

AWS2 Kinesis コンポーネントは、Amazon Kinesis (バッチはサポートされていません) サービスとのメッセージの送受信をサポートしています。

前提条件

有効な Amazon Web Services 開発者アカウントを持っていて、Amazon Kinesis を使用するためにサインアップしている必要がある。詳細については、AWS Kinesis を参照してください。

3.1. URI 形式

aws2-kinesis://stream-name[?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 のオプションをサポートします。これは以下に記載されています。

Name説明デフォルトタイプ

amazonKinesisClient (共通)

Autowired このエンドポイントに対するすべての要求に使用する Amazon Kinesis クライアント。

 

KinesisClient

cborEnabled (共通)

このオプションは、実行中に CBOR_ENABLED プロパティーを設定します。

true

boolean

configuration (共通)

コンポーネントの設定。

 

Kinesis2Configuration

overrideEndpoint (共通)

エンドポイントをオーバーライドする必要性を設定します。このオプションは uriEndpointOverride オプションと併用する必要があります。

false

boolean

proxyHost (共通)

Kinesis クライアントをインスタンス化する際にプロキシーホストを定義します。

 

String

proxyPort (共通)

Kinesis クライアントをインスタンス化する際にプロキシーポートを定義します。

 

Integer

proxyProtocol (common)

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 (common)

デフォルトのクレデンシャルプロバイダー経由でクレデンシャルをロードすること、または静的クレデンシャルが渡されることを 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

3.4. エンドポイントオプション

AWS Kinesis エンドポイントは、URI 構文を使用して設定します。

aws2-kinesis:streamName

パスおよびクエリーパラメーターを使用します。

3.4.1. パスパラメーター(1 パラメーター)

Name説明デフォルトタイプ

streamName (共通)

必須 ストリームの名前。

 

String

3.4.2. クエリーパラメーター (38 パラメーター)

Name説明デフォルトタイプ

amazonKinesisClient (共通)

Autowired このエンドポイントに対するすべての要求に使用する Amazon Kinesis クライアント。

 

KinesisClient

cborEnabled (共通)

このオプションは、実行中に CBOR_ENABLED プロパティーを設定します。

true

boolean

overrideEndpoint (共通)

エンドポイントをオーバーライドする必要性を設定します。このオプションは uriEndpointOverride オプションと併用する必要があります。

false

boolean

proxyHost (共通)

Kinesis クライアントをインスタンス化する際にプロキシーホストを定義します。

 

String

proxyPort (共通)

Kinesis クライアントをインスタンス化する際にプロキシーポートを定義します。

 

Integer

proxyProtocol (common)

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 (common)

デフォルトのクレデンシャルプロバイダー経由でクレデンシャルをロードすること、または静的クレデンシャルが渡されることを 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 を提供する必要があります。

3.5. バッチ consumer

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

これにより、たとえば、このバッチに存在するメッセージの数を知ることができ、たとえば、Aggregator にこの数のメッセージを集約させることができます。

3.6. 用途

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

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

ヘッダータイプ説明

CamelAwsKinesisSequenceNumber

String

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

CamelAwsKinesisApproximateArrivalTimestamp

String

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

CamelAwsKinesisPartitionKey

String

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

3.6.3. AmazonKinesis の設定

次に、amazonKinesisClient URI オプションで KinesisClient を参照する必要があります。

from("aws2-kinesis://mykinesisstream?amazonKinesisClient=#kinesisClient")
  .to("log:out?showAll=true");

3.6.4. AWS 認証情報の指定

新しい ClientConfiguration インスタンスを作成するときのデフォルトである DefaultAWSCredentialsProviderChain を使用して認証情報を取得することをお勧めしますが、createClient (…) を呼び出すときに別の AWSCredentialsProvider を指定できます。

3.6.5. Kinesis producer が Kinesis に書き込むために使用するメッセージヘッダー。producer は、メッセージ本文が byte[] であることを期待しています。

ヘッダータイプ説明

CamelAwsKinesisPartitionKey

String

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

CamelAwsKinesisSequenceNumber

String

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

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

ヘッダータイプ説明

CamelAwsKinesisSequenceNumber

String

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

CamelAwsKinesisShardId

String

レコードが保存された場所のシャード ID

3.7. 依存関係

Maven ユーザーは、以下の依存関係を pom.xml に追加する必要があります。

pom.xml

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-aws2-kinesis</artifactId>
    <version>${camel-version}</version>
</dependency>

3.14.2 は Camel の実際のバージョンに置き換える必要があります。

3.8. Spring Boot Auto-Configuration

Spring Boot で aws2-kinesis を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-aws2-kinesis-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 40 のオプションをサポートします。

Name説明デフォルトタイプ

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

ブール値

camel.component.aws2-kinesis-firehose.cbor-enabled

このオプションは、実行中に CBOR_ENABLED プロパティーを設定します。

true

ブール値

camel.component.aws2-kinesis-firehose.configuration

コンポーネントの設定。オプションは org.apache.camel.component.aws2.firehose.KinesisFirehose2Configuration タイプです。

 

KinesisFirehose2Configuration

camel.component.aws2-kinesis-firehose.enabled

aws2-kinesis-firehose コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.aws2-kinesis-firehose.lazy-start-producer

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

false

ブール値

camel.component.aws2-kinesis-firehose.operation

ユーザーがレコードだけを送信したくない場合に行う操作。

 

KinesisFirehose2Operations

camel.component.aws2-kinesis-firehose.override-endpoint

エンドポイントをオーバーライドする必要性を設定します。このオプションは uriEndpointOverride オプションと併用する必要があります。

false

ブール値

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

ブール値

camel.component.aws2-kinesis-firehose.uri-endpoint-override

オーバーライドする URI エンドポイントを設定します。このオプションは overrideEndpoint オプションと組み合わせて使用する必要があります。

 

String

camel.component.aws2-kinesis-firehose.use-default-credentials-provider

デフォルトのクレデンシャルプロバイダー経由でクレデンシャルをロードすること、または静的クレデンシャルが渡されることを Kinesis Firehose クライアントは想定すべきかどうかを設定します。

false

ブール値

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

ブール値

camel.component.aws2-kinesis.bridge-error-handler

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

false

ブール値

camel.component.aws2-kinesis.cbor-enabled

このオプションは、実行中に CBOR_ENABLED プロパティーを設定します。

true

ブール値

camel.component.aws2-kinesis.configuration

コンポーネントの設定。オプションは org.apache.camel.component.aws2.kinesis.Kinesis2Configuration タイプです。

 

Kinesis2Configuration

camel.component.aws2-kinesis.enabled

aws2-kinesis コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.aws2-kinesis.iterator-type

Kinesis ストリーム内でレコードの取得を開始する場所を定義します。

 

ShardIteratorType

camel.component.aws2-kinesis.lazy-start-producer

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

false

ブール値

camel.component.aws2-kinesis.max-results-per-request

各ポーリングでフェッチされる最大レコード数。

1

Integer

camel.component.aws2-kinesis.override-endpoint

エンドポイントをオーバーライドする必要性を設定します。このオプションは uriEndpointOverride オプションと併用する必要があります。

false

ブール値

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

ブール値

camel.component.aws2-kinesis.uri-endpoint-override

オーバーライドする URI エンドポイントを設定します。このオプションは overrideEndpoint オプションと組み合わせて使用する必要があります。

 

String

camel.component.aws2-kinesis.use-default-credentials-provider

デフォルトのクレデンシャルプロバイダー経由でクレデンシャルをロードすること、または静的クレデンシャルが渡されることを Kinesis クライアントは想定すべきかどうかを設定します。

false

ブール値

第4章 AWS 2 Lambda

producer のみサポート対象

AWS2 Lambda コンポーネントは、AWS Lambda 関数の作成、取得、一覧表示、削除、および呼び出しをサポートしています。

前提条件

有効な Amazon Web Services 開発者アカウントを持っていて、Amazon Lambda を使用するためにサインアップしている必要がある。詳細については、AWS Lambda を参照してください。

Lambda 関数を作成するときは、少なくとも AWSLambdaBasicExecuteRole ポリシーがアタッチされた IAM ロールを指定する必要があります。

4.1. URI 形式

aws2-lambda://functionName[?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 Lambda コンポーネントは、以下に示す 16 のオプションをサポートしています。

Name説明デフォルトタイプ

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

4.4. エンドポイントオプション

AWS Lambda エンドポイントは、URI 構文を使用して設定されます。

aws2-lambda:function

パスおよびクエリーパラメーターを使用します。

4.4.1. パスパラメーター(1 パラメーター)

Name説明デフォルトタイプ

function (producer)

必須 Lambda 関数の名前。

 

String

4.4.2. クエリーパラメーター (14 パラメーター)

Name説明デフォルトタイプ

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 を指定する必要があります。

4.5. 用途

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

4.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

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

いいえ

4.6. 利用可能な操作のリスト

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

4.7. 例

4.7.1. producer の例

コンポーネントがどのように機能するかを完全に理解するには、これらの 統合テスト を参照してください。

4.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);
    }
});

4.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")

このようにして、この操作に特に関連するヘッダーやオプションを渡す必要なく、リクエストを直接渡します。

4.9. Dependencies

Maven ユーザーは、以下の依存関係を pom.xml に追加する必要があります。

pom.xml

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-aws2-lambda</artifactId>
    <version>${camel-version}</version>
</dependency>

3.14.2 は Camel の実際のバージョンに置き換える必要があります。

4.10. Spring Boot Auto-Configuration

Spring Boot で aws2-lambda を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-aws2-lambda-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 17 のオプションをサポートします。

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

camel.component.aws2-lambda.access-key

Amazon AWS Access Key。

 

String

camel.component.aws2-lambda.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

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 コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.aws2-lambda.lazy-start-producer

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

false

ブール値

camel.component.aws2-lambda.operation

実行する操作。listFunctions、getFunction、createFunction、deleteFunction、または invokeFunction のいずれかです。

 

Lambda2Operations

camel.component.aws2-lambda.override-endpoint

エンドポイントをオーバーライドする必要性を設定します。このオプションは uriEndpointOverride オプションと併用する必要があります。

false

ブール値

camel.component.aws2-lambda.pojo-request

POJO リクエストをボディーとして使用するかどうか。

false

ブール値

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

ブール値

camel.component.aws2-lambda.uri-endpoint-override

オーバーライドする URI エンドポイントを設定します。このオプションは overrideEndpoint オプションと組み合わせて使用する必要があります。

 

String

camel.component.aws2-lambda.use-default-credentials-provider

Lambda クライアントがデフォルトの認証情報プロバイダーを介して認証情報をロードすることを期待するか、静的認証情報が渡されることを期待するかを設定します。

false

ブール値

第5章 AWS S3 ストレージサービス

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

AWS2 S3 コンポーネントは、Amazon の S3 サービスとの間でのオブジェクトの保存と取得をサポートしています。

前提条件

有効な Amazon Web Services 開発者アカウントを持っていて、Amazon S3 を使用するためにサインアップしている必要がある。詳細については、https://aws.amazon.com/s3 [Amazon S3] のリンクを参照してください。

5.1. URI 形式

aws2-s3://bucketNameOrArn[?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 S3 Storage Service コンポーネントは、以下に示す 50 のオプションをサポートしています。

Name説明デフォルトタイプ

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 (common)

com.amazonaws.services.s3.AmazonS3#setBucketPolicy() メソッドに設定されるこのキューのポリシー。

 

String

proxyHost (共通)

SQS クライアントをインスタンス化するときにプロキシーホストを定義します。

 

String

proxyPort (common)

クライアント定義内で使用されるプロキシーポートを指定します。

 

Integer

proxyProtocol (common)

S3 クライアントをインスタンス化するときにプロキシープロトコルを定義します。

列挙値:

  • HTTP
  • HTTPS

HTTPS

Protocol

region (共通)

S3 クライアントが機能する必要があるリージョン。このパラメーターを使用する場合、設定には小文字のリージョン名を指定します (例 ap-east-1)。名前 Region.EU_WEST_1.id() を使用する必要があります。

 

String

trustAllCertificates (共通)

エンドポイントをオーバーライドするときにすべての証明書を信頼する場合。

false

boolean

uriEndpointOverride (共通)

オーバーライドする URI エンドポイントを設定します。このオプションは overrideEndpoint オプションと組み合わせて使用する必要があります。

 

String

useDefaultCredentialsProvider (common)

デフォルトのクレデンシャルプロバイダー経由でクレデンシャルをロードすること、または静的クレデンシャルが渡されることを 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 (advanced))

KMS が有効になっている場合に使用する KMS キーの ID を定義します。

 

String

useAwsKMS (producer (advanced))

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

5.4. エンドポイントオプション

AWS S3 Storage Service エンドポイントは、URI 構文を使用して設定されます。

aws2-s3://bucketNameOrArn

パスおよびクエリーパラメーターを使用します。

5.4.1. パスパラメーター(1 パラメーター)

Name説明デフォルトタイプ

bucketNameOrArn (共通)

必須 のバケット名または ARN。

 

String

5.4.2. クエリーパラメーター (68 パラメーター)

Name説明デフォルトタイプ

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 (common)

com.amazonaws.services.s3.AmazonS3#setBucketPolicy() メソッドに設定されるこのキューのポリシー。

 

String

proxyHost (共通)

SQS クライアントをインスタンス化するときにプロキシーホストを定義します。

 

String

proxyPort (common)

クライアント定義内で使用されるプロキシーポートを指定します。

 

Integer

proxyProtocol (common)

S3 クライアントをインスタンス化するときにプロキシープロトコルを定義します。

列挙値:

  • HTTP
  • HTTPS

HTTPS

Protocol

region (共通)

S3 クライアントが機能する必要があるリージョン。このパラメーターを使用する場合、設定には小文字のリージョン名を指定します (例 ap-east-1)。名前 Region.EU_WEST_1.id() を使用する必要があります。

 

String

trustAllCertificates (共通)

エンドポイントをオーバーライドするときにすべての証明書を信頼する場合。

false

boolean

uriEndpointOverride (共通)

オーバーライドする URI エンドポイントを設定します。このオプションは overrideEndpoint オプションと組み合わせて使用する必要があります。

 

String

useDefaultCredentialsProvider (common)

デフォルトのクレデンシャルプロバイダー経由でクレデンシャルをロードすること、または静的クレデンシャルが渡されることを 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 (advanced))

KMS が有効になっている場合に使用する KMS キーの ID を定義します。

 

String

useAwsKMS (producer (advanced))

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 を指定する必要があります。

5.5. バッチ consumer

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

これにより、たとえば、このバッチに存在するメッセージの数を知ることができ、たとえば、Aggregator にこの数のメッセージを集約させることができます。

5.6. 用途

たとえば、バケット helloBucket からファイル hello.txt を読み取るには、次のスニペットを使用します。

from("aws2-s3://helloBucket?accessKey=yourAccessKey&secretKey=yourSecretKey&prefix=hello.txt")
  .to("file:/var/downloaded");

5.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 のオブジェクトと共に保存されるメタデータのマップ。メタデータの詳細。

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

ヘッダータイプ説明

CamelAwsS3ETag

String

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

CamelAwsS3VersionId

String

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

5.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 のオブジェクトとともに保存されたメタデータのマップ。メタデータの詳細。

5.6.4. S3 producer の操作

Camel-AWS2-S3 コンポーネントは、producer 側で次の操作を提供します。

  • copyObject
  • deleteObject
  • listBuckets
  • deleteBucket
  • listObjects
  • getObject (これは S3Object インスタンスを返します)
  • getObjectRange (これは S3Object インスタンスを返します)
  • createDownloadLink

操作を明示的に指定しない場合、producer は次のことを行います。- 単一ファイルのアップロード - multiPartUpload オプションが有効な場合はマルチパートアップロード。

5.6.5. 高度な AmazonS3 設定

Camel アプリケーションがファイアウォールの背後で実行されている場合、または S3Client インスタンス設定をより詳細に制御する必要がある場合は、独自のインスタンスを作成して、Camel aws2-s3 コンポーネント設定で参照できます。

from("aws2-s3://MyBucket?amazonS3Client=#client&delay=5000&maxMessagesPerPoll=5")
.to("mock:result");

5.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 に依頼します。このファイルのダウンロードを要求すると、ダウンロードの直前に復号化が行われます。

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

5.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 を返します。

5.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 秒後に完了します。

5.8. バケットの自動作成

オプション autoCreateBucket を使用すると、S3 バケットが存在しない場合に、ユーザーは S3 バケットの自動作成を回避できます。このオプションのデフォルトは true です。false に設定すると、AWS に存在しないバケットに対する操作は成功せず、エラーが返されます。

5.9. バケットと別のバケットの間でスタッフを移動する

一部のユーザーは、このコンポーネントの copyObject 機能を使用せずに、バケットからコンテンツを消費し、コンテンツを別のバケットに移動することを好みます。この場合、consumer の受信交換から bucketName ヘッダーを削除することを忘れないでください。そうしないと、ファイルは常に同じ元のバケットで上書きされます。

5.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 というファイルが表示されます。

5.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);

5.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")

このようにして、この操作に特に関連するヘッダーやオプションを渡す必要なく、リクエストを直接渡します。

5.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);

これで、キャメルルートに実装されたすべての操作にコンポーネントが使用されます。

5.14. Dependencies

Maven ユーザーは、以下の依存関係を pom.xml に追加する必要があります。

pom.xml

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-aws2-s3</artifactId>
    <version>${camel-version}</version>
</dependency>

3.14.2 は Camel の実際のバージョンに置き換える必要があります。

5.15. Spring Boot Auto-Configuration

Spring Boot で aws2-s3 を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-aws2-s3-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</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

ブール値

camel.component.aws2-s3.autoclose-body

このオプションが true で、includeBody が false の場合、エクスチェンジの完了時に S3Object.close() メソッドが呼び出されます。このオプションは includeBody オプションと密接に関係しています。includeBody を false に設定し、autocloseBody を false に設定した場合、S3Object ストリームを閉じるのは呼び出し側が判断します。autocloseBody を true に設定すると、S3Object ストリームが自動的に閉じられます。

true

ブール値

camel.component.aws2-s3.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

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

ブール値

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

ブール値

camel.component.aws2-s3.delete-after-write

S3 ファイルのアップロード後にファイルオブジェクトを削除します。

false

ブール値

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 コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.aws2-s3.file-name

指定のファイル名を持つバケットからオブジェクトを取得します。

 

String

camel.component.aws2-s3.ignore-body

true の場合、S3 オブジェクトボディは完全に無視されます。false に設定されている場合、S3 オブジェクトはボディに配置されます。これを true に設定すると、includeBody オプションで定義された動作がオーバーライドされます。

false

ブール値

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

ブール値

camel.component.aws2-s3.include-folders

true の場合、フォルダー/ディレクトリーが消費されます。false の場合は無視され、エクスチェンジは作成されません。

true

ブール値

camel.component.aws2-s3.key-name

endpoint パラメーター経由でバケットの要素のキー名を設定します。

 

String

camel.component.aws2-s3.lazy-start-producer

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

false

ブール値

camel.component.aws2-s3.move-after-read

オブジェクトの取得後に S3 バケットから別のバケットに移動します。操作を実行するには、destinationBucket オプションを設定する必要があります。copy bucket 操作は、エクスチェンジがコミットされた場合にのみ実行されます。ロールバックが発生した場合、オブジェクトは移動しません。

false

ブール値

camel.component.aws2-s3.multi-part-upload

true の場合、Camel はマルチパート形式のファイルをアップロードし、パートサイズは partSize のオプションによって決定されます。

false

ブール値

camel.component.aws2-s3.naming-strategy

ストリーミングのアップロードモードで使用する命名ストラテジー。

 

AWSS3NamingStrategyEnum

camel.component.aws2-s3.operation

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

 

AWS2S3Operations

camel.component.aws2-s3.override-endpoint

エンドポイントをオーバーライドする必要性を設定します。このオプションは uriEndpointOverride オプションと併用する必要があります。

false

ブール値

camel.component.aws2-s3.part-size

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

26214400

Long

camel.component.aws2-s3.pojo-request

POJO リクエストをボディーとして使用するかどうか。

false

ブール値

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

ブール値

camel.component.aws2-s3.streaming-upload-timeout

ストリーミングアップロードモードが true の場合、このオプションはタイムアウトを設定してアップロードを完了します。

 

Long

camel.component.aws2-s3.trust-all-certificates

エンドポイントをオーバーライドするときにすべての証明書を信頼する場合。

false

ブール値

camel.component.aws2-s3.uri-endpoint-override

オーバーライドする URI エンドポイントを設定します。このオプションは overrideEndpoint オプションと組み合わせて使用する必要があります。

 

String

camel.component.aws2-s3.use-aws-k-m-s

KMS を使用する必要があるかどうかを定義します。

false

ブール値

camel.component.aws2-s3.use-customer-key

カスタマーキーを使用する必要があるかどうかを定義します。

false

ブール値

camel.component.aws2-s3.use-default-credentials-provider

デフォルトのクレデンシャルプロバイダー経由でクレデンシャルをロードすること、または静的クレデンシャルが渡されることを S3 クライアントは想定すべきかどうかを設定します。

false

ブール値

第6章 AWS Simple Notification System (SNS)

producer のみサポート対象

AWS2 SNS コンポーネントを使用すると、メッセージを Amazon Simple Notification Topic に送信できます。Amazon API の実装は AWS SDK によって提供されます。

前提条件

有効な Amazon Web Services 開発者アカウントを持っていて、Amazon Kinesis を使用するためにサインアップしている必要がある。詳細は、Amazon SNS を参照してください。

6.1. URI 形式

aws2-sns://topicNameOrArn[?options]

トピックがまだ存在しない場合は作成されます。URI には、?options=value&option2=value&…​ という形式でクエリーオプションを追加できます。

6.2. URI オプション

6.2.1. オプションの設定

Camel コンポーネントは、以下の 2 つのレベルで設定されます。

  • コンポーネントレベル
  • エンドポイントレベル

6.2.1.1. コンポーネントオプションの設定

コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。

コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。

コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。

6.2.1.2. エンドポイントオプションの設定

多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。

エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。

オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。

以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。

6.3. コンポーネントオプション

AWS Simple Notification System (SNS) コンポーネントは、以下に示す 24 のオプションをサポートしています。

Name説明デフォルトタイプ

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

6.4. エンドポイントオプション

AWS Simple Notification System (SNS) エンドポイントは、URI 構文を使用して設定されます。

aws2-sns:topicNameOrArn

パスおよびクエリーパラメーターを使用します。

6.4.1. パスパラメーター(1 パラメーター)

Name説明デフォルトタイプ

topicNameOrArn (producer)

必須 のトピック名または ARN。

 

String

6.4.2. クエリーパラメーター (23 パラメーター)

Name説明デフォルトタイプ

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 を指定する必要があります。

6.5. 用途

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

6.5.2. SNS producer によって評価されるメッセージヘッダー

ヘッダータイプ説明

CamelAwsSnsSubject

String

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

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

ヘッダータイプ説明

CamelAwsSnsMessageId

String

Amazon SNS メッセージ ID。

6.5.4. 高度な AmazonSNS 設定

SnsClient インスタンス設定をさらに制御する必要がある場合は、独自のインスタンスを作成し、URI から参照できます。

from("direct:start")
.to("aws2-sns://MyTopic?amazonSNSClient=#client");

#client は、レジストリー内の AmazonSNS を参照します。

6.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(...);

6.6. トピックの自動作成

オプション autoCreateTopic を使用すると、SNS トピックが存在しない場合に自動作成を回避できます。このオプションのデフォルトは true です。false に設定すると、AWS に存在しないトピックに対する操作は成功せず、エラーが返されます。

6.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"
        }
      }
    }
  ]
}

これは、サブスクリプションを正しく機能させるための重要なステップです。

6.7.1. SNS Fifo トピックメッセージグループ Id 戦略とメッセージ 重複排除 Id 戦略

何かを FIFO トピックに送信するときは、常にメッセージグループ ID 戦略を設定する必要があります。

コンテンツベースのメッセージ重複排除が SNS Fifo トピックで有効になっている場合、メッセージ重複排除 ID 戦略を設定する必要はありません。それ以外の場合は、設定する必要があります。

6.8. 例

6.8.1. producer の例

トピックへの送信

from("direct:start")
  .to("aws2-sns://camel-topic?subject=The+subject+message&autoCreateTopic=true");

6.9. Dependencies

Maven ユーザーは、以下の依存関係を pom.xml に追加する必要があります。

pom.xml

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-aws2-sns</artifactId>
    <version>${camel-version}</version>
</dependency>

3.14.2 は Camel の実際のバージョンに置き換える必要があります。

6.10. Spring Boot Auto-Configuration

Spring Boot で aws2-ddb を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-aws2-sns-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</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

ブール値

camel.component.aws2-sns.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.aws2-sns.configuration

コンポーネントの設定。オプションは org.apache.camel.component.aws2.sns.Sns2Configuration タイプです。

 

Sns2Configuration

camel.component.aws2-sns.enabled

aws2-sns コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

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

ブール値

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

ブール値

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

ブール値

camel.component.aws2-sns.subject

メッセージヘッダー 'CamelAwsSnsSubject' が存在しない場合に使用されるサブジェクト。

 

String

camel.component.aws2-sns.subscribe-s-n-sto-s-q-s

SNS トピックと SQS との間のサブスクリプションを完了する必要があるかどうかを定義します。

false

ブール値

camel.component.aws2-sns.trust-all-certificates

エンドポイントをオーバーライドするときにすべての証明書を信頼する場合。

false

ブール値

camel.component.aws2-sns.uri-endpoint-override

オーバーライドする URI エンドポイントを設定します。このオプションは overrideEndpoint オプションと組み合わせて使用する必要があります。

 

String

camel.component.aws2-sns.use-default-credentials-provider

SNS クライアントが AWS infra インスタンスでクレデンシャルのロードすること、または静的クレデンシャルが渡されることを SNS クライアントが想定すべきかどうかを設定します。

false

ブール値

第7章 AWS Simple Queue Service (SQS)

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

AWS2 SQS コンポーネントは、Amazon の SQS サービス へのメッセージの送受信をサポートしています。

前提条件

有効な Amazon Web Services 開発者アカウントを持っていて、Amazon SQS を使用するためにサインアップしている必要がある。詳細は、Amazon SQS を参照してください。

7.1. URI 形式

aws2-sqs://queueNameOrArn[?options]

キューがまだ存在しない場合は作成されます。URI には、次の形式でクエリーオプションを追加できます。

?options=value&option2=value&…​

7.2. オプションの設定

Camel コンポーネントは、以下の 2 つのレベルで設定されます。

  • コンポーネントレベル
  • エンドポイントレベル

7.2.1. コンポーネントオプションの設定

コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。

コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。

コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。

7.2.2. エンドポイントオプションの設定

多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。

エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。

オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。

以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。

7.3. コンポーネントオプション

AWS Simple Queue Service (SQS) コンポーネントは、以下に示す 43 のオプションをサポートしています。

Name説明デフォルトタイプ

amazonAWSHost (common)

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 (common)

SQS クライアントをインスタンス化するときにプロキシープロトコルを定義します。

列挙値:

  • HTTP
  • HTTPS

HTTPS

Protocol

queueOwnerAWSAccountId (common)

異なるアカウント所有者でキューを接続する必要がある場合は、キュー所有者の aws アカウント ID を指定します。

 

String

region (共通)

SQS クライアントが機能する必要があるリージョン。このパラメーターを使用する場合、設定には小文字のリージョン名を指定します (例 ap-east-1)。名前 Region.EU_WEST_1.id() を使用する必要があります。

 

String

trustAllCertificates (共通)

エンドポイントをオーバーライドするときにすべての証明書を信頼する場合。

false

boolean

uriEndpointOverride (共通)

オーバーライドする URI エンドポイントを設定します。このオプションは overrideEndpoint オプションと組み合わせて使用する必要があります。

 

String

useDefaultCredentialsProvider (common)

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 (advanced)

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

7.4. エンドポイントオプション

AWS Simple Queue Service (SQS) エンドポイントは、URI 構文を使用して設定されます。

aws2-sqs:queueNameOrArn

パスおよびクエリーパラメーターを使用します。

7.4.1. パスパラメーター(1 パラメーター)

Name説明デフォルトタイプ

queueNameOrArn (common)

必須 のキュー名または ARN。

 

String

7.4.2. クエリーパラメーター (61 パラメーター)

Name説明デフォルトタイプ

amazonAWSHost (common)

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 (common)

SQS クライアントをインスタンス化するときにプロキシープロトコルを定義します。

列挙値:

  • HTTP
  • HTTPS

HTTPS

Protocol

queueOwnerAWSAccountId (common)

異なるアカウント所有者でキューを接続する必要がある場合は、キュー所有者の aws アカウント ID を指定します。

 

String

region (共通)

SQS クライアントが機能する必要があるリージョン。このパラメーターを使用する場合、設定には小文字のリージョン名を指定します (例 ap-east-1)。名前 Region.EU_WEST_1.id() を使用する必要があります。

 

String

trustAllCertificates (共通)

エンドポイントをオーバーライドするときにすべての証明書を信頼する場合。

false

boolean

uriEndpointOverride (共通)

オーバーライドする URI エンドポイントを設定します。このオプションは overrideEndpoint オプションと組み合わせて使用する必要があります。

 

String

useDefaultCredentialsProvider (common)

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 (advanced)

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 を指定する必要があります。

7.5. バッチ consumer

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

これにより、たとえば、このバッチに存在するメッセージの数を知ることができ、たとえば、Aggregator にこの数のメッセージを集約させることができます。

7.6. 用途

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

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

ヘッダータイプ説明

CamelAwsSqsMD5OfBody

String

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

CamelAwsSqsMessageId

String

Amazon SQS メッセージ ID。

CamelAwsSqsDelaySeconds

Integer

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

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

ヘッダータイプ説明

CamelAwsSqsMD5OfBody

String

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

CamelAwsSqsMessageId

String

Amazon SQS メッセージ ID。

CamelAwsSqsReceiptHandle

String

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

CamelAwsSqsMessageAttributes

Map<String, String>

Amazon SQS メッセージ属性。

7.6.4. 高度な AmazonSQS 設定

Camel アプリケーションがファイアウォールの背後で実行されている場合、または SqsClient インスタンス設定をより詳細に制御する必要がある場合は、独自のインスタンスを作成できます。

from("aws2-sqs://MyQueue?amazonSQSClient=#client&delay=5000&maxMessagesPerPoll=5")
.to("mock:result");

7.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 設定をオーバーライドします。

7.6.6. 単一メッセージの DelayQueue VS 遅延

オプション delayQueue が true に設定されている場合、SQS キューは DelaySeconds オプションが遅延として指定された DelayQueue になります。DelayQueue の詳細については、AWS SQS のドキュメント を参照してください。考慮すべき重要な情報の 1 つは、次のとおりです。

  • 標準キューの場合、キューごとの遅延設定は遡及的ではありません。設定を変更しても、すでにキューにあるメッセージの遅延には影響しません。
  • FIFO キューの場合、キューごとの遅延設定は遡及的です。設定を変更すると、すでにキューにあるメッセージの遅延に影響します。

公式ドキュメントに記載されているとおりです。単一のメッセージに遅延を指定する場合は、delayQueue オプションを無視できますが、エンキューされたすべてのメッセージに固定遅延を追加する必要がある場合は、このオプションを true に設定できます。

7.6.7. サーバー側の暗号化

キューには一連のサーバー側暗号化属性があります。関連するオプションは、serverSideEncryptionEnabledkeyMasterKeyId、および kmsDataKeyReusePeriod です。SSE はデフォルトで無効になっています。オプションを明示的に true に設定し、関連するパラメーターをキュー属性として設定する必要があります。

7.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 を送信するように指示する必要があることに注意してください。

7.8. 利用可能な producer 操作

  • 単一メッセージ (デフォルト)
  • sendBatchMessage
  • deleteMessage
  • listQueues

7.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");

7.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 になります。

7.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 インスタンスを含む交換が得られます。

7.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 インスタンスを含む交換が得られます。

7.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 インスタンスを含む交換が得られます。

7.14. キューの自動作成

オプション autoCreateQueue を使用すると、SQS キューが存在しない場合に、ユーザーは SQS キューの自動作成を回避できます。このオプションのデフォルトは true です。false に設定すると、AWS に存在しないキューに対する操作は成功せず、エラーが返されます。

7.15. バッチメッセージの送信とメッセージの重複排除戦略

SendBatchMessage 操作を使用している場合は、次の 2 種類のメッセージ重複排除戦略を設定できます: - useExchangeId - useContentBasedDeduplication

最初のものは ExchangeIdMessageDeduplicationIdStrategy を使用し、Exchange ID をパラメーターとして使用します。もう 1 つは NullMessageDeduplicationIdStrategy を使用し、本文を重複排除要素として使用します。

バッチメッセージの送信操作の場合、useContentBasedDeduplication を使用する必要があり、ポイントしているキューで コンテンツベースの重複排除 オプションを有効にする必要があります。

7.16. Dependencies

Maven ユーザーは、以下の依存関係を pom.xml に追加する必要があります。

pom.xml

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-aws2-sqs</artifactId>
    <version>${camel-version}</version>
</dependency>

3.14.2 は Camel の実際のバージョンに置き換える必要があります。

7.17. Spring Boot Auto-Configuration

Spring Boot で aws2-ddb を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-aws2-sqs-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 44 のオプションをサポートします。

Name説明デフォルトタイプ

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

ブール値

camel.component.aws2-sqs.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

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

ブール値

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

ブール値

camel.component.aws2-sqs.delay-seconds

数秒間メッセージの送信を遅延します。

 

Integer

camel.component.aws2-sqs.delete-after-read

メッセージが読まれた後、SQS からメッセージを削除します。

true

ブール値

camel.component.aws2-sqs.delete-if-filtered

キー Sqs2Constants#SQS_DELETE_FILTERED (CamelAwsSqsDeleteFiltered) が true に設定されたプロパティーが交換にある場合に、DeleteMessage を SQS キューに送信するかどうか。

true

ブール値

camel.component.aws2-sqs.enabled

aws2-sqs コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.aws2-sqs.extend-message-visibility

有効にすると、スケジュールされたバックグラウンドタスクにより、SQS でのメッセージの可視性が拡張され続けます。これは、メッセージの処理に時間がかかる場合に必要です。true に設定した場合は、defaultVisibilityTimeout を設定する必要があります。詳細については、Amazon ドキュメントを参照してください。

false

ブール値

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

ブール値

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

ブール値

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

ブール値

camel.component.aws2-sqs.trust-all-certificates

エンドポイントをオーバーライドするときにすべての証明書を信頼する場合。

false

ブール値

camel.component.aws2-sqs.uri-endpoint-override

オーバーライドする URI エンドポイントを設定します。このオプションは overrideEndpoint オプションと組み合わせて使用する必要があります。

 

String

camel.component.aws2-sqs.use-default-credentials-provider

SQS クライアントが AWS infra インスタンスでクレデンシャルのロードすること、または静的クレデンシャルが渡されることを SNS クライアントが想定すべきかどうかを設定します。

false

ブール値

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

第8章 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>

8.1. URI 形式

azure-storage-blob://accountName[/containerName][?options]

consumer の場合、accountNamecontainerName が必要です。producer の場合、要求される操作によって異なります。たとえば、操作がコンテナーレベルである場合、たとえば createContainer の場合、accountNamecontainerName のみが必要ですが、BLOB レベルで操作が要求される場合、たとえば、getBlobaccountNamecontainerName、および blobName は必須です。

BLOB がまだ存在しない場合は作成されます。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. コンポーネントオプション

Azure Storage Blob Service コンポーネントは、以下に示す 31 のオプションをサポートしています。

Name説明デフォルトタイプ

blobName (共通)

コンテナーから特定の BLOB を使用するための BLOB 名。ただし、producer では、BLOB レベルでの操作にのみ必要です。

 

String

blobOffset (共通)

アップロードまたはダウンロード操作の BLOB オフセットを設定します。デフォルトは 0 です。

0

long

blobType (共通)

BLOB の種類ごとに適切な設定を開始するための BLOB の種類。

列挙値:

  • blockblob
  • appendblob
  • pageblob

blockblob

BlobType

closeStreamAfterRead (common)

読み取り後にストリームを閉じるか、開いたままにします。デフォルトは 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

8.4. エンドポイントオプション

Azure Storage Blob Service エンドポイントは、URI 構文を使用して設定されます。

azure-storage-blob:accountName/containerName

パスおよびクエリーパラメーターを使用します。

8.4.1. パスパラメーター (2 パラメーター)

Name説明デフォルトタイプ

accountName (common)

Azure BLOB サービスでの認証に使用される Azure アカウント名。

 

String

containerName (common)

BLOB コンテナー名。

 

String

8.4.2. クエリーパラメーター (48 パラメーター)

Name説明デフォルトタイプ

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 (common)

読み取り後にストリームを閉じるか、開いたままにします。デフォルトは 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 は、下位レベルのクライアントを取得するために使用できる上位レベルを表します。

8.5. 用途

たとえば、camelazure ストレージアカウントの container1 にあるブロック blob hello.txt から blob コンテンツをダウンロードするには、次のスニペットを使用します。

from("azure-storage-blob://camelazure/container1?blobName=hello.txt&accessKey=yourAccessKey").
to("file://blobdirectory");

8.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 コンテナー名

8.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 を返します。

8.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");

8.5.4. レジストリー内の BlobServiceClient クライアントの自動検出

このコンポーネントは、レジストリー内の BlobServiceClient bean の存在を検出できます。そのタイプの唯一のインスタンスである場合、それはクライアントとして使用され、上記の例のように uri パラメーターとして定義する必要はありません。これは、エンドポイントのよりスマートな設定に非常に役立つ場合があります。

8.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 アプリケーションで使用する方法については、このページの例のセクションを参照してください。

8.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");

8.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 にコピーされます。

8.5.8. 開発ノート (重要)

すべての統合テストは Testcontainers を使用し、デフォルトで実行されます。Azure サービスを使用してすべての統合テストを実行できるようにするには、Azure の accessKey と accountName を取得する必要があります。モック単体テストに加えて、マイナーバージョンのアップグレードでも Azure クライアントが問題を起こす可能性があるため、変更を加えたり、クライアントのアップグレードごとに統合テストを実行したりする必要があります。統合テストを実行するには、このコンポーネントディレクトリーで次の maven コマンドを実行します。

mvn verify -PfullTests -DaccountName=myacc -DaccessKey=mykey

ここで、accountName は Azure アカウント名で、accessKey は Azure portal から生成されるアクセスキーです。

8.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>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</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

ブール値

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

ブール値

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

ブール値

camel.component.azure-storage-blob.close-stream-after-write

書き込み後にストリームを閉じるか、開いたままにします。デフォルトは true です。

true

ブール値

camel.component.azure-storage-blob.commit-block-list-later

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

true

ブール値

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

ブール値

camel.component.azure-storage-blob.create-page-blob

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

true

ブール値

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 コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

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

ブール値

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 タイプです。

 

期間

第9章 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>

9.1. URI 形式

azure-storage-queue://accountName[/queueName][?options]

consumer の場合、accountName と queueName が必要です。producer の場合は、要求される操作によって異なります。たとえば、操作がサービスレベルである場合は eb: listQueues、accountName のみが必要ですが、キューレベルで操作が要求される場合は、createQueue などです。sendMessage.. など、accountName と queueName の両方が必要です。

キューがまだ存在しない場合は作成されます。URI には、次の形式でクエリーオプションを追加できます。

?options=value&option2=value&…

9.2. オプションの設定

Camel コンポーネントは、以下の 2 つのレベルで設定されます。

  • コンポーネントレベル
  • エンドポイントレベル

9.2.1. コンポーネントオプションの設定

コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。

コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。

コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。

9.2.2. エンドポイントオプションの設定

多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。

エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。

オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。

以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。

9.3. コンポーネントオプション

Azure Storage Queue Service コンポーネントは、以下に示す 15 のオプションをサポートしています。

Name説明デフォルトタイプ

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

9.4. エンドポイントオプション

Azure ストレージキューサービスエンドポイントは、URI 構文を使用して設定されます。

azure-storage-queue:accountName/queueName

パスおよびクエリーパラメーターを使用します。

9.4.1. パスパラメーター (2 パラメーター)

Name説明デフォルトタイプ

accountName (common)

Azure キューサービスでの認証に使用される Azure アカウント名。

 

String

queueName (共通)

キューリソース名。

 

String

9.4.2. クエリーパラメーター (31 パラメーター)

Name説明デフォルトタイプ

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 は、下位レベルのクライアントを取得するために使用できる上位レベルを表します。

9.5. 用途

たとえば、storageAccount ストレージアカウントのキュー messageQueue からメッセージコンテンツを取得するには、次のスニペットを使用します。

from("azure-storage-queue://storageAccount/messageQueue?accessKey=yourAccessKey").
to("file://queuedirectory");

9.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

すべて

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

9.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 を返します。

9.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");

9.5.4. レジストリー内の QueueServiceClient クライアントの自動検出

このコンポーネントは、レジストリー内の QueueServiceClient Bean の存在を検出できます。そのタイプの唯一のインスタンスである場合、それはクライアントとして使用され、上記の例のように uri パラメーターとして定義する必要はありません。これは、エンドポイントのよりスマートな設定に非常に役立つ場合があります。

9.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 アプリケーションで使用する方法については、このページの例のセクションを参照してください。

9.5.6. consumer の例

1 つのバッチで最大 5 つのメッセージを含むファイルコンポーネントにキューを消費するには、次のようにします。

from("azure-storage-queue://cameldev/queue1?serviceClient=#client&maxMessages=5")
.to("file://outputFolder?fileName=output.txt&fileExist=Append");

9.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");

9.5.8. 開発ノート (重要)

このコンポーネントで開発する場合、統合テストを実行するために Azure accessKey を取得する必要があります。モック単体テストに加えて、マイナーバージョンのアップグレードでも Azure クライアントが問題を起こす可能性があるため、変更を加えたり、クライアントのアップグレードごとに統合テストを実行したりする必要があります。統合テストを実行するには、このコンポーネントディレクトリーで次の maven コマンドを実行します。

mvn verify -PfullTests -DaccountName=myacc -DaccessKey=mykey

ここで、accountName は Azure アカウント名で、accessKey は Azure portal から生成されるアクセスキーです。

9.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>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 16 のオプションをサポートします。

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

camel.component.azure-storage-queue.access-key

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

 

String

camel.component.azure-storage-queue.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.azure-storage-queue.bridge-error-handler

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

false

ブール値

camel.component.azure-storage-queue.configuration

コンポーネントの設定。オプションは org.apache.camel.component.azure.storage.queue.QueueConfiguration タイプです。

 

QueueConfiguration

camel.component.azure-storage-queue.create-queue

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

false

ブール値

camel.component.azure-storage-queue.credentials

StorageSharedKeyCredential を挿入して Azure クライアントを作成できます。これには重要な認証情報が保持されます。オプションは com.azure.storage.common.StorageSharedKeyCredential 型です。

 

StorageSharedKeyCredential

camel.component.azure-storage-queue.enabled

azure-storage-queue コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.azure-storage-queue.lazy-start-producer

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

false

ブール値

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 タイプです。

 

期間

第10章 Bean

producer のみサポート対象

Bean コンポーネントは Bean を Camel メッセージエクスチェンジにバインドします。

10.1. URI 形式

bean:beanName[?options]

beanID には、レジストリーで Bean を検索するために使用される任意の文字列を指定できます。

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. コンポーネントオプション

Bean コンポーネントは、以下に示す 4 つのオプションをサポートします。

Name説明デフォルトタイプ

cache (producer)

非推奨 代わりにシングルトンオプションを使用してください。

true

ブール値

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

10.4. エンドポイントオプション

Bean エンドポイントは、URI 構文を使用して設定されます。

bean:beanName

パスおよびクエリーパラメーターを使用します。

10.4.1. パスパラメーター(1 パラメーター)

Name説明デフォルトタイプ

beanName (共通)

必須: 呼び出す Bean の名前を設定します。

 

String

10.4.2. クエリーパラメーター (5 パラメーター)

Name説明デフォルトタイプ

cache (共通)

非推奨 代わりにスコープオプションを使用してください。

 

ブール値

method (共通)

Bean で呼び出すメソッドの名前を設定します。

 

String

scope (common)

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 の追加プロパティーの設定に使用します。

 

マップ

10.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>

10.6. エンドポイントとしての Bean

Camel は、エンドポイントとしての Bean の呼び出しもサポートしています。エクスチェンジが myBean にルーティングされると、Camel は Bean バインディングを使用して Bean を呼び出します。Bean のソースは plain POJO です。

Camel は Bean バインディングを使用して sayHello メソッドを呼び出し、エクスチェンジの In ボディを String タイプに変換し、メソッドの出力をエクスチェンジの Out ボディに保存します。

10.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);

10.8. Bean バインディング

呼び出される Bean メソッドの選択方法 (method パラメーターで明示的に指定されていない場合) と、メッセージからパラメーター値が構築される方法は、Camel 内のさまざまな Bean 統合メカニズム全体で使用される Bean バインディングメカニズムによりすべて定義されます。

10.9. Spring Boot Auto-Configuration

Spring Boot で bean を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-bean-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- use the same version as your Camel core version -->
</dependency>

このコンポーネントは、以下に示す 13 のオプションをサポートします。

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

camel.component.bean.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.bean.enabled

Bean コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.bean.lazy-start-producer

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

false

ブール値

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

ブール値

camel.component.class.enabled

クラスコンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.class.lazy-start-producer

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

false

ブール値

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 言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

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

ブール値

camel.component.bean.cache

非推奨 代わりにシングルトンオプションを使用してください。

true

ブール値

camel.component.class.cache

非推奨 代わりにシングルトンオプションを使用してください。

true

ブール値

第11章 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>

11.1. URI 形式

bean-validator:label[?options]

label は、エンドポイントを記述する任意のテキスト値です。URI には、次の形式でクエリーオプションを追加できます。

?option=value&option=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. コンポーネントオプション

Bean バリデーターコンポーネントは、以下に示す 8 つのオプションをサポートします。

Name説明デフォルトタイプ

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 (advanced)

カスタムの ValidationProviderResolver を使用します。

 

ValidationProviderResolver

validatorFactory (advanced)

Autowired: カスタムの ValidatorFactory を使用します。

 

ValidatorFactory

11.4. エンドポイントオプション

Bean バリデーターエンドポイントは URI 構文を使用して設定されます。

bean-validator:label

パスおよびクエリーパラメーターを使用します。

11.4.1. パスパラメーター(1 パラメーター)

Name説明デフォルトタイプ

label (producer)

必須 ラベルは、エンドポイントを記述する任意のテキスト値です。

 

String

11.4.2. クエリーパラメーター (8 パラメーター)

Name説明デフォルトタイプ

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 (advanced)

カスタムの ValidationProviderResolver を使用します。

 

ValidationProviderResolver

validatorFactory (advanced)

カスタムの ValidatorFactory を使用します。

 

ValidatorFactory

11.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 は自動的に使用されます。

11.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>

11.7. Spring Boot Auto-Configuration

Spring Boot で bean-validator を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-bean-validator-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

このコンポーネントは、以下に示す 9 のオプションをサポートします。

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

camel.component.bean-validator.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.bean-validator.constraint-validator-factory

カスタムの ConstraintValidatorFactory を使用します。オプションは javax.validation.ConstraintValidatorFactory タイプです。

 

ConstraintValidatorFactory

camel.component.bean-validator.enabled

bean-validator コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.bean-validator.ignore-xml-configuration

META-INF/validation.xml ファイルからのデータを無視するかどうか。

false

ブール値

camel.component.bean-validator.lazy-start-producer

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

false

ブール値

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

第12章 参照

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

Browse コンポーネントは、テスト、視覚化ツール、またはデバッグに役立つシンプルな BrowsableEndpoint を提供します。エンドポイントに送信された交換はすべて閲覧可能です。

12.1. URI 形式

browse:someName[?options]

someName は、エンドポイントを一意に識別する任意の文字列にすることができます。

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. コンポーネントオプション

Browse コンポーネントは、以下に示す 3 つのオプションをサポートしています。

Name説明デフォルトタイプ

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

12.4. エンドポイントオプション

Browse エンドポイントは、URI 構文を使用して設定されます。

browse:name

パスおよびクエリーパラメーターを使用します。

12.4.1. パスパラメーター(1 パラメーター)

Name説明デフォルトタイプ

name (共通)

必須 エンドポイントを一意に識別する任意の文字列の名前。

 

String

12.4.2. クエリーパラメーター (4 パラメーター)

Name説明デフォルトタイプ

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

12.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
    }
}

12.6. Spring Boot Auto-Configuration

Spring Boot で bean を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-browse-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 4 のオプションをサポートします。

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

camel.component.browse.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.browse.bridge-error-handler

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

false

ブール値

camel.component.browse.enabled

参照コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.browse.lazy-start-producer

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

false

ブール値

第13章 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 をベースにしています。

13.1. オプションの設定

Camel コンポーネントは、以下の 2 つのレベルで設定されます。

  • コンポーネントレベル
  • エンドポイントレベル

13.1.1. コンポーネントオプションの設定

コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。

コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。

コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。

13.1.2. エンドポイントオプションの設定

多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。

エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。

オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。

以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。

13.2. コンポーネントオプション

Cassandra CQL コンポーネントは、以下に示す 3 つのオプションをサポートしています。

Name説明デフォルトタイプ

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

13.3. エンドポイントオプション

Cassandra CQL エンドポイントは、URI 構文を使用して設定されます。

cql:beanRef:hosts:port/keyspace

パスおよびクエリーパラメーターを使用します。

13.3.1. パスパラメーター (4 パラメーター)

Name説明デフォルトタイプ

beanRef (共通)

beanRef は bean:id を使用して定義されます。

 

String

hosts (共通)

ホスト名 Cassandra サーバー複数のホストはコンマで区切ることができます。

 

String

port (共通)

Cassandra サーバーのポート番号

 

Integer

keyspace (共通)

使用するキースペース

 

String

13.3.2. クエリーパラメーター (30 パラメーター)

Name説明デフォルトタイプ

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 (common)

特定の LoadBalancingPolicyClass を使用するには。

 

String

password (共通)

セッション認証のパスワード。

 

String

prepareStatements (共通)

PreparedStatements を使用するか、通常のステートメントを使用するか。

true

boolean

resultSetConversionStrategy (Common)

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

13.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 エンドポイントに渡します。

13.5. メッセージ

13.5.1. 着信メッセージ

Camel Cassandra エンドポイントは、クエリーパラメーターとして CQL ステートメントにバインドされる一連の単純なオブジェクト (Object または Object[] または Collection<Object>) を想定しています。メッセージ本文が null または空の場合、CQL クエリーはパラメーターをバインドせずに実行されます。

Headers

  • CamelCqlQuery (オプション、文字列 または RegularStatement)

    プレーン文字列として、または QueryBuilder を使用して構築された CQL クエリー。

13.5.2. 送信メッセージ

Camel Cassandra エンドポイントは、resultSetConversionStrategy に応じて、1 つまたは複数の Cassandra Row オブジェクトを生成します。

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

13.6. リポジトリー

Cassandra を使用して、べき等および集約 EIP のメッセージキーまたはメッセージを格納できます。

Cassandra は、まだユースケースをキューに入れるための最適なツールではない可能性があります。Cassandra anti-patterns queues and queue like datasets を参照してください。これらのテーブルに LeveledCompaction と小さな GC 猶予設定を使用して、廃棄された行をすばやく削除できるようにすることをお勧めします。

13.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

13.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

13.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")

テーブルの更新またはクエリーにも同じアプローチを使用できます。

13.10. Spring Boot Auto-Configuration

Spring Boot で cql を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-cassandraql-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 4 のオプションをサポートします。

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

camel.component.cql.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.cql.bridge-error-handler

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

false

ブール値

camel.component.cql.enabled

cql コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.cql.lazy-start-producer

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

false

ブール値

第14章 コントロールバス

producer のみサポート対象

EIP パターンからの 制御バス により、統合システムをフレームワーク内から監視および管理できます。

コントロールバスを使用して、エンタープライズ統合システムを管理します。コントロールバスは、アプリケーションデータで使用されるのと同じメッセージングメカニズムを使用しますが、メッセージフローに含まれるコンポーネントの管理に関連するデータを送信するために別のチャネルを使用します。

Camel では、JMX を使用して、または CamelContext から、または org.apache.camel.api.management パッケージから Java API を使用して、またはここに例があるイベント通知機能を使用して、管理および監視できます。

ControlBus コンポーネントは、Control Bus EIP パターンに基づいて Camel アプリケーションを簡単に管理できるようにします。たとえば、エンドポイントにメッセージを送信することで、ルートのライフサイクルを制御したり、パフォーマンス統計を収集したりできます。

controlbus:command[?options]

command には、使用するコマンドのタイプを識別するための任意の文字列を指定できます。

14.1. コマンド

コマンド説明

route

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

言語

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

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. コンポーネントオプション

コントロールバスコンポーネントは、以下に示す 2 つのオプションをサポートします。

Name説明デフォルトタイプ

lazyStartProducer (producer)

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

false

boolean

autowiredEnabled (上級)

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

boolean

14.4. エンドポイントオプション

Control Bus エンドポイントは、URI 構文を使用して設定されます。

controlbus:command:language

パスおよびクエリーパラメーターを使用します。

14.4.1. パスパラメーター (2 パラメーター)

Name説明デフォルトタイプ

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
 

言語

14.4.1.1. クエリーパラメーター (6 パラメーター)

Name説明デフォルトタイプ

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

14.5. ルートコマンドの使用

route コマンドを使用すると、特定のルートで一般的なタスクを非常に簡単に実行できます。たとえば、ルートを開始するには、このエンドポイントに空のメッセージを送信できます。

template.sendBody("controlbus:route?routeId=foo&action=start", null);

ルートのステータスを取得するには、次のようにします。

String status = template.requestBody("controlbus:route?routeId=foo&action=status", null, String.class);

14.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);

14.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 などの他の言語も使用できます。

14.8. Spring Boot Auto-Configuration

Spring Boot で controlbus を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-controlbus-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 3 つのオプションをサポートします。

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

camel.component.controlbus.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.controlbus.enabled

コントロールバスコンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.controlbus.lazy-start-producer

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

false

ブール値

第15章 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>

特定の実装をプラグインするには、追加のライブラリーが必要になる場合があります。

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. コンポーネントオプション

Cron コンポーネントは、以下に示す 3 つのオプションをサポートします。

Name説明デフォルトタイプ

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

15.3. エンドポイントオプション

Cron エンドポイントは、URI 構文を使用して設定されます。

cron:name

パスおよびクエリーパラメーターを使用します。

15.3.1. パスパラメーター(1 パラメーター)

Name説明デフォルトタイプ

name (consumer)

必須 cron トリガーの名前。

 

String

15.3.2. クエリーパラメーター (4 パラメーター)

Name説明デフォルトタイプ

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

15.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>

15.5. Spring Boot Auto-Configuration

Spring Boot で cron を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-cron-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 4 のオプションをサポートします。

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

camel.component.cron.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.cron.bridge-error-handler

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

false

ブール値

camel.component.cron.cron-service

複数の実装が提供されている場合に使用する CamelCronService の ID。

 

String

camel.component.cron.enabled

cron コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

第16章 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>

16.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

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. コンポーネントオプション

CXF コンポーネントは、以下に示す 6 つのオプションをサポートしています。

Name説明デフォルトタイプ

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 オブジェクトとしてペイロードを保持するかを制御します。

 

ブール値

autowiredEnabled (上級)

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

boolean

headerFilterStrategy (filter)

カスタムの org.apache.camel.spi.HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルターします。

 

HeaderFilterStrategy

useGlobalSslContextParameters (security)

グローバル SSL コンテキストパラメーターの使用を有効にします。

false

boolean

16.4. エンドポイントオプション

CXF エンドポイントは、URI 構文を使用して設定されます。

cxf:beanId:address

パスおよびクエリーパラメーターを使用します。

16.4.1. パスパラメーター (2 パラメーター)

Name説明デフォルトタイプ

beanId (共通)

既存の設定済み CxfEndpoint を検索するには。bean: を接頭辞として使用する必要があります。

 

String

住所 (サービス)

サービス公開アドレス。

 

String

16.4.2. クエリーパラメーター (35 パラメーター)

Name説明デフォルトタイプ

dataFormat (共通)

CXF エンドポイントでサポートされるデータタイプメッセージ。

列挙値:

  • PAYLOAD
  • RAW
  • MESSAGE
  • CXF_MESSAGE
  • POJO

POJO

DataFormat

ラップスタイル (共通)

パラメーターが SOAP 本文でどのように表現されるかを記述する WSDL スタイル。値が false の場合、CXF は document-literal のラップされていないスタイルを選択します。値が true の場合、CXF は document-literal のラップされたスタイルを選択します。

 

ブール値

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 オブジェクトとしてペイロードを保持するかを制御します。

 

ブール値

bus (上級)

カスタム設定の CXF バスを使用するには。

 

バス

continuationTimeout (advanced)

このオプションは、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 (advanced)

カスタムの 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} を前に付けてください。

16.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 で定義されています。

16.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;
}

16.4.5. RelayHeaders オプションの説明

JAXWS WSDL ファーストの開発者の観点から見ると、帯域内 ヘッダーと 帯域外 ヘッダーがあります。

インバンド ヘッダーは、SOAP ヘッダーなどのエンドポイントの WSDL バインディングコントラクトの一部として明示的に定義されるヘッダーです。

アウトオブバンド ヘッダーは、ネットワーク経由でシリアル化されるヘッダーですが、明示的に WSDL バインディングコントラクトの一部ではありません。

ヘッダーの中継/フィルタリングは双方向です。

ルートに CXF エンドポイントがあり、開発者が SOAP ヘッダーなどのオンザワイヤヘッダーをルートに沿ってリレーして、たとえば別の JAXWS エンドポイントで消費する必要がある場合、relayHeaderstrue に設定する必要があります。デフォルト値。

16.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 で設定できます。
Name必須説明

relayHeaders

いいえ

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

relayAllMessageHeaders

いいえ

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

allowFilterNamespaceClash

いいえ

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

16.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 を使用するのがベストプラクティスです。

16.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 行に含まれている必要があります。

16.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);

16.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()));

16.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 });
    }

}

16.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");

16.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);
                }
            });
        }
    };
}

16.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);

    }

}

16.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" でそれらを削除する必要があります。

16.14. SOAP ヘッダーは RAW モードでは使用できません

SOAP 処理がスキップされるため、SOAP ヘッダーは RAW モードでは使用できません。

16.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 を設定できます。

16.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());

16.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 が残りの作業を実行できます。

16.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 に追加してオフにすることができます。これによりグローバルなデフォルトが設定されますが、上記のエンドポイントプロパティーを設定すると、そのエンドポイントのこの値がオーバーライドされます。

16.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 ヘッダーで提供されます。

16.20. Spring Boot Auto-Configuration

Spring Boot で cxf を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-cxf-soap-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

このコンポーネントは、以下に示す 13 のオプションをサポートします。

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

camel.component.cxf.allow-streaming

このオプションは、CXF コンポーネントが PAYLOAD モードで実行されている場合に、着信メッセージを DOM 解析して DOM 要素にするか、場合によってはストリーミングを許可する javax.xml.transform.Source オブジェクトとしてペイロードを保持するかを制御します。

 

ブール値

camel.component.cxf.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.cxf.bridge-error-handler

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

false

ブール値

camel.component.cxf.enabled

cxf コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

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

ブール値

camel.component.cxf.use-global-ssl-context-parameters

グローバル SSL コンテキストパラメーターの使用を有効にします。

false

ブール値

camel.component.cxfrs.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.cxfrs.bridge-error-handler

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

false

ブール値

camel.component.cxfrs.enabled

cxfrs コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

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

ブール値

camel.component.cxfrs.use-global-ssl-context-parameters

グローバル SSL コンテキストパラメーターの使用を有効にします。

false

ブール値

第17章 データ形式

producer のみサポート対象

Dataformat コンポーネントを使用すると、Data Format を Camel コンポーネントとして使用できます。

17.1. URI 形式

dataformat:name:(marshal|unmarshal)[?options]

name はデータ形式の名前です。次に、marshal または unmarshal のいずれかでなければならない操作が続きます。オプションは、使用中の データ形式 を設定するために使用されます。どのオプションがサポートされているかについては、データ形式のドキュメントを参照してください。

17.2. データ形式オプション

17.2.1. オプションの設定

Camel コンポーネントは、以下の 2 つのレベルで設定されます。

  • コンポーネントレベル
  • エンドポイントレベル

17.2.1.1. コンポーネントオプションの設定

コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。

コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。

コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。

17.2.1.2. エンドポイントオプションの設定

多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。

エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。

オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。

以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。

17.3. コンポーネントオプション

データ形式コンポーネントは、以下に示す 2 つのオプションをサポートしています。

Name説明デフォルトタイプ

lazyStartProducer (producer)

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

false

boolean

autowiredEnabled (上級)

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

boolean

17.4. エンドポイントオプション

Data Format エンドポイントは、URI 構文を使用して設定されます。

dataformat:name:operation

パスおよびクエリーパラメーターを使用します。

17.4.1. パスパラメーター (2 パラメーター)

Name説明デフォルトタイプ

name (producer)

必須 データ形式の名前。

 

String

operation (producer)

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

列挙値:

  • marshal
  • unmarshal
 

String

17.4.2. クエリーパラメーター (1 パラメーター)

Name説明デフォルトタイプ

lazyStartProducer (producer)

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

false

boolean

17.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>

17.6. Spring Boot Auto-Configuration

Spring Boot で dataformat を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-dataformat-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 3 つのオプションをサポートします。

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

camel.component.dataformat.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.dataformat.enabled

dataformat コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.dataformat.lazy-start-producer

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

false

ブール値

第18章 Dataset

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

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

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

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

18.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 を拡張します。

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. コンポーネントオプション

Dataset コンポーネントは、以下に示す 5 つのオプションをサポートしています。

Name説明デフォルトタイプ

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

18.4. エンドポイントオプション

Dataset エンドポイントは、URI 構文を使用して設定されます。

dataset:name

パスおよびクエリーパラメーターを使用します。

18.4.1. パスパラメーター(1 パラメーター)

Name説明デフォルトタイプ

name (共通)

レジストリーで検索する DataSet の 必須 の名前。

 

DataSet

18.4.2. クエリーパラメーター (21 パラメーター)

Name説明デフォルトタイプ

dataSetIndex (Common)

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 (advanced))

このモックエンドポイントで受信したときに受信 Exchange のディープコピーを作成するかどうかを設定します。デフォルトでは true です。

true

boolean

18.5. DataSet の設定

Camel は、DataSet インターフェイスを実装する Bean をレジストリーで検索します。したがって、独自の DataSet を次のように登録できます。

<bean id="myDataSet" class="com.mycompany.MyDataSet">
  <property name="size" value="100"/>
</bean>

18.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 実装を作成し、データセットの大きさやメッセージの外観などを設定します。

18.7. DataSetSupport (抽象クラス)

DataSetSupport 抽象クラスは、新しい DataSet の出発点として最適であり、派生クラスにいくつかの便利な機能を提供します。

18.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 値に設定されます。

18.8. SimpleDataSet

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

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

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

defaultBody

Object

<hello>world!</hello>

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

18.9. ListDataSet

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

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

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

defaultBodies

List<Object>

empty LinkedList<Object>

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

size

long

defaultBodies リストのサイズ

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

18.10. FileDataSet

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

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

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

sourceFile

File

null

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

delimiter

String

\z

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

18.11. Spring Boot Auto-Configuration

Spring Boot で dataset を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-dataset-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 11 のオプションをサポートします。

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

camel.component.dataset-test.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.dataset-test.enabled

dataset-test コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

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

ブール値

camel.component.dataset-test.log

モックが着信メッセージを受信したときにロギングをオンにします。これは、着信メッセージの INFO レベルで 1 回だけログに記録されます。より詳細なログを取得するには、ロガーを org.apache.camel.component.mock.MockEndpoint クラスの DEBUG レベルに設定します。

false

ブール値

camel.component.dataset.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.dataset.bridge-error-handler

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

false

ブール値

camel.component.dataset.enabled

データセットコンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

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

ブール値

camel.component.dataset.log

モックが着信メッセージを受信したときにロギングをオンにします。これは、着信メッセージの INFO レベルで 1 回だけログに記録されます。より詳細なログを取得するには、ロガーを org.apache.camel.component.mock.MockEndpoint クラスの DEBUG レベルに設定します。

false

ブール値

第19章 Direct

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

Direct コンポーネント producer がメッセージエクスチェンジを送信する際に、コンポーネントは consumer を直接、同期呼び出しを提供します。
このエンドポイントは、同じ Camel コンテキストの既存ルートを接続するために使用できます。

注記

Asynchronous
プロデューサーがメッセージエクスチェンジを送信する際に、SEDA コンポーネントはコンシューマーを非同期呼び出しを提供します。

19.1. URI 形式

direct:someName[?options]

someName は、エンドポイントを一意に識別する任意の文字列にすることができます。

19.2. オプションの設定

Camel コンポーネントは、以下の 2 つのレベルで設定されます。

  • コンポーネントレベル
  • エンドポイントレベル

19.2.1. コンポーネントオプションの設定

コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。

コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。

コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。

19.2.2. エンドポイントオプションの設定

多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。

エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。

オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。

以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。

19.3. コンポーネントオプション

Direct コンポーネントは、以下に示す 5 つのオプションをサポートします。

Name説明デフォルトタイプ

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

19.4. エンドポイントオプション

Direct エンドポイントは、URI 構文を使用して設定されます。

direct:name

パスおよびクエリーパラメーターを使用します。

19.4.1. パスパラメーター(1 パラメーター)

Name説明デフォルトタイプ

name (共通)

必須 direct エンドポイントの名前

 

String

19.4.2. クエリーパラメーター (8 パラメーター)

Name説明デフォルトタイプ

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

19.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 コンポーネントの例、どのように併用できるか参照してください。

19.6. Spring Boot Auto-Configuration

Spring Boot で direct を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-direct-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

Bean コンポーネントは、以下に示す 6 つのオプションをサポートします。

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

camel.component.direct.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.direct.block

アクティブな consumer を持たない direct エンドポイントにメッセージを送信する場合、ブロックして consumer がアクティブになるのを待つよう producer に指示できます。

true

ブール値

camel.component.direct.bridge-error-handler

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

false

ブール値

camel.component.direct.enabled

direct コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.direct.lazy-start-producer

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

false

ブール値

camel.component.direct.timeout

ブロックが有効な場合に使用するタイムアウト値。

30000

ロング

第20章 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>

20.1. URI 形式

FHIR コンポーネントは、次の URI 形式を使用します。

fhir://endpoint-prefix/endpoint?[options]

エンドポイント 接頭辞は次のいずれかです。

  • capabilities
  • create
  • delete
  • history
  • load-page
  • meta
  • operation
  • patch
  • read
  • search
  • transaction
  • update
  • validate

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. コンポーネントオプション

コンポーネントは、以下に記載される 27 のオプションをサポートします。

Name説明デフォルトタイプ

encoding (共通)

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

列挙値:

  • JSON
  • XML
 

String

fhirVersion (共通)

使用する FHIR バージョン。

列挙値:

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

R4

String

log (共通)

リクエストとレスポンスをすべてログに記録します。

false

boolean

prettyPrint (共通)

すべてのリクエストをきれいに印刷します。

false

boolean

serverUrl (common)

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 (advanced)

このオプションが設定されている場合は、指定されたタイプの子リストが実際にアクセスされるまで、モデルクラスの子はスキャンされません。

false

boolean

fhirContext (advanced)

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

20.4. エンドポイントオプション

FHIR エンドポイントは、URI 構文を使用して設定されます。

fhir:apiName/methodName

パスおよびクエリーパラメーターを使用します。

20.4.1. パスパラメーター (2 パラメーター)

Name説明デフォルトタイプ

apiName (共通)

必須 実行する操作の種類

列挙値:

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

FhirApiName

methodName (共通)

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

 

String

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

Name説明デフォルトタイプ

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 (common)

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 (advanced)

このオプションが設定されている場合は、指定されたタイプの子リストが実際にアクセスされるまで、モデルクラスの子はスキャンされません。

false

boolean

fhirContext (advanced)

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

20.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 については、以降のセクションで説明します。

20.5.1. API: 機能

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

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

fhir:capabilities/methodName?[parameters]

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

メソッド説明

ofType

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

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

20.5.2. API: 作成

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

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

fhir:create/methodName?[parameters]

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

メソッド説明

resource

サーバー上に IBaseResource を作成します

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

20.5.3. API: 削除

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

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

fhir:delete/methodName?[parameters]

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

メソッド説明

resource

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

resourceById

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

resourceConditionalByUrl

特定の検索 URL に対する条件付き削除として削除を実行する必要があることを指定します。

20.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

20.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

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

20.5.4. API: 履歴

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

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

fhir:history/methodName?[parameters]

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

メソッド説明

onInstance

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

onServer

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

onType

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

20.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 サーバーにアクセスしている場合は、この方法を使用します。

クラス

20.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 サーバーにアクセスしている場合は、この方法を使用します。

クラス

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

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

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

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

fhir:load-page/methodName?[parameters]

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

メソッド説明

byUrl

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

next

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

previous

バンドル内のリレーション prev のリンクを使用して、結果の前のページをロードします

20.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

20.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 の場合があります。

マップ

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

20.5.6. API: メタ

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

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

fhir:meta/methodName?[parameters]

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

メソッド説明

add

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

delete

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

getFromResource

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

getFromServer

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

getFromType

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

20.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

20.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

20.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 クラス

クラス

20.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 である必要があります)

クラス

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

20.5.7. API: 操作

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

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

fhir:operation/methodName?[parameters]

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

メソッド説明

onInstance

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

onInstanceVersion

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

onServer

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

onType

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

processMessage

この操作は、FHIR 仕様で定義されているように $process-message と呼ばれます

20.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 動詞を使用する

ブール値

20.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 動詞を使用する

ブール値

20.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 動詞を使用する

ブール値

20.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 動詞を使用する

ブール値

20.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 メソッドには、次の表に示すパラメーターがあります。

パラメーター説明タイプ

非同期

メッセージを非同期または同期のどちらで処理するか。デフォルトは同期です。

ブール値

extraParameters

渡すことができるパラメーターの完全なリストについては、ExtraParameters を参照してください。NULL の場合があります。

マップ

msgBundle

メッセージバンドルをメッセージングサーバーへの POST に設定します。

IBaseBundle

respondToUri

受信サーバーからの応答をこの URI に送信する必要があることを示すオプションのクエリーパラメーター。NULL の場合があります。

String

responseClass

応答クラス

クラス

上記のパラメーターに加えて、fhir API は任意の クエリーパラメーター も使用できます。

いずれのパラメーターも、エンドポイント URI で指定するか、メッセージヘッダーで動的に指定できます。メッセージヘッダー名は CamelFhir.parameter の形式である必要があります。inBody パラメーターはメッセージヘッダーをオーバーライドします。つまり、エンドポイントパラメーター inBody=myParameterNameHereCamelFhir.myParameterNameHere ヘッダーをオーバーライドします。

20.5.8. API: パッチ

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

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

fhir:patch/methodName?[parameters]

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

メソッド説明

patchById

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

patchByUrl

特定の検索 URL に対して条件付きの作成として更新を実行する必要があることを指定します。

20.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

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

20.5.9. API: 読み取り

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

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

fhir:read/methodName?[parameters]

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

メソッド説明

resourceById

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

resourceByUrl

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

20.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 を返す

ブール値

returnResource

バージョンが一致する場合はリソースを返します

IBaseResource

stringId

リソース ID

String

throwError

バージョンが一致する場合はエラーを出力します

ブール値

version

リソースのバージョン

String

20.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 を返す

ブール値

returnResource

バージョンが一致する場合はリソースを返します

IBaseResource

throwError

バージョンが一致する場合はエラーを出力します

ブール値

url

絶対 URL によるリソースの参照

String

上記のパラメーターに加えて、fhir API は任意の クエリーパラメーター も使用できます。

いずれのパラメーターも、エンドポイント URI で指定するか、メッセージヘッダーで動的に指定できます。メッセージヘッダー名は CamelFhir.parameter の形式である必要があります。inBody パラメーターはメッセージヘッダーをオーバーライドします。つまり、エンドポイントパラメーター inBody=myParameterNameHereCamelFhir.myParameterNameHere ヘッダーをオーバーライドします。

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

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

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

fhir:transaction/methodName?[parameters]

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

メソッド説明

withBundle

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

withResources

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

20.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

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

20.5.12. API: 更新

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

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

fhir:update/methodName?[parameters]

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

メソッド説明

resource

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

resourceBySearchUrl

検索 URL によってサーバー上の IBaseResource を更新します

20.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

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

20.5.13. API: 検証

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

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

fhir:validate/methodName?[parameters]

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

メソッド説明

resource

リソースを検証します

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

20.6. Spring Boot Auto-Configuration

Spring Boot で fhir を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-fhir-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 56 オプションをサポートします。

Name説明デフォルトタイプ

camel.component.fhir.access-token

OAuth アクセストークン。

 

String

camel.component.fhir.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.fhir.bridge-error-handler

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

false

ブール値

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

ブール値

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

ブール値

camel.component.fhir.enabled

fhir コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

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

ブール値

camel.component.fhir.lazy-start-producer

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

false

ブール値

camel.component.fhir.log

リクエストとレスポンスをすべてログに記録します。

false

ブール値

camel.component.fhir.password

Basic 認証に使用するユーザー名。

 

String

camel.component.fhir.pretty-print

すべてのリクエストをきれいに印刷します。

false

ブール値

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

ブール値

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

ブール値

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

ブール値

camel.dataformat.fhirxml.content-type-header

データ形式が Content-Type ヘッダーにデータ形式のタイプを設定する必要があるかどうか。たとえば、XML にマーシャリングするデータ形式の場合は application/xml、JSON にマーシャリングするデータ形式の場合は application/json です。

true

ブール値

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

ブール値

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

ブール値

第21章 File

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

File コンポーネントはファイルシステムへのアクセスを提供します。これにより、ファイルを他の Camel コンポーネントで処理したり、他のコンポーネントからのメッセージをディスクに保存したりできます。

21.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 セクションも参照してください。

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. コンポーネントオプション

File コンポーネントは、以下に示す 3 つのオプションをサポートします。

Name説明デフォルトタイプ

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

21.4. エンドポイントオプション

File エンドポイントは、URI 構文を使用して設定されます。

file:directoryName

パスおよびクエリーパラメーターを使用します。

21.4.1. パスパラメーター(1 パラメーター)

Name説明デフォルトタイプ

directoryName (common)

必須: 開始ディレクトリー

 

File

21.4.2. クエリーパラメーター (94 パラメーター)

Name説明デフォルトタイプ

charset (Common)

このオプションは、ファイルのエンコーディングを指定するために使用されます。consumer でこれを使用して、ファイルのエンコーディングを指定できます。これにより、Camel は、ファイルコンテンツがアクセスされている場合にファイルコンテンツをロードする必要がある charset を知ることができます。ファイルを書き込む場合も同様に、このオプションを使用して、ファイルを書き込む charset を指定できます。ファイルを書き込むとき、Camel はメッセージの内容をメモリーに読み込んで、データを設定された charset に変換できるようにする必要があることに注意してください。つまり、メッセージが大きい場合は、これを使用しないでください。

 

String

doneFileName (Common)

Producer: 指定された場合、元のファイルが書き込まれると、Camel は 2 番目の完了ファイルを書き込みます。完了ファイルは空になります。このオプションは、使用するファイル名を設定します。固定の名前を指定できます。または、動的プレースホルダーを使用することもできます。完了ファイルは、常に元のファイルと同じフォルダーに書き込まれます。Consumer: 指定すると、Camel は完了ファイルが存在する場合にのみファイルを消費します。このオプションは、使用するファイル名を設定します。固定の名前を指定できます。または、動的なプレースホルダーを使用できます。完了ファイルは、常に元のファイルと同じフォルダーにあると想定されます。$\\{file.name} と $\\{file.name.next} のみが動的プレースホルダーとしてサポートされています。

 

String

fileName (Common)

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 (advanced))

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 (advanced))

カスタム 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 (advanced))

開始ディレクトリーの存在が必要かどうか。autoCreate オプションがデフォルトで有効になっていることに注意してください。これは、開始ディレクトリーが存在しない場合、通常は自動作成されることを意味します。autoCreate を無効にして有効にすると、開始ディレクトリーの存在が必要なことを確認できます。ディレクトリーが存在しない場合は例外が発生します。

false

boolean

startingDirectoryMustHaveAccess (consumer (advanced))

開始ディレクトリーにアクセス権があるかどうか。ディレクトリーが存在することを確認するには、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 (advanced))

既存のターゲットファイルを積極的に削除するかどうか。このオプションは、fileExists=Override および tempFileName オプションを使用している場合にのみ適用されます。これを使用して、一時ファイルが書き込まれる前にターゲットファイルを削除することを無効化 (false に設定) できます。たとえば、大きなファイルを書き込んで、一時ファイルの書き込み中にターゲットファイルを存在させたい場合があります。これにより、一時ファイルの名前がターゲットファイル名に変更される直前まで、ターゲットファイルは削除されません。このオプションは、fileExist=Move が有効で、既存のファイルが存在する場合に、既存のファイルを削除するかどうかを制御するためにも使用されます。このオプション copyAndDeleteOnRenameFails が false の場合、既存のファイルが存在する場合は例外が出力されます。true の場合、移動操作の前に既存のファイルが削除されます。

true

boolean

forceWrites (producer (上級))

ファイルシステムへの書き込みを強制的に同期するかどうか。たとえばログや監査ログへの書き込みなど、このレベルの保証が必要ない場合はオフにすることでパフォーマンスが向上します。

true

boolean

keepLastModified (producer (advanced))

ソースファイル (存在する場合) からの最終変更のタイムスタンプを保持します。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 (advanced)

ファイルの名前を直接変更できなかった場合に、フォールバックしてファイルのコピーと削除を行うかどうか。このオプションは FTP コンポーネントでは使用できません。

true

boolean

renameUsingCopy (advanced)

コピーおよび削除ストラテジーを使用して名前変更操作を実行します。これは主に、通常の名前変更操作が信頼できない環境で使用されます (たとえば、異なるファイルシステムまたはネットワーク間)。このオプションは、遅延が追加された後に限り、コピーおよび削除ストラテジーに自動的にフォールバックする 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 のデフォルト動作
デフォルトでは、同じ名前の既存ファイルが存在する場合は、既存ファイルをオーバーライドします。

21.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 フォルダーに移動されます。

21.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}

21.7. moveFailed について

moveFailed オプションを使用すると、正常に処理 できなかった ファイルを別の場所 (選択したエラーフォルダーなど) に移動できます。たとえば、エラーフォルダー内のファイルをタイムスタンプ付きで移動するには、moveFailed=/error/${file:name.noext}-${date:now:yyyyMMddHHmmssSSS}.${\'\'file:ext} を使用できます。

で他の例を参照してください

21.8. メッセージヘッダー

このコンポーネントでは、次のヘッダーがサポートされています。

21.8.1. ファイル producer のみ

ヘッダー説明

CamelFileName

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

CamelFileNameProduced

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

CamelOverruleFileName

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

21.8.2. file consumer のみ

ヘッダー説明

CamelFileName

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

CamelFileNameOnly

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

CamelFileAbsolute

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

CamelFileAbsolutePath

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

CamelFilePath

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

CamelFileRelativePath

相対パス。

CamelFileParent

親パス。

CamelFileLength

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

CamelFileLastModified

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

21.9. バッチ consumer

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

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

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

プロパティー説明

CamelBatchSize

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

CamelBatchIndex

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

CamelBatchComplete

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

これにより、たとえば、このバッチに存在するファイルの数を知ることができ、たとえば、Aggregator2 にこの数のファイルを集約させることができます。

21.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

21.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");

21.13. ファイル名式

ファイル名は、expression オプションを使用するか、CamelFileName ヘッダーの文字列ベースの File 言語式として設定できます。構文とサンプルについては、File 言語を参照してください。

21.14. 他のユーザーがファイルを直接ドロップしたフォルダーからファイルを消費する

他のアプリケーションがファイルを直接書き込むフォルダーからファイルを使用する場合は注意してください。さまざまな readLock オプションを見て、ユースケースに適したオプションを確認してください。ただし、最善の方法は、別のフォルダーに書き込み、書き込み後にファイルをドロップフォルダーに移動することです。ただし、ファイルをドロップフォルダーに直接書き込む場合、変更されたオプションは、ファイルサイズ/変更が一定期間にわたって変更されたかどうかを確認するためにファイル変更アルゴリズムを使用するため、ファイルが現在書き込み/コピーされているかどうかをより適切に検出できます。他の readLock オプションは Java File API に依存していますが、残念ながら、これは必ずしもこれを検出するのに適しているとは限りません。また、doneFileName オプションを確認することもできます。これは、マーカーファイル (完了ファイル) を使用して、ファイルが完了し、使用する準備が整ったときに通知します。

21.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 - 関連する完了ファイルです

21.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 という名前のファイルが作成されます。

21.17. サンプル

21.17.1. ディレクトリーから読み取り、別のディレクトリーに書き込む

from("file://inputdir/?delete=true").to("file://outputdir")

21.17.2. オーバーライド動的名を使用して、ディレクトリーから読み取り、別のディレクトリーに書き込みます

from("file://inputdir/?delete=true").to("file://outputdir?overruleFile=copy-of-${file:name}")

ディレクトリーをリッスンし、そこにドロップされた各ファイルのメッセージを作成します。内容を outputdir にコピーし、inputdir 内のファイルを削除します。

21.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

21.18. フラット化の使用

ファイルを同じディレクトリーの outputdir ディレクトリーに保存する場合に、ソースディレクトリーのレイアウトを無視して (パスをフラット化するなど)、ファイル producer 側で flatten=true オプションを追加するだけです。

from("file://inputdir/?recursive=true&delete=true").to("file://outputdir?flatten=true")

次の出力レイアウトになります。

outputdir/foo.txt
outputdir/bar.txt

21.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

21.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 オブジェクトになります。

21.21. ファイルへの書き込み

もちろん、Camel はファイルを書き込むこともできます。つまり、ファイルを生成します。以下のサンプルでは、ディレクトリーに書き込まれる前に処理する SEDA キューに関するいくつかのレポートを受け取ります。

21.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

これにより、単一のルートでファイルを複数の宛先に書き込むことができます。

21.21.2. 最終宛先に相対的な一時ディレクトリーを介してファイルを書き込む

宛先ディレクトリーからの相対ディレクトリーにファイルを一時的に書き込む必要がある場合があります。このような状況は通常、フィルタリング機能が制限された外部プロセスが、書き込み先のディレクトリーから読み取っているときに発生します。以下の例では、ファイルは /var/myapp/filesInProgress ディレクトリーに書き込まれ、データ転送が完了すると、原子的に/var/myapp/finalDirectory ディレクトリーに移動されます。

from("direct:start").
  to("file:///var/myapp/finalDirectory?tempPrefix=/../filesInProgress/");

21.22. ファイル名に式を使用する

このサンプルでは、今日の日付をサブフォルダー名として使用して、消費されたファイルをバックアップフォルダーに移動します。

from("file://inbox?move=backup/${date:now:yyyyMMdd}/${file:name}").to("...");

その他のサンプルについては、File 言語 を参照してください。

21.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

21.24. ファイルベースの冪等リポジトリーの使用

このセクションでは、デフォルトとして使用されるメモリー内ベースの代わりに、ファイルベースのべき等リポジトリー org.apache.camel.processor.idempotent.FileIdempotentRepository を使用します。
このリポジトリーは、ファイルリポジトリーの読み取りを回避するために、第 1 レベルのキャッシュを使用します。ファイルリポジトリーのみを使用して、第 1 レベルのキャッシュのコンテンツを格納します。これにより、リポジトリーはサーバーの再起動後も存続できます。起動時にファイルのコンテンツを第 1 レベルのキャッシュにロードします。ファイル内の別々の行にキーを格納するため、ファイル構造は非常に単純です。デフォルトでは、ファイルストアのサイズ制限は 1MB です。ファイルが大きくなると、Camel はファイルストアを切り詰め、第 1 レベルのキャッシュを新しい空のファイルにフラッシュしてコンテンツを再構築します。

ファイルべき等リポジトリーを作成する Spring XML を使用してリポジトリーを設定し、# 記号を使用して idempotentRepository でリポジトリーを使用するように file consumerを定義して、レジストリールックアップを示します。

21.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>

21.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>

21.27. ANT パスマッチャーを使用したフィルタリング

ANT パスマッチャーは AntPathMatcher に基づいています。

ファイルパスは、次のルールに一致します。

  • ? 1 文字に一致
  • * 0 個以上の文字に一致
  • ** パス内の 0 個以上のディレクトリーに一致

antInclude および antExclude オプションを使用すると、フィルターを定義することなく、ANT スタイルの包含/除外を簡単に指定できます。詳細については、上記の URI オプションを参照してください。

以下のサンプルは、その使用方法を示しています。

21.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 を探すように指示されます。

21.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 言語の真の力があるので、パターンをサポートする日付コマンドを使用できます。したがって、これは次のように解決できます。

sortBy=date:file:yyyyMMdd;file:name

ええ、それは非常に強力です。ちなみに、グループごとにリバースを使用することもできるので、ファイル名を逆にすることができます。

sortBy=date:file:yyyyMMdd;reverse:file:name

21.28. GenericFileProcessStrategy の使用

オプション processStrategy を使用して、独自の begincommit、および rollback ロジックを実装できるカスタム GenericFileProcessStrategy を使用できます。
たとえば、システムが、使用する必要があるフォルダーにファイルを書き込むと仮定します。ただし、別の 準備完了 ファイルが同様に書き込まれる前に、ファイルの使用を開始しないでください。

したがって、独自の GenericFileProcessStrategy を実装することで、これを次のように実装できます。

  • begin () メソッドでは、特別な 準備完了 ファイルが存在するかどうかをテストできます。begin メソッドは ブール値 を返し、ファイルを使用できるかどうかを示します。
  • abort () メソッドでは、begin オペレーションが false を返した場合に、リソースのクリーンアップなどの特別なロジックを実行できます。
  • commit () メソッドでは、実際のファイルを移動し、準備完了 ファイルを削除することもできます。

21.29. フィルターの使用

filter オプションを使用すると、org.apache.camel.component.file.GenericFileFilter インターフェイスを実装することにより、Java コードでカスタムフィルターを実装できます。このインターフェイスには、ブール値を返す accept メソッドがあります。ファイルを含めるには true を返し、ファイルをスキップするには false を返します。ファイルがディレクトリーであるかどうかにかかわらず、GenericFile には isDirectory メソッドがあります。これにより、不要なディレクトリーをフィルタリングして、不要なディレクトリーをたどることを回避できます。

たとえば、名前が "skip" で始まるディレクトリーをスキップするには、次のように実装できます。

21.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 などの前のアクションがアクションを実行することを許可しません。

21.31. デバッグロギング

このコンポーネントには、問題が発生した場合に役立つログレベル TRACE があります。

21.32. Spring Boot Auto-Configuration

Spring Boot でファイルを使用する場合は、自動設定をサポートするために次の Maven 依存関係を使用してください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-file-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</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

ブール値

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

ブール値

camel.component.file.bridge-error-handler

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

false

ブール値

camel.component.file.enabled

ファイルコンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.file.lazy-start-producer

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

false

ブール値

第22章 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>

22.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 の拡張機能です。

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. コンポーネントオプション

FTP コンポーネントは、以下に示す 3 つのオプションをサポートしています。

Name説明デフォルトタイプ

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

22.4. エンドポイントオプション

MLLP エンドポイントは、URI 構文を使用して設定されます。

ftp:host:port/directoryName

パスおよびクエリーパラメーターを使用します。

22.4.1. パスパラメーター (3 パラメーター)

Name説明デフォルトタイプ

host (共通)

必須 FTP サーバーのホスト名。

 

String

port (共通)

FTP サーバーのポート

 

int

directoryName (common)

開始ディレクトリー

 

String

22.4.2. クエリーパラメーター (111 パラメーター)

Name説明デフォルトタイプ

binary (Common)

ファイル転送モードを BINARY または ASCII で指定します。デフォルトは ASCII (false) です。

false

boolean

charset (Common)

このオプションは、ファイルのエンコーディングを指定するために使用されます。consumer でこれを使用して、ファイルのエンコーディングを指定できます。これにより、Camel は、ファイルコンテンツがアクセスされている場合にファイルコンテンツをロードする必要がある charset を知ることができます。ファイルを書き込む場合も同様に、このオプションを使用して、ファイルを書き込む charset を指定できます。ファイルを書き込むとき、Camel はメッセージの内容をメモリーに読み込んで、データを設定された charset に変換できるようにする必要があることに注意してください。つまり、メッセージが大きい場合は、これを使用しないでください。

 

String

disconnect (Common)

使用直後にリモート FTP サーバーから切断するかどうか。切断は、FTP サーバーへの現在の接続のみを切断します。停止したい consumer がある場合は、代わりに consumer/ルートを停止する必要があります。

false

boolean

doneFileName (Common)

Producer: 指定された場合、元のファイルが書き込まれると、Camel は 2 番目の完了ファイルを書き込みます。完了ファイルは空になります。このオプションは、使用するファイル名を設定します。固定の名前を指定できます。または、動的プレースホルダーを使用することもできます。完了ファイルは、常に元のファイルと同じフォルダーに書き込まれます。Consumer: 指定すると、Camel は完了ファイルが存在する場合にのみファイルを消費します。このオプションは、使用するファイル名を設定します。固定の名前を指定できます。または、動的なプレースホルダーを使用できます。完了ファイルは、常に元のファイルと同じフォルダーにあると想定されます。$\\{file.name} と $\\{file.name.next} のみが動的プレースホルダーとしてサポートされています。

 

String

fileName (Common)

File Language などの式を使用して、ファイル名を動的に設定します。consumer の場合は、ファイル名フィルターとして使用されます。producer の場合、書き込むファイル名を評価するために使用されます。式が設定されている場合は、CamelFileName ヘッダーよりも優先されます。(注: ヘッダー自体を式にすることもできます)。式オプションは String タイプと Expression タイプの両方をサポートします。式が String タイプである場合、これは常にファイル言語を使用して評価されます。式が Expression タイプである場合、指定された Expression タイプが使用されます。これにより、たとえば OGNL 式を使用できます。consumer の場合、これを使用してファイル名をフィルターリングできるため、たとえば、ファイル言語構文 mydata-$\\{date:now:yyyyMMdd}.txt を使用して今日のファイルを消費できます。producer は、既存の CamelFileName ヘッダーよりも優先される CamelOverruleFileName ヘッダーをサポートします。CamelOverruleFileName は一度だけ使用されるヘッダーであり、CamelFileName を一時的に保存して後で復元する必要がなくなるため、簡単になります。

 

String

passiveMode (Common)

パッシブモード接続の設定デフォルトはアクティブモード接続です。

false

boolean

separator (common)

使用するパス区切りを設定します。UNIX = UNIX スタイルのパス区切りを使用 Windows = Windows スタイルのパス区切りを使用 Auto = (デフォルト) ファイル名に既存のパス区切りを使用します。

列挙値:

  • UNIX
  • Windows
  • Auto

UNIX

PathSeparator

transferLoggingIntervalSeconds (common)

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

5

int

transferLoggingLevel (Common)

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

列挙値:

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

DEBUG

LoggingLevel

transferLoggingVerbose (Common)

がアップロードおよびダウンロード操作の進行状況の詳細な (詳細な) ログを実行するかどうかを設定します。

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 (advanced))

ディレクトリーパーサーの結果が絶対パスである場合に、consumer がパス内のサブフォルダーとファイルを処理する方法を設定できます。この理由は、一部の FTP サーバーが絶対パスでファイル名を返す場合があるためです。その場合、FTP コンポーネントは返されたパスを相対パスに変換することでこれを処理します。

false

boolean

ignoreFileNotFoundOrPermissionError (consumer (advanced))

(ディレクトリー内のファイルを一覧表示しようとするとき、またはファイルをダウンロードするとき)、存在しない場合、またはアクセス許可エラーが原因である場合に無視するかどうか。デフォルトでは、ディレクトリーまたはファイルが存在しないか、権限が不十分な場合、例外が出力されます。このオプションを true に設定すると、代わりにそれを無視できます。

false

boolean

inProgressRepository (consumer (上級))

プラグ可能な in-progress リポジトリー org.apache.camel.spi.IdempotentRepository。in-progress リポジトリーは、現在進行中のファイルが消費されていることを示すために使用されます。デフォルトでは、メモリーベースのリポジトリーが使用されます。

 

IdempotentRepository

localWorkDirectory (consumer (上級))

使用する場合、ローカルの作業ディレクトリーを使用して、リモートファイルのコンテンツをローカルファイルに直接保存し、コンテンツがメモリーに読み込まれないようにできます。これは、非常に大きなリモートファイルを使用している場合に、メモリーを節約するために役立ちます。

 

String

onCompletionExceptionHandler (consumer (advanced))

カスタム 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 (advanced))

既存のターゲットファイルを積極的に削除するかどうか。このオプションは、fileExists=Override および tempFileName オプションを使用している場合にのみ適用されます。これを使用して、一時ファイルが書き込まれる前にターゲットファイルを削除することを無効化 (false に設定) できます。たとえば、大きなファイルを書き込んで、一時ファイルの書き込み中にターゲットファイルを存在させたい場合があります。これにより、一時ファイルの名前がターゲットファイル名に変更される直前まで、ターゲットファイルは削除されません。このオプションは、fileExist=Move が有効で、既存のファイルが存在する場合に、既存のファイルを削除するかどうかを制御するためにも使用されます。このオプション copyAndDeleteOnRenameFails が false の場合、既存のファイルが存在する場合は例外が出力されます。true の場合、移動操作の前に既存のファイルが削除されます。

true

boolean

keepLastModified (producer (advanced))

ソースファイル (存在する場合) からの最終変更のタイムスタンプを保持します。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 (advanced)

アクティブモードでクライアント側のポート範囲を設定します。構文は minPort-maxPort です。両方のポート番号が含まれます。たとえば、すべての 1xxxx ポートを含めるには 10000-19999 です。

 

String

autoCreate (advanced)

ファイルのパス名に不足しているディレクトリーを自動的に作成します。ファイル consumer の場合は、開始ディレクトリーを作成することを意味します。ファイル producer の場合、ファイルが書き込まれるディレクトリーを意味します。

true

boolean

bufferSize (上級)

ファイルの書き込みに使用されるバッファーサイズ (バイト単位) (または、ファイルのダウンロードとアップロードに使用される FTP の場合)。

131072

int

connectTimeout (上級)

接続が確立されるのを待つための接続タイムアウトを設定します。FTPClient と JSCH の両方で使用されます。

10000

int

ftpClient (上級)

FTPClient のカスタムインスタンスを使用します。

 

FTPClient

ftpClientConfig (advanced)

FTPClientConfig のカスタムインスタンスを使用して、エンドポイントが使用する FTP クライアントを設定するには。

 

FTPClientConfig

ftpClientConfigParameters (advanced)

FtpClientConfig. に追加パラメーターを提供するために FtpComponent によって使用されます。

 

マップ

ftpClientParameters (上級)

FTPClient に追加のパラメーターを提供するために FtpComponent によって使用されます。

 

マップ

maximumReconnectAttempts (advanced)

Camel がリモート FTP サーバーへの接続を試行するときに実行する再接続の最大試行回数を指定します。この動作を無効にするには、0 を使用します。

 

int

reconnectDelay (advanced)

ミリ秒単位の遅延 Camel は、再接続試行を実行する前に待機します。

1000

long

siteCommand (advanced)

ログインの成功後に実行されるオプションのサイトコマンドを設定します。複数のサイトコマンドは、改行文字を使用して区切ることができます。

 

String

soTimeout (上級)

SO タイムアウトを設定します FTP および FTPS ミリ秒単位の SocketOptions.SO_TIMEOUT 値です。接続がハングしないように、これを 300000 に設定することをお勧めします。SFTP では、このオプションは JSCH セッションインスタンスのタイムアウトとして設定されます。

300000

int

stepwise (advanced)

ファイルをダウンロードするとき、またはファイルをディレクトリーにアップロードするときに、ファイル構造をトラバースしながらディレクトリーを段階的に変更するかどうかを設定します。たとえば、セキュリティー上の理由で 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

22.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");

22.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

22.7. 並行処理性

FTP consumer は同時実行をサポートしていません

FTP consumer (同じエンドポイントを持つ) は同時実行をサポートしません (バッキング FTP クライアントはスレッドセーフではありません)。
複数の FTP consumerを使用して、異なるエンドポイントからポーリングできます。concurrent consumer をサポートしないのは、単一のエンドポイントのみです。

FTP producer にはこの問題は なく、並行性がサポートされています。

22.8. 補足情報

このコンポーネントは、File コンポーネントの拡張です。そのため、ファイルコンポーネントページには、より多くのサンプルと詳細があります。

22.9. ファイルを使用するときのデフォルト

FTP consumer は、デフォルトで、消費されたファイルをリモート FTP サーバーにそのまま残します。ファイルを削除したり、別のロケーションに移動したりする場合は、明示的に設定する必要があります。たとえば、delete=true を使用してファイルを削除したり、move=.done を使用してファイルを非表示の done サブディレクトリーに移動したりできます。

デフォルトでファイルを .camel サブディレクトリーに移動するため、通常の File consumer は異なります。Camel が FTP consumer に対してデフォルトでこれを行わ ない 理由は、ファイルを移動または削除できる権限がデフォルトで不足している可能性があるためです。

22.9.1. limitations

オプション readLock を使用して、Camel が現在書き込み中のファイルを消費し ない ようにすることができます。ただし、このオプションは、ユーザーが書き込みアクセス権を持っている必要があるため、デフォルトではオフになっています。読み取りロックの詳細については、File2 のオプションテーブルを参照してください。
現在 FTP 経由で書き込まれているファイルを消費しないようにするための解決策は他にもあります。たとえば、一時的な宛先に書き込み、書き込み後にファイルを移動できます。

move または preMove オプションを使用してファイルを移動する場合、ファイルは FTP_ROOT フォルダーに制限されます。これにより、FTP 領域外にファイルを移動できなくなります。ファイルを別の領域に移動する場合は、ソフトリンクを使用してファイルをソフトリンクフォルダーに移動できます。

22.10. メッセージヘッダー

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

ヘッダー説明

CamelFileName

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

CamelFileNameProduced

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

CamelFileNameConsumed

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

CamelFileHost

リモートホスト名。

CamelFileLocalWorkPath

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

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

ヘッダー説明

CamelFtpReplyCode

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

CamelFtpReplyString

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

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

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

ヘッダー説明

CamelBatchIndex

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

CamelBatchSize

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

CamelBatchComplete

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

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

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

22.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 はそれがローカルの作業ファイルであることを認識しているため、作業ファイルはとにかく削除することを意図しているため、最適化してファイルのコピーの代わりに名前の変更を使用できます。

22.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) フォルダーのそれぞれにファイルがあることを確認します。

22.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 を使用してディレクトリー構造をトラバースします。

22.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 操作はまったく呼び出されません。

22.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>

22.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");

22.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");

22.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>

22.18. ANT パスマッチャーを使用したフィルタリング

ANT パスマッチャーは、camel-spring jar ですぐに使用できるフィルターです。したがって、Maven を使用している場合は camel-spring に依存する必要があります。
その理由は、Spring の AntPathMatcher を利用して実際のマッチングを行うためです。

ファイルパスは、次のルールに一致します。

  • ? 1 文字に一致
  • * 0 個以上の文字に一致
  • ** パス内の 0 個以上のディレクトリーに一致

以下のサンプルは、その使用方法を示しています。

22.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 のドキュメントを参照してください。

22.20. 優先 SFTP 認証方式の設定

sftp コンポーネントで使用する認証方法のリストを明示的に指定する場合は、preferredAuthentications オプションを使用します。たとえば、Camel にプライベート/パブリック SSH キーで認証を試みさせ、公開キーが利用できない場合にユーザー/パスワード認証にフォールバックさせたい場合は、次のルート設定を使用します。

from("sftp://localhost:9999/root?username=admin&password=admin&preferredAuthentications=publickey,password").
  to("bean:processFile");

22.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);

22.22. デバッグロギング

このコンポーネントには、問題が発生した場合に役立つログレベル TRACE があります。

22.23. Spring Boot Auto-Configuration

Spring Boot で ftp を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-ftp-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

このコンポーネントは、以下に示す 13 のオプションをサポートします。

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

camel.component.ftp.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.ftp.bridge-error-handler

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

false

ブール値

camel.component.ftp.enabled

ftp コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.ftp.lazy-start-producer

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

false

ブール値

camel.component.ftps.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.ftps.bridge-error-handler

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

false

ブール値

camel.component.ftps.enabled

ftps コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.ftps.lazy-start-producer

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

false

ブール値

camel.component.ftps.use-global-ssl-context-parameters

グローバル SSL コンテキストパラメーターの使用を有効にします。

false

ブール値

camel.component.sftp.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.sftp.bridge-error-handler

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

false

ブール値

camel.component.sftp.enabled

sftp コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.sftp.lazy-start-producer

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

false

ブール値

第23章 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>

23.1. URI 形式

http:hostname[:port][/resourceUri][?options]

デフォルトでは、HTTP にはポート 80、HTTPS には 443 を使用します。

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. コンポーネントオプション

HTTP コンポーネントは、以下に示す 37 のオプションをサポートしています。

Name説明デフォルトタイプ

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 (advanced))

すべての 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 (advanced)

接続状態の追跡を無効にします。

false

boolean

connectionTimeToLive (上級)

接続が有効になるまでの時間。単位はミリ秒で、デフォルト値は常にキープアライブです。

 

long

contentCompressionDisabled (advanced)

コンテンツの自動解凍を無効にします。

false

boolean

cookieManagementDisabled (advanced)

状態 (Cookie) の管理を無効にします。

false

boolean

defaultUserAgentDisabled (advanced)

ユーザーによって何も提供されていない場合、このビルダーによって設定されたデフォルトのユーザーエージェントを無効にします。

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 (advanced)

自動リダイレクト処理を無効にします。

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

23.4. エンドポイントオプション

HTTP エンドポイントは、URI 構文を使用して設定されます。

http://httpUri

パスおよびクエリーパラメーターを使用します。

23.4.1. パスパラメーター(1 パラメーター)

Name説明デフォルトタイプ

httpUri (common)

必須 呼び出す HTTP エンドポイントの URL。

 

URI

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

Name説明デフォルトタイプ

chunked (producer)

このオプションが false の場合、サーブレットは HTTP ストリーミングを無効にし、応答に content-length ヘッダーを設定します。

true

boolean

disableStreamCache (common)

サーブレットからの生の入力ストリームがキャッシュされるかどうかを決定します (Camel はストリームをメモリー内/ファイルへのオーバーフロー、ストリームキャッシュに読み込みます)。デフォルトでは、Camel はサーブレット入力ストリームをキャッシュして複数回の読み取りをサポートし、Camel がストリームからすべてのデータを取得できるようにします。ただし、ファイルやその他の永続ストアに直接ストリーミングするなど、生のストリームにアクセスする必要がある場合は、このオプションを true に設定できます。ストリームの複数回の読み取りをサポートするためにこのオプションが false の場合、DefaultHttpBinding は要求入力ストリームをストリームキャッシュにコピーし、それをメッセージ本文に入れます。サーブレットを使用してエンドポイントをブリッジ/プロキシーする場合、メッセージペイロードを複数回読み取る必要がない場合は、このオプションを有効にしてパフォーマンスを向上させることを検討してください。http producer は、デフォルトで応答本文ストリームをキャッシュします。このオプションを true に設定すると、プロデューサは応答本文ストリームをキャッシュせず、応答ストリームをそのままメッセージ本文として使用します。

false

boolean

headerFilterStrategy (common)

カスタムの 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 (advanced))

HTTP GET にメッセージ本文を含めるかどうか。デフォルトでは、HTTP GET には HTTP 本文は含まれません。ただし、ごくまれに、ユーザーがメッセージ本文を含める必要がある場合があります。

false

boolean

okStatusCodeRange (producer (上級))

正常な応答と見なされるステータスコード。値は含まれます。複数の範囲をコンマで区切って定義できます (例: 200-204,209,301-304)。各範囲は、ダッシュを含む 1 つの数字または from-to である必要があります。

200-299

String

skipRequestHeaders (producer (advanced))

すべての 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 (advanced)

マップのキー/値を使用して 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

23.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 メッセージの両方に設定されます。

23.6. メッセージボディー

Camel は、外部サーバーからの HTTP レスポンスを OUT ボディに保存します。IN メッセージのすべてのヘッダーが OUT メッセージにコピーされるため、ヘッダーはルーティング中に保持されます。さらに、Camel は HTTP 応答ヘッダーも OUT メッセージヘッダーに追加します。

23.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

23.8. レスポンスコード

Camel は HTTP 応答コードに従って処理します。

  • 応答コードは 100..299 の範囲で、Camel はそれを成功応答と見なします。
  • 応答コードは 300..399 の範囲にあり、Camel はこれをリダイレクト応答と見なし、情報とともに HttpOperationFailedException を出力します。
  • 応答コードが 400+ の場合、Camel はこれを外部サーバーの障害と見なし、その情報とともに HttpOperationFailedException を出力します。

throwExceptionOnFailure オプション throwExceptionOnFailurefalse に設定して、失敗した応答コードに対して HttpOperationFailedException が出力されないようにすることができます。これにより、リモートサーバーからの応答を取得できます。
これを示すサンプルを以下に示します。

23.9. 例外

HttpOperationFailedException 例外には、次の情報が含まれています。

  • HTTP ステータスコード
  • HTTP ステータス行 (ステータスコードのテキスト)
  • サーバーがリダイレクトを返した場合は、ロケーションをリダイレクトします
  • サーバーがレスポンスとして本文を提供した場合、java.lang.String としてのレスポンス本文

23.10. どの HTTP メソッドを使用するか

次のアルゴリズムを使用して、使用する HTTP メソッドを決定します。
1.エンドポイント設定 (httpMethod) として提供されるメソッドを使用します。
2.ヘッダーで提供されるメソッドを使用します (Exchange.HTTP_METHOD)。
3.ヘッダーにクエリー文字列が指定されている場合は GET
4.エンドポイントがクエリー文字列で設定されている場合は GET
5.送信するデータがある場合は POST (本文が null ではない)。
6.それ以外の場合は GET

23.11. HttpServletRequest と HttpServletResponse にアクセスする方法

を使用して Camel 型コンバーターシステムを使用して、これら 2 つにアクセスできます。

HttpServletRequest request = exchange.getIn().getBody(HttpServletRequest.class);
HttpServletResponse response = exchange.getIn().getBody(HttpServletResponse.class);
注記

camel-jetty または camel-cxf エンドポイントの後のプロセッサーからだけでなく、リクエストとレスポンスを取得できます。

23.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 のメッセージヘッダーは無視されます。

23.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");

23.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>

23.15. クライアントタイムアウトの使用 - SO_TIMEOUT

HttpSOTimeoutTest 単体テストを参照してください。

23.16. プロキシーの設定

HTTP コンポーネントは、プロキシーを設定する方法を提供します。

from("direct:start")
  .to("http://oldhost?proxyAuthHost=www.myproxy.com&proxyAuthPort=80");

また、proxyAuthUsername および proxyAuthPassword オプションによるプロキシー認証もサポートされています。

23.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 プロパティーもあります。

23.17. 文字セットの設定

POST を使用してデータを送信している場合は、Exchange プロパティーを使用して charset を設定できます。

exchange.setProperty(Exchange.CHARSET_NAME, "ISO-8859-1");

23.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");

23.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);

23.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);

上記のヘッダー値では、? を接頭辞として付けるべきでは ない ことに注意してください。& 文字を使用して、通常どおりパラメーターを区切ることができます。

23.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);

23.18. クッキーの無効化

Cookie を無効にするには、次の URI オプションを追加して、HTTP クライアントが Cookie を無視するように設定します。
httpClient.cookieSpec=ignoreCookies

23.19. ストリーミングメッセージ本文による基本認証

NonRepeatableRequestException を回避するには、次のオプションを追加してプリエンプティブ基本認証を行う必要があります。
authenticationPreemptive=true

23.20. 高度な使用方法

HTTP producer をさらに制御する必要がある場合は、さまざまなクラスを設定してカスタム動作を提供できる HttpComponent を使用する必要があります。

23.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>

23.21. Spring Boot Auto-Configuration

Spring Boot で http を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-http-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 38 オプションをサポートします。

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

camel.component.http.allow-java-serialized-object

リクエストが context-type=application/x-java-serialized-object を使用する場合に Java シリアル化を許可するかどうか。これは、デフォルトでオフになっています。これを有効にすると、Java が受信データをリクエストから Java にデシリアライズし、セキュリティー上のリスクが生じる可能性があることに注意してください。

false

ブール値

camel.component.http.auth-caching-disabled

認証スキームのキャッシュを無効にします。

false

ブール値

camel.component.http.automatic-retries-disabled

リクエストの自動回復と再実行を無効にします。

false

ブール値

camel.component.http.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

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

ブール値

camel.component.http.connection-time-to-live

接続が有効になるまでの時間。単位はミリ秒で、デフォルト値は常にキープアライブです。

 

Long

camel.component.http.connections-per-route

ルートごとの接続の最大数。

20

Integer

camel.component.http.content-compression-disabled

コンテンツの自動解凍を無効にします。

false

ブール値

camel.component.http.cookie-management-disabled

状態 (Cookie) の管理を無効にします。

false

ブール値

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

ブール値

camel.component.http.default-user-agent-disabled

ユーザーによって何も提供されていない場合、このビルダーによって設定されたデフォルトのユーザーエージェントを無効にします。

false

Boolean

camel.component.http.enabled

http コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

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

ブール値

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

ブール値

camel.component.http.response-payload-streaming-threshold

このバイト単位のしきい値は、応答ペイロードをメモリーにバイト配列として格納するか、ストリーミングベースにするかを制御します。常にストリーミングモードを使用するには、これを -1 に設定します。

8192

Integer

camel.component.http.skip-request-headers

すべての Camel ヘッダーを HTTP リクエストヘッダーとしてマッピングすることをスキップするかどうか。HTTP 要求に含める必要がある Camel ヘッダーからのデータがない場合は、これにより、JVM ガベージコレクターの多くのオブジェクト割り当てによるオーバーヘッドの解析を回避できます。

false

ブール値

camel.component.http.skip-response-headers

すべての HTTP 応答ヘッダーの Camel ヘッダーへのマッピングをスキップするかどうか。HTTP ヘッダーから必要なデータがない場合は、これにより、JVM ガベージコレクターの多くのオブジェクト割り当てによる解析のオーバーヘッドを回避できます。

false

ブール値

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

ブール値

camel.component.http.x509-hostname-verifier

DefaultHostnameVerifier や NoopHostnameVerifier などのカスタム X509HostnameVerifier を使用します。オプションは javax.net.ssl.HostnameVerifier タイプです。

 

HostnameVerifier

第24章 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>

24.1. URI 形式

infinispan://cacheName?[options]

プロデューサは、HotRod プロトコルを使用してメッセージをリモートキャッシュに送信できます。consumer は、HotRod プロトコルを使用してリモートキャッシュからのイベントをリッスンできます。

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. コンポーネントオプション

Infinispan コンポーネントは、以下に示す 26 のオプションをサポートしています。

Name説明デフォルトタイプ

configuration (共通)

コンポーネントの設定。

 

InfinispanRemoteConfiguration

hosts (共通)

Infinispan インスタンスのキャッシュのホストを指定します。

 

String

queryBuilder (Common)

クエリービルダーを指定します。

 

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 (advanced)

CacheManager の実装固有の URI。

 

String

flags (上級)

各キャッシュ呼び出しでデフォルトで適用される org.infinispan.client.hotrod.Flag のコンマ区切りリスト。

 

String

remappingFunction (上級)

計算操作で使用する特定の remappingFunction を設定します。

 

BiFunction

resultHeader (上級)

メッセージ本文ではなく、ヘッダーに操作結果を格納します。デフォルトでは、resultHeader == null で、クエリー結果はメッセージ本文に格納され、メッセージ本文の既存のコンテンツは破棄されます。resultHeader が設定されている場合、値はクエリー結果を格納するヘッダーの名前として使用され、元のメッセージ本文は保持されます。この値は、CamelInfinispanOperationResultHeader という名前のメッセージヘッダーでオーバーライドできます。

 

String

24.4. エンドポイントオプション

Infinispan エンドポイントは、URI 構文を使用して設定されます。

infinispan:cacheName

パスおよびクエリーパラメーターを使用します。

24.4.1. パスパラメーター(1 パラメーター)

Name説明デフォルトタイプ

cacheName (common)

必須 使用するキャッシュの名前。current を使用して、現在設定されているキャッシュされたマネージャーの既存のキャッシュ名を使用します。または、デフォルトのキャッシュマネージャー名に default を使用します。

 

String

24.4.2. クエリーパラメーター (26 パラメーター)

Name説明デフォルトタイプ

hosts (共通)

Infinispan インスタンスのキャッシュのホストを指定します。

 

String

queryBuilder (Common)

クエリービルダーを指定します。

 

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 (advanced)

CacheManager の実装固有の URI。

 

String

flags (上級)

各キャッシュ呼び出しでデフォルトで適用される org.infinispan.client.hotrod.Flag のコンマ区切りリスト。

 

String

remappingFunction (上級)

計算操作で使用する特定の remappingFunction を設定します。

 

BiFunction

resultHeader (上級)

メッセージ本文ではなく、ヘッダーに操作結果を格納します。デフォルトでは、resultHeader == null で、クエリー結果はメッセージ本文に格納され、メッセージ本文の既存のコンテンツは破棄されます。resultHeader が設定されている場合、値はクエリー結果を格納するヘッダーの名前として使用され、元のメッセージ本文は保持されます。この値は、CamelInfinispanOperationResultHeader という名前のメッセージヘッダーでオーバーライドできます。

 

String

24.5. キャメルオペレーション

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

表24.1 表 1.プット操作

操作名説明

InfinispanOperation.PUT

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

InfinispanOperation.PUTASYNC

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

InfinispanOperation.PUTIFABSENT

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

InfinispanOperation.PUTIFABSENTASYNC

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

  • 必要なヘッダー:

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

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

    • CamelInfinispanOperationResult

表24.2 表 2.すべての操作を入れる

操作名説明

InfinispanOperation.PUTALL

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

CamelInfinispanOperation.PUTALLASYNC

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

  • 必要なヘッダー:

    • CamelInfinispanMap
  • 任意のヘッダー:

    • CamelInfinispanLifespanTime
    • CamelInfinispanLifespanTimeUnit
    • CamelInfinispanMaxIdleTime
    • CamelInfinispanMaxIdleTimeUnit

表24.3 表 3.取得操作

操作名説明

InfinispanOperation.GET

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

InfinispanOperation.GETORDEFAULT

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

  • 必要なヘッダー:

    • CamelInfinispanKey

表24.4 表 4.キー操作が含まれています

操作名説明

InfinispanOperation.CONTAINSKEY

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

  • 結果ヘッダー

    • CamelInfinispanKey
  • 結果ヘッダー

    • CamelInfinispanOperationResult

表24.5 表 5.値操作を含む

操作名説明

InfinispanOperation.CONTAINSVALUE

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

  • 必要なヘッダー:

    • CamelInfinispanKey

表24.6 表 6.操作を削除

操作名説明

InfinispanOperation.REMOVE

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

InfinispanOperation.REMOVEASYNC

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

  • 必要なヘッダー:

    • CamelInfinispanKey
  • 任意のヘッダー:

    • CamelInfinispanValue
  • 結果ヘッダー:

    • CamelInfinispanOperationResult

表24.7 表 7.置換操作

操作名説明

InfinispanOperation.REPLACE

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

InfinispanOperation.REPLACEASYNC

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

  • 必要なヘッダー:

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

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

    • CamelInfinispanOperationResult

表24.8 表 8.クリア操作

操作名説明

InfinispanOperation.CLEAR

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

InfinispanOperation.CLEARASYNC

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

表24.9 表 9.サイズ操作

操作名説明

InfinispanOperation.SIZE

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

  • 結果ヘッダー

    • CamelInfinispanOperationResult

表24.10 表 10.統計操作

操作名説明

InfinispanOperation.STATS

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

  • 結果ヘッダー:

    • CamelInfinispanOperationResult

表24.11 表 11.クエリー操作

操作名説明

InfinispanOperation.QUERY

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

  • 必要なヘッダー:

    • CamelInfinispanQueryBuilder
  • 結果ヘッダー:

    • CamelInfinispanOperationResult
注記

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

24.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

操作結果をメッセージ本文ではなくヘッダーに格納する

24.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 にあります。

24.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 - リポジトリーをルートに設定する

24.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 を参照してください。

24.10. Spring Boot Auto-Configuration

Spring Boot で infinispan を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-infinispan-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 23 のオプションをサポートします。

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

camel.component.infinispan.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.infinispan.bridge-error-handler

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

false

ブール値

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 コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

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

ブール値

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

ブール値

camel.component.infinispan.security-realm

infinispan インスタンスにアクセスするためのセキュリティーレルムを定義します。

 

String

camel.component.infinispan.security-server-name

infinispan インスタンスにアクセスするためのセキュリティーサーバー名を定義します。

 

String

camel.component.infinispan.username

infinispan インスタンスにアクセスするためのユーザー名を定義します。

 

String

第25章 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>

25.1. URI 形式

jira://type[?options]

Jira タイプは次の操作を受け入れます。

consumer 向け:

  • newIssues: ルートの開始後に新しい課題のみを取得します
  • newComments: ルートの開始後に新しいコメントのみを取得します
  • watchUpdates: 提供された jql に基づいて、更新されたフィールド/課題のみを取得します

生産者向け:

  • addIssue: 問題を追加します
  • addComment: 特定の問題にコメントを追加します
  • attach: 特定の問題に添付ファイルを追加します
  • deleteIssue: 特定の問題を削除します
  • updateIssue: 特定の問題の更新フィールド
  • transitionIssue: 特定の問題のステータスを移行します
  • ウォッチャー: 特定の問題のウォッチャーを追加/削除します

Jira は完全にカスタマイズ可能であるため、異なる Jira サーバー間で変更される可能性があるため、プロジェクトとワークフローのフィールド ID が存在することを確認する必要があります。

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. コンポーネントオプション

Jira コンポーネントは、以下に示す 12 のオプションをサポートしています。

Name説明デフォルトタイプ

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

25.4. エンドポイントオプション

Jira エンドポイントは、URI 構文を使用して設定されます。

jira:type

パスおよびクエリーパラメーターを使用します。

25.4.1. パスパラメーター(1 パラメーター)

Name説明デフォルトタイプ

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

25.4.2. クエリーパラメーター(16 パラメーター)

Name説明デフォルトタイプ

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

25.5. クライアントファクトリー

レジストリーで JiraRestClientFactoryJiraRestClientFactory という名前でバインドして、Jira エンドポイントで自動的に設定することができます。

25.6. 認証

Camel-jira は Basic 認証OAuth 3 legged authentication をサポートしています。

ユーザーとシステムに最高のセキュリティーを提供するため、可能な限り OAuth を使用することをお勧めします。

25.6.1. 基本認証要件:

  • ユーザー名とパスワード

25.6.2. OAuth 認証の要件:

Jira OAuth ドキュメント のチュートリアルに従って、クライアントプライベートキー、consumer キー、検証コード、およびアクセストークンを生成します。

  • システム上でローカルに生成された秘密鍵。
  • Jira サーバーによって生成された確認コード。
  • Jira サーバー設定で設定された consumer キー。
  • Jira サーバーによって生成されたアクセストークン。

25.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)"

25.8. 操作

Jira 操作を使用するときに設定する必要があるヘッダーのリストを参照してください。producer の作成者フィールドは、Jira 側で認証済みユーザーに自動的に設定されます。

必須フィールドが設定されていない場合は、IllegalArgumentException が出力されます。

課題タイプ、優先度、トランジションなどのフィールドに id を必要とする操作があります。Jira のインストールとプロジェクトのワークフローによって異なる可能性があるため、Jira プロジェクトで有効な id を確認してください。

25.9. AddIssue

必須:

オプション:

  • IssueAssignee : 担当者ユーザー
  • IssuePriorityId または IssuePriorityName : 課題の優先度。有効なリストは http://jira_server/rest/api/2/priority で確認できます。
  • IssueComponents : 有効なコンポーネント名を含む文字列のリスト。
  • IssueWatchersAdd : ウォッチャーリストに追加するユーザー名を含む文字列のリスト。
  • IssueDescription: 問題の説明。

25.10. AddComment

必須:

  • IssueKey : 発行キー識別子。
  • 交換の本体は説明です。

25.11. アタッチ

呼び出しごとに 1 つのファイルのみを添付する必要があります。

必須:

  • IssueKey : 発行キー識別子。
  • 交換の本体は File タイプである必要があります

25.12. DeleteIssue

必須:

  • IssueKey : 発行キー識別子。

25.13. 移行の問題

必須:

  • IssueKey : 発行キー識別子。
  • IssueTransitionId : 課題トランジション id
  • 交換の本体は説明です。

25.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: 問題の説明。

25.15. ウォッチャー

  • IssueKey : 発行キー識別子。
  • IssueWatchersAdd : ウォッチャーリストに追加するユーザー名を含む文字列のリスト。
  • IssueWatchersRemove : ウォッチャーリストから削除するユーザー名を含む文字列のリスト。

25.16. WatchUpdates (consumer)

  • watchedFields ステータス、優先度、担当者、コンポーネント などの変更を監視するフィールドのコンマ区切りリスト。
  • sendOnlyUpdatedField デフォルトでは、変更されたフィールドのみが本文として送信されます。

すべてのメッセージには、変更に関する追加情報を追加する次のヘッダーも含まれています。

  • issueKey : 更新された課題のキー
  • changed: 更新されたフィールドの名前 (つまり、ステータス)
  • watchedIssues : 更新時に監視されているすべての課題キーのリスト

25.17. Spring Boot Auto-Configuration

Spring Boot で jira を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-jira-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

このコンポーネントは、以下に示す 13 のオプションをサポートします。

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

camel.component.jira.access-token

(OAuth のみ) Jira サーバーによって生成されたアクセストークン。

 

String

camel.component.jira.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.jira.bridge-error-handler

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

false

ブール値

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 コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

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

ブール値

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

第26章 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 を介したリクエスト - リプライ を必ずお読みください。

26.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&…​

26.1.1. ActiveMQ の使用

JMS コンポーネントは、Spring 2 の JmsTemplate を再利用してメッセージを送信します。これは非 J2EE コンテナーでの使用には理想的ではなく、通常、パフォーマンスの低下 を避けるために JMS プロバイダーでのキャッシュが必要になります。

Apache ActiveMQ をメッセージブローカーとして使用する場合は、次のいずれかを実行することをお勧めします。

  • ActiveMQ を効率的に使用するためにすでに最適化されている ActiveMQ コンポーネントを使用する
  • ActiveMQ で PoolingConnectionFactory を使用します。

26.1.2. トランザクションとキャッシュレベル

メッセージを消費してトランザクションを使用している場合 (transacted=true)、キャッシュレベルのデフォルト設定がパフォーマンスに影響を与える可能性があります。

XA トランザクションを使用している場合は、XA トランザクションが正しく機能しなくなる可能性があるため、キャッシュできません。

XA を使用して いない 場合は、cacheLevelName=CACHE_CONSUMER を設定するなど、キャッシュを使用してパフォーマンスを高速化することを検討する必要があります。

cacheLevelName のデフォルト設定は CACHE_AUTO です。このデフォルトの自動モードはモードを検出し、それに応じてキャッシュレベルを設定します。

  • transacted=false の場合は CACHE_CONSUMER
  • transacted=true の場合は CACHE_NONE

したがって、デフォルト設定は保守的であると言えます。非 XA トランザクションを使用している場合は、cacheLevelName=CACHE_CONSUMER の使用を検討してください。

26.1.3. 永続サブスクリプション

永続的なトピックサブスクリプションを使用する場合は、clientIddurableSubscriptionName の両方を指定する必要があります。clientId の値は一意である必要があり、ネットワーク全体で単一の JMS 接続インスタンスによってのみ使用できます。この制限を回避するために、代わりに 仮想トピック を使用することをお勧めします。耐久性のあるメッセージングの詳細については、こちら をご覧ください。

26.1.4. メッセージヘッダーのマッピング

JMS 仕様では、メッセージヘッダーを使用する場合、ヘッダー名は有効な Java 識別子である必要があると規定されています。そのため、有効な Java 識別子になるようにヘッダーに名前を付けるようにしてください。これを行う利点の 1 つは、JMS セレクター内でヘッダーを使用できることです (その SQL92 構文では、ヘッダーの Java 識別子構文が義務付けられています)。

デフォルトでは、ヘッダー名をマッピングする単純な方法が使用されます。以下に示すように、ヘッダー名のドットとハイフンをすべて置き換え、ネットワーク経由で送信された JMS メッセージからヘッダー名が復元されたときに置き換えを元に戻す方法です。意味を確認するBean コンポーネントで呼び出すメソッド名が失われたり、ファイルコンポーネントのファイル名ヘッダーが失われたりすることはもうありません。

Camel でヘッダー名を受け入れるための現在のヘッダー名戦略は次のとおりです。

  • ドットは `DOT` に置き換えられ、Camel がメッセージを消費すると置換が逆になります
  • ハイフンは `HYPHEN` に置き換えられ、Camel がメッセージを消費すると置換が逆になります

JMS エンドポイントでさまざまなプロパティーを設定できます。これらのプロパティーは、JMSConfiguration オブジェクトのプロパティーにマップされます。

注記

Spring JMS へのマッピング
これらのプロパティーの多くは、Camel がメッセージの送受信に使用する Spring JMS のプロパティーにマップされます。したがって、関連する Spring ドキュメントを参照することで、これらのプロパティーに関する詳細情報を取得できます。

26.2. オプションの設定

Camel コンポーネントは、以下の 2 つのレベルで設定されます。

  • コンポーネントレベル
  • エンドポイントレベル

26.2.1. コンポーネントオプションの設定

コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。

コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。

コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。

26.2.2. エンドポイントオプションの設定

多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。

エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。

オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。

以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。

26.3. コンポーネントオプション

JMS コンポーネントは、以下に示す 98 個のオプションをサポートしています。

Name説明デフォルトタイプ

clientId (common)

使用する JMS クライアント ID を設定します。この値を指定する場合は、一意である必要があり、単一の JMS 接続インスタンスでのみ使用できることに注意してください。通常、永続的なトピックサブスクリプションの場合にのみ必要です。Apache ActiveMQ を使用している場合は、代わりに仮想トピックを使用することをお勧めします。

 

String

connectionFactory (common)

使用する接続ファクトリー。コンポーネントまたはエンドポイントで接続ファクトリーを設定する必要があります。

 

ConnectionFactory

disableReplyTo (common)

Camel がメッセージの JMSReplyTo ヘッダーを無視するかどうかを指定します。true の場合、Camel は JMSReplyTo ヘッダーで指定された宛先に返信を送り返しません。Camel にルートから消費させたいが、コード内の別のコンポーネントが応答メッセージを処理するため、Camel に自動的に応答メッセージを送り返したくない場合は、このオプションを使用できます。Camel を異なるメッセージブローカー間のプロキシーとして使用し、あるシステムから別のシステムにメッセージをルーティングする場合にも、このオプションを使用できます。

false

boolean

durableSubscriptionName (common)

永続トピックサブスクリプションを指定するための永続サブスクライバー名。clientId オプションも設定する必要があります。

 

String

jmsMessageType (common)

JMS メッセージの送信に特定の javax.jms.Message 実装を強制的に使用できるようにします。可能な値は、Bytes、Map、Object、Stream、Text です。デフォルトでは、Camel は In body タイプから使用する JMS メッセージタイプを決定します。このオプションで指定できます。

列挙値:

  • バイト
  • マップ
  • オブジェクト
  • ストリーム
  • テキスト
 

JmsMessageType

replyTo (共通)

明示的な ReplyTo 宛先を提供します (consumer の Message.getJMSReplyTo() の着信値をオーバーライドします)。

 

String

testConnectionOnStartup (common)

起動時に接続をテストするかどうかを指定します。これにより、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 (advanced))

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 (advanced))

メッセージが読み込まれるとすぐに 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 (advanced))

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 (advanced))

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 (advanced))

InOnly を使用して JMS 宛先に送信する場合にのみ適用されます (例: ファイアアンドフォーゲット)。このオプションを有効にすると、メッセージが JMS 宛先に送信されたときに JMS クライアントによって使用された実際の JMSMessageID で Camel Exchange が強化されます。

false

boolean

replyToCacheLevelName (producer (advanced))

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 (advanced))

使用する固定名を使用して JMS セレクターを設定し、共有キューを使用している場合 (つまり、一時的な応答キューを使用していない場合) に、他の応答から自分の応答を除外できるようにします。

 

String

streamMessageTypeEnabled (producer (advanced))

StreamMessage タイプを有効にするかどうかを設定します。ファイル、InputStream などのストリーミングの種類のメッセージペイロードは、BytesMessage または StreamMessage として送信されます。このオプションは、どの種類が使用されるかを制御します。デフォルトでは、BytesMessage が使用され、メッセージペイロード全体がメモリーに読み込まれます。このオプションを有効にすると、メッセージペイロードがチャンク単位でメモリーに読み込まれ、データがなくなるまで各チャンクが StreamMessage に書き込まれます。

false

boolean

allowAutoWiredConnectionFactory (上級)

接続ファクトリーが設定されていない場合に、レジストリーから ConnectionFactory を自動検出するかどうか。ConnectionFactory のインスタンスが 1 つだけ見つかった場合は、それが使用されます。これはデフォルトで有効になっています。

true

boolean

allowAutoWiredDestinationResolver (advanced)

宛先リゾルバーが設定されていない場合に、レジストリーから DestinationResolver を自動検出するかどうか。DestinationResolver のインスタンスが 1 つだけ見つかった場合は、それが使用されます。これはデフォルトで有効になっています。

true

boolean

allowSerializedHeaders (advanced)

シリアル化されたヘッダーを含めるかどうかを制御します。transferExchange が true の場合にのみ適用されます。これには、オブジェクトがシリアライズ可能である必要があります。Camel はシリアル化できないオブジェクトを除外し、WARN レベルでログに記録します。

false

boolean

artemisStreamingEnabled (上級)

Apache Artemis ストリーミングモード用に最適化するかどうか。これにより、JMS StreamMessage タイプで Artemis を使用する場合のメモリーオーバーヘッドを削減できます。このオプションは、Apache Artemis が使用されている場合にのみ有効にする必要があります。

false

boolean

asyncStartListener (advanced)

ルートの開始時に JmsConsumer メッセージリスナーを非同期で開始するかどうか。たとえば、JmsConsumer がリモート JMS ブローカーへの接続を取得できない場合は、再試行中やフェイルオーバー中にブロックされる可能性があります。これにより、ルートの開始時に Camel がブロックされます。このオプションを true に設定すると、ルートの起動を許可します。一方、JmsConsumer は非同期モードで専用のスレッドを使用して JMS ブローカーに接続します。このオプションを使用する場合は、接続を確立できない場合は例外が WARN レベルでログに記録され、consumer はメッセージを受信できず、ルートを再起動して再試行できます。

false

boolean

asyncStopListener (advanced)

ルートを停止するときに、JmsConsumer メッセージリスナーを非同期的に停止するかどうか。

false

boolean

autowiredEnabled (上級)

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

boolean

configuration (上級)

共有 JMS 設定を使用するには。

 

JmsConfiguration

destinationResolver (上級)

独自のリゾルバーを使用できるようにするプラグ可能な org.springframework.jms.support.destination.DestinationResolver (たとえば、JNDI レジストリーで実際の宛先を検索するため)。

 

DestinationResolver

errorHandler (advanced)

Message の処理中にキャッチされない例外が出力された場合に呼び出される org.springframework.util.ErrorHandler を指定します。デフォルトでは、errorHandler が設定されていない場合、これらの例外は WARN レベルでログに記録されます。errorHandlerLoggingLevel および errorHandlerLogStackTrace オプションを使用して、ログレベルとスタックトレースをログに記録するかどうかを設定できます。これにより、カスタム errorHandler をコーディングするよりも設定がはるかに簡単になります。

 

ErrorHandler

exceptionListener (advanced)

基礎となる JMS 例外の通知を受ける JMS 例外リスナーを指定します。

 

ExceptionListener

idleConsumerLimit (advanced)

常にアイドル状態にできる consumer の数の制限を指定します。

1

int

idleTaskExecutionLimit (advanced)

実行中にメッセージを受信していない、受信タスクのアイドル実行の制限を指定します。この制限に達すると、タスクはシャットダウンし、他の実行中のタスクに受信を任せます (動的スケジューリングの場合。maxConcurrentConsumers 設定を参照してください)。Spring から入手できる追加のドキュメントがあります。

1

int

includeAllJMSXProperties (advanced)

JMS から Camel Message へのマッピング時に JMSXxxx プロパティーをすべて含めるかどうか。これを true に設定すると、JMSXAppID や JMSXUserID などのプロパティーが含まれます。注記: カスタムの headerFilterStrategy を使用している場合、このオプションは適用されません。

false

boolean

jmsKeyFormatStrategy (advanced)

JMS 仕様に準拠できるように、JMS キーをエンコードおよびデコードするためのプラグ可能な戦略。Camel は、追加設定なしで、default と passthrough の 2 つの実装を提供します。デフォルトのストラテジーでは、ドットとハイフン(. および -)を安全にマーシャリングします。パススルー戦略では、キーはそのまま残ります。JMS ヘッダーキーに不正な文字が含まれているかどうかは問題にならない JMS ブローカーに使用できます。org.apache.camel.component.jms.JmsKeyFormatStrategy の独自の実装を提供し、# 表記を使用して参照できます。

列挙値:

  • default
  • パススルー
 

JmsKeyFormatStrategy

mapJmsMessage (advanced)

Camel が受信した JMS メッセージを適切なペイロードタイプ (javax.jms.TextMessage を文字列など) に自動マップするかどうかを指定します。

true

boolean

maxMessagesPerTask (advanced)

タスクあたりのメッセージ数。-1 は無制限です。同時 consumer の範囲 (例: min max) を使用する場合、このオプションを使用して値を 100 などに設定し、必要な作業が少ない場合に consumer が縮小する速度を制御できます。

-1

int

messageConverter (advanced)

カスタム Spring org.springframework.jms.support.converter.MessageConverter を使用して、javax.jms.Message との間でどのようにマッピングするかを制御できるようにします。

 

MessageConverter

messageCreatedStrategy (advanced)

Camel が JMS メッセージを送信しているときに、Camel が javax.jms.Message オブジェクトの新しいインスタンスを作成するときに呼び出される、指定された MessageCreatedStrategy を使用します。

 

MessageCreatedStrategy

messageIdEnabled (advanced)

送信時に、メッセージ 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 (advanced)

独自の接続によってパブリッシュされたメッセージの配信を禁止するかどうかを指定します。

false

boolean

queueBrowseStrategy (上級)

キューを参照するときにカスタム QueueBrowseStrategy を使用するには。

 

QueueBrowseStrategy

receiveTimeout (上級)

メッセージ受信のタイムアウト (ミリ秒単位)。

1000

long

recoveryInterval (advanced)

リカバリーの試行の間隔を指定します。つまり、接続が更新されるタイミング(ミリ秒単位)を指定します。デフォルトは 5000 ミリ秒、つまり 5 秒です。

5000

long

requestTimeoutCheckerInterval (advanced)

JMS を介してリクエスト/リプライを行うときに、Camel がタイムアウトになった Exchange をチェックする頻度を設定します。デフォルトでは、Camel は 1 秒に 1 回確認します。ただし、タイムアウトが発生したときに迅速に対応する必要がある場合は、この間隔を短くして、より頻繁にチェックすることができます。タイムアウトは、オプション requestTimeout によって決定されます。

1000

long

synchronous (上級)

同期処理を厳密に使用するかどうかを設定します。

false

boolean

transferException (advanced)

有効で、Request Reply メッセージング (InOut) を使用していて、Exchange が consumer 側で失敗した場合、原因となった例外が javax.jms.ObjectMessage として応答で返されます。クライアントが Camel の場合、返された Exception は再出力されます。これにより、Camel JMS をルーティングのブリッジとして使用できます。たとえば、永続的なキューを使用して堅牢なルーティングを有効にできます。transferExchange も有効にしている場合は、このオプションが優先されることに注意してください。キャッチされた例外はシリアライズ可能である必要があります。consumer 側の元の Exception は、producer に返されるときに org.apache.camel.RuntimeCamelException などの外部例外にラップできます。データは Java オブジェクトのシリアライゼーションを使用しており、受信側がクラスレベルでデータをデシリアライズできる必要があるため、これは注意して使用してください。

false

boolean

transferExchange (advanced)

本文とヘッダーだけでなく、電信送金で交換を転送できます。次のフィールドが転送されます: 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 (advanced)

JMS を介して要求/応答を行う場合、およびオプション useMessageIDAsCorrelationID が有効な場合に、暫定相関 ID が実際の相関 ID に更新されるのを待機する回数。

50

int

waitForProvisionCorrelationToBeUpdatedThreadSleepingTime (advanced)

暫定相関 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 (advanced))

true の場合、オプション transacted=true のときに transactionManager が挿入されていない場合、Camel は JmsTransactionManager を作成します。

true

boolean

transactionManager (トランザクション (上級))

使用する Spring トランザクションマネージャー。

 

PlatformTransactionManager

transactionName (トランザクション (上級))

使用するトランザクションの名前。

 

String

transactionTimeout (トランザクション (上級))

トランザクションモードを使用している場合の、トランザクションのタイムアウト値 (秒単位)。

-1

int

26.4. エンドポイントオプション

JMS エンドポイントは、URI 構文を使用して設定されます。

jms:destinationType:destinationName

パスおよびクエリーパラメーターを使用します。

26.4.1. パスパラメーター (2 パラメーター)

Name説明デフォルトタイプ

destinationType (common)

使用する宛先の種類。

列挙値:

  • queue
  • topic
  • temp-queue
  • temp-topic

queue

String

destinationName (common)

必須 宛先として使用するキューまたはトピックの名前。

 

String

26.4.2. クエリーパラメーター (95 パラメーター)

Name説明デフォルトタイプ

clientId (common)

使用する JMS クライアント ID を設定します。この値を指定する場合は、一意である必要があり、単一の JMS 接続インスタンスでのみ使用できることに注意してください。通常、永続的なトピックサブスクリプションの場合にのみ必要です。Apache ActiveMQ を使用している場合は、代わりに仮想トピックを使用することをお勧めします。

 

String

connectionFactory (common)

使用する接続ファクトリー。コンポーネントまたはエンドポイントで接続ファクトリーを設定する必要があります。

 

ConnectionFactory

disableReplyTo (common)

Camel がメッセージの JMSReplyTo ヘッダーを無視するかどうかを指定します。true の場合、Camel は JMSReplyTo ヘッダーで指定された宛先に返信を送り返しません。Camel にルートから消費させたいが、コード内の別のコンポーネントが応答メッセージを処理するため、Camel に自動的に応答メッセージを送り返したくない場合は、このオプションを使用できます。Camel を異なるメッセージブローカー間のプロキシーとして使用し、あるシステムから別のシステムにメッセージをルーティングする場合にも、このオプションを使用できます。

false

boolean

durableSubscriptionName (common)

永続トピックサブスクリプションを指定するための永続サブスクライバー名。clientId オプションも設定する必要があります。

 

String

jmsMessageType (common)

JMS メッセージの送信に特定の javax.jms.Message 実装を強制的に使用できるようにします。可能な値は、Bytes、Map、Object、Stream、Text です。デフォルトでは、Camel は In body タイプから使用する JMS メッセージタイプを決定します。このオプションで指定できます。

列挙値:

  • バイト
  • マップ
  • オブジェクト
  • ストリーム
  • テキスト
 

JmsMessageType

replyTo (共通)

明示的な ReplyTo 宛先を提供します (consumer の Message.getJMSReplyTo() の着信値をオーバーライドします)。

 

String

testConnectionOnStartup (common)

起動時に接続をテストするかどうかを指定します。これにより、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 (advanced))

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 (advanced))

メッセージが読み込まれるとすぐに 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 (advanced))

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 (advanced))

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 (advanced))

InOnly を使用して JMS 宛先に送信する場合にのみ適用されます (例: ファイアアンドフォーゲット)。このオプションを有効にすると、メッセージが JMS 宛先に送信されたときに JMS クライアントによって使用された実際の JMSMessageID で Camel Exchange が強化されます。

false

boolean

replyToCacheLevelName (producer (advanced))

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 (advanced))

使用する固定名を使用して JMS セレクターを設定し、共有キューを使用している場合 (つまり、一時的な応答キューを使用していない場合) に、他の応答から自分の応答を除外できるようにします。

 

String

streamMessageTypeEnabled (producer (advanced))

StreamMessage タイプを有効にするかどうかを設定します。ファイル、InputStream などのストリーミングの種類のメッセージペイロードは、BytesMessage または StreamMessage として送信されます。このオプションは、どの種類が使用されるかを制御します。デフォルトでは、BytesMessage が使用され、メッセージペイロード全体がメモリーに読み込まれます。このオプションを有効にすると、メッセージペイロードがチャンク単位でメモリーに読み込まれ、データがなくなるまで各チャンクが StreamMessage に書き込まれます。

false

boolean

allowSerializedHeaders (advanced)

シリアル化されたヘッダーを含めるかどうかを制御します。transferExchange が true の場合にのみ適用されます。これには、オブジェクトがシリアライズ可能である必要があります。Camel はシリアル化できないオブジェクトを除外し、WARN レベルでログに記録します。

false

boolean

artemisStreamingEnabled (上級)

Apache Artemis ストリーミングモード用に最適化するかどうか。これにより、JMS StreamMessage タイプで Artemis を使用する場合のメモリーオーバーヘッドを削減できます。このオプションは、Apache Artemis が使用されている場合にのみ有効にする必要があります。

false

boolean

asyncStartListener (advanced)

ルートの開始時に JmsConsumer メッセージリスナーを非同期で開始するかどうか。たとえば、JmsConsumer がリモート JMS ブローカーへの接続を取得できない場合は、再試行中やフェイルオーバー中にブロックされる可能性があります。これにより、ルートの開始時に Camel がブロックされます。このオプションを true に設定すると、ルートの起動を許可します。一方、JmsConsumer は非同期モードで専用のスレッドを使用して JMS ブローカーに接続します。このオプションを使用する場合は、接続を確立できない場合は例外が WARN レベルでログに記録され、consumer はメッセージを受信できず、ルートを再起動して再試行できます。

false

boolean

asyncStopListener (advanced)

ルートを停止するときに、JmsConsumer メッセージリスナーを非同期的に停止するかどうか。

false

boolean

destinationResolver (advanced)

独自のリゾルバーを使用できるようにするプラグ可能な org.springframework.jms.support.destination.DestinationResolver (たとえば、JNDI レジストリーで実際の宛先を検索するため)。

 

DestinationResolver

errorHandler (advanced)

Message の処理中にキャッチされない例外が出力された場合に呼び出される org.springframework.util.ErrorHandler を指定します。デフォルトでは、errorHandler が設定されていない場合、これらの例外は WARN レベルでログに記録されます。errorHandlerLoggingLevel および errorHandlerLogStackTrace オプションを使用して、ログレベルとスタックトレースをログに記録するかどうかを設定できます。これにより、カスタム errorHandler をコーディングするよりも設定がはるかに簡単になります。

 

ErrorHandler

exceptionListener (advanced)

基礎となる JMS 例外の通知を受ける JMS 例外リスナーを指定します。

 

ExceptionListener

headerFilterStrategy (advanced)

カスタムの HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルタリングします。

 

HeaderFilterStrategy

idleConsumerLimit (advanced)

常にアイドル状態にできる consumer の数の制限を指定します。

1

int

idleTaskExecutionLimit (advanced)

実行中にメッセージを受信していない、受信タスクのアイドル実行の制限を指定します。この制限に達すると、タスクはシャットダウンし、他の実行中のタスクに受信を任せます (動的スケジューリングの場合。maxConcurrentConsumers 設定を参照してください)。Spring から入手できる追加のドキュメントがあります。

1

int

includeAllJMSXProperties (advanced)

JMS から Camel Message へのマッピング時に JMSXxxx プロパティーをすべて含めるかどうか。これを true に設定すると、JMSXAppID や JMSXUserID などのプロパティーが含まれます。注記: カスタムの headerFilterStrategy を使用している場合、このオプションは適用されません。

false

boolean

jmsKeyFormatStrategy (advanced)

JMS 仕様に準拠できるように、JMS キーをエンコードおよびデコードするためのプラグ可能な戦略。Camel は、追加設定なしで、default と passthrough の 2 つの実装を提供します。デフォルトのストラテジーでは、ドットとハイフン(. および -)を安全にマーシャリングします。パススルー戦略では、キーはそのまま残ります。JMS ヘッダーキーに不正な文字が含まれているかどうかは問題にならない JMS ブローカーに使用できます。org.apache.camel.component.jms.JmsKeyFormatStrategy の独自の実装を提供し、# 表記を使用して参照できます。

列挙値:

  • default
  • パススルー
 

JmsKeyFormatStrategy

mapJmsMessage (advanced)

Camel が受信した JMS メッセージを適切なペイロードタイプ (javax.jms.TextMessage を文字列など) に自動マップするかどうかを指定します。

true

boolean

maxMessagesPerTask (advanced)

タスクあたりのメッセージ数。-1 は無制限です。同時 consumer の範囲 (例: min max) を使用する場合、このオプションを使用して値を 100 などに設定し、必要な作業が少ない場合に consumer が縮小する速度を制御できます。

-1

int

messageConverter (advanced)

カスタム Spring org.springframework.jms.support.converter.MessageConverter を使用して、javax.jms.Message との間でどのようにマッピングするかを制御できるようにします。

 

MessageConverter

messageCreatedStrategy (advanced)

Camel が JMS メッセージを送信しているときに、Camel が javax.jms.Message オブジェクトの新しいインスタンスを作成するときに呼び出される、指定された MessageCreatedStrategy を使用します。

 

MessageCreatedStrategy

messageIdEnabled (advanced)

送信時に、メッセージ 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 (advanced)

独自の接続によってパブリッシュされたメッセージの配信を禁止するかどうかを指定します。

false

boolean

receiveTimeout (advanced)

メッセージ受信のタイムアウト (ミリ秒単位)。

1000

long

recoveryInterval (advanced)

リカバリーの試行の間隔を指定します。つまり、接続が更新されるタイミング(ミリ秒単位)を指定します。デフォルトは 5000 ミリ秒、つまり 5 秒です。

5000

long

requestTimeoutCheckerInterval (advanced)

JMS を介してリクエスト/リプライを行うときに、Camel がタイムアウトになった Exchange をチェックする頻度を設定します。デフォルトでは、Camel は 1 秒に 1 回確認します。ただし、タイムアウトが発生したときに迅速に対応する必要がある場合は、この間隔を短くして、より頻繁にチェックすることができます。タイムアウトは、オプション requestTimeout によって決定されます。

1000

long

synchronous (上級)

同期処理を厳密に使用するかどうかを設定します。

false

boolean

transferException (advanced)

有効で、Request Reply メッセージング (InOut) を使用していて、Exchange が consumer 側で失敗した場合、原因となった例外が javax.jms.ObjectMessage として応答で返されます。クライアントが Camel の場合、返された Exception は再出力されます。これにより、Camel JMS をルーティングのブリッジとして使用できます。たとえば、永続的なキューを使用して堅牢なルーティングを有効にできます。transferExchange も有効にしている場合は、このオプションが優先されることに注意してください。キャッチされた例外はシリアライズ可能である必要があります。consumer 側の元の Exception は、producer に返されるときに org.apache.camel.RuntimeCamelException などの外部例外にラップできます。データは Java オブジェクトのシリアライゼーションを使用しており、受信側がクラスレベルでデータをデシリアライズできる必要があるため、これは注意して使用してください。

false

boolean

transferExchange (advanced)

本文とヘッダーだけでなく、電信送金で交換を転送できます。次のフィールドが転送されます: 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 (advanced)

JMS を介して要求/応答を行う場合、およびオプション useMessageIDAsCorrelationID が有効な場合に、暫定相関 ID が実際の相関 ID に更新されるのを待機する回数。

50

int

waitForProvisionCorrelationToBeUpdatedThreadSleepingTime (advanced)

暫定相関 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 (advanced))

true の場合、オプション transacted=true のときに transactionManager が挿入されていない場合、Camel は JmsTransactionManager を作成します。

true

boolean

transactionManager (トランザクション (上級))

使用する Spring トランザクションマネージャー。

 

PlatformTransactionManager

transactionName (トランザクション (上級))

使用するトランザクションの名前。

 

String

transactionTimeout (トランザクション (上級))

トランザクションモードを使用している場合の、トランザクションのタイムアウト値 (秒単位)。

-1

int

26.5. サンプル

JMS は、他のコンポーネントの多くの例でも使用されています。ただし、開始するためのいくつかのサンプルを以下に示します。

26.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");

26.5.2. JMS への送信

以下のサンプルでは、ファイルフォルダーをポーリングし、ファイルコンテンツを JMS トピックに送信します。ファイルの内容を BytesMessage ではなく TextMessage にしたいので、本文を String に変換する必要があります。

from("file://orders").
  convertBodyTo(String.class).
  to("jms:topic:OrdersTopic");

26.5.3. アノテーションの使用

Camel にはアノテーションもあるため、POJO Consuming と POJO Producing を使用できます。

26.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>

26.5.5. その他のサンプル

JMS は、この Camel ドキュメントだけでなく、他のコンポーネントや EIP パターンの例の多くにも登場します。そのため、ドキュメントを自由に参照してください。

26.5.6. JMS を Exchange を格納するデッドレターキューとして使用する

通常、JMS をトランスポートとして使用する場合、ペイロードとしてボディとヘッダーのみを転送します。JMS キューをデッドレターキューとして使用して、デッドレターチャネルJMS を使用する場合には、通常、原因となる例外は JMS メッセージに格納されません。ただし、JMS デッドレターキューで transferExchange オプションを使用して、Exchange 全体を org.apache.camel.support.DefaultExchangeHolder を保持する javax.jms.ObjectMessage としてキューに格納するよう Camel に指示できます。これにより、デッドレターキューから消費し、キー Exchange.EXCEPTION_CAUGHT を使用して Exchange プロパティーから原因の例外を取得できます。以下のデモは、これを示しています。

// setup error handler to use JMS as queue and store the entire Exchange
errorHandler(deadLetterChannel("jms:queue:dead?transferExchange=true"));

次に、JMS キューから消費して問題を分析できます。

from("jms:queue:dead").to("bean:myErrorAnalyzer");

// and in our bean
String body = exchange.getIn().getBody();
Exception cause = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Exception.class);
// the cause message is
String problem = cause.getMessage();

26.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 でメソッドを呼び出したり、カスタムプロセッサーを使用したりできます。

26.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

26.6.1. JMS メッセージの自動マッピングの無効化

mapJmsMessage オプションを使用して、上記の自動マッピングを無効にすることができます。無効にすると、Camel は受信した JMS メッセージをマップしようとせず、ペイロードとして直接使用します。これにより、マッピングのオーバーヘッドを回避し、Camel に JMS メッセージを通過させることができます。たとえば、クラスパスに ない クラスを使用して javax.jms.ObjectMessage JMS メッセージをルーティングすることもできます。

26.6.2. カスタム MessageConverter の使用

messageConverter オプションを使用して、Spring org.springframework.jms.support.converter.MessageConverter クラスで自分でマッピングを行うことができます。

たとえば、以下のルートでは、メッセージを JMS オーダーキューに送信するときにカスタムメッセージコンバーターを使用します。

from("file://inbox/order").to("jms:queue:order?messageConverter=#myMessageConverter");

JMS 宛先から消費する場合は、カスタムメッセージコンバーターを使用することもできます。

26.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 で定義されています。

26.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}

26.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 のドキュメント を参照してください。

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

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

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

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

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

26.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 は応答を期待 しない ため、メッセージの送信後に続行します。

26.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");

26.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 エンドポイントに転送されるシナリオで)。

26.11. 異なる JMS プロバイダーの設定

次のように、Spring XML で JMS プロバイダーを設定できます。

基本的に、必要な数の JMS コンポーネントインスタンスを設定し、id 属性 を使用して一意の名前 を付けることができます。前の例では、activemq コンポーネントを設定しています。同じことを行って、MQSeries、TibCo、BEA、Sonic などを設定できます。

名前付き JMS コンポーネントを作成したら、URI を使用してそのコンポーネント内のエンドポイントを参照できます。たとえば、コンポーネント名 activemq の場合、URI 形式 activemq:queue:|topic:destinationName を使用して宛先を参照できます。他のすべての JMS プロバイダーに対して同じアプローチを使用できます。

これは、SpringCamelContext がエンドポイント URI に使用するスキーム名のスプリングコンテキストからコンポーネントを遅延フェッチし、コンポーネントにエンドポイント URI を解決させることによって機能します。

26.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 スキーマ を参照してください。

26.12. 同時消費

JMS の一般的な要件は、アプリケーションの応答性を高めるために、複数のスレッドで同時にメッセージを消費することです。次のように、concurrentConsumers オプションを設定して、JMS エンドポイントにサービスを提供するスレッドの数を指定できます。

from("jms:SomeQueue?concurrentConsumers=20").
  bean(MyClass.class);

このオプションは、次のいずれかの方法で設定できます。

  • JmsComponent で、
  • エンドポイント URI または、
  • JmsEndpoint で直接 setConcurrentConsumers () を呼び出す。

26.12.1. 非同期 consumer による同時消費

各 concurrent consumer は、現在のメッセージが完全に処理されたときに、JMS ブローカーから次に利用可能なメッセージのみを取得することに注意してください。オプション asyncConsumer=true を設定すると、前のメッセージが (非同期ルーティングエンジンによって) 非同期に処理されている間に、consumer が JMS キューから次のメッセージをピックアップできるようになります。asyncConsumer オプションの詳細については、ページ上部の表を参照してください。

from("jms:SomeQueue?concurrentConsumers=20&asyncConsumer=true").
  bean(MyClass.class);

26.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 に指示します。

26.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 がプルリクエストをメッセージブローカーにより頻繁に送信するようになり、より多くのネットワークトラフィックが必要になることに注意してください。
一般に、可能であれば一時キューを使用することをお勧めします。

26.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)

クラスター環境で実行する場合も同様です。次に、クラスター内の各ノードは一意の応答キュー名を使用する必要があります。そうしないと、クラスター内の各ノードが、別のノードでの応答として意図されたメッセージを取得する可能性があります。クラスター化された環境では、代わりに共有応答キューを使用することをお勧めします。

26.14. 送信側と受信側のクロックの同期

システム間でメッセージングを行う場合、システムのクロックが同期していることが望ましいです。たとえば、JMS メッセージを送信する場合、メッセージに Time to Live 値を設定できます。次に、受信者はこの値を検査し、メッセージがすでに期限切れになっているかどうかを判断し、メッセージを消費して処理する代わりにドロップします。ただし、これには、送信側と受信側の両方でクロックが同期されている必要があります。ActiveMQ を使用している場合は、タイムスタンププラグイン を使用してクロックを同期できます。

26.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 メッセージングには使用されていません。

26.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 レベルでキャッシュは発生せず、プールされた接続ファクトリーに依存する必要があります。この種のセットアップの詳細については、こちらこちら を参照してください。

26.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.");
    }
}

26.18. リクエストタイムアウトの使用

以下のサンプルでは、Request Reply スタイルのメッセージ Exchange (requestBody メソッド = InOut を使用) を出力 キューに送信して、Camel でさらに処理し、返信を待ちます。

26.19. InOnly メッセージを送信し、JMSReplyTo ヘッダーを保持する

camel-jms を使用して JMS 宛先に送信する場合、プロデューサは 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 ヘッダーを保持するように指示していることに注意してください。

26.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");
    }
});

26.21. Spring Boot Auto-Configuration

Spring Boot で jms を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-jms-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 99 のオプションをサポートします。

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

camel.component.jms.accept-messages-while-stopping

consumer が停止中にメッセージを受け入れるかどうかを指定します。実行時に JMS ルートを開始および停止するが、キューにメッセージが入れられている場合は、このオプションを有効にすることを検討してください。このオプションが false の場合は、JMS ルートを停止すると、メッセージが拒否される可能性があり、JMS ブローカは再配信を試行する必要がありますが、これも拒否される可能性があり、最終的にメッセージはJMS ブローカー上のデッドレターキューに移動される可能性があります。これを回避するには、このオプションを有効にすることをお勧めします。

false

ブール値

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

ブール値

camel.component.jms.allow-auto-wired-destination-resolver

宛先リゾルバーが設定されていない場合に、レジストリーから DestinationResolver を自動検出するかどうか。DestinationResolver のインスタンスが 1 つだけ見つかった場合は、それが使用されます。これはデフォルトで有効になっています。

true

ブール値

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

ブール値

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

ブール値

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

ブール値

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

ブール値

camel.component.jms.disable-time-to-live

このオプションを使用して、有効期限を強制的に無効にします。たとえば、JMS を介して要求/応答を行う場合、Camel はデフォルトで、送信されるメッセージの存続時間として requestTimeout 値を使用します。問題は、送信側システムと受信側システムのクロックを同期させる必要があるため、同期していることです。これをアーカイブするのは必ずしも簡単ではありません。したがって、disableTimeToLive=true を使用して、送信されたメッセージに有効期限の値を設定しないようにすることができます。その後、メッセージは受信側システムで期限切れになりません。詳細については、以下の生存時間についてのセクションを参照してください。

false

ブール値

camel.component.jms.durable-subscription-name

永続トピックサブスクリプションを指定するための永続サブスクライバー名。clientId オプションも設定する必要があります。

 

String

camel.component.jms.eager-loading-of-properties

メッセージが読み込まれるとすぐに JMS プロパティーとペイロードの熱心な読み込みを有効にします。これは、JMS プロパティーが必要ない場合があるため一般的に非効率的ですが、基盤となる JMS プロバイダーと JMS プロパティーの使用に関する問題を早期に発見できる場合があります。オプション eagerPoisonBody も参照してください。

false

ブール値

camel.component.jms.eager-poison-body

eagerLoadingOfProperties が有効であり、JMS メッセージペイロード (JMS 本文または JMS プロパティー) が有害 (読み取り/マッピングできない) である場合は、代わりにこのテキストをメッセージボディーとして設定し、メッセージを処理できるようにします (有害の原因は、Exchange では例外としてすでに保存されています)。これは、eagerPoisonBody=false を設定することでオフにすることができます。オプション eagerLoadingOfProperties も参照してください。

$\{exception.message} による JMS メッセージへの影響

String

camel.component.jms.enabled

jms コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

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

ブール値

camel.component.jms.lazy-start-producer

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

false

ブール値

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

ブール値

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

ブール値

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

ブール値

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

ブール値

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

ブール値

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

第27章 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>

27.1. URI 形式

kafka:topic[?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. コンポーネントオプション

Kafka コンポーネントは、以下にリストされている 104 のオプションをサポートしています。

Name説明デフォルトタイプ

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 (common)

クライアント ID は、呼び出しの追跡に役立つように、各要求で送信されるユーザー指定の文字列です。要求を行っているアプリケーションを論理的に識別する必要があります。

 

String

configuration (共通)

エンドポイントが再利用する共通オプションを使用して、Kafka コンポーネントを事前設定できます。

 

KafkaConfiguration

headerFilterStrategy (共通)

カスタムの HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルタリングします。

 

HeaderFilterStrategy

reconnectBackoffMaxMs (common)

接続に繰り返し失敗したブローカーへの再接続時に待機する最大時間 (ミリ秒単位)。これが指定されている場合、ホストごとのバックオフは、連続して接続に失敗するたびに、この最大値まで指数関数的に増加します。バックオフの増加を計算した後、コネクションストームを回避するために 20% のランダムなジッターが追加されます。

1000

Integer

shutdownTimeout (Common)

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

ブール値

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

27.4. エンドポイントオプション

Kafka エンドポイントは、URI 構文を使用して設定されます。

kafka:topic

パスおよびクエリーパラメーターを使用します。

27.4.1. パスパラメーター(1 パラメーター)

Name説明デフォルトタイプ

topic (共通)

必須 使用するトピックの名前。consumer では、コンマを使用して複数のトピックを区切ることができます。producer は、1 つのトピックにのみメッセージを送信できます。

 

String

27.4.2. クエリーパラメーター (102 パラメーター)

Name説明デフォルトタイプ

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 (common)

クライアント ID は、呼び出しの追跡に役立つように、各要求で送信されるユーザー指定の文字列です。要求を行っているアプリケーションを論理的に識別する必要があります。

 

String

headerFilterStrategy (common)

カスタムの HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルタリングします。

 

HeaderFilterStrategy

reconnectBackoffMaxMs (common)

接続に繰り返し失敗したブローカーへの再接続時に待機する最大時間 (ミリ秒単位)。これが指定されている場合、ホストごとのバックオフは、連続して接続に失敗するたびに、この最大値まで指数関数的に増加します。バックオフの増加を計算した後、コネクションストームを回避するために 20% のランダムなジッターが追加されます。

1000

Integer

shutdownTimeout (Common)

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

ブール値

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 設定の詳細については、以下を参照してください。

27.5. メッセージヘッダー

27.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"

ブール値

現在のポーリングリクエスト内の最後のレコードを示します (autoCommitEnable エンドポイントパラメーターが false または allowManualCommittrue の場合にのみ使用可能)

KafkaConstants.MANUAL_COMMIT

"CamelKafkaManualCommit"

KafkaManualCommit

Kafka consumer を使用する場合に手動オフセットコミットを強制するために使用できます。

27.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 の場合にのみ設定されます)

27.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 のカスタム実装をコンポーネントレベルで設定できます。これにより、どの例外が上記のどの戦略を引き起こすかを制御できます。

27.7. サンプル

27.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");
    }
});

27.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");

27.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");
    }
});

27.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);

27.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 を設定できます。

27.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 レジストリーに配置する必要があります。

27.12. Spring Boot Auto-Configuration

Spring Boot で jira を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-kafka-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 105 のオプションをサポートします。

Name説明デフォルトタイプ

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

ブール値

camel.component.kafka.auto-commit-enable

true の場合、consumer によってすでにフェッチされているメッセージのオフセットを ZooKeeper に定期的にコミットします。このコミットされたオフセットは、プロセスが失敗したときに、新しい consumer が開始される位置として使用されます。

true

ブール値

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

ブール値

camel.component.kafka.break-on-first-error

このオプションは、consumer が交換を処理していて失敗した場合に何が起こるかを制御します。オプションが false の場合、consumer は次のメッセージに進み、それを処理します。オプションが true の場合、consumer は中断し、失敗の原因となったメッセージのオフセットに戻ってシークし、このメッセージの処理を再試行します。ただし、これは、たとえば有害なメッセージのように毎回失敗する場合、同じメッセージの無限の処理につながる可能性があります。したがって、Camel のエラーハンドラーを使用するなどして対処することをお勧めします。

false

ブール値

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

ブール値

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

ブール値

camel.component.kafka.enabled

kafka コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

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

ブール値

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

ブール値

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

ブール値

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

ブール値

camel.component.kafka.topic-is-pattern

トピックがパターン (正規表現) であるかどうか。これを使用して、パターンに一致する動的な数のトピックをサブスクライブできます。

false

ブール値

camel.component.kafka.use-global-ssl-context-parameters

グローバル SSL コンテキストパラメーターの使用を有効にします。

false

ブール値

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

第28章 Kamelet

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

Kamelet コンポーネントは、エンドポイントセマンティックを使用して Camel Route Template エンジンと対話するためのサポートを提供します。

28.1. URI 形式

kamelet:templateId/routeId[?options]

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. コンポーネントオプション

Kamelet コンポーネントは、以下に示す 9 つのオプションをサポートしています。

Name説明デフォルトタイプ

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 (advanced)

Autowired Kamelet コンポーネントが外部リソースから Kamelet をロードするときのカスタムリスナーをプラグインします。

 

RouteTemplateLoaderListener

28.4. エンドポイントオプション

Kamelet エンドポイントは、URI 構文を使用して設定されます。

kamelet:templateId/routeId

パスおよびクエリーパラメーターを使用します。

28.4.1. パスパラメーター (2 パラメーター)

Name説明デフォルトタイプ

templateId (共通)

必須 ルートテンプレート ID。

 

String

routeId (共通)

ルート ID。デフォルト値に関する通知: ID が指定されていない場合、ID は自動生成されます。

 

String

28.4.2. クエリーパラメーター (8 パラメーター)

Name説明デフォルトタイプ

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 です。つまり、エンドポイントは、エンジンに渡され、ルートの実体化で消費される追加パラメーターを受け入れます。

28.5. 検出

ルートテンプレート が見つからない場合、kamelet エンドポイントは関連する kamelet 定義をファイルシステム (デフォルトでは classpath:/kamelets) からロードしようとします。デフォルトの解決メカニズムは、kamelet ファイルの拡張子が .kamelet.yaml であることを想定しています。

28.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");

28.7. Spring Boot Auto-Configuration

Spring Boot で dataset を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-kamelet-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に示す 10 個のオプションをサポートします。

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

camel.component.kamelet.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.kamelet.block

アクティブな consumer を持たない direct エンドポイントにメッセージを送信する場合、ブロックして consumer がアクティブになるのを待つよう producer に指示できます。

true

ブール値

camel.component.kamelet.bridge-error-handler

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

false

ブール値

camel.component.kamelet.enabled

kamelet コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.kamelet.lazy-start-producer

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

false

ブール値

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

第29章 言語

producer のみサポート対象

言語コンポーネントを使用すると、Camel でサポートされている言語のいずれかでスクリプトを実行するエンドポイントに Exchange を送信できます。言語スクリプトを実行するコンポーネントを持つことで、より動的なルーティング機能が可能になります。たとえば、Routing Slip または Dynamic Router EIP を使用して、スクリプトが動的に定義されている言語エンドポイントにメッセージを送信できます。

このコンポーネントはキャメルコアでそのまま提供されるため、追加の JAR は必要ありません。Groovy や JavaScript 言語を使用するなど、選択した言語で必要な場合にのみ、追加の Camel コンポーネントを含める必要があります。

29.1. URI 形式

language://languageName[:script][?options]

Camel の他の 言語 でサポートされているのと同じ表記法を使用して、スクリプトの外部リソースを参照できます。

language://languageName:resource:scheme:location][?options]

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. コンポーネントオプション

言語コンポーネントは、次に示す 2 つのオプションをサポートしています。

Name説明デフォルトタイプ

lazyStartProducer (producer)

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

false

boolean

autowiredEnabled (上級)

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

boolean

29.4. エンドポイントオプション

Language エンドポイントは、URI 構文を使用して設定されます。

language:languageName:resourceUri

パスおよびクエリーパラメーターを使用します。

29.4.1. パスパラメーター (2 パラメーター)

Name説明デフォルトタイプ

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

29.4.2. クエリーパラメーター (7 パラメーター)

Name説明デフォルトタイプ

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

29.5. メッセージヘッダー

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

ヘッダー説明

CamelLanguageScript

ヘッダーで提供される実行するスクリプト。エンドポイントで設定されたスクリプトよりも優先されます。

29.6. 例

たとえば、Simple 言語を使用して Message Translator メッセージを作成できます。

以下に示すように、スクリプトをヘッダーとして提供することもできます。ここでは、XPath 言語を使用して <foo> タグからテキストを抽出します。

Object out = producer.requestBodyAndHeader("language:xpath", "<foo>Hello World</foo>", Exchange.LANGUAGE_SCRIPT, "/foo/text()");
assertEquals("Hello World", out);

29.7. リソースからのスクリプトのロード

エンドポイント uri または Exchange.LANGUAGE_SCRIPT ヘッダーのいずれかで、ロードするスクリプトのリソース uri を指定できます。URI は、次のスキームのいずれかで始まる必要があります: file:、classpath:、または http:

デフォルトでは、スクリプトは一度ロードされてキャッシュされます。ただし、contentCache オプションを無効にして、評価ごとにスクリプトをロードすることができます。たとえば、ファイル myscript.txt がディスク上で変更された場合、更新されたスクリプトが使用されます。

以下に示すように、resource: という接頭辞を付けることで、Camel の他の 言語 と同様のリソースを参照できます。

29.8. Spring Boot 自動設定

Spring Boot でファイルを使用する場合は、自動設定をサポートするために次の Maven 依存関係を使用してください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-language-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 3 つのオプションをサポートします。

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

camel.component.language.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.language.enabled

言語コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.language.lazy-start-producer

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

false

ブール値

第30章 Log

producer のみサポート対象

Log コンポーネントは、メッセージ交換を基になるロギングメカニズムに記録します。

Camel は SLF4J を使用します。これにより、特に次の方法でロギングを設定できます。

  • Log4j
  • Logback
  • Java Util Logging

30.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 を参照してください。

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. コンポーネントオプション

ログ コンポーネントは、以下に示す 3 個のオプションをサポートしています。

Name説明デフォルトタイプ

lazyStartProducer (producer)

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

false

boolean

autowiredEnabled (上級)

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

boolean

exchangeFormatter (上級)

Autowired カスタム ExchangeFormatter を設定して、Exchange をログに適した文字列に変換します。指定しない場合は、デフォルトで DefaultExchangeFormatter になります。

 

ExchangeFormatter

30.4. エンドポイントオプション

ログエンドポイントは、URI 構文を使用して設定されます。

log:loggerName

パスおよびクエリーパラメーターを使用します。

30.4.1. パスパラメーター(1 パラメーター)

Name説明デフォルトタイプ

loggerName (producer)

必須 使用するロギングカテゴリーの名前。

 

String

30.4.2. クエリーパラメーター (27 パラメーター)

Name説明デフォルトタイプ

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

30.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>

30.6. フォーマッターサンプル付きの通常のロガー

以下のルートでは、注文が処理される前に、受信した注文を INFO レベルでログに記録します。

from("activemq:orders").
    to("log:com.mycompany.order?showAll=true&multiline=true").to("bean:processOrder");

30.7. groupSize サンプルを使用したスループットロガー

以下のルートでは、10 個のメッセージでグループ化された DEBUG レベルでの受注のスループットをログに記録します。

from("activemq:orders").
    to("log:com.mycompany.order?level=DEBUG&groupSize=10").to("bean:processOrder");

30.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"

30.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 を実装する必要があることに注意してください。

30.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>

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

30.11. Spring Boot 自動設定

Spring Boot でログを使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-log-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 4 のオプションをサポートします。

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

camel.component.log.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.log.enabled

ログコンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

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

ブール値

第31章 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 が存在するということは、それが作動してメールの送信を回避することを意味します。

31.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]

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. コンポーネントオプション

Mail コンポーネントは、以下に示す 43 個のオプションをサポートしています。

Name説明デフォルトタイプ

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 (advanced)

代替電子メール本文を含む IN メッセージヘッダーのキーを指定します。たとえば、メールを text/html 形式で送信し、HTML 以外のメールクライアントに代替メール本文を提供する場合は、このキーをヘッダーとして使用して代替メール本文を設定します。

CamelMailAlternativeBody

String

attachmentsContentTransferEncodingResolver (advanced)

カスタムの AttachmentsContentTransferEncodingResolver を使用して、添付ファイルに使用する content-type-encoding を解決するには。

 

AttachmentsContentTransferEncodingResolver

authenticator (上級)

ログインのオーセンティケーター。設定すると、パスワードとユーザー名は無視されます。有効期限が切れる可能性があるため、動的に読み取る必要があるトークンに使用できます。

 

MailAuthenticator

autowiredEnabled (上級)

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

boolean

configuration (上級)

メール設定を設定します。

 

MailConfiguration

connectionTimeout (上級)

ミリ秒単位の接続タイムアウト。

30000

int

contentType (advanced)

メールメッセージのコンテンツタイプ。HTML メールには text/html を使用します。

text/plain

String

contentTypeResolver (advanced)

添付の Content-Type を決定するリゾルバー。

 

ContentTypeResolver

debugMode (advanced)

基礎となるメールフレームワークでデバッグモードを有効にします。SUN メールフレームワークは、デフォルトでデバッグメッセージを System.out に記録します。

false

boolean

ignoreUnsupportedCharset (上級)

メール送信時にローカル JVM でサポートされていない文字セットを Camel が無視できるようにするオプション。文字セットがサポートされていない場合は、charset=XXX (XXX はサポートされていない文字セットを表す) が content-type から削除され、代わりにプラットフォームのデフォルトに依存します。

false

boolean

ignoreUriScheme (advanced)

メール送信時にローカル JVM でサポートされていない文字セットを Camel が無視できるようにするオプション。文字セットがサポートされていない場合は、charset=XXX (XXX はサポートされていない文字セットを表す) が content-type から削除され、代わりにプラットフォームのデフォルトに依存します。

false

boolean

javaMailProperties (advanced)

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

31.4. エンドポイントオプション

Mail エンドポイントは、URI 構文を使用して設定されます。

imap:host:port

パスおよびクエリーパラメーターを使用します。

31.4.1. パスパラメーター (2 パラメーター)

Name説明デフォルトタイプ

host (共通)

必須 メールサーバーのホスト名。

 

String

port (共通)

メールサーバーのポート番号。

 

int

31.4.2. クエリーパラメーター (66 パラメーター)

Name説明デフォルトタイプ

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 (advanced))

通常の処理が終了したら、メールボックスで後処理タスクを実行するための 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 (advanced)

代替電子メール本文を含む IN メッセージヘッダーのキーを指定します。たとえば、メールを text/html 形式で送信し、HTML 以外のメールクライアントに代替メール本文を提供する場合は、このキーをヘッダーとして使用して代替メール本文を設定します。

CamelMailAlternativeBody

String

attachmentsContentTransferEncodingResolver (advanced)

カスタムの AttachmentsContentTransferEncodingResolver を使用して、添付ファイルに使用する content-type-encoding を解決するには。

 

AttachmentsContentTransferEncodingResolver

authenticator (上級)

ログインのオーセンティケーター。設定すると、パスワードとユーザー名は無視されます。有効期限が切れる可能性があるため、動的に読み取る必要があるトークンに使用できます。

 

MailAuthenticator

binding (上級)

Camel メッセージと Mail メッセージの間の変換に使用されるバインディングを設定します。

 

MailBinding

connectionTimeout (advanced)

ミリ秒単位の接続タイムアウト。

30000

int

contentType (advanced)

メールメッセージのコンテンツタイプ。HTML メールには text/html を使用します。

text/plain

String

contentTypeResolver (advanced)

添付の Content-Type を決定するリゾルバー。

 

ContentTypeResolver

debugMode (advanced)

基礎となるメールフレームワークでデバッグモードを有効にします。SUN メールフレームワークは、デフォルトでデバッグメッセージを System.out に記録します。

false

boolean

headerFilterStrategy (advanced)

カスタム org.apache.camel.spi.HeaderFilterStrategy を使用してヘッダーをフィルタリングするには。

 

HeaderFilterStrategy

ignoreUnsupportedCharset (advanced)

メール送信時にローカル JVM でサポートされていない文字セットを Camel が無視できるようにするオプション。文字セットがサポートされていない場合は、charset=XXX (XXX はサポートされていない文字セットを表す) が content-type から削除され、代わりにプラットフォームのデフォルトに依存します。

false

boolean

ignoreUriScheme (advanced)

メール送信時にローカル JVM でサポートされていない文字セットを Camel が無視できるようにするオプション。文字セットがサポートされていない場合は、charset=XXX (XXX はサポートされていない文字セットを表す) が content-type から削除され、代わりにプラットフォームのデフォルトに依存します。

false

boolean

javaMailProperties (advanced)

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[]

31.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

31.4.4. コンポーネントのエイリアス名

  • IMAP
  • IMAPs
  • POP3s
  • SMTP
  • SMTPs

31.4.5. デフォルトのポート

デフォルトのポート番号がサポートされています。ポート番号が省略された場合、Camel はプロトコルに基づいて使用するポート番号を決定します。

Protocolデフォルトのポート番号

SMTP

25

SMTPS

465

POP3

110

POP3S

995

IMAP

143

IMAPS

993

31.5. SSL サポート

基礎となるメールフレームワークは、SSL サポートの提供を担当します。必要な Java Mail API 設定オプションを完全に指定して SSL/TLS サポートを設定するか、コンポーネントまたはエンドポイント設定を通じて設定済みの SSLContextParameters を提供することができます。

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

31.5.2. JavaMail を直接設定する

Camel は Jakarta JavaMail を使用します。これは、よく知られている認証局 (デフォルトの JVM 信頼設定) によって発行された証明書のみを信頼します。独自の証明書を発行する場合は、CA 証明書を JVM の Java 信頼/キーストアファイルにインポートし、デフォルトの JVM 信頼/キーストアファイルを上書きする必要があります (詳細については、JavaMail の SSLNOTES.txt を参照してください)。

31.6. メールメッセージの内容

Camel は、メッセージ交換の IN 本文を MimeMessage テキストコンテンツとして使用します。ボディは String.class に変換されます。

Camel は、交換のすべての IN ヘッダーを MimeMessage ヘッダーにコピーします。

MimeMessage の件名は、IN メッセージのヘッダープロパティーを使用して設定できます。以下のコードはこれを示しています。

同じことが受信者などの他の MimeMessage ヘッダーにも当てはまるため、ヘッダープロパティーを To として使用できます。

MailProducer を使用してメールをサーバーに送信する場合、Camel メッセージヘッダーからキー CamelMailMessageId を使用して MimeMessage のメッセージ ID を取得できるはずです。

31.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);

31.8. 設定を容易にする複数の受信者

コンマ区切りまたはセミコロン区切りのリストを使用して、複数の受信者を設定できます。これは、ヘッダー設定とエンドポイント URI の設定の両方に適用されます。以下に例を示します。

Map<String, Object> headers = new HashMap<String, Object>();
headers.put("to", "davsclaus@apache.org ; jstrachan@apache.org ; ningjiang@apache.org");

前の例では、セミコロン ; を使用しています。、区切り文字として。

31.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");

31.10. JavaMail API (ex SUN JavaMail)

JavaMail API は、メールの消費と生成のために内部で使用されます。エンドユーザーが POP3 または IMAP プロトコルを使用する場合は、これらのリファレンスを参照することをお勧めします。特に、POP3 の機能セットは IMAP よりもはるかに限定されていることに注意してください。

31.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");

31.12. 添付ファイル付きメール送信サンプル

注記

アタッチメントはすべての Camel コンポーネントでサポートされているわけではありません
添付ファイル API は Java Activation Framework に基づいており、通常はメール API でのみ使用されます。他の Camel コンポーネントの多くはアタッチメントをサポートしていないため、アタッチメントがルートに沿って伝播するにつれて、アタッチメントが失われる可能性があります。したがって、経験則として、メールエンドポイントにメッセージを送信する直前に添付を追加します。

メールコンポーネントは添付をサポートしています。以下のサンプルでは、ロゴファイルが添付されたプレーンテキストメッセージを含むメールメッセージを送信します。

31.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=[...

31.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 を使用して添付を処理できます。

31.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 で使用します。

31.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();

31.17. ポーリングの最適化

パラメーター maxMessagePerPoll と fetchSize を使用すると、各ポーリングで処理するメッセージの数を制限できます。これらのパラメーターは、大量のメッセージを含むフォルダーを操作する際のパフォーマンスの低下を防ぐのに役立ちます。以前のバージョンでは、これらのパラメーターの評価が遅すぎたため、メールボックスが大きいと依然としてパフォーマンスの問題が発生する可能性がありました。Camel 3.1 では、これらの問題を回避するために、これらのパラメーターがポーリング中に早期に評価されます。

31.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 を使用して いない 場合にのみサポートされます。

31.19. Spring Boot 自動設定

Spring Boot で imap を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-mail-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 50 のオプションをサポートします。

Name説明デフォルトタイプ

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

ブール値

camel.component.mail.bcc

BCC メールアドレスを設定します。複数の電子メールアドレスはコンマで区切ります。

 

String

camel.component.mail.bridge-error-handler

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

false

ブール値

camel.component.mail.cc

CC メールアドレスを設定します。複数の電子メールアドレスはコンマで区切ります。

 

String

camel.component.mail.close-folder

ポーリング後に consumer がフォルダーを閉じる必要があるかどうか。このオプションを false に設定し、disconnect=false も設定すると、consumer はポーリング間でフォルダーを開いたままにします。

true

ブール値

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

ブール値

camel.component.mail.decode-filename

true に設定すると、MimeUtility.decodeText メソッドを使用してファイル名がデコードされます。これは、JVM システムプロパティー mail.mime.encodefilename の設定に似ています。

false

ブール値

camel.component.mail.delete

処理後にメッセージを削除します。これは、メールメッセージに DELETED フラグを設定することによって行われます。false の場合、代わりに SEEN フラグが設定されます。Camel 2.10 では、メールを削除するかどうかを決定するキー delete でヘッダーを設定することにより、この設定オプションをオーバーライドできます。

false

ブール値

camel.component.mail.disconnect

ポーリング後に consumer を切断するかどうか。有効にすると、各ポーリングで Camel が強制的に接続されます。

false

ブール値

camel.component.mail.enabled

mail コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

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

ブール値

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

ブール値

camel.component.mail.ignore-uri-scheme

メール送信時にローカル JVM でサポートされていない文字セットを Camel が無視できるようにするオプション。文字セットがサポートされていない場合は、charset=XXX (XXX はサポートされていない文字セットを表す) が content-type から削除され、代わりにプラットフォームのデフォルトに依存します。

false

ブール値

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

ブール値

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

ブール値

camel.component.mail.mime-decode-headers

このオプションは、メールヘッダーの透過的な MIME デコードとデプロイメントを有効にします。

false

ブール値

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

ブール値

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

ブール値

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

ブール値

camel.component.mail.use-inline-attachments

ディスポジションインラインまたは添付ファイルを使用するかどうか。

false

ブール値

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 データ形式の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

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

ブール値

第32章 マスター

consumer のみがサポートされている

Camel-Master エンドポイントは、クラスター内の単一の consumer のみが特定のエンドポイントから消費するようにする方法を提供します。その JVM が停止した場合の自動フェイルオーバー。

これは、同時消費をサポートしていないレガシーバックエンドから消費する必要がある場合、または商業的または安定性の理由により、任意の時点で 1 つの接続しか持てない場合に非常に役立ちます。

32.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 と呼ばれるすぐに使える機能があります。

32.2. URI 形式

master:namespace:endpoint[?options]

endpoint は、マスター/スレーブモードで実行する任意の Camel エンドポイントです。

32.3. オプションの設定

Camel コンポーネントは、以下の 2 つのレベルで設定されます。

  • コンポーネントレベル
  • エンドポイントレベル

32.3.1. コンポーネントオプションの設定

コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。

コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。

コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。

32.3.2. エンドポイントオプションの設定

多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。

エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。

オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。

以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。

32.4. コンポーネントオプション

マスターコンポーネントは、以下に示す 4 つのオプションをサポートします。

Name説明デフォルトタイプ

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 (advanced)

使用する CamelClusterService を検索するために使用されるサービスセレクターを挿入します。

 

セレクター

32.5. エンドポイントオプション

マスターエンドポイントは、URI 構文を使用して設定されます。

master:namespace:delegateUri

パスおよびクエリーパラメーターを使用します。

32.5.1. パスパラメーター (2 パラメーター)

Name説明デフォルトタイプ

namespace (consumer)

必須 使用するクラスター名前空間の名前。

 

String

delegateUri (consumer)

必須 マスター/スレーブモードで使用するエンドポイント uri。

 

String

32.5.2. クエリーパラメーター (3 パラメーター)

Name説明デフォルトタイプ

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

32.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

32.7. 実装

Camel は、次の ClusterService 実装を提供します。

  • camel-consul
  • camel-file
  • camel-infinispan
  • camel-jgroups-raft
  • camel-jgroups
  • camel-kubernetes
  • camel-zookeeper

32.8. Spring Boot 自動設定

Spring Boot で master を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-master-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に示す 5 個のオプションをサポートします。

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

camel.component.master.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.master.bridge-error-handler

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

false

ブール値

camel.component.master.enabled

マスターコンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.master.service

使用するサービスを注入します。オプションは org.apache.camel.cluster.CamelClusterService タイプです。

 

CamelClusterService

camel.component.master.service-selector

使用する CamelClusterService を検索するために使用されるサービスセレクターを挿入します。オプションは org.apache.camel.cluster.CamelClusterService.Selector タイプです。

 

CamelClusterService$Selector

第33章 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>

33.1. オプションの設定

Camel コンポーネントは、以下の 2 つのレベルで設定されます。

  • コンポーネントレベル
  • エンドポイントレベル

33.1.1. コンポーネントオプションの設定

コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。

コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。

コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。

33.1.2. エンドポイントオプションの設定

多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。

エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。

オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。

以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。

33.2. コンポーネントオプション

MLLP コンポーネントは、以下に示す 30 のオプションをサポートしています。

Name説明デフォルトタイプ

autoAck (共通)

MLLP 確認応答 MLLP consumer のみの自動生成を有効または無効にします。

true

boolean

charsetName (共通)

使用するデフォルトの文字セットを設定します。

 

String

configuration (common)

MLLP エンドポイントの作成時に使用する既定の設定を設定します。

 

MllpConfiguration

hl7Headers (共通)

HL7 メッセージ MLLP consumer のみからのメッセージヘッダーの自動生成を有効または無効にします。

true

boolean

requireEndOfData (common)

MLLP 標準への厳密な準拠を有効/無効にします。MLLP 標準は START_OF_BLOCKhl7 ペイロード END_OF_BLOCKEND_OF_DATA を指定していますが、一部のシステムは最後の END_OF_DATA バイトを送信しません。この設定は、最後の END_OF_DATA バイトが必須かオプションかを制御します。

true

boolean

stringPayload (common)

ペイロードの文字列への変換を有効または無効にします。有効にすると、外部システムから受信した HL7 ペイロードが検証され、文字列に変換されます。charsetName プロパティーが設定されている場合、その文字セットが変換に使用されます。charsetName プロパティーが設定されていない場合、適切な文字セットを決定するために MSH-18 の値が使用されます。MSH-18 が設定されていない場合、デフォルトの ISO-8859-1 文字セットが使用されます。

true

boolean

validatePayload (Common)

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

ブール値

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

ブール値

lazyStartProducer (producer)

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

false

boolean

tcpNoDelay (producer)

TCP_NODELAY ソケットオプションを有効/無効にします。

true

ブール値

autowiredEnabled (上級)

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

boolean

defaultCharset (上級)

バイトから文字列への変換に使用するデフォルトの文字セットを設定します。

ISO-8859-1

String

logPhi (上級)

PHI をログに記録するかどうか。

true

Boolean

logPhiMaxBytes (advanced)

ログエントリーに記録される 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

33.3. エンドポイントオプション

MLLP エンドポイントは、URI 構文を使用して設定されます。

mllp:hostname:port

パスおよびクエリーパラメーターを使用します。

33.3.1. パスパラメーター (2 パラメーター)

Name説明デフォルトタイプ

hostname (共通)

TCP 接続の接続に 必要な ホスト名または IP。デフォルト値は null で、これは任意のローカル IP アドレスを意味します。

 

String

port (共通)

必須 TCP 接続のポート番号。

 

int

33.3.2. クエリーパラメーター (26 パラメーター)

Name説明デフォルトタイプ

autoAck (共通)

MLLP 確認応答 MLLP consumer のみの自動生成を有効または無効にします。

true

boolean

charsetName (共通)

使用するデフォルトの文字セットを設定します。

 

String

hl7Headers (共通)

HL7 メッセージ MLLP consumer のみからのメッセージヘッダーの自動生成を有効または無効にします。

true

boolean

requireEndOfData (common)

MLLP 標準への厳密な準拠を有効/無効にします。MLLP 標準は START_OF_BLOCKhl7 ペイロード END_OF_BLOCKEND_OF_DATA を指定していますが、一部のシステムは最後の END_OF_DATA バイトを送信しません。この設定は、最後の END_OF_DATA バイトが必須かオプションかを制御します。

true

boolean

stringPayload (common)

ペイロードの文字列への変換を有効または無効にします。有効にすると、外部システムから受信した HL7 ペイロードが検証され、文字列に変換されます。charsetName プロパティーが設定されている場合、その文字セットが変換に使用されます。charsetName プロパティーが設定されていない場合、適切な文字セットを決定するために MSH-18 の値が使用されます。MSH-18 が設定されていない場合、デフォルトの ISO-8859-1 文字セットが使用されます。

true

boolean

validatePayload (Common)

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

ブール値

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

ブール値

lazyStartProducer (producer)

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

false

boolean

tcpNoDelay (producer)

TCP_NODELAY ソケットオプションを有効/無効にします。

true

ブール値

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

33.4. MLLP consumer

MLLP consumer は、MLLP フレームメッセージの受信と HL7 確認応答の送信をサポートします。MLLP consumer は、HL7 確認応答 (HL7 アプリケーション確認応答のみ - AA、AE、および AR) を自動的に生成するか、CamelMllpAcknowledgement 交換プロパティーを使用して確認応答を指定できます。さらに、生成される確認応答のタイプは、CamelMllpAcknowledgementType 交換プロパティーを設定することで制御できます。自動受信確認が無効で、交換パターンが InOnly の場合、MLLP consumer は HL7 受信確認を送信せずにメッセージを読み取ることができます。

33.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 です。

33.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 の場合、データを送信した直後にソケットがリセットされます

33.5. MLLP producer

MLLP Producer は、MLLP フレームメッセージの送信と HL7 確認応答の受信をサポートしています。MLLP producer は HL7 確認応答を調べ、否定応答を受信した場合は例外を発生させます。受信した確認応答が調査され、否定応答の場合は例外が発生します。MLLP producer は、InOnly 交換パターンで設定されている場合、確認応答を無視できます。

33.5.1. メッセージヘッダー

MLLP producer は、Camel メッセージに次のヘッダーを追加します。

キー説明

CamelMllpLocalAddress

ソケットのローカル TCP アドレス

CamelMllpRemoteAddress

ソケットのリモート TCP アドレス

CamelMllpAcknowledgement

受信した HL7 確認バイト[]

CamelMllpAcknowledgementString

受信した HL7 確認応答を文字列に変換

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

TCP ソケットの状態は、Camel 交換の次のプロパティーによって制御できます。

キータイプ説明

CamelMllpCloseConnectionBeforeSend

Boolean

true の場合、データを送信する前にソケットが閉じられます

CamelMllpResetConnectionBeforeSend

Boolean

true の場合、データを送信する前にソケットがリセットされます

CamelMllpCloseConnectionAfterSend

Boolean

true の場合、Socket はデータ送信直後に閉じられます

CamelMllpResetConnectionAfterSend

Boolean

true の場合、データを送信した直後にソケットがリセットされます

33.6. Spring Boot 自動設定

Spring Boot で mllp を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-mllp-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 31 のオプションをサポートします。

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

camel.component.mllp.accept-timeout

TCP 接続の待機中のタイムアウト (ミリ秒単位) TCP サーバーのみ。

60000

Integer

camel.component.mllp.auto-ack

MLLP 確認応答 MLLP consumer のみの自動生成を有効または無効にします。

true

ブール値

camel.component.mllp.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

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

ブール値

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 コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.mllp.exchange-pattern

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

 

ExchangePattern

camel.component.mllp.hl7-headers

HL7 メッセージ MLLP consumer のみからのメッセージヘッダーの自動生成を有効または無効にします。

true

ブール値

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

ブール値

camel.component.mllp.lazy-start-producer

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

false

ブール値

camel.component.mllp.lenient-bind

TCP サーバーのみ - TCP ServerSocket がバインドされる前にエンドポイントを開始できるようにします。一部の環境では、TCP ServerSocket がバインドされる前にエンドポイントを開始できるようにすることが望ましい場合があります。

false

ブール値

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

ブール値

camel.component.mllp.reuse-address

SO_REUSEADDR ソケットオプションを有効/無効にします。

false

ブール値

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

ブール値

camel.component.mllp.tcp-no-delay

TCP_NODELAY ソケットオプションを有効/無効にします。

true

ブール値

camel.component.mllp.validate-payload

HL7 ペイロードの検証を有効/無効にする 有効にすると、外部システムから受信した HL7 ペイロードが検証されます (検証の詳細については、Hl7Util.generateInvalidPayloadExceptionMessage を参照してください)。無効なペイロードが検出された場合、MllpInvalidMessageException (consumer の場合) または MllpInvalidAcknowledgementException が出力されます。

false

ブール値

第34章 Mock

producer のみサポート対象

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

モックコンポーネントは強力な宣言型テストメカニズムを提供します。これは、テスト開始前に任意のモックエンドポイントで宣言型期待値を作成できるという点で jMock に似ています。次に、テストが実行され、通常は 1 つ以上のエンドポイントにメッセージが送信されます。最後に、システムが期待どおりに機能することを確認するために、テストケースで期待値をアサートできます。

これにより、次のようなさまざまなことをテストできます。

  • 各エンドポイントで正しい数のメッセージが受信されます。
  • 正しいペイロードが正しい順序で受信され、
  • メッセージは、いくつかの式を使用して順序テスト関数を作成し、エンドポイントに順番に到着します。
  • 到着したメッセージは、特定のヘッダーに特定の値があるなど、ある種の述語に一致するか、XPath または XQuery 式を評価するなどして、メッセージが何らかの述語に一致します。
注記

モックエンドポイントである テストエンドポイント もありますが、2 番目のエンドポイントを使用して、予想されるメッセージ本文のリストを提供し、モックエンドポイントアサーションを自動的に設定します。つまり、たとえば File や database 内のいくつかのサンプルメッセージからアサーションを自動的にセットアップするモックエンドポイントです。

注記

モックエンドポイントは、受信した Exchange を無期限にメモリーに保持します。
Mock はテスト用に設計されていることを思い出してください。モックエンドポイントをルートに追加すると、エンドポイントに送信された各 Exchange は、明示的にリセットするか、JVM を再起動するまで、(後で検証できるようにするために) メモリーに格納されます。大量のメッセージや大きなメッセージを送信すると、メモリーが過剰に使用される可能性があります。デプロイメント可能なルートをインラインでテストすることが目標の場合は、モックエンドポイントをルートに直接追加する代わりに、テストで NotifyBuilder または AdviceWith を使用することを検討してください。Mock エンドポイントがメモリーに保持するメッセージの数を制限するために使用できる、retainFirst と retainLast の 2 つの新しいオプションがあります。

34.1. URI 形式

mock:someName[?options]

someName は、エンドポイントを一意に識別する任意の文字列にすることができます。

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. コンポーネントオプション

Mock コンポーネントは、以下に示す 4 個のオプションをサポートしています。

Name説明デフォルトタイプ

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

34.4. エンドポイントオプション

Mock エンドポイントは、URI 構文を使用して設定されます。

mock:name

パスおよびクエリーパラメーターを使用します。

34.4.1. パスパラメーター(1 パラメーター)

Name説明デフォルトタイプ

name (producer)

必須 モックエンドポイントの名前。

 

String

34.4.2. クエリーパラメーター (12 パラメーター)

Name説明デフォルトタイプ

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 (advanced))

このモックエンドポイントで受信したときに受信 Exchange のディープコピーを作成するかどうかを設定します。デフォルトでは true です。

true

boolean

34.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) メソッドを設定することで設定できます。

34.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();

34.7. 期待値の設定

MockEndpoint の Javadoc から、期待値を設定するために使用できるさまざまなヘルパーメソッドを確認できます。主な方法は次のとおりです。

メソッド説明

expectedMessageCount(int)

エンドポイントで予想されるメッセージ数を定義します。

expectedMinimumMessageCount(int)

エンドポイントで予想されるメッセージの最小数を定義します。

expectedBodiesReceived(…​)

受信する必要があると予想される本文を (順番に) 定義します。

expectedHeaderReceived(…​)

受信する必要があるヘッダーを定義するには

expectsAscending(Expression)

指定された式を使用してメッセージを比較し、メッセージが順番に受信されるという期待を追加します。

expectsDescending(Expression)

指定された式を使用してメッセージを比較し、メッセージが順番に受信されるという期待を追加します。

expectsNoDuplicates(Expression)

重複したメッセージが受信されないという期待を追加するには;式を使用して、各メッセージの一意の識別子を計算します。これは、JMS を使用している場合は JMSMessageID のようなものか、メッセージ内の一意の参照番号です。

別の例を次に示します。

resultEndpoint.expectedBodiesReceived("firstMessageBody", "secondMessageBody", "thirdMessageBody");

34.8. 特定のメッセージに期待を追加する

さらに、message (int messageIndex) メソッドを使用して、受信した特定のメッセージに関するアサーションを追加できます。

たとえば、最初のメッセージのヘッダーまたは本文の予期を追加するには (java.util.List などのゼロから始まるインデックスを使用)、次のコードを使用できます。

resultEndpoint.message(0).header("foo").isEqualTo("bar");

camel-core プロセッサーテスト で使用されている Mock エンドポイントの例がいくつかあります。

34.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 はより多くのメモリーを使用します。大量のメッセージを送信する場合、これは適切ではない場合があります。

34.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"));
            }
        };
    }
}

34.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>

34.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");
            }
        };
    }
}

34.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 個のメッセージに対する期待のみをテストできます。

34.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 も提供しています。

34.15. Spring Boot 自動設定

Spring Boot で mock を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-mock-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に示す 5 個のオプションをサポートします。

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

camel.component.mock.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.mock.enabled

モックコンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

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

ブール値

camel.component.mock.log

モックが着信メッセージを受信したときにロギングをオンにします。これは、着信メッセージの INFO レベルで 1 回だけログに記録されます。より詳細なログを取得するには、ロガーを org.apache.camel.component.mock.MockEndpoint クラスの DEBUG レベルに設定します。

false

ブール値

第35章 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>

35.1. URI 形式

mongodb:connectionBean?database=databaseName&collection=collectionName&operation=operationName[&moreOptions...]

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. コンポーネントオプション

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

35.4. エンドポイントオプション

MongoDB エンドポイントは、URI 構文を使用して設定されます。

mongodb:connectionBean

パスおよびクエリーパラメーターを使用します。

35.4.1. パスパラメーター(1 パラメーター)

Name説明デフォルトタイプ

connectionBean (共通)

必須 データベースに接続するためにクライアントをルックアップするために使用される接続 Bean 参照を設定します。

 

String

35.4.2. クエリーパラメーター (27 パラメーター)

Name説明デフォルトタイプ

collection (共通)

このエンドポイントにバインドする MongoDB コレクションの名前を設定します。

 

String

collectionIndex (共通)

コレクションのインデックスを設定します (JSON FORMAT : \\{ field1 : order1、field2 : order2})。

 

String

createCollection (Common)

コレクションが存在しない場合は、初期化中にコレクションを作成します。デフォルトは true です。

true

boolean

database (共通)

ターゲットに設定する MongoDB データベースの名前を設定します。

 

String

hosts (共通)

host:port 形式の mongodb サーバーのホストアドレス。ホストのコンマ区切りリストとして、複数のアドレスを使用することもできます: host1:port1,host2:port2。hosts パラメーターが指定されている場合、指定された connectionBean は無視されます。

 

String

mongoConnection (共通)

データベースに接続するためのクライアントとして使用される接続 Bean を設定します。

 

MongoClient

operation (common)

このエンドポイントが MongoDB に対して実行する操作を設定します。

列挙値:

  • findById
  • findOneByQuery
  • findAll
  • findDistinct
  • insert
  • save
  • update
  • remove
  • bulkWrite
  • aggregate
  • getDbStats
  • getColStats
  • count
  • command
 

MongoDbOperation

outputType (common)

プロデューサの出力を選択したタイプ (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 (advanced)

MongoDB の Tailable カーソルは、新しいデータが到着するまでブロックされます。新しいデータが挿入されない場合、しばらくするとカーソルが自動的に解放され、MongoDB サーバーによって閉じられます。クライアントは、必要に応じてカーソルを再生成する必要があります。この値は、新しいカーソルのフェッチを試行するまでの待機時間と、試行が失敗した場合に次の試行が行われるまでの時間を指定します。デフォルト値は 1000ms です。

1000

long

dynamicity (advanced)

このエンドポイントが受信 Exchange プロパティーからターゲットデータベースとコレクションを動的に解決しようとするかどうかを設定します。それ以外の場合は静的なエンドポイント URI で指定されたデータベースとコレクションを実行時にオーバーライドするために使用できます。パフォーマンスを向上させるために、デフォルトでは無効になっています。有効にすると、パフォーマンスへの影響は最小限に抑えられます。

false

boolean

readPreference (advanced)

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 (advanced)

書き込み操作では、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

35.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>

35.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>

35.7. MongoDB 操作 - producer エンドポイント

35.7.1. クエリー操作

35.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");
注記

オプションのパラメーターをサポート
この操作は射影演算子をサポートしています。フィールドフィルターの指定 (プロジェクション) を参照。

35.7.1.2. findOneByQuery

MongoDB クエリーセレクターに一致するコレクションから最初の要素を取得します。CamelMongoDbCriteria ヘッダーが設定されている場合、その値はクエリーセレクターとして使用されますCamelMongoDbCriteria ヘッダーが null の場合、IN メッセージ本文がクエリーセレクターとして使用されます。どちらの場合も、クエリーセレクターは Bson 型であるか、Bson に変換可能である必要があります (たとえば、JSON 文字列または HashMap)。詳細については、型変換を参照してください。

MongoDB ドライバーが提供する Filters を使用して、クエリーセレクターを作成します。

35.7.1.3. クエリーセレクターを使用しない例 (コレクション内の最初のドキュメントを返します)

from("direct:findOneByQuery")
    .to("mongodb:myDb?database=flights&collection=tickets&operation=findOneByQuery")
    .to("mock:resultFindOneByQuery");

35.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");
注記

オプションのパラメーターをサポート
この操作は、射影演算子とソート句をサポートしています。フィールドフィルター (射影) の指定、並べ替え句の指定を参照してください。

35.7.1.5. findAll

findAll オペレーションは、クエリーに一致するすべてのドキュメントを返すか、またはまったく一致しないドキュメントを返します。この場合、コレクションに含まれるすべてのドキュメントが返されます。クエリーオブジェクトは CamelMongoDbCriteria ヘッダーから抽出されます。CamelMongoDbCriteria ヘッダーが null の場合、クエリーオブジェクトは抽出されたメッセージ本文です。つまり、タイプ Bson であるか、または Bson に変換可能である必要があります。JSON 文字列または Hashmap にすることができます。詳細については、型変換を参照してください。

35.7.1.5.1. クエリーセレクターを使用しない例 (コレクション内のすべてのドキュメントを返します)
from("direct:findAll")
    .to("mongodb:myDb?database=flights&collection=tickets&operation=findAll")
    .to("mock:resultFindAll");
35.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

35.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

注記

オプションのパラメーターをサポート
この操作は、射影演算子とソート句をサポートしています。フィールドフィルター (射影) の指定、並べ替え句の指定を参照してください。

35.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");

35.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);

35.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");

35.7.2. 操作の作成/更新

35.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 によって更新されることに注意してください。

35.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);

35.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);

35.7.3. 操作の削除

35.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() からコピーされた) レコードの数を含みます。

35.7.4. 一括書き込み操作

35.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

35.7.5. その他の操作

35.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() を呼び出す必要があります。

35.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 の形式で返します。

35.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 の形式で返します。

35.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);

35.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);

35.8. Consumers

consumer にはいくつかのタイプがあります。

  1. Tailable Cursor consumer
  2. Change Streams consumer

35.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 はそれらをエクスチェンジに変換し、ルートロジックをトリガーします。

35.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 キャップコレクションから消費します。

35.10. 永続的なテールトラッキング

標準のテールトラッキングは揮発性であり、最後の値はメモリーにのみ保持されます。ただし、実際には Camel コンテナーを時々再起動する必要がありますが、最後の値は失われ、tailable cursor consumer は再び先頭から消費を開始し、ルートに重複レコードを送信する可能性が非常に高くなります。

この状況を克服するために、永続的なテール追跡 機能を有効にして、MongoDB データベース内の特別なコレクションで最後に消費された増加値を追跡することもできます。consumer が再び初期化されると、最後に追跡された値が復元され、何も起こらなかったかのように続行されます。

最後に読み取られた値は、カーソルが再生成されるたびと consumer がシャットダウンするときの 2 つの場合に保持されます。需要があれば、堅牢性を高めるために、将来的には定期的な間隔 (5 秒ごとにフラッシュ) で永続化することも検討する可能性があります。この機能をリクエストするには、Camel JIRA でチケットを開いてください。

35.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");

35.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

35.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> に変換します。

この型コンバーターは自動検出されるため、手動で設定する必要はありません。

35.13. Spring Boot 自動設定

Spring Boot で mongodb を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-mongodb-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に示す 5 個のオプションをサポートします。

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

camel.component.mongodb.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.mongodb.bridge-error-handler

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

false

ブール値

camel.component.mongodb.enabled

mongodb コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.mongodb.lazy-start-producer

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

false

ブール値

camel.component.mongodb.mongo-connection

接続に使用される共有クライアント。コンポーネントから生成されたすべてのエンドポイントは、この接続クライアントを共有します。オプションは com.mongodb.client.MongoClient タイプです。

 

MongoClient

第36章 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>

36.1. URI 形式

netty コンポーネントの URI スキームは次のとおりです。

netty:tcp://0.0.0.0:99999[?options]
netty:udp://remotehost:99999/[?options]

このコンポーネントは、TCP と UDP の両方の producer エンドポイントと consumer エンドポイントをサポートします。

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. コンポーネントオプション

Netty コンポーネントは、以下に示す 73 個のオプションをサポートしています。

Name説明デフォルトタイプ

configuration (共通)

エンドポイントの作成時に NettyConfiguration を設定として使用するには。

 

NettyConfiguration

disconnect (共通)

使用直後に Netty Channel を切断 (クローズ) するかどうか。consumer と producer の両方に使用できます。

false

boolean

keepAlive (共通)

非アクティブのためにソケットが閉じられないようにするための設定。

true

boolean

reuseAddress (共通)

ソケットの多重化を容易にするための設定。

true

boolean

reuseChannel (common)

このオプションにより、producer と consumer (クライアントモード) は、エクスチェンジを処理するライフサイクルで同じ Netty チャネルを再利用できます。これは、Camel ルートでサーバーを複数回呼び出す必要があり、同じネットワーク接続を使用したい場合に便利です。これを使用すると、チャネルはエクスチェンジが完了するまで接続プールに返されません。または、切断オプションが true に設定されている場合は切断されます。再利用されたチャネルは、キー NettyConstants#NETTY_CHANNEL を持つエクスチェンジプロパティーとしてエクスチェンジに保存されます。これにより、ルーティング中にチャネルを取得して使用することもできます。

false

boolean

sync (common)

エンドポイントを一方向または要求応答として設定する設定。

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 (advanced))

同期が有効になっている場合、このオプションは NettyConsumer がログに記録するときに使用するログレベルを決定し、返信する応答がありません。

列挙値:

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

WARN

LoggingLevel

serverClosedChannelExceptionCaughtLogLevel (consumer (advanced))

サーバー (NettyConsumer) が java.nio.channels.ClosedChannelException をキャッチすると、このログレベルを使用してログに記録されます。これは、クローズドチャネル例外のログ記録を回避するために使用されます。これは、クライアントが突然切断され、Netty サーバーでクローズド例外のフラッドが発生する可能性があるためです。

列挙値:

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

DEBUG

LoggingLevel

serverExceptionCaughtLogLevel (consumer (advanced))

サーバー (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 (advanced))

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 (advanced))

アイドル状態のオブジェクト Evictor によるエビクションの対象となる前に、オブジェクトがプール内でアイドル状態になる最小時間 (ミリ単位の値) を設定します。

300000

long

producerPoolMinIdle (producer (advanced))

evictor スレッド (アクティブな場合) が新しいオブジェクトを生成する前に、producer プールで許可されるインスタンスの最小数を設定します。

 

int

udpConnectionlessSending (producer (上級))

このオプションは接続のない UDP 送信をサポートします。接続された udp send は、受信ポートでリッスンしている人がいない場合、PortUnreachableException を受け取ります。

false

boolean

useByteBuf (producer (上級))

useByteBuf が true の場合、netty producer はメッセージ本文を送信する前に ByteBuf に変換します。

false

boolean

ホスト名検証 (セキュリティー)

SSLEngine でのホスト名検証を有効または無効にします。

false

boolean

allowSerializedHeaders (advanced)

transferExchange が true の場合にのみ TCP に使用されます。true に設定すると、ヘッダーとプロパティーのシリアル化可能なオブジェクトが交換に追加されます。そうしないと、Camel はシリアル化できないオブジェクトを除外し、WARN レベルでログに記録します。

false

boolean

autowiredEnabled (上級)

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

boolean

channelGroup (上級)

明示的な ChannelGroup を使用するには。

 

ChannelGroup

nativeTransport (advanced)

NIO の代わりにネイティブトランスポートを使用するかどうか。ネイティブトランスポートはホストオペレーティングシステムを利用し、一部のプラットフォームでのみサポートされます。使用しているホストオペレーティングシステムの netty JAR を追加する必要があります。詳細については、を参照してください。

false

boolean

options (advanced)

オプションを使用して、追加の netty オプションを設定できます。接頭辞として。たとえば、netty オプション child.keepAlive=false を設定するには、option.child.keepAlive=false とします。使用可能なオプションについては、Netty のドキュメントを参照してください。

 

Map

receiveBufferSize (advanced)

インバウンド通信中に使用される TCP/UDP バッファーサイズ。サイズはバイトです。

65536

int

receiveBufferSizePredictor (advanced)

バッファーサイズプレディクターを設定します。詳細は、Jetty のドキュメントとこのメールスレッドを参照してください。

 

int

sendBufferSize (advanced)

アウトバウンド通信中に使用される TCP/UDP バッファーサイズ。サイズはバイトです。

65536

int

transferExchange (上級)

TCP にのみ使用されます。ボディーだけでなく、ネットワーク経由でエクスチェンジを転送することができます。In body、Out body、fault body、In ヘッダー、Out ヘッダー、Fault ヘッダー、exchange プロパティー、exchange 例外フィールドが転送されます。これには、オブジェクトがシリアライズ可能である必要があります。Camel はシリアル化できないオブジェクトを除外し、WARN レベルでログに記録します。

false

boolean

udpByteArrayCodec (advanced)

UDP 専用です。Java シリアライゼーションプロトコルの代わりにバイト配列コーデックの使用を有効にした場合。

false

boolean

workerCount (上級)

netty が nio モードで動作する場合、Netty のデフォルトの workerCount パラメーター (cpu_core_threads x 2) を使用します。ユーザーはこのオプションを使用して、Netty のデフォルトの workerCount をオーバーライドできます。

 

int

workerGroup (advanced)

ボススレッドプールとして明示的な 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

36.4. エンドポイントオプション

Netty エンドポイントは、URI 構文を使用して設定されます。

netty:protocol://host:port

パスおよびクエリーパラメーターを使用します。

36.4.1. パスパラメーター (3 パラメーター)

Name説明デフォルトタイプ

protocol (共通)

必須 tcp または udp の使用するプロトコル。

列挙値:

  • tcp
  • udp
 

String

host (共通)

必須 ホスト名。consumer の場合、ホスト名は localhost または 0.0.0.0 です。producer の場合、ホスト名は接続先のリモートホストです。

 

String

port (共通)

必須 ホストのポート番号。

 

int

36.4.2. クエリーパラメーター (71 パラメーター)

Name説明デフォルトタイプ

disconnect (Common)

使用直後に Netty Channel を切断 (クローズ) するかどうか。consumer と producer の両方に使用できます。

false

boolean

keepAlive (共通)

非アクティブのためにソケットが閉じられないようにするための設定。

true

boolean

reuseAddress (共通)

ソケットの多重化を容易にするための設定。

true

boolean

reuseChannel (common)

このオプションにより、producer と consumer (クライアントモード) は、エクスチェンジを処理するライフサイクルで同じ Netty チャネルを再利用できます。これは、Camel ルートでサーバーを複数回呼び出す必要があり、同じネットワーク接続を使用したい場合に便利です。これを使用すると、チャネルはエクスチェンジが完了するまで接続プールに返されません。または、切断オプションが true に設定されている場合は切断されます。再利用されたチャネルは、キー NettyConstants#NETTY_CHANNEL を持つエクスチェンジプロパティーとしてエクスチェンジに保存されます。これにより、ルーティング中にチャネルを取得して使用することもできます。

false

boolean

sync (common)

エンドポイントを一方向または要求応答として設定する設定。

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 (advanced))

同期が有効になっている場合、このオプションは NettyConsumer がログに記録するときに使用するログレベルを決定し、返信する応答がありません。

列挙値:

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

WARN

LoggingLevel

serverClosedChannelExceptionCaughtLogLevel (consumer (advanced))

サーバー (NettyConsumer) が java.nio.channels.ClosedChannelException をキャッチすると、このログレベルを使用してログに記録されます。これは、クローズドチャネル例外のログ記録を回避するために使用されます。これは、クライアントが突然切断され、Netty サーバーでクローズド例外のフラッドが発生する可能性があるためです。

列挙値:

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

DEBUG

LoggingLevel

serverExceptionCaughtLogLevel (consumer (advanced))

サーバー (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 (advanced))

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 (advanced))

アイドル状態のオブジェクト Evictor によるエビクションの対象となる前に、オブジェクトがプール内でアイドル状態になる最小時間 (ミリ単位の値) を設定します。

300000

long

producerPoolMinIdle (producer (advanced))

evictor スレッド (アクティブな場合) が新しいオブジェクトを生成する前に、producer プールで許可されるインスタンスの最小数を設定します。

 

int

udpConnectionlessSending (producer (上級))

このオプションは接続のない UDP 送信をサポートします。接続された udp send は、受信ポートでリッスンしている人がいない場合、PortUnreachableException を受け取ります。

false

boolean

useByteBuf (producer (上級))

useByteBuf が true の場合、netty producer はメッセージ本文を送信する前に ByteBuf に変換します。

false

boolean

ホスト名検証 (セキュリティー)

SSLEngine でのホスト名検証を有効または無効にします。

false

boolean

allowSerializedHeaders (advanced)

transferExchange が true の場合にのみ TCP に使用されます。true に設定すると、ヘッダーとプロパティーのシリアル化可能なオブジェクトが交換に追加されます。そうしないと、Camel はシリアル化できないオブジェクトを除外し、WARN レベルでログに記録します。

false

boolean

channelGroup (上級)

明示的な ChannelGroup を使用するには。

 

ChannelGroup

nativeTransport (advanced)

NIO の代わりにネイティブトランスポートを使用するかどうか。ネイティブトランスポートはホストオペレーティングシステムを利用し、一部のプラットフォームでのみサポートされます。使用しているホストオペレーティングシステムの netty JAR を追加する必要があります。詳細については、を参照してください。

false

boolean

options (advanced)

オプションを使用して、追加の netty オプションを設定できます。接頭辞として。たとえば、netty オプション child.keepAlive=false を設定するには、option.child.keepAlive=false とします。使用可能なオプションについては、Netty のドキュメントを参照してください。

 

Map

receiveBufferSize (advanced)

インバウンド通信中に使用される TCP/UDP バッファーサイズ。サイズはバイトです。

65536

int

receiveBufferSizePredictor (advanced)

バッファーサイズプレディクターを設定します。詳細は、Jetty のドキュメントとこのメールスレッドを参照してください。

 

int

sendBufferSize (advanced)

アウトバウンド通信中に使用される TCP/UDP バッファーサイズ。サイズはバイトです。

65536

int

synchronous (上級)

同期処理を厳密に使用するかどうかを設定します。

false

boolean

transferExchange (advanced)

TCP にのみ使用されます。ボディーだけでなく、ネットワーク経由でエクスチェンジを転送することができます。In body、Out body、fault body、In ヘッダー、Out ヘッダー、Fault ヘッダー、exchange プロパティー、exchange 例外フィールドが転送されます。これには、オブジェクトがシリアライズ可能である必要があります。Camel はシリアル化できないオブジェクトを除外し、WARN レベルでログに記録します。

false

boolean

udpByteArrayCodec (advanced)

UDP 専用です。Java シリアライゼーションプロトコルの代わりにバイト配列コーデックの使用を有効にした場合。

false

boolean

workerCount (上級)

netty が nio モードで動作する場合、Netty のデフォルトの workerCount パラメーター (cpu_core_threads x 2) を使用します。ユーザーはこのオプションを使用して、Netty のデフォルトの workerCount をオーバーライドできます。

 

int

workerGroup (advanced)

ボススレッドプールとして明示的な 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

36.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 がルックアップする必要があることを認識できるように、値の前に # を付けることを忘れないでください。

注記

共有不可能なエンコーダー/デコーダーの使用については、以下をお読みください。

36.5.1. 共有不可能なエンコーダーまたはデコーダーの使用

エンコーダーまたはデコーダーが共有可能でない場合 (たとえば、@Shareable クラスアノテーションがない場合)、エンコーダー/デコーダーは org.apache.camel.component.netty.ChannelHandlerFactory インターフェイスを実装し、newChannelHandler メソッドで新しいインスタンスを返さなければなりません。これは、エンコーダー/デコーダーを安全に使用できるようにするためです。そうでない場合、Netty コンポーネントは、エンドポイントの作成時に WARN をログに記録します。

Netty コンポーネントは、多くの一般的に使用されるメソッドを持つ org.apache.camel.component.netty.ChannelHandlerFactories ファクトリークラスを提供します。

36.6. Netty エンドポイントとの間でメッセージを送信する

36.6.1. Netty producer

Producer モードでは、コンポーネントは、TCP または UDP プロトコル (オプションの SSL サポート付き) を使用してペイロードをソケットエンドポイントに送信する機能を提供します。

producer モードは、一方向および要求/応答ベースの操作の両方をサポートします。

36.6.2. Netty consumer

consumer モードでは、コンポーネントは次の機能を提供します。

  • TCP または UDP プロトコル (オプションの SSL サポート付き) を使用して、指定されたソケットでリッスンします。
  • text/xml、バイナリーおよびシリアライズされたオブジェクトベースのペイロードを使用してソケットでリクエストを受信し、
  • メッセージ交換としてルートに沿ってそれらを送信します。

consumer モードは、一方向および要求/応答ベースの操作の両方をサポートします。

36.7. 例

36.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);
         }
       }
    }
};

36.7.2. 一方向通信を使用する TCP ベースの Netty consumer エンドポイント

RouteBuilder builder = new RouteBuilder() {
  public void configure() {
       from("netty:tcp://0.0.0.0:5150")
           .to("mock:result");
  }
};

36.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 ですぐに利用できます。

36.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>

36.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);
        }
    }
});

カスタムチャネルパイプラインファクトリーを追加して、作成されたパイプラインを完全に制御します。

36.9. カスタムパイプライン

カスタムチャネルパイプラインは、Netty エンドポイント URL で非常に簡単な方法で指定することなく、カスタムハンドラー、エンコーダー、デコーダーを挿入することで、ハンドラー/インターセプターチェーンを完全に制御します。

カスタムパイプラインを追加するには、カスタムチャネルパイプラインファクトリーを作成し、コンテキストレジストリー (Registry、または camel-spring ApplicationContextRegistry など) を介してコンテキストに登録する必要があります。

カスタムパイプラインファクトリーは、次のように構築する必要があります。

  • producer にリンクされたチャネルパイプラインファクトリーは、抽象クラス ClientPipelineFactory を拡張する必要があります。
  • consumer リンクチャネルパイプラインファクトリーは、抽象クラス ServerInitializerFactory を拡張する必要があります。
  • カスタムハンドラー、エンコーダ、およびデコーダを挿入するには、クラスで initChannel () メソッドをオーバーライドする必要があります。initChannel() メソッドをオーバーライドしないと、パイプラインに接続されたハンドラー、エンコーダー、またはデコーダーのないパイプラインが作成されます。

以下の例は、ServerInitializerFactory ファクトリーを作成する方法を示しています。

36.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);
          }
       }
  }
});

36.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>

などがあります。

36.11. リクエスト/リプライによる単一接続での同時メッセージの多重化

netty producer を介した要求/応答メッセージングに Netty を使用する場合、デフォルトでは、各メッセージは非共有接続 (プール) を介して送信されます。これにより、返信が自動的に正しいリクエストスレッドにマップされ、Camel でさらにルーティングできるようになります。言い換えると、リクエスト/リプライメッセージ間の相関関係は、リクエストの送信に使用されたのと同じ接続でリプライが返されるため、すぐに使用できます。この接続は他のユーザーと共有されません。応答が戻ってくると、接続は接続プールに戻され、他のユーザーが再利用できるようになります。

ただし、単一の共有接続で同時要求/応答を多重化したい場合は、producerPoolEnabled=false を設定して接続プールをオフにする必要があります。これは、返信が順不同で戻ってきた場合、インタリーブされた応答に潜在的な問題があることを意味します。したがって、Camel でメッセージの処理を継続するロールを持つ Camel コールバックに応答を適切に関連付けることができるように、要求メッセージと応答メッセージの両方に相関 ID が必要です。これを行うには、NettyCamelStateCorrelationManager を相関マネージャーとして実装し、correlationManager=#myManager オプションを介して設定する必要があります。

注記

カスタム相関マネージャーを作成するときは、TimeoutCorrelationManagerSupport を拡張することをお勧めします。これにより、タイムアウトや他の方法で実装する必要があるその他の複雑さもサポートされます。

camel-example-netty-custom-correlation ディレクトリーの下の examples ディレクトリーに、Apache Camel ソースコードの例があります。

36.12. Spring Boot 自動設定

Spring Boot で Netty を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-netty-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 74 のオプションをサポートします。

Name説明デフォルトタイプ

camel.component.netty.allow-default-codec

netty コンポーネントは、encoder/decoder が null で textline が false の場合、デフォルトのコーデックをインストールします。allowDefaultCodec を false に設定すると、netty コンポーネントがデフォルトコーデックをフィルターチェーンの最初の要素としてインストールするのを防ぎます。

true

ブール値

camel.component.netty.allow-serialized-headers

transferExchange が true の場合にのみ TCP に使用されます。true に設定すると、ヘッダーとプロパティーのシリアル化可能なオブジェクトが交換に追加されます。そうしないと、Camel はシリアル化できないオブジェクトを除外し、WARN レベルでログに記録します。

false

ブール値

camel.component.netty.auto-append-delimiter

テキストラインコーデックを使用して送信するときに、不足している終了区切り文字を自動追加するかどうか。

true

ブール値

camel.component.netty.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

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.netty.channel.EventLoopGroup タイプです。

 

EventLoopGroup

camel.component.netty.bridge-error-handler

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

false

ブール値

camel.component.netty.broadcast

UDP 経由のマルチキャストを選択するための設定。

false

ブール値

camel.component.netty.channel-group

明示的な ChannelGroup を使用するには。オプションは io.netty.channel.group.ChannelGroup タイプです。

 

ChannelGroup

camel.component.netty.client-initializer-factory

カスタム ClientInitializerFactory を使用するには。オプションは org.apache.camel.component.netty.ClientInitializerFactory タイプです。

 

ClientInitializerFactory

camel.component.netty.client-mode

clientMode が true の場合、netty consumer はアドレスを TCP クライアントとして接続します。

false

ブール値

camel.component.netty.configuration

エンドポイントの作成時に NettyConfiguration を設定として使用するには。オプションは org.apache.camel.component.netty.NettyConfiguration タイプです。

 

NettyConfiguration

camel.component.netty.connect-timeout

ソケット接続が使用可能になるまで待機する時間。値はミリ秒単位です。

10000

Integer

camel.component.netty.correlation-manager

カスタム相関マネージャーを使用して、netty producer で要求/応答を使用するときに、要求メッセージと応答メッセージがどのようにマップされるかを管理します。これは、要求メッセージと応答メッセージの両方に相関 ID がある場合など、要求を応答と一緒にマップする方法がある場合にのみ使用してください。これは、netty の同じチャネル (別名接続) で同時メッセージを多重化したい場合に使用できます。これを行う場合、リクエストメッセージと応答メッセージを相互に関連付ける方法が必要です。これにより、継続してルーティングされる前に、進行中の Camel エクスチェンジに正しい応答を格納できます。カスタム相関マネージャーを作成するときは、TimeoutCorrelationManagerSupport を拡張することをお勧めします。これにより、タイムアウトや他の方法で実装する必要があるその他の複雑さもサポートされます。詳細については、producerPoolEnabled オプションも参照してください。オプションは org.apache.camel.component.netty.NettyCamelStateCorrelationManager タイプです。

 

NettyCamelStateCorrelationManager

camel.component.netty.decoder-max-line-length

テキストラインコーデックに使用する行の最大長。

1024

Integer

camel.component.netty.decoders

使用するデコーダーのリスト。コンマで区切られた値を持つ文字列を使用して、値をレジストリーで検索することができます。Camel がルックアップする必要があることを認識できるように、値の前に # を付けることを忘れないでください。

 

String

camel.component.netty.delimiter

テキストラインコーデックに使用する区切り文字。可能な値は LINE と NULL です。

 

TextLineDelimiter

camel.component.netty.disconnect

使用直後に Netty Channel を切断 (クローズ) するかどうか。consumer と producer の両方に使用できます。

false

ブール値

camel.component.netty.disconnect-on-no-reply

同期が有効になっている場合、このオプションは、返信がない場合に NettyConsumer を切断するかどうかを指定します。

true

ブール値

camel.component.netty.enabled

netty コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.netty.enabled-protocols

SSL を使用するときに有効にするプロトコル。

TLSv1,TLSv1.1,TLSv1.2

String

camel.component.netty.encoders

使用するエンコーダーのリスト。コンマで区切られた値を持つ文字列を使用して、値をレジストリーで検索することができます。Camel がルックアップする必要があることを認識できるように、値の前に # を付けることを忘れないでください。

 

String

camel.component.netty.encoding

テキスト行コーデックに使用するエンコーディング (文字セット名)。指定しない場合、Camel は JVM のデフォルトの文字セットを使用します。

 

String

camel.component.netty.executor-service

指定された EventExecutorGroup を使用します。オプションは io.netty.util.concurrent.EventExecutorGroup タイプです。

 

EventExecutorGroup

camel.component.netty.hostname-verification

SSLEngine でのホスト名検証を有効または無効にします。

false

ブール値

camel.component.netty.keep-alive

非アクティブのためにソケットが閉じられないようにするための設定。

true

ブール値

camel.component.netty.key-store-file

暗号化に使用されるクライアント側の証明書キーストア。

 

File

camel.component.netty.key-store-format

ペイロードの暗号化に使用されるキーストア形式。設定されていない場合、デフォルトで JKS になります。

 

String

camel.component.netty.key-store-resource

暗号化に使用されるクライアント側の証明書キーストア。デフォルトではクラスパスからロードされますが、classpath:、file:、または http: をプレフィックとして指定して、異なるシステムからリソースをロードすることもできます。

 

String

camel.component.netty.lazy-channel-creation

Camel producer の起動時にリモートサーバーが稼働していない場合は、例外を回避するためにチャネルを遅延作成できます。

true

ブール値

camel.component.netty.lazy-start-producer

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

false

ブール値

camel.component.netty.maximum-pool-size

netty consumer が注文したスレッドプールの最大スレッドプールサイズを設定します。デフォルトのサイズは 2 x cpu_core プラス 1 です。この値をたとえば 10 に設定すると、2 x cpu_core に 1 を加えた値がより高い値でない限り、10 スレッドが使用され、オーバーライドされて使用されます。たとえば、8 つのコアがある場合、consumer スレッドプールは 17 になります。このスレッドプールは、Netty から受信したメッセージを Camel がルーティングするために使用されます。メッセージの順序を確認するために別のスレッドプールを使用します。また、一部のメッセージがブロックされた場合に備えて、nettys ワーカースレッド (イベントループ) は影響を受けません。

 

Integer

camel.component.netty.native-transport

NIO の代わりにネイティブトランスポートを使用するかどうか。ネイティブトランスポートはホストオペレーティングシステムを利用し、一部のプラットフォームでのみサポートされます。使用しているホストオペレーティングシステムの netty JAR を追加する必要があります。詳細については、を参照してください。

false

ブール値

camel.component.netty.need-client-auth

SSL の使用時にサーバーがクライアント認証を必要とするかどうかを設定します。

false

ブール値

camel.component.netty.netty-server-bootstrap-factory

カスタム NettyServerBootstrapFactory を使用するには。オプションは org.apache.camel.component.netty.NettyServerBootstrapFactory タイプです。

 

NettyServerBootstrapFactory

camel.component.netty.network-interface

UDP を使用する場合、このオプションを使用してネットワークインターフェイスをその名前で指定できます (マルチキャストグループに参加するための eth0 など)。

 

String

camel.component.netty.no-reply-log-level

同期が有効になっている場合、このオプションは NettyConsumer がログに記録するときに使用するログレベルを決定し、返信する応答がありません。

 

LoggingLevel

camel.component.netty.options

オプションを使用して、追加の netty オプションを設定できます。接頭辞として。たとえば、netty オプション child.keepAlive=false を設定するには、option.child.keepAlive=false とします。使用可能なオプションについては、Netty のドキュメントを参照してください。

 

マップ

camel.component.netty.passphrase

SSH を使用して送信されたペイロードを暗号化/復号化するために使用するパスワード設定。

 

String

camel.component.netty.producer-pool-enabled

producer プールが有効かどうか。重要: これをオフにすると、リクエスト/リプライを実行している場合にも、単一の共有接続が producer に使用されます。つまり、返信が順不同で戻ってきた場合、インタリーブされた応答に問題が生じる可能性があります。したがって、Camel でメッセージの処理を継続するロールを持つ Camel コールバックに応答を適切に関連付けることができるように、要求メッセージと応答メッセージの両方に相関 ID が必要です。これを行うには、NettyCamelStateCorrelationManager を相関マネージャーとして実装し、correlationManager オプションを介して設定する必要があります。詳細は、correlationManager オプションも参照してください。

true

ブール値

camel.component.netty.producer-pool-max-idle

プール内のアイドルインスタンス数の上限を設定します。

100

Integer

camel.component.netty.producer-pool-max-total

特定の時間にプールによって割り当てられる (クライアントにチェックアウトされるか、チェックアウトを待機するアイドル) オブジェクトの数に上限を設定します。無制限の場合は負の値を使用します。

-1

Integer

camel.component.netty.producer-pool-min-evictable-idle

アイドル状態のオブジェクト Evictor によるエビクションの対象となる前に、オブジェクトがプール内でアイドル状態になる最小時間 (ミリ単位の値) を設定します。

300000

Long

camel.component.netty.producer-pool-min-idle

evictor スレッド (アクティブな場合) が新しいオブジェクトを生成する前に、producer プールで許可されるインスタンスの最小数を設定します。

 

Integer

camel.component.netty.receive-buffer-size

インバウンド通信中に使用される TCP/UDP バッファーサイズ。サイズはバイトです。

65536

Integer

camel.component.netty.receive-buffer-size-predictor

バッファーサイズプレディクターを設定します。詳細は、Jetty のドキュメントとこのメールスレッドを参照してください。

 

Integer

camel.component.netty.reconnect

consumer の clientMode でのみ使用されます。これが有効になっている場合、consumer は切断時に再接続を試みます。

true

ブール値

camel.component.netty.reconnect-interval

再接続し、clientMode が有効になっている場合に使用されます。再接続を試みる間隔 (ミリ秒)。

10000

Integer

camel.component.netty.request-timeout

リモートサーバーを呼び出すときに、Netty producer のタイムアウトを使用できるようにします。デフォルトでは、タイムアウトは使用されていません。値はミリ秒単位なので、たとえば 30000 は 30 秒です。requestTimeout は、Netty の ReadTimeoutHandler を使用してタイムアウトをトリガーしています。

 

Long

camel.component.netty.reuse-address

ソケットの多重化を容易にするための設定。

true

ブール値

camel.component.netty.reuse-channel

このオプションにより、producer と consumer (クライアントモード) は、エクスチェンジを処理するライフサイクルで同じ Netty チャネルを再利用できます。これは、Camel ルートでサーバーを複数回呼び出す必要があり、同じネットワーク接続を使用したい場合に便利です。これを使用すると、チャネルはエクスチェンジが完了するまで接続プールに返されません。または、切断オプションが true に設定されている場合は切断されます。再利用されたチャネルは、キー NettyConstants#NETTY_CHANNEL を持つエクスチェンジプロパティーとしてエクスチェンジに保存されます。これにより、ルーティング中にチャネルを取得して使用することもできます。

false

ブール値

camel.component.netty.security-provider

ペイロードの暗号化に使用するセキュリティープロバイダー。設定されていない場合、デフォルトは SunX509 です。

 

String

camel.component.netty.send-buffer-size

アウトバウンド通信中に使用される TCP/UDP バッファーサイズ。サイズはバイトです。

65536

Integer

camel.component.netty.server-closed-channel-exception-caught-log-level

サーバー (NettyConsumer) が java.nio.channels.ClosedChannelException をキャッチすると、このログレベルを使用してログに記録されます。これは、クローズドチャネル例外のログ記録を回避するために使用されます。これは、クライアントが突然切断され、Netty サーバーでクローズド例外のフラッドが発生する可能性があるためです。

 

LoggingLevel

camel.component.netty.server-exception-caught-log-level

サーバー (NettyConsumer) が例外をキャッチすると、このログレベルを使用してログに記録されます。

 

LoggingLevel

camel.component.netty.server-initializer-factory

カスタム ServerInitializerFactory を使用するには。オプションは org.apache.camel.component.netty.ServerInitializerFactory タイプです。

 

ServerInitializerFactory

camel.component.netty.ssl

このエンドポイントに SSL 暗号化を適用するかどうかを指定する設定。

false

ブール値

camel.component.netty.ssl-client-cert-headers

有効で SSL モードの場合、Netty consumer は、サブジェクト名、発行者名、シリアル番号、有効な日付範囲などのクライアント証明書に関する情報を含むヘッダーで Camel メッセージを強化します。

false

ブール値

camel.component.netty.ssl-context-parameters

SSLContextParameters を使用してセキュリティーを設定する場合。オプションは org.apache.camel.support.jsse.SSLContextParameters タイプです。

 

SSLContextParameters

camel.component.netty.ssl-handler

SSL ハンドラーを返すために使用できるクラスへの参照。オプションは io.netty.handler.ssl.SslHandler タイプです。

 

SslHandler

camel.component.netty.sync

エンドポイントを一方向または要求応答として設定する設定。

true

ブール値

camel.component.netty.tcp-no-delay

TCP プロトコルのパフォーマンスを向上させるための設定。

true

ブール値

camel.component.netty.textline

TCP にのみ使用されます。コーデックが指定されていない場合、このフラグを使用して、テキスト行ベースのコーデックを示すことができます。指定されていない場合、または値が false の場合、オブジェクトのシリアル化は TCP 経由であると想定されますが、デフォルトでシリアル化できるのは文字列のみです。

false

ブール値

camel.component.netty.transfer-exchange

TCP にのみ使用されます。ボディーだけでなく、ネットワーク経由でエクスチェンジを転送することができます。In body、Out body、fault body、In ヘッダー、Out ヘッダー、Fault ヘッダー、exchange プロパティー、exchange 例外フィールドが転送されます。これには、オブジェクトがシリアライズ可能である必要があります。Camel はシリアル化できないオブジェクトを除外し、WARN レベルでログに記録します。

false

ブール値

camel.component.netty.trust-store-file

暗号化に使用されるサーバー側の証明書キーストア。

 

File

camel.component.netty.trust-store-resource

暗号化に使用されるサーバー側の証明書キーストア。デフォルトではクラスパスからロードされますが、classpath:、file:、または http: をプレフィックとして指定して、異なるシステムからリソースをロードすることもできます。

 

String

camel.component.netty.udp-byte-array-codec

UDP 専用です。Java シリアライゼーションプロトコルの代わりにバイト配列コーデックの使用を有効にした場合。

false

ブール値

camel.component.netty.udp-connectionless-sending

このオプションは接続のない UDP 送信をサポートします。接続された udp send は、受信ポートでリッスンしている人がいない場合、PortUnreachableException を受け取ります。

false

ブール値

camel.component.netty.use-byte-buf

useByteBuf が true の場合、netty producer はメッセージ本文を送信する前に ByteBuf に変換します。

false

ブール値

camel.component.netty.use-global-ssl-context-parameters

グローバル SSL コンテキストパラメーターの使用を有効にします。

false

ブール値

camel.component.netty.using-executor-service

順序付けられたスレッドプールを使用して、イベントが同じチャネルで順番に処理されるかどうか。

true

ブール値

camel.component.netty.worker-count

netty が nio モードで動作する場合、Netty のデフォルトの workerCount パラメーター (cpu_core_threads x 2) を使用します。ユーザーはこのオプションを使用して、Netty のデフォルトの workerCount をオーバーライドできます。

 

Integer

camel.component.netty.worker-group

ボススレッドプールとして明示的な EventLoopGroup を使用するには。たとえば、スレッドプールを複数の consumer または producer と共有する場合などです。デフォルトでは、各 consumer または producer には、2 x CPU カウントのコアスレッドを備えた独自のワーカープールがあります。オプションは io.netty.channel.EventLoopGroup タイプです。

 

EventLoopGroup

第37章 Paho

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

Paho コンポーネントは、Eclipse Paho ライブラリー を使用して MQTT メッセージングプロトコルのコネクターを提供します。Paho は最も人気のある MQTT ライブラリーの 1 つであるため、これを Java プロジェクトに統合したい場合は、Camel Paho コネクターが最適です。

Maven ユーザーは、このコンポーネントの pom.xml に以下の依存関係を追加する必要があります。

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-paho</artifactId>
    <version>{CamelSBVersion}</version>
    <!-- use the same version as your Camel core version -->
</dependency>

37.1. URI 形式

paho:topic[?options]

topic はトピックの名前です。

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. コンポーネントオプション

Paho コンポーネントは、以下に示す 31 個のオプションをサポートしています。

Name説明デフォルトタイプ

automaticReconnect (共通)

接続が失われた場合に、クライアントがサーバーへの再接続を自動的に試行するかどうかを設定します。false に設定すると、クライアントは、接続が失われた場合にサーバーへの自動再接続を試行しません。true に設定すると、接続が失われた場合に、クライアントはサーバーへの再接続を試みます。再接続を試行する前に、最初は 1 秒待機します。再接続の試行が失敗するたびに、遅延が 2 分になるまで遅延が 2 倍になり、その時点で遅延は 2 分のままになります。

true

boolean

brokerUrl (Common)

MQTT ブローカーの URL。

tcp://localhost:1883

String

cleanSession (共通)

クライアントとサーバーが再起動と再接続の際に状態を記憶するかどうかを設定します。false に設定すると、クライアントとサーバーの両方が、クライアント、サーバー、および接続の再起動後も状態を維持します。状態が維持されるため: クライアント、サーバー、または接続が再起動した場合でも、メッセージ配信は指定された QOS を満たす信頼性があります。サーバーはサブスクリプションを永続的なものとして扱います。true に設定すると、クライアントとサーバーは、クライアント、サーバー、または接続の再起動後も状態を維持しません。これは、クライアント、サーバー、または接続が再起動した場合は、指定された QOS へのメッセージ配信を維持できないことを意味します。サーバーはサブスクリプションを非永続として扱います。

true

boolean

clientId (共通)

MQTT クライアント識別子。識別子は一意である必要があります。

 

String

configuration (共通)

共有 Paho 設定を使用します。

 

PahoConfiguration

connectionTimeout (共通)

接続タイムアウト値を設定します。この値は秒単位で測定され、MQTT サーバーへのネットワーク接続が確立されるまでクライアントが待機する最大時間間隔を定義します。デフォルトのタイムアウトは 30 秒です。値 0 はタイムアウト処理を無効にします。つまり、クライアントはネットワーク接続が成功するか失敗するまで待機します。

30

int

filePersistenceDirectory (共通)

ファイルの永続性によって使用されるベースディレクトリー。デフォルトでユーザーディレクトリーを使用します。

 

String

keepAliveInterval (common)

キープアライブ間隔を設定します。この値は秒単位で測定され、送受信されるメッセージ間の最大時間間隔を定義します。これにより、クライアントは、TCP/IP タイムアウトを待たずに、サーバーが使用できなくなったかどうかを検出できます。クライアントは、各キープアライブ期間内に少なくとも 1 つのメッセージがネットワークを通過することを保証します。期間中にデータ関連のメッセージがない場合、クライアントは非常に小さな ping メッセージを送信し、サーバーはそれを確認します。値 0 は、クライアントでのキープアライブ処理を無効にします。デフォルト値は、60 秒です。

60

int

maxInflight (共通)

最大飛行時間を設定します。トラフィックの多い環境では、この値を増やしてください。デフォルト値は 10 です。

10

int

maxReconnectDelay (共通)

再接続間の最大待機時間 (ミリ秒) を取得します。

128000

int

mqttVersion (共通)

MQTT バージョンを設定します。デフォルトのアクションは、バージョン 3.1.1 に接続し、それが失敗した場合は 3.1 にフォールバックすることです。バージョン 3.1.1 または 3.1 は、それぞれ MQTT_VERSION_3_1_1 または MQTT_VERSION_3_1 オプションを使用して、フォールバックなしで具体的に選択できます。

 

int

persistence (共通)

使用するクライアントの永続性 - メモリーまたはファイル。

列挙値:

  • FILE
  • MEMORY

MEMORY

PahoPersistence

qos (Common)

クライアントのサービス品質レベル (0 ~ 2)。

2

int

retained (共通)

オプションを保持します。

false

boolean

serverURIs (共通)

クライアントが接続できる 1 つ以上の serverURI のリストを設定します。複数の値はコンマで区切ることができます。各 serverURI は、クライアントが接続できるサーバーのアドレスを指定します。TCP 接続の tcp://と、SSL/TLS で保護された TCP 接続の ssl://の 2 種類の接続がサポートされています。たとえば、tcp://localhost:1883 ssl://localhost:8883 です。ポートが指定されていない場合、デフォルトで tcp://URI の場合は 1883、ssl://URI の場合は 8883 になります。serverURIs が設定されている場合は、MQTT クライアントのコンストラクターで渡された serverURI パラメーターをオーバーライドします。接続の試行が開始すると、クライアントはリスト内の最初の serverURI から開始し、サーバーとの接続が確立されるまでリストを処理します。どのサーバーにも接続できない場合は、接続の試行が失敗します。クライアントが接続可能なサーバーのリストを指定することには、いくつかの用途があります。高可用性よび高信頼性のメッセージ配信です。一部の MQTT サーバーは、2 つ以上の同等の MQTT サーバーが状態を共有する高可用性機能をサポートしています。MQTT クライアントは、同等のサーバーのいずれかに接続でき、クライアントがどのサーバーに接続しても、メッセージが確実に配信され、永続的なサブスクリプションが維持されることが保証されます。永続的なサブスクリプションや信頼できるメッセージ配信が必要な場合は、cleansession フラグを false に設定する必要があります。ハントリスト: (高可用性オプションのように) 等しくないサーバーのセットを指定できます。サーバー間で状態が共有されないため、信頼できるメッセージ配信および永続的なサブスクリプションは有効ではありません。ハントリストモードを使用する場合は、cleansession フラグを true に設定する必要があります。

 

String

willPayload (共通)

接続の LWT (Last Will and Testament) を設定します。このクライアントが予期せずサーバーへの接続を失った場合、サーバーは提供された詳細を使用してメッセージを自分自身に公開します。公開先のトピックからメッセージのバイトペイロード。メッセージを公開するサービスの品質 (0、1、または 2)。メッセージを保持するかどうか。

 

String

willQos (共通)

接続の LWT (Last Will and Testament) を設定します。このクライアントが予期せずサーバーへの接続を失った場合、サーバーは提供された詳細を使用してメッセージを自分自身に公開します。公開先のトピックからメッセージのバイトペイロード。メッセージを公開するサービスの品質 (0、1、または 2)。メッセージを保持するかどうか。

 

int

willRetained (共通)

接続の LWT (Last Will and Testament) を設定します。このクライアントが予期せずサーバーへの接続を失った場合、サーバーは提供された詳細を使用してメッセージを自分自身に公開します。公開先のトピックからメッセージのバイトペイロード。メッセージを公開するサービスの品質 (0、1、または 2)。メッセージを保持するかどうか。

false

boolean

willTopic (共通)

接続の LWT (Last Will and Testament) を設定します。このクライアントが予期せずサーバーへの接続を失った場合、サーバーは提供された詳細を使用してメッセージを自分自身に公開します。公開先のトピックからメッセージのバイトペイロード。メッセージを公開するサービスの品質 (0、1、または 2)。メッセージを保持するかどうか。

 

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 (上級)

共有 Paho クライアントを使用します。

 

MqttClient

customWebSocketHeaders (上級)

WebSocket 接続のカスタム WebSocket ヘッダーを設定します。

 

プロパティー

executorServiceTimeout (advanced)

executor サービスが終了時に強制終了する前に待機する時間を秒単位で設定します。この値を変更する必要があることが確実でない限り、この値を変更することはお勧めしません。

1

int

httpsHostnameVerificationEnabled (security)

SSL HostnameVerifier が有効かどうか。デフォルト値は true です。

true

boolean

password (セキュリティー)

MQTT ブローカーに対する認証に使用されるパスワード。

 

String

socketFactory (セキュリティー)

使用する SocketFactory を設定します。これにより、アプリケーションは、ネットワークソケットの作成に独自のポリシーを適用できます。SSL 接続を使用する場合は、SSLSocketFactory を使用して、アプリケーション固有のセキュリティー設定を提供できます。

 

SocketFactory

sslClientProps (security)

接続の SSL プロパティーを設定します。これらのプロパティーは、Java Secure Socket Extensions (JSSE) の実装が利用可能な場合にのみ有効であることに注意してください。カスタム SocketFactory が設定されていると、これらのプロパティーは使用されません。以下のプロパティーを使用できます。com.ibm.ssl.protocol: SSL、SSLv3、TLS、TLSv1、SSL_TLS のいずれか。com.ibm.ssl.contextProvider: 基礎となる JSSE プロバイダー。たとえば、IBMJSSE2 または SunJSSE com.ibm.ssl.keyStore です。KeyManager で使用する KeyStore オブジェクトを含むファイルの名前。たとえば /mydir/etc/key.p12 com.ibm.ssl.keyStorePassword です。KeyManager に使用させたい KeyStore オブジェクトのパスワード。パスワードはプレーンテキストにすることも、静的メソッド com.ibm.micro.security.Password.obfuscate(char password) を使用して難読化することもできます。これにより、単純で安全でない XOR および Base64 エンコーディングメカニズムを使用してパスワードが難読化されます。これは、平文のパスワードを難読化する単純なスクランブラーにすぎないことに注意してくださいcom.ibm.ssl.keyStoreType: 鍵ストアのタイプ (PKCS12、JKS、または JCEKS など)。com.ibm.ssl.keyStoreProvider 鍵ストアプロバイダー (IBMJCE または IBMJCEFIPS など)。com.ibm.ssl.trustStore: TrustManager で使用する KeyStore オブジェクトを含むファイルの名前。com.ibm.ssl.trustStorePassword: TrustManager で使用する TrustStore オブジェクトのパスワード。パスワードはプレーンテキストにすることも、静的メソッド com.ibm.micro.security.Password.obfuscate(char password) を使用して難読化することもできます。これにより、単純で安全でない XOR および Base64 エンコーディングメカニズムを使用してパスワードが難読化されます。これは、平文のパスワードを難読化する単純なスクランブラーにすぎないことに注意してください。com.ibm.ssl.trustStoreType: デフォルトの TrustManager で使用する KeyStore オブジェクトのタイプ。keyStoreType と同じ可能な値。com.ibm.ssl.trustStoreProvider: トラストストアプロバイダー (IBMJCE や IBMJCEFIPS など)。com.ibm.ssl.enabledCipherSuites: 有効になっている暗号のリスト。値はプロバイダーによって異なります (例: SSL_RSA_WITH_AES_128_CBC_SHA;SSL_RSA_WITH_3DES_EDE_CBC_SHA)。com.ibm.ssl.keyManager: プラットフォームで使用可能なデフォルトのアルゴリズムを使用する代わりに、KeyManagerFactory オブジェクトをインスタンス化するために使用されるアルゴリズムを設定します。値の例: IbmX509 または IBMJ9X509。com.ibm.ssl.trustManager: プラットフォームで使用可能なデフォルトのアルゴリズムを使用する代わりに、TrustManagerFactory オブジェクトをインスタンス化するために使用されるアルゴリズムを設定します。値の例: PKIX または IBMJ9X509。

 

プロパティー

sslHostnameVerifier (セキュリティー)

SSL 接続の HostnameVerifier を設定します。接続でのハンドシェイク後に使用されることに注意してください。ホスト名がエラーを検証した場合は、自分でアクションを実行する必要があります。デフォルトの HostnameVerifier はありません。

 

HostnameVerifier

userName (セキュリティー)

MQTT ブローカーに対する認証に使用されるユーザー名。

 

String

37.4. エンドポイントオプション

Paho エンドポイントは、URI 構文を使用して設定されます。

paho:topic

パスおよびクエリーパラメーターを使用します。

37.4.1. パスパラメーター(1 パラメーター)

Name説明デフォルトタイプ

topic (共通)

必須 トピックの名前。

 

String

37.4.2. クエリーパラメーター (31 パラメーター)

Name説明デフォルトタイプ

automaticReconnect (共通)

接続が失われた場合に、クライアントがサーバーへの再接続を自動的に試行するかどうかを設定します。false に設定すると、クライアントは、接続が失われた場合にサーバーへの自動再接続を試行しません。true に設定すると、接続が失われた場合に、クライアントはサーバーへの再接続を試みます。再接続を試行する前に、最初は 1 秒待機します。再接続の試行が失敗するたびに、遅延が 2 分になるまで遅延が 2 倍になり、その時点で遅延は 2 分のままになります。

true

boolean

brokerUrl (Common)

MQTT ブローカーの URL。

tcp://localhost:1883

String

cleanSession (共通)

クライアントとサーバーが再起動と再接続の際に状態を記憶するかどうかを設定します。false に設定すると、クライアントとサーバーの両方が、クライアント、サーバー、および接続の再起動後も状態を維持します。状態が維持されるため: クライアント、サーバー、または接続が再起動した場合でも、メッセージ配信は指定された QOS を満たす信頼性があります。サーバーはサブスクリプションを永続的なものとして扱います。true に設定すると、クライアントとサーバーは、クライアント、サーバー、または接続の再起動後も状態を維持しません。これは、クライアント、サーバー、または接続が再起動した場合は、指定された QOS へのメッセージ配信を維持できないことを意味します。サーバーはサブスクリプションを非永続として扱います。

true

boolean

clientId (共通)

MQTT クライアント識別子。識別子は一意である必要があります。

 

String

connectionTimeout (共通)

接続タイムアウト値を設定します。この値は秒単位で測定され、MQTT サーバーへのネットワーク接続が確立されるまでクライアントが待機する最大時間間隔を定義します。デフォルトのタイムアウトは 30 秒です。値 0 はタイムアウト処理を無効にします。つまり、クライアントはネットワーク接続が成功するか失敗するまで待機します。

30

int

filePersistenceDirectory (共通)

ファイルの永続性によって使用されるベースディレクトリー。デフォルトでユーザーディレクトリーを使用します。

 

String

keepAliveInterval (common)

キープアライブ間隔を設定します。この値は秒単位で測定され、送受信されるメッセージ間の最大時間間隔を定義します。これにより、クライアントは、TCP/IP タイムアウトを待たずに、サーバーが使用できなくなったかどうかを検出できます。クライアントは、各キープアライブ期間内に少なくとも 1 つのメッセージがネットワークを通過することを保証します。期間中にデータ関連のメッセージがない場合、クライアントは非常に小さな ping メッセージを送信し、サーバーはそれを確認します。値 0 は、クライアントでのキープアライブ処理を無効にします。デフォルト値は、60 秒です。

60

int

maxInflight (共通)

最大飛行時間を設定します。トラフィックの多い環境では、この値を増やしてください。デフォルト値は 10 です。

10

int

maxReconnectDelay (共通)

再接続間の最大待機時間 (ミリ秒) を取得します。

128000

int

mqttVersion (共通)

MQTT バージョンを設定します。デフォルトのアクションは、バージョン 3.1.1 に接続し、それが失敗した場合は 3.1 にフォールバックすることです。バージョン 3.1.1 または 3.1 は、それぞれ MQTT_VERSION_3_1_1 または MQTT_VERSION_3_1 オプションを使用して、フォールバックなしで具体的に選択できます。

 

int

persistence (共通)

使用するクライアントの永続性 - メモリーまたはファイル。

列挙値:

  • FILE
  • MEMORY

MEMORY

PahoPersistence

qos (Common)

クライアントのサービス品質レベル (0 ~ 2)。

2

int

retained (共通)

オプションを保持します。

false

boolean

serverURIs (共通)

クライアントが接続できる 1 つ以上の serverURI のリストを設定します。複数の値はコンマで区切ることができます。各 serverURI は、クライアントが接続できるサーバーのアドレスを指定します。TCP 接続の tcp://と、SSL/TLS で保護された TCP 接続の ssl://の 2 種類の接続がサポートされています。たとえば、tcp://localhost:1883 ssl://localhost:8883 です。ポートが指定されていない場合、デフォルトで tcp://URI の場合は 1883、ssl://URI の場合は 8883 になります。serverURIs が設定されている場合は、MQTT クライアントのコンストラクターで渡された serverURI パラメーターをオーバーライドします。接続の試行が開始すると、クライアントはリスト内の最初の serverURI から開始し、サーバーとの接続が確立されるまでリストを処理します。どのサーバーにも接続できない場合は、接続の試行が失敗します。クライアントが接続可能なサーバーのリストを指定することには、いくつかの用途があります。高可用性よび高信頼性のメッセージ配信です。一部の MQTT サーバーは、2 つ以上の同等の MQTT サーバーが状態を共有する高可用性機能をサポートしています。MQTT クライアントは、同等のサーバーのいずれかに接続でき、クライアントがどのサーバーに接続しても、メッセージが確実に配信され、永続的なサブスクリプションが維持されることが保証されます。永続的なサブスクリプションや信頼できるメッセージ配信が必要な場合は、cleansession フラグを false に設定する必要があります。ハントリスト: (高可用性オプションのように) 等しくないサーバーのセットを指定できます。サーバー間で状態が共有されないため、信頼できるメッセージ配信および永続的なサブスクリプションは有効ではありません。ハントリストモードを使用する場合は、cleansession フラグを true に設定する必要があります。

 

String

willPayload (共通)

接続の LWT (Last Will and Testament) を設定します。このクライアントが予期せずサーバーへの接続を失った場合、サーバーは提供された詳細を使用してメッセージを自分自身に公開します。公開先のトピックからメッセージのバイトペイロード。メッセージを公開するサービスの品質 (0、1、または 2)。メッセージを保持するかどうか。

 

String

willQos (共通)

接続の LWT (Last Will and Testament) を設定します。このクライアントが予期せずサーバーへの接続を失った場合、サーバーは提供された詳細を使用してメッセージを自分自身に公開します。公開先のトピックからメッセージのバイトペイロード。メッセージを公開するサービスの品質 (0、1、または 2)。メッセージを保持するかどうか。

 

int

willRetained (共通)

接続の LWT (Last Will and Testament) を設定します。このクライアントが予期せずサーバーへの接続を失った場合、サーバーは提供された詳細を使用してメッセージを自分自身に公開します。公開先のトピックからメッセージのバイトペイロード。メッセージを公開するサービスの品質 (0、1、または 2)。メッセージを保持するかどうか。

false

boolean

willTopic (共通)

接続の LWT (Last Will and Testament) を設定します。このクライアントが予期せずサーバーへの接続を失った場合、サーバーは提供された詳細を使用してメッセージを自分自身に公開します。公開先のトピックからメッセージのバイトペイロード。メッセージを公開するサービスの品質 (0、1、または 2)。メッセージを保持するかどうか。

 

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

lazyStartProducer (producer)

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

false

boolean

client (上級)

既存の mqtt クライアントを使用するには。

 

MqttClient

customWebSocketHeaders (上級)

WebSocket 接続のカスタム WebSocket ヘッダーを設定します。

 

プロパティー

executorServiceTimeout (advanced)

executor サービスが終了時に強制終了する前に待機する時間を秒単位で設定します。この値を変更する必要があることが確実でない限り、この値を変更することはお勧めしません。

1

int

httpsHostnameVerificationEnabled (security)

SSL HostnameVerifier が有効かどうか。デフォルト値は true です。

true

boolean

password (セキュリティー)

MQTT ブローカーに対する認証に使用されるパスワード。

 

String

socketFactory (セキュリティー)

使用する SocketFactory を設定します。これにより、アプリケーションは、ネットワークソケットの作成に独自のポリシーを適用できます。SSL 接続を使用する場合は、SSLSocketFactory を使用して、アプリケーション固有のセキュリティー設定を提供できます。

 

SocketFactory

sslClientProps (security)

接続の SSL プロパティーを設定します。これらのプロパティーは、Java Secure Socket Extensions (JSSE) の実装が利用可能な場合にのみ有効であることに注意してください。カスタム SocketFactory が設定されていると、これらのプロパティーは使用されません。以下のプロパティーを使用できます。com.ibm.ssl.protocol: SSL、SSLv3、TLS、TLSv1、SSL_TLS のいずれか。com.ibm.ssl.contextProvider: 基礎となる JSSE プロバイダー。たとえば、IBMJSSE2 または SunJSSE com.ibm.ssl.keyStore です。KeyManager で使用する KeyStore オブジェクトを含むファイルの名前。たとえば /mydir/etc/key.p12 com.ibm.ssl.keyStorePassword です。KeyManager に使用させたい KeyStore オブジェクトのパスワード。パスワードはプレーンテキストにすることも、静的メソッド com.ibm.micro.security.Password.obfuscate(char password) を使用して難読化することもできます。これにより、単純で安全でない XOR および Base64 エンコーディングメカニズムを使用してパスワードが難読化されます。これは、平文のパスワードを難読化する単純なスクランブラーにすぎないことに注意してくださいcom.ibm.ssl.keyStoreType: 鍵ストアのタイプ (PKCS12、JKS、または JCEKS など)。com.ibm.ssl.keyStoreProvider 鍵ストアプロバイダー (IBMJCE または IBMJCEFIPS など)。com.ibm.ssl.trustStore: TrustManager で使用する KeyStore オブジェクトを含むファイルの名前。com.ibm.ssl.trustStorePassword: TrustManager で使用する TrustStore オブジェクトのパスワード。パスワードはプレーンテキストにすることも、静的メソッド com.ibm.micro.security.Password.obfuscate(char password) を使用して難読化することもできます。これにより、単純で安全でない XOR および Base64 エンコーディングメカニズムを使用してパスワードが難読化されます。これは、平文のパスワードを難読化する単純なスクランブラーにすぎないことに注意してください。com.ibm.ssl.trustStoreType: デフォルトの TrustManager で使用する KeyStore オブジェクトのタイプ。keyStoreType と同じ可能な値。com.ibm.ssl.trustStoreProvider: トラストストアプロバイダー (IBMJCE や IBMJCEFIPS など)。com.ibm.ssl.enabledCipherSuites: 有効になっている暗号のリスト。値はプロバイダーによって異なります (例: SSL_RSA_WITH_AES_128_CBC_SHA;SSL_RSA_WITH_3DES_EDE_CBC_SHA)。com.ibm.ssl.keyManager: プラットフォームで使用可能なデフォルトのアルゴリズムを使用する代わりに、KeyManagerFactory オブジェクトをインスタンス化するために使用されるアルゴリズムを設定します。値の例: IbmX509 または IBMJ9X509。com.ibm.ssl.trustManager: プラットフォームで使用可能なデフォルトのアルゴリズムを使用する代わりに、TrustManagerFactory オブジェクトをインスタンス化するために使用されるアルゴリズムを設定します。値の例: PKIX または IBMJ9X509。

 

プロパティー

sslHostnameVerifier (セキュリティー)

SSL 接続の HostnameVerifier を設定します。接続でのハンドシェイク後に使用されることに注意してください。ホスト名がエラーを検証した場合は、自分でアクションを実行する必要があります。デフォルトの HostnameVerifier はありません。

 

HostnameVerifier

userName (セキュリティー)

MQTT ブローカーに対する認証に使用されるユーザー名。

 

String

37.5. Headers

次のヘッダーは、Paho コンポーネントによって認識されます。

ヘッダーJava 定数エンドポイントの種類値のタイプ説明

CamelMqttTopic

PahoConstants.MQTT_TOPIC

Consumer

String

トピックの名前。

CamelMqttQoS

PahoConstants.MQTT_QOS

Consumer

Integer

受信メッセージの QualityOfService

CamelPahoOverrideTopic

PahoConstants.CAMEL_PAHO_OVERRIDE_TOPIC

producer

String

エンドポイントで指定されたトピックの代わりにオーバーライドして送信するトピックの名前

37.6. デフォルトのペイロードタイプ

デフォルトでは、Camel Paho コンポーネントは、MQTT メッセージから抽出された (または挿入された) バイナリーペイロードで動作します。

// Receive payload
byte[] payload = (byte[]) consumerTemplate.receiveBody("paho:topic");

// Send payload
byte[] payload = "message".getBytes();
producerTemplate.sendBody("paho:topic", payload);

もちろん、Camel 組み込み 型変換 API は、自動データ型変換を実行できます。以下の例では、Camel は自動的にバイナリーペイロードを 文字列 に (およびその逆に) 変換します。

// Receive payload
String payload = consumerTemplate.receiveBody("paho:topic", String.class);

// Send payload
String payload = "message";
producerTemplate.sendBody("paho:topic", payload);

37.7. サンプル

たとえば、次のスニペットは、Camel ルーターと同じホストにインストールされた MQTT ブローカーからメッセージを読み取ります。

from("paho:some/queue")
    .to("mock:test");

以下のスニペットは MQTT ブローカーにメッセージを送信します:

from("direct:test")
    .to("paho:some/target/queue");

たとえば、これはリモート MQTT ブローカーからメッセージを読み取る方法です。

from("paho:some/queue?brokerUrl=tcp://iot.eclipse.org:1883")
    .to("mock:test");

ここでは、デフォルトのトピックをオーバーライドして、動的トピックに設定します

from("direct:test")
    .setHeader(PahoConstants.CAMEL_PAHO_OVERRIDE_TOPIC, simple("${header.customerId}"))
    .to("paho:some/target/queue");

37.8. Spring Boot 自動設定

Spring Boot で paho を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-paho-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 32 のオプションをサポートします。

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

camel.component.paho.automatic-reconnect

接続が失われた場合に、クライアントがサーバーへの再接続を自動的に試行するかどうかを設定します。false に設定すると、クライアントは、接続が失われた場合にサーバーへの自動再接続を試行しません。true に設定すると、接続が失われた場合に、クライアントはサーバーへの再接続を試みます。再接続を試行する前に、最初は 1 秒待機します。再接続の試行が失敗するたびに、遅延が 2 分になるまで遅延が 2 倍になり、その時点で遅延は 2 分のままになります。

true

ブール値

camel.component.paho.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.paho.bridge-error-handler

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

false

ブール値

camel.component.paho.broker-url

MQTT ブローカーの URL。

tcp://localhost:1883

String

camel.component.paho.clean-session

クライアントとサーバーが再起動と再接続の際に状態を記憶するかどうかを設定します。false に設定すると、クライアントとサーバーの両方が、クライアント、サーバー、および接続の再起動後も状態を維持します。状態が維持されるため: クライアント、サーバー、または接続が再起動した場合でも、メッセージ配信は指定された QOS を満たす信頼性があります。サーバーはサブスクリプションを永続的なものとして扱います。true に設定すると、クライアントとサーバーは、クライアント、サーバー、または接続の再起動後も状態を維持しません。これは、クライアント、サーバー、または接続が再起動した場合は、指定された QOS へのメッセージ配信を維持できないことを意味します。サーバーはサブスクリプションを非永続として扱います。

true

ブール値

camel.component.paho.client

共有 Paho クライアントを使用します。オプションは org.eclipse.paho.client.mqttv3.MqttClient タイプです。

 

MqttClient

camel.component.paho.client-id

MQTT クライアント識別子。識別子は一意である必要があります。

 

String

camel.component.paho.configuration

共有 Paho 設定を使用します。オプションは org.apache.camel.component.paho.PahoConfiguration タイプです。

 

PahoConfiguration

camel.component.paho.connection-timeout

接続タイムアウト値を設定します。この値は秒単位で測定され、MQTT サーバーへのネットワーク接続が確立されるまでクライアントが待機する最大時間間隔を定義します。デフォルトのタイムアウトは 30 秒です。値 0 はタイムアウト処理を無効にします。つまり、クライアントはネットワーク接続が成功するか失敗するまで待機します。

30

Integer

camel.component.paho.custom-web-socket-headers

WebSocket 接続のカスタム WebSocket ヘッダーを設定します。オプションは java.util.Properties タイプです。

 

プロパティー

camel.component.paho.enabled

paho コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.paho.executor-service-timeout

executor サービスが終了時に強制終了する前に待機する時間を秒単位で設定します。この値を変更する必要があることが確実でない限り、この値を変更することはお勧めしません。

1

Integer

camel.component.paho.file-persistence-directory

ファイルの永続性によって使用されるベースディレクトリー。デフォルトでユーザーディレクトリーを使用します。

 

String

camel.component.paho.https-hostname-verification-enabled

SSL HostnameVerifier が有効かどうか。デフォルト値は true です。

true

ブール値

camel.component.paho.keep-alive-interval

キープアライブ間隔を設定します。この値は秒単位で測定され、送受信されるメッセージ間の最大時間間隔を定義します。これにより、クライアントは、TCP/IP タイムアウトを待たずに、サーバーが使用できなくなったかどうかを検出できます。クライアントは、各キープアライブ期間内に少なくとも 1 つのメッセージがネットワークを通過することを保証します。期間中にデータ関連のメッセージがない場合、クライアントは非常に小さな ping メッセージを送信し、サーバーはそれを確認します。値 0 は、クライアントでのキープアライブ処理を無効にします。デフォルト値は、60 秒です。

60

Integer

camel.component.paho.lazy-start-producer

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

false

ブール値

camel.component.paho.max-inflight

最大飛行時間を設定します。トラフィックの多い環境では、この値を増やしてください。デフォルト値は 10 です。

10

Integer

camel.component.paho.max-reconnect-delay

再接続間の最大待機時間 (ミリ秒) を取得します。

128000

Integer

camel.component.paho.mqtt-version

MQTT バージョンを設定します。デフォルトのアクションは、バージョン 3.1.1 に接続し、それが失敗した場合は 3.1 にフォールバックすることです。バージョン 3.1.1 または 3.1 は、それぞれ MQTT_VERSION_3_1_1 または MQTT_VERSION_3_1 オプションを使用して、フォールバックなしで具体的に選択できます。

 

Integer

camel.component.paho.password

MQTT ブローカーに対する認証に使用されるパスワード。

 

String

camel.component.paho.persistence

使用するクライアントの永続性 - メモリーまたはファイル。

 

PahoPersistence

camel.component.paho.qos

クライアントのサービス品質レベル (0 ~ 2)。

2

Integer

camel.component.paho.retained

オプションを保持します。

false

ブール値

camel.component.paho.server-u-r-is

クライアントが接続できる 1 つ以上の serverURI のリストを設定します。複数の値はコンマで区切ることができます。各 serverURI は、クライアントが接続できるサーバーのアドレスを指定します。TCP 接続の tcp://と、SSL/TLS で保護された TCP 接続の ssl://の 2 種類の接続がサポートされています。たとえば、tcp://localhost:1883 ssl://localhost:8883 です。ポートが指定されていない場合、デフォルトで tcp://URI の場合は 1883、ssl://URI の場合は 8883 になります。serverURIs が設定されている場合は、MQTT クライアントのコンストラクターで渡された serverURI パラメーターをオーバーライドします。接続の試行が開始すると、クライアントはリスト内の最初の serverURI から開始し、サーバーとの接続が確立されるまでリストを処理します。どのサーバーにも接続できない場合は、接続の試行が失敗します。クライアントが接続可能なサーバーのリストを指定することには、いくつかの用途があります。高可用性よび高信頼性のメッセージ配信です。一部の MQTT サーバーは、2 つ以上の同等の MQTT サーバーが状態を共有する高可用性機能をサポートしています。MQTT クライアントは、同等のサーバーのいずれかに接続でき、クライアントがどのサーバーに接続しても、メッセージが確実に配信され、永続的なサブスクリプションが維持されることが保証されます。永続的なサブスクリプションや信頼できるメッセージ配信が必要な場合は、cleansession フラグを false に設定する必要があります。ハントリスト: (高可用性オプションのように) 等しくないサーバーのセットを指定できます。サーバー間で状態が共有されないため、信頼できるメッセージ配信および永続的なサブスクリプションは有効ではありません。ハントリストモードを使用する場合は、cleansession フラグを true に設定する必要があります。

 

String

camel.component.paho.socket-factory

使用する SocketFactory を設定します。これにより、アプリケーションは、ネットワークソケットの作成に独自のポリシーを適用できます。SSL 接続を使用する場合は、SSLSocketFactory を使用して、アプリケーション固有のセキュリティー設定を提供できます。オプションは javax.net.SocketFactory タイプです。

 

SocketFactory

camel.component.paho.ssl-client-props

接続の SSL プロパティーを設定します。これらのプロパティーは、Java Secure Socket Extensions (JSSE) の実装が利用可能な場合にのみ有効であることに注意してください。カスタム SocketFactory が設定されていると、これらのプロパティーは使用されません。以下のプロパティーを使用できます。com.ibm.ssl.protocol: SSL、SSLv3、TLS、TLSv1、SSL_TLS のいずれか。com.ibm.ssl.contextProvider: 基礎となる JSSE プロバイダー。たとえば、IBMJSSE2 または SunJSSE com.ibm.ssl.keyStore です。KeyManager で使用する KeyStore オブジェクトを含むファイルの名前。たとえば /mydir/etc/key.p12 com.ibm.ssl.keyStorePassword です。KeyManager に使用させたい KeyStore オブジェクトのパスワード。パスワードはプレーンテキストにすることも、静的メソッド com.ibm.micro.security.Password.obfuscate(char password) を使用して難読化することもできます。これにより、単純で安全でない XOR および Base64 エンコーディングメカニズムを使用してパスワードが難読化されます。これは、平文のパスワードを難読化する単純なスクランブラーにすぎないことに注意してくださいcom.ibm.ssl.keyStoreType: 鍵ストアのタイプ (PKCS12、JKS、または JCEKS など)。com.ibm.ssl.keyStoreProvider 鍵ストアプロバイダー (IBMJCE または IBMJCEFIPS など)。com.ibm.ssl.trustStore: TrustManager で使用する KeyStore オブジェクトを含むファイルの名前。com.ibm.ssl.trustStorePassword: TrustManager で使用する TrustStore オブジェクトのパスワード。パスワードはプレーンテキストにすることも、静的メソッド com.ibm.micro.security.Password.obfuscate(char password) を使用して難読化することもできます。これにより、単純で安全でない XOR および Base64 エンコーディングメカニズムを使用してパスワードが難読化されます。これは、平文のパスワードを難読化する単純なスクランブラーにすぎないことに注意してください。com.ibm.ssl.trustStoreType: デフォルトの TrustManager で使用する KeyStore オブジェクトのタイプ。keyStoreType と同じ可能な値。com.ibm.ssl.trustStoreProvider: トラストストアプロバイダー (IBMJCE や IBMJCEFIPS など)。com.ibm.ssl.enabledCipherSuites: 有効になっている暗号のリスト。値はプロバイダーによって異なります (例: SSL_RSA_WITH_AES_128_CBC_SHA;SSL_RSA_WITH_3DES_EDE_CBC_SHA)。com.ibm.ssl.keyManager: プラットフォームで使用可能なデフォルトのアルゴリズムを使用する代わりに、KeyManagerFactory オブジェクトをインスタンス化するために使用されるアルゴリズムを設定します。値の例: IbmX509 または IBMJ9X509。com.ibm.ssl.trustManager: プラットフォームで使用可能なデフォルトのアルゴリズムを使用する代わりに、TrustManagerFactory オブジェクトをインスタンス化するために使用されるアルゴリズムを設定します。値の例: PKIX または IBMJ9X509。オプションは java.util.Properties タイプです。

 

プロパティー

camel.component.paho.ssl-hostname-verifier

SSL 接続の HostnameVerifier を設定します。接続でのハンドシェイク後に使用されることに注意してください。ホスト名がエラーを検証した場合は、自分でアクションを実行する必要があります。デフォルトの HostnameVerifier はありません。オプションは javax.net.ssl.HostnameVerifier タイプです。

 

HostnameVerifier

camel.component.paho.user-name

MQTT ブローカーに対する認証に使用されるユーザー名。

 

String

camel.component.paho.will-payload

接続の LWT (Last Will and Testament) を設定します。このクライアントが予期せずサーバーへの接続を失った場合、サーバーは提供された詳細を使用してメッセージを自分自身に公開します。公開先のトピックからメッセージのバイトペイロード。メッセージを公開するサービスの品質 (0、1、または 2)。メッセージを保持するかどうか。

 

String

camel.component.paho.will-qos

接続の LWT (Last Will and Testament) を設定します。このクライアントが予期せずサーバーへの接続を失った場合、サーバーは提供された詳細を使用してメッセージを自分自身に公開します。公開先のトピックからメッセージのバイトペイロード。メッセージを公開するサービスの品質 (0、1、または 2)。メッセージを保持するかどうか。

 

Integer

camel.component.paho.will-retained

接続の LWT (Last Will and Testament) を設定します。このクライアントが予期せずサーバーへの接続を失った場合、サーバーは提供された詳細を使用してメッセージを自分自身に公開します。公開先のトピックからメッセージのバイトペイロード。メッセージを公開するサービスの品質 (0、1、または 2)。メッセージを保持するかどうか。

false

ブール値

camel.component.paho.will-topic

接続の LWT (Last Will and Testament) を設定します。このクライアントが予期せずサーバーへの接続を失った場合、サーバーは提供された詳細を使用してメッセージを自分自身に公開します。公開先のトピックからメッセージのバイトペイロード。メッセージを公開するサービスの品質 (0、1、または 2)。メッセージを保持するかどうか。

 

String

第38章 Paho MQTT 5

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

Paho MQTT5 コンポーネントは、MQTT v5 で Eclipse Paho ライブラリーを使用して、MQTT メッセージングプロトコルのコネクターを提供します。Paho は最も人気のある MQTT ライブラリーの 1 つであるため、これを Java プロジェクトに統合したい場合は、Camel Paho コネクターが最適です。

Maven ユーザーは、このコンポーネントの pom.xml に以下の依存関係を追加する必要があります。

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-paho-mqtt5</artifactId>
    <version>{CamelSBVersion}</version>
    <!-- use the same version as your Camel core version -->
</dependency>

38.1. URI 形式

paho-mqtt5:topic[?options]

topic はトピックの名前です。

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. コンポーネントオプション

Paho MQTT 5 コンポーネントは、以下にリストされている 32 のオプションをサポートしています。

Name説明デフォルトタイプ

automaticReconnect (共通)

接続が失われた場合に、クライアントがサーバーへの再接続を自動的に試行するかどうかを設定します。false に設定すると、クライアントは、接続が失われた場合にサーバーへの自動再接続を試行しません。true に設定すると、接続が失われた場合に、クライアントはサーバーへの再接続を試みます。再接続を試行する前に、最初は 1 秒待機します。再接続の試行が失敗するたびに、遅延が 2 分になるまで遅延が 2 倍になり、その時点で遅延は 2 分のままになります。

true

boolean

brokerUrl (Common)

MQTT ブローカーの URL。

tcp://localhost:1883

String

cleanStart (共通)

クライアントとサーバーが再起動と再接続の際に状態を記憶するかどうかを設定します。false に設定すると、クライアントとサーバーの両方が、クライアント、サーバー、および接続の再起動後も状態を維持します。状態が維持されるため: クライアント、サーバー、または接続が再起動した場合でも、メッセージ配信は指定された QOS を満たす信頼性があります。サーバーはサブスクリプションを永続的なものとして扱います。true に設定すると、クライアントとサーバーは、クライアント、サーバー、または接続の再起動後も状態を維持しません。これは、クライアント、サーバー、または接続が再起動した場合は、指定された QOS へのメッセージ配信を維持できないことを意味します。サーバーはサブスクリプションを非永続として扱います。

true

boolean

clientId (共通)

MQTT クライアント識別子。識別子は一意である必要があります。

 

String

configuration (共通)

共有 Paho 設定を使用します。

 

PahoMqtt5Configuration

connectionTimeout (共通)

接続タイムアウト値を設定します。この値は秒単位で測定され、MQTT サーバーへのネットワーク接続が確立されるまでクライアントが待機する最大時間間隔を定義します。デフォルトのタイムアウトは 30 秒です。値 0 はタイムアウト処理を無効にします。つまり、クライアントはネットワーク接続が成功するか失敗するまで待機します。

30

int

filePersistenceDirectory (共通)

ファイルの永続性によって使用されるベースディレクトリー。デフォルトでユーザーディレクトリーを使用します。

 

String

keepAliveInterval (common)

キープアライブ間隔を設定します。この値は秒単位で測定され、送受信されるメッセージ間の最大時間間隔を定義します。これにより、クライアントは、TCP/IP タイムアウトを待たずに、サーバーが使用できなくなったかどうかを検出できます。クライアントは、各キープアライブ期間内に少なくとも 1 つのメッセージがネットワークを通過することを保証します。期間中にデータ関連のメッセージがない場合、クライアントは非常に小さな ping メッセージを送信し、サーバーはそれを確認します。値 0 は、クライアントでのキープアライブ処理を無効にします。デフォルト値は、60 秒です。

60

int

maxReconnectDelay (共通)

再接続間の最大待機時間 (ミリ秒) を取得します。

128000

int

persistence (共通)

使用するクライアントの永続性 - メモリーまたはファイル。

列挙値:

  • FILE
  • MEMORY

MEMORY

PahoMqtt5Persistence

qos (共通)

クライアントのサービス品質レベル (0 ~ 2)。

2

int

receiveMaximum (共通)

受信最大値を設定します。この値は、クライアントが同時に処理できる QoS 1 および QoS 2 のパブリケーションの制限を表します。サーバーが送信しようとする QoS 0 パブリケーションの数を制限するメカニズムはありません。デフォルト値は 65535 です。

65535

int

retained (共通)

オプションを保持します。

false

boolean

serverURIs (共通)

クライアントが接続できる 1 つ以上の serverURI のリストを設定します。複数の値はコンマで区切ることができます。各 serverURI は、クライアントが接続できるサーバーのアドレスを指定します。TCP 接続の tcp://と、SSL/TLS で保護された TCP 接続の ssl://の 2 種類の接続がサポートされています。たとえば、tcp://localhost:1883 ssl://localhost:8883 です。ポートが指定されていない場合、デフォルトで tcp://URI の場合は 1883、ssl://URI の場合は 8883 になります。serverURIs が設定されている場合は、MQTT クライアントのコンストラクターで渡された serverURI パラメーターをオーバーライドします。接続の試行が開始すると、クライアントはリスト内の最初の serverURI から開始し、サーバーとの接続が確立されるまでリストを処理します。どのサーバーにも接続できない場合は、接続の試行が失敗します。クライアントが接続可能なサーバーのリストを指定することには、いくつかの用途があります。高可用性よび高信頼性のメッセージ配信です。一部の MQTT サーバーは、2 つ以上の同等の MQTT サーバーが状態を共有する高可用性機能をサポートしています。MQTT クライアントは、同等のサーバーのいずれかに接続でき、クライアントがどのサーバーに接続しても、メッセージが確実に配信され、永続的なサブスクリプションが維持されることが保証されます。永続的なサブスクリプションや信頼できるメッセージ配信が必要な場合は、cleansession フラグを false に設定する必要があります。ハントリスト: (高可用性オプションのように) 等しくないサーバーのセットを指定できます。サーバー間で状態が共有されないため、信頼できるメッセージ配信および永続的なサブスクリプションは有効ではありません。ハントリストモードを使用する場合は、cleansession フラグを true に設定する必要があります。

 

String

sessionExpiryInterval (common)

セッションの有効期限を設定します。この値は秒単位で測定され、クライアントが切断された後にブローカーがセッションを維持する最大時間を定義します。クライアントは、後でサーバーに接続する予定がある場合にのみ、長いセッション有効期限間隔で接続する必要があります。デフォルトでは、この値は -1 であるため送信されません。この場合、セッションは期限切れになりません。0 が送信された場合、ネットワーク接続が閉じられるとすぐにセッションが終了します。クライアントは、セッションを使用できなくなったと判断した場合、セッションの有効期限間隔を 0 に設定して切断する必要があります。

-1

long

willMqttProperties (common)

接続の LWT (Last Will and Testament) を設定します。このクライアントが予期せずサーバーへの接続を失った場合、サーバーは提供された詳細を使用してメッセージを自分自身に公開します。メッセージに設定された MQTT プロパティー。

 

MqttProperties

willPayload (共通)

接続の LWT (Last Will and Testament) を設定します。このクライアントが予期せずサーバーへの接続を失った場合、サーバーは提供された詳細を使用してメッセージを自分自身に公開します。メッセージのバイトペイロード。

 

String

willQos (共通)

接続の LWT (Last Will and Testament) を設定します。このクライアントが予期せずサーバーへの接続を失った場合、サーバーは提供された詳細を使用してメッセージを自分自身に公開します。メッセージを公開するサービスの品質 (0、1、または 2)。

1

int

willRetained (共通)

接続の LWT (Last Will and Testament) を設定します。このクライアントが予期せずサーバーへの接続を失った場合、サーバーは提供された詳細を使用してメッセージを自分自身に公開します。メッセージを保持するかどうか。

false

boolean

willTopic (共通)

接続の LWT (Last Will and Testament) を設定します。このクライアントが予期せずサーバーへの接続を失った場合、サーバーは提供された詳細を使用してメッセージを自分自身に公開します。パブリッシュ先のトピック。

 

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 (上級)

共有 Paho クライアントを使用します。

 

MqttClient

customWebSocketHeaders (上級)

WebSocket 接続のカスタム WebSocket ヘッダーを設定します。

 

マップ

executorServiceTimeout (advanced)

executor サービスが終了時に強制終了する前に待機する時間を秒単位で設定します。この値を変更する必要があることが確実でない限り、この値を変更することはお勧めしません。

1

int

httpsHostnameVerificationEnabled (security)

SSL HostnameVerifier が有効かどうか。デフォルト値は true です。

true

boolean

password (セキュリティー)

MQTT ブローカーに対する認証に使用されるパスワード。

 

String

socketFactory (セキュリティー)

使用する SocketFactory を設定します。これにより、アプリケーションは、ネットワークソケットの作成に独自のポリシーを適用できます。SSL 接続を使用する場合は、SSLSocketFactory を使用して、アプリケーション固有のセキュリティー設定を提供できます。

 

SocketFactory

sslClientProps (security)

接続の SSL プロパティーを設定します。これらのプロパティーは、Java Secure Socket Extensions (JSSE) の実装が利用可能な場合にのみ有効であることに注意してください。カスタム SocketFactory が設定されていると、これらのプロパティーは使用されません。以下のプロパティーを使用できます。com.ibm.ssl.protocol: SSL、SSLv3、TLS、TLSv1、SSL_TLS のいずれか。com.ibm.ssl.contextProvider: 基礎となる JSSE プロバイダー。たとえば、IBMJSSE2 または SunJSSE com.ibm.ssl.keyStore です。KeyManager で使用する KeyStore オブジェクトを含むファイルの名前。たとえば /mydir/etc/key.p12 com.ibm.ssl.keyStorePassword です。KeyManager に使用させたい KeyStore オブジェクトのパスワード。パスワードはプレーンテキストにすることも、静的メソッド com.ibm.micro.security.Password.obfuscate(char password) を使用して難読化することもできます。これにより、単純で安全でない XOR および Base64 エンコーディングメカニズムを使用してパスワードが難読化されます。これは、平文のパスワードを難読化する単純なスクランブラーにすぎないことに注意してくださいcom.ibm.ssl.keyStoreType: 鍵ストアのタイプ (PKCS12、JKS、または JCEKS など)。com.ibm.ssl.keyStoreProvider 鍵ストアプロバイダー (IBMJCE または IBMJCEFIPS など)。com.ibm.ssl.trustStore: TrustManager で使用する KeyStore オブジェクトを含むファイルの名前。com.ibm.ssl.trustStorePassword: TrustManager で使用する TrustStore オブジェクトのパスワード。パスワードはプレーンテキストにすることも、静的メソッド com.ibm.micro.security.Password.obfuscate(char password) を使用して難読化することもできます。これにより、単純で安全でない XOR および Base64 エンコーディングメカニズムを使用してパスワードが難読化されます。これは、平文のパスワードを難読化する単純なスクランブラーにすぎないことに注意してください。com.ibm.ssl.trustStoreType: デフォルトの TrustManager で使用する KeyStore オブジェクトのタイプ。keyStoreType と同じ可能な値。com.ibm.ssl.trustStoreProvider: トラストストアプロバイダー (IBMJCE や IBMJCEFIPS など)。com.ibm.ssl.enabledCipherSuites: 有効になっている暗号のリスト。値はプロバイダーによって異なります (例: SSL_RSA_WITH_AES_128_CBC_SHA;SSL_RSA_WITH_3DES_EDE_CBC_SHA)。com.ibm.ssl.keyManager: プラットフォームで使用可能なデフォルトのアルゴリズムを使用する代わりに、KeyManagerFactory オブジェクトをインスタンス化するために使用されるアルゴリズムを設定します。値の例: IbmX509 または IBMJ9X509。com.ibm.ssl.trustManager: プラットフォームで使用可能なデフォルトのアルゴリズムを使用する代わりに、TrustManagerFactory オブジェクトをインスタンス化するために使用されるアルゴリズムを設定します。値の例: PKIX または IBMJ9X509。

 

プロパティー

sslHostnameVerifier (セキュリティー)

SSL 接続の HostnameVerifier を設定します。接続でのハンドシェイク後に使用されることに注意してください。ホスト名がエラーを検証した場合は、自分でアクションを実行する必要があります。デフォルトの HostnameVerifier はありません。

 

HostnameVerifier

userName (セキュリティー)

MQTT ブローカーに対する認証に使用されるユーザー名。

 

String

38.4. エンドポイントオプション

Paho MQTT 5 エンドポイントは、URI 構文を使用して設定されます。

paho-mqtt5:topic

パスおよびクエリーパラメーターを使用します。

38.4.1. パスパラメーター(1 パラメーター)

Name説明デフォルトタイプ

topic (共通)

必須 トピックの名前。

 

String

38.4.2. クエリーパラメーター (32 パラメーター)

Name説明デフォルトタイプ

automaticReconnect (共通)

接続が失われた場合に、クライアントがサーバーへの再接続を自動的に試行するかどうかを設定します。false に設定すると、クライアントは、接続が失われた場合にサーバーへの自動再接続を試行しません。true に設定すると、接続が失われた場合に、クライアントはサーバーへの再接続を試みます。再接続を試行する前に、最初は 1 秒待機します。再接続の試行が失敗するたびに、遅延が 2 分になるまで遅延が 2 倍になり、その時点で遅延は 2 分のままになります。

true

boolean

brokerUrl (Common)

MQTT ブローカーの URL。

tcp://localhost:1883

String

cleanStart (共通)

クライアントとサーバーが再起動と再接続の際に状態を記憶するかどうかを設定します。false に設定すると、クライアントとサーバーの両方が、クライアント、サーバー、および接続の再起動後も状態を維持します。状態が維持されるため: クライアント、サーバー、または接続が再起動した場合でも、メッセージ配信は指定された QOS を満たす信頼性があります。サーバーはサブスクリプションを永続的なものとして扱います。true に設定すると、クライアントとサーバーは、クライアント、サーバー、または接続の再起動後も状態を維持しません。これは、クライアント、サーバー、または接続が再起動した場合は、指定された QOS へのメッセージ配信を維持できないことを意味します。サーバーはサブスクリプションを非永続として扱います。

true

boolean

clientId (共通)

MQTT クライアント識別子。識別子は一意である必要があります。

 

String

connectionTimeout (共通)

接続タイムアウト値を設定します。この値は秒単位で測定され、MQTT サーバーへのネットワーク接続が確立されるまでクライアントが待機する最大時間間隔を定義します。デフォルトのタイムアウトは 30 秒です。値 0 はタイムアウト処理を無効にします。つまり、クライアントはネットワーク接続が成功するか失敗するまで待機します。

30

int

filePersistenceDirectory (共通)

ファイルの永続性によって使用されるベースディレクトリー。デフォルトでユーザーディレクトリーを使用します。

 

String

keepAliveInterval (common)

キープアライブ間隔を設定します。この値は秒単位で測定され、送受信されるメッセージ間の最大時間間隔を定義します。これにより、クライアントは、TCP/IP タイムアウトを待たずに、サーバーが使用できなくなったかどうかを検出できます。クライアントは、各キープアライブ期間内に少なくとも 1 つのメッセージがネットワークを通過することを保証します。期間中にデータ関連のメッセージがない場合、クライアントは非常に小さな ping メッセージを送信し、サーバーはそれを確認します。値 0 は、クライアントでのキープアライブ処理を無効にします。デフォルト値は、60 秒です。

60

int

maxReconnectDelay (共通)

再接続間の最大待機時間 (ミリ秒) を取得します。

128000

int

persistence (共通)

使用するクライアントの永続性 - メモリーまたはファイル。

列挙値:

  • FILE
  • MEMORY

MEMORY

PahoMqtt5Persistence

qos (共通)

クライアントのサービス品質レベル (0 ~ 2)。

2

int

receiveMaximum (共通)

受信最大値を設定します。この値は、クライアントが同時に処理できる QoS 1 および QoS 2 のパブリケーションの制限を表します。サーバーが送信しようとする QoS 0 パブリケーションの数を制限するメカニズムはありません。デフォルト値は 65535 です。

65535

int

retained (共通)

オプションを保持します。

false

boolean

serverURIs (共通)

クライアントが接続できる 1 つ以上の serverURI のリストを設定します。複数の値はコンマで区切ることができます。各 serverURI は、クライアントが接続できるサーバーのアドレスを指定します。TCP 接続の tcp://と、SSL/TLS で保護された TCP 接続の ssl://の 2 種類の接続がサポートされています。たとえば、tcp://localhost:1883 ssl://localhost:8883 です。ポートが指定されていない場合、デフォルトで tcp://URI の場合は 1883、ssl://URI の場合は 8883 になります。serverURIs が設定されている場合は、MQTT クライアントのコンストラクターで渡された serverURI パラメーターをオーバーライドします。接続の試行が開始すると、クライアントはリスト内の最初の serverURI から開始し、サーバーとの接続が確立されるまでリストを処理します。どのサーバーにも接続できない場合は、接続の試行が失敗します。クライアントが接続可能なサーバーのリストを指定することには、いくつかの用途があります。高可用性よび高信頼性のメッセージ配信です。一部の MQTT サーバーは、2 つ以上の同等の MQTT サーバーが状態を共有する高可用性機能をサポートしています。MQTT クライアントは、同等のサーバーのいずれかに接続でき、クライアントがどのサーバーに接続しても、メッセージが確実に配信され、永続的なサブスクリプションが維持されることが保証されます。永続的なサブスクリプションや信頼できるメッセージ配信が必要な場合は、cleansession フラグを false に設定する必要があります。ハントリスト: (高可用性オプションのように) 等しくないサーバーのセットを指定できます。サーバー間で状態が共有されないため、信頼できるメッセージ配信および永続的なサブスクリプションは有効ではありません。ハントリストモードを使用する場合は、cleansession フラグを true に設定する必要があります。

 

String

sessionExpiryInterval (common)

セッションの有効期限を設定します。この値は秒単位で測定され、クライアントが切断された後にブローカーがセッションを維持する最大時間を定義します。クライアントは、後でサーバーに接続する予定がある場合にのみ、長いセッション有効期限間隔で接続する必要があります。デフォルトでは、この値は -1 であるため送信されません。この場合、セッションは期限切れになりません。0 が送信された場合、ネットワーク接続が閉じられるとすぐにセッションが終了します。クライアントは、セッションを使用できなくなったと判断した場合、セッションの有効期限間隔を 0 に設定して切断する必要があります。

-1

long

willMqttProperties (common)

接続の LWT (Last Will and Testament) を設定します。このクライアントが予期せずサーバーへの接続を失った場合、サーバーは提供された詳細を使用してメッセージを自分自身に公開します。メッセージに設定された MQTT プロパティー。

 

MqttProperties

willPayload (共通)

接続の LWT (Last Will and Testament) を設定します。このクライアントが予期せずサーバーへの接続を失った場合、サーバーは提供された詳細を使用してメッセージを自分自身に公開します。メッセージのバイトペイロード。

 

String

willQos (共通)

接続の LWT (Last Will and Testament) を設定します。このクライアントが予期せずサーバーへの接続を失った場合、サーバーは提供された詳細を使用してメッセージを自分自身に公開します。メッセージを公開するサービスの品質 (0、1、または 2)。

1

int

willRetained (共通)

接続の LWT (Last Will and Testament) を設定します。このクライアントが予期せずサーバーへの接続を失った場合、サーバーは提供された詳細を使用してメッセージを自分自身に公開します。メッセージを保持するかどうか。

false

boolean

willTopic (共通)

接続の LWT (Last Will and Testament) を設定します。このクライアントが予期せずサーバーへの接続を失った場合、サーバーは提供された詳細を使用してメッセージを自分自身に公開します。パブリッシュ先のトピック。

 

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

lazyStartProducer (producer)

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

false

boolean

client (上級)

既存の mqtt クライアントを使用するには。

 

MqttClient

customWebSocketHeaders (上級)

WebSocket 接続のカスタム WebSocket ヘッダーを設定します。

 

マップ

executorServiceTimeout (advanced)

executor サービスが終了時に強制終了する前に待機する時間を秒単位で設定します。この値を変更する必要があることが確実でない限り、この値を変更することはお勧めしません。

1

int

httpsHostnameVerificationEnabled (security)

SSL HostnameVerifier が有効かどうか。デフォルト値は true です。

true

boolean

password (セキュリティー)

MQTT ブローカーに対する認証に使用されるパスワード。

 

String

socketFactory (セキュリティー)

使用する SocketFactory を設定します。これにより、アプリケーションは、ネットワークソケットの作成に独自のポリシーを適用できます。SSL 接続を使用する場合は、SSLSocketFactory を使用して、アプリケーション固有のセキュリティー設定を提供できます。

 

SocketFactory

sslClientProps (security)

接続の SSL プロパティーを設定します。これらのプロパティーは、Java Secure Socket Extensions (JSSE) の実装が利用可能な場合にのみ有効であることに注意してください。カスタム SocketFactory が設定されていると、これらのプロパティーは使用されません。以下のプロパティーを使用できます。com.ibm.ssl.protocol: SSL、SSLv3、TLS、TLSv1、SSL_TLS のいずれか。com.ibm.ssl.contextProvider: 基礎となる JSSE プロバイダー。たとえば、IBMJSSE2 または SunJSSE com.ibm.ssl.keyStore です。KeyManager で使用する KeyStore オブジェクトを含むファイルの名前。たとえば /mydir/etc/key.p12 com.ibm.ssl.keyStorePassword です。KeyManager に使用させたい KeyStore オブジェクトのパスワード。パスワードはプレーンテキストにすることも、静的メソッド com.ibm.micro.security.Password.obfuscate(char password) を使用して難読化することもできます。これにより、単純で安全でない XOR および Base64 エンコーディングメカニズムを使用してパスワードが難読化されます。これは、平文のパスワードを難読化する単純なスクランブラーにすぎないことに注意してくださいcom.ibm.ssl.keyStoreType: 鍵ストアのタイプ (PKCS12、JKS、または JCEKS など)。com.ibm.ssl.keyStoreProvider 鍵ストアプロバイダー (IBMJCE または IBMJCEFIPS など)。com.ibm.ssl.trustStore: TrustManager で使用する KeyStore オブジェクトを含むファイルの名前。com.ibm.ssl.trustStorePassword: TrustManager で使用する TrustStore オブジェクトのパスワード。パスワードはプレーンテキストにすることも、静的メソッド com.ibm.micro.security.Password.obfuscate(char password) を使用して難読化することもできます。これにより、単純で安全でない XOR および Base64 エンコーディングメカニズムを使用してパスワードが難読化されます。これは、平文のパスワードを難読化する単純なスクランブラーにすぎないことに注意してください。com.ibm.ssl.trustStoreType: デフォルトの TrustManager で使用する KeyStore オブジェクトのタイプ。keyStoreType と同じ可能な値。com.ibm.ssl.trustStoreProvider: トラストストアプロバイダー (IBMJCE や IBMJCEFIPS など)。com.ibm.ssl.enabledCipherSuites: 有効になっている暗号のリスト。値はプロバイダーによって異なります (例: SSL_RSA_WITH_AES_128_CBC_SHA;SSL_RSA_WITH_3DES_EDE_CBC_SHA)。com.ibm.ssl.keyManager: プラットフォームで使用可能なデフォルトのアルゴリズムを使用する代わりに、KeyManagerFactory オブジェクトをインスタンス化するために使用されるアルゴリズムを設定します。値の例: IbmX509 または IBMJ9X509。com.ibm.ssl.trustManager: プラットフォームで使用可能なデフォルトのアルゴリズムを使用する代わりに、TrustManagerFactory オブジェクトをインスタンス化するために使用されるアルゴリズムを設定します。値の例: PKIX または IBMJ9X509。

 

プロパティー

sslHostnameVerifier (セキュリティー)

SSL 接続の HostnameVerifier を設定します。接続でのハンドシェイク後に使用されることに注意してください。ホスト名がエラーを検証した場合は、自分でアクションを実行する必要があります。デフォルトの HostnameVerifier はありません。

 

HostnameVerifier

userName (セキュリティー)

MQTT ブローカーに対する認証に使用されるユーザー名。

 

String

38.5. Headers

次のヘッダーは、Paho コンポーネントによって認識されます。

ヘッダーJava 定数エンドポイントの種類値のタイプ説明

CamelMqttTopic

PahoConstants.MQTT_TOPIC

Consumer

String

トピックの名前。

CamelMqttQoS

PahoConstants.MQTT_QOS

Consumer

Integer

受信メッセージの QualityOfService

CamelPahoOverrideTopic

PahoConstants.CAMEL_PAHO_OVERRIDE_TOPIC

producer

String

エンドポイントで指定されたトピックの代わりにオーバーライドして送信するトピックの名前

38.6. デフォルトのペイロードタイプ

デフォルトでは、Camel Paho コンポーネントは、MQTT メッセージから抽出された (または挿入された) バイナリーペイロードで動作します。

// Receive payload
byte[] payload = (byte[]) consumerTemplate.receiveBody("paho:topic");

// Send payload
byte[] payload = "message".getBytes();
producerTemplate.sendBody("paho:topic", payload);

もちろん、Camel 組み込み 型変換 API は、自動データ型変換を実行できます。以下の例では、Camel は自動的にバイナリーペイロードを 文字列 に (およびその逆に) 変換します。

// Receive payload
String payload = consumerTemplate.receiveBody("paho:topic", String.class);

// Send payload
String payload = "message";
producerTemplate.sendBody("paho:topic", payload);

38.7. サンプル

たとえば、次のスニペットは、Camel ルーターと同じホストにインストールされた MQTT ブローカーからメッセージを読み取ります。

from("paho:some/queue")
    .to("mock:test");

以下のスニペットは MQTT ブローカーにメッセージを送信します:

from("direct:test")
    .to("paho:some/target/queue");

たとえば、これはリモート MQTT ブローカーからメッセージを読み取る方法です。

from("paho:some/queue?brokerUrl=tcp://iot.eclipse.org:1883")
    .to("mock:test");

ここでは、デフォルトのトピックをオーバーライドして、動的トピックに設定します

from("direct:test")
    .setHeader(PahoConstants.CAMEL_PAHO_OVERRIDE_TOPIC, simple("${header.customerId}"))
    .to("paho:some/target/queue");

38.8. Spring Boot 自動設定

Spring Boot で paho-mqtt5 を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-paho-mqtt5-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 33 のオプションをサポートします。

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

camel.component.paho-mqtt5.automatic-reconnect

接続が失われた場合に、クライアントがサーバーへの再接続を自動的に試行するかどうかを設定します。false に設定すると、クライアントは、接続が失われた場合にサーバーへの自動再接続を試行しません。true に設定すると、接続が失われた場合に、クライアントはサーバーへの再接続を試みます。再接続を試行する前に、最初は 1 秒待機します。再接続の試行が失敗するたびに、遅延が 2 分になるまで遅延が 2 倍になり、その時点で遅延は 2 分のままになります。

true

ブール値

camel.component.paho-mqtt5.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.paho-mqtt5.bridge-error-handler

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

false

ブール値

camel.component.paho-mqtt5.broker-url

MQTT ブローカーの URL。

tcp://localhost:1883

String

camel.component.paho-mqtt5.clean-start

クライアントとサーバーが再起動と再接続の際に状態を記憶するかどうかを設定します。false に設定すると、クライアントとサーバーの両方が、クライアント、サーバー、および接続の再起動後も状態を維持します。状態が維持されるため: クライアント、サーバー、または接続が再起動した場合でも、メッセージ配信は指定された QOS を満たす信頼性があります。サーバーはサブスクリプションを永続的なものとして扱います。true に設定すると、クライアントとサーバーは、クライアント、サーバー、または接続の再起動後も状態を維持しません。これは、クライアント、サーバー、または接続が再起動した場合は、指定された QOS へのメッセージ配信を維持できないことを意味します。サーバーはサブスクリプションを非永続として扱います。

true

ブール値

camel.component.paho-mqtt5.client

共有 Paho クライアントを使用します。オプションは org.eclipse.paho.mqttv5.client.MqttClient タイプです。

 

MqttClient

camel.component.paho-mqtt5.client-id

MQTT クライアント識別子。識別子は一意である必要があります。

 

String

camel.component.paho-mqtt5.configuration

共有 Paho 設定を使用します。オプションは org.apache.camel.component.paho.mqtt5.PahoMqtt5Configuration タイプです。

 

PahoMqtt5Configuration

camel.component.paho-mqtt5.connection-timeout

接続タイムアウト値を設定します。この値は秒単位で測定され、MQTT サーバーへのネットワーク接続が確立されるまでクライアントが待機する最大時間間隔を定義します。デフォルトのタイムアウトは 30 秒です。値 0 はタイムアウト処理を無効にします。つまり、クライアントはネットワーク接続が成功するか失敗するまで待機します。

30

Integer

camel.component.paho-mqtt5.custom-web-socket-headers

WebSocket 接続のカスタム WebSocket ヘッダーを設定します。

 

マップ

camel.component.paho-mqtt5.enabled

paho-mqtt5 コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.paho-mqtt5.executor-service-timeout

executor サービスが終了時に強制終了する前に待機する時間を秒単位で設定します。この値を変更する必要があることが確実でない限り、この値を変更することはお勧めしません。

1

Integer

camel.component.paho-mqtt5.file-persistence-directory

ファイルの永続性によって使用されるベースディレクトリー。デフォルトでユーザーディレクトリーを使用します。

 

String

camel.component.paho-mqtt5.https-hostname-verification-enabled

SSL HostnameVerifier が有効かどうか。デフォルト値は true です。

true

ブール値

camel.component.paho-mqtt5.keep-alive-interval

キープアライブ間隔を設定します。この値は秒単位で測定され、送受信されるメッセージ間の最大時間間隔を定義します。これにより、クライアントは、TCP/IP タイムアウトを待たずに、サーバーが使用できなくなったかどうかを検出できます。クライアントは、各キープアライブ期間内に少なくとも 1 つのメッセージがネットワークを通過することを保証します。期間中にデータ関連のメッセージがない場合、クライアントは非常に小さな ping メッセージを送信し、サーバーはそれを確認します。値 0 は、クライアントでのキープアライブ処理を無効にします。デフォルト値は、60 秒です。

60

Integer

camel.component.paho-mqtt5.lazy-start-producer

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

false

ブール値

camel.component.paho-mqtt5.max-reconnect-delay

再接続間の最大待機時間 (ミリ秒) を取得します。

128000

Integer

camel.component.paho-mqtt5.password

MQTT ブローカーに対する認証に使用されるパスワード。

 

String

camel.component.paho-mqtt5.persistence

使用するクライアントの永続性 - メモリーまたはファイル。

 

PahoMqtt5Persistence

camel.component.paho-mqtt5.qos

クライアントのサービス品質レベル (0 ~ 2)。

2

Integer

camel.component.paho-mqtt5.receive-maximum

受信最大値を設定します。この値は、クライアントが同時に処理できる QoS 1 および QoS 2 のパブリケーションの制限を表します。サーバーが送信しようとする QoS 0 パブリケーションの数を制限するメカニズムはありません。デフォルト値は 65535 です。

65535

Integer

camel.component.paho-mqtt5.retained

オプションを保持します。

false

ブール値

camel.component.paho-mqtt5.server-u-r-is

クライアントが接続できる 1 つ以上の serverURI のリストを設定します。複数の値はコンマで区切ることができます。各 serverURI は、クライアントが接続できるサーバーのアドレスを指定します。TCP 接続の tcp://と、SSL/TLS で保護された TCP 接続の ssl://の 2 種類の接続がサポートされています。たとえば、tcp://localhost:1883 ssl://localhost:8883 です。ポートが指定されていない場合、デフォルトで tcp://URI の場合は 1883、ssl://URI の場合は 8883 になります。serverURIs が設定されている場合は、MQTT クライアントのコンストラクターで渡された serverURI パラメーターをオーバーライドします。接続の試行が開始すると、クライアントはリスト内の最初の serverURI から開始し、サーバーとの接続が確立されるまでリストを処理します。どのサーバーにも接続できない場合は、接続の試行が失敗します。クライアントが接続可能なサーバーのリストを指定することには、いくつかの用途があります。高可用性よび高信頼性のメッセージ配信です。一部の MQTT サーバーは、2 つ以上の同等の MQTT サーバーが状態を共有する高可用性機能をサポートしています。MQTT クライアントは、同等のサーバーのいずれかに接続でき、クライアントがどのサーバーに接続しても、メッセージが確実に配信され、永続的なサブスクリプションが維持されることが保証されます。永続的なサブスクリプションや信頼できるメッセージ配信が必要な場合は、cleansession フラグを false に設定する必要があります。ハントリスト: (高可用性オプションのように) 等しくないサーバーのセットを指定できます。サーバー間で状態が共有されないため、信頼できるメッセージ配信および永続的なサブスクリプションは有効ではありません。ハントリストモードを使用する場合は、cleansession フラグを true に設定する必要があります。

 

String

camel.component.paho-mqtt5.session-expiry-interval

セッションの有効期限を設定します。この値は秒単位で測定され、クライアントが切断された後にブローカーがセッションを維持する最大時間を定義します。クライアントは、後でサーバーに接続する予定がある場合にのみ、長いセッション有効期限間隔で接続する必要があります。デフォルトでは、この値は -1 であるため送信されません。この場合、セッションは期限切れになりません。0 が送信された場合、ネットワーク接続が閉じられるとすぐにセッションが終了します。クライアントは、セッションを使用できなくなったと判断した場合、セッションの有効期限間隔を 0 に設定して切断する必要があります。

-1

Long

camel.component.paho-mqtt5.socket-factory

使用する SocketFactory を設定します。これにより、アプリケーションは、ネットワークソケットの作成に独自のポリシーを適用できます。SSL 接続を使用する場合は、SSLSocketFactory を使用して、アプリケーション固有のセキュリティー設定を提供できます。オプションは javax.net.SocketFactory タイプです。

 

SocketFactory

camel.component.paho-mqtt5.ssl-client-props

接続の SSL プロパティーを設定します。これらのプロパティーは、Java Secure Socket Extensions (JSSE) の実装が利用可能な場合にのみ有効であることに注意してください。カスタム SocketFactory が設定されていると、これらのプロパティーは使用されません。以下のプロパティーを使用できます。com.ibm.ssl.protocol: SSL、SSLv3、TLS、TLSv1、SSL_TLS のいずれか。com.ibm.ssl.contextProvider: 基礎となる JSSE プロバイダー。たとえば、IBMJSSE2 または SunJSSE com.ibm.ssl.keyStore です。KeyManager で使用する KeyStore オブジェクトを含むファイルの名前。たとえば /mydir/etc/key.p12 com.ibm.ssl.keyStorePassword です。KeyManager に使用させたい KeyStore オブジェクトのパスワード。パスワードはプレーンテキストにすることも、静的メソッド com.ibm.micro.security.Password.obfuscate(char password) を使用して難読化することもできます。これにより、単純で安全でない XOR および Base64 エンコーディングメカニズムを使用してパスワードが難読化されます。これは、平文のパスワードを難読化する単純なスクランブラーにすぎないことに注意してくださいcom.ibm.ssl.keyStoreType: 鍵ストアのタイプ (PKCS12、JKS、または JCEKS など)。com.ibm.ssl.keyStoreProvider 鍵ストアプロバイダー (IBMJCE または IBMJCEFIPS など)。com.ibm.ssl.trustStore: TrustManager で使用する KeyStore オブジェクトを含むファイルの名前。com.ibm.ssl.trustStorePassword: TrustManager で使用する TrustStore オブジェクトのパスワード。パスワードはプレーンテキストにすることも、静的メソッド com.ibm.micro.security.Password.obfuscate(char password) を使用して難読化することもできます。これにより、単純で安全でない XOR および Base64 エンコーディングメカニズムを使用してパスワードが難読化されます。これは、平文のパスワードを難読化する単純なスクランブラーにすぎないことに注意してください。com.ibm.ssl.trustStoreType: デフォルトの TrustManager で使用する KeyStore オブジェクトのタイプ。keyStoreType と同じ可能な値。com.ibm.ssl.trustStoreProvider: トラストストアプロバイダー (IBMJCE や IBMJCEFIPS など)。com.ibm.ssl.enabledCipherSuites: 有効になっている暗号のリスト。値はプロバイダーによって異なります (例: SSL_RSA_WITH_AES_128_CBC_SHA;SSL_RSA_WITH_3DES_EDE_CBC_SHA)。com.ibm.ssl.keyManager: プラットフォームで使用可能なデフォルトのアルゴリズムを使用する代わりに、KeyManagerFactory オブジェクトをインスタンス化するために使用されるアルゴリズムを設定します。値の例: IbmX509 または IBMJ9X509。com.ibm.ssl.trustManager: プラットフォームで使用可能なデフォルトのアルゴリズムを使用する代わりに、TrustManagerFactory オブジェクトをインスタンス化するために使用されるアルゴリズムを設定します。値の例: PKIX または IBMJ9X509。オプションは java.util.Properties タイプです。

 

プロパティー

camel.component.paho-mqtt5.ssl-hostname-verifier

SSL 接続の HostnameVerifier を設定します。接続でのハンドシェイク後に使用されることに注意してください。ホスト名がエラーを検証した場合は、自分でアクションを実行する必要があります。デフォルトの HostnameVerifier はありません。オプションは javax.net.ssl.HostnameVerifier タイプです。

 

HostnameVerifier

camel.component.paho-mqtt5.user-name

MQTT ブローカーに対する認証に使用されるユーザー名。

 

String

camel.component.paho-mqtt5.will-mqtt-properties

接続の LWT (Last Will and Testament) を設定します。このクライアントが予期せずサーバーへの接続を失った場合、サーバーは提供された詳細を使用してメッセージを自分自身に公開します。メッセージに設定された MQTT プロパティー。オプションは org.eclipse.paho.mqttv5.common.packet.MqttProperties タイプです。

 

MqttProperties

camel.component.paho-mqtt5.will-payload

接続の LWT (Last Will and Testament) を設定します。このクライアントが予期せずサーバーへの接続を失った場合、サーバーは提供された詳細を使用してメッセージを自分自身に公開します。メッセージのバイトペイロード。

 

String

camel.component.paho-mqtt5.will-qos

接続の LWT (Last Will and Testament) を設定します。このクライアントが予期せずサーバーへの接続を失った場合、サーバーは提供された詳細を使用してメッセージを自分自身に公開します。メッセージを公開するサービスの品質 (0、1、または 2)。

1

Integer

camel.component.paho-mqtt5.will-retained

接続の LWT (Last Will and Testament) を設定します。このクライアントが予期せずサーバーへの接続を失った場合、サーバーは提供された詳細を使用してメッセージを自分自身に公開します。メッセージを保持するかどうか。

false

ブール値

camel.component.paho-mqtt5.will-topic

接続の LWT (Last Will and Testament) を設定します。このクライアントが予期せずサーバーへの接続を失った場合、サーバーは提供された詳細を使用してメッセージを自分自身に公開します。パブリッシュ先のトピック。

 

String

第39章 Quartz

consumer のみがサポートされている

Quartz コンポーネントは、Quartz Scheduler 2.x を使用してスケジュールされたメッセージ配信を提供します。各エンドポイントは異なるタイマーを表します (Quartz 用語では、Trigger と JobDetail)。

Maven ユーザーは、このコンポーネントの pom.xml に以下の依存関係を追加する必要があります。

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-quartz</artifactId>
    <version>{CamelSBVersion}</version>
    <!-- use the same version as your Camel core version -->
</dependency>

39.1. URI 形式

quartz://timerName?options
quartz://groupName/timerName?options
quartz://groupName/timerName?cron=expression
quartz://timerName?cron=expression

コンポーネントは CronTrigger または SimpleTrigger を使用します。cron 式が指定されていない場合、コンポーネントは単純なトリガーを使用します。groupName が指定されていない場合、quartz コンポーネントは Camel グループ名を使用します。

39.2. オプションの設定

Camel コンポーネントは、以下の 2 つのレベルで設定されます。

  • コンポーネントレベル
  • エンドポイントレベル

39.2.1. コンポーネントオプションの設定

コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。

コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。

コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。

39.2.2. エンドポイントオプションの設定

多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。

エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。

オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。

以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。

39.3. コンポーネントオプション

Quartz コンポーネントは、以下にリストされている 13 のオプションをサポートしています。

Name説明デフォルトタイプ

bridgeErrorHandler (consumer)

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

false

boolean

enableJmx (consumer)

JMX から Quartz スケジューラーを管理できるようにする Quartz JMX を有効にするかどうか。このオプションのデフォルトは true です。

true

boolean

prefixInstanceName (consumer)

Quartz Scheduler インスタンス名の前に CamelContext 名を付けるかどうか。これはデフォルトで有効になっており、各 CamelContext がデフォルトで独自の Quartz スケジューラーインスタンスを使用できるようになっています。このオプションを false に設定すると、複数の CamelContext 間で Quartz スケジューラーインスタンスを再利用できます。

true

boolean

prefixJobNameWithEndpointId (consumer)

Quartz ジョブにエンドポイント ID の接頭辞を付けるかどうか。このオプションのデフォルトは false です。

false

boolean

properties (consumer)

Quartz スケジューラーを設定するためのプロパティー。

 

マップ

propertiesFile (consumer)

クラスパスからロードするプロパティーのファイル名。

 

String

propertiesRef (consumer)

Quartz の設定に使用するレジストリー内のルックアップへの既存のプロパティーまたはマップへの参照。

 

String

autowiredEnabled (上級)

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

boolean

scheduler (上級)

新しいスケジューラーを作成する代わりに、カスタム設定された Quartz スケジューラーを使用するには。

 

スケジューラー

schedulerFactory (上級)

スケジューラーの作成に使用されるカスタム SchedulerFactory を使用するには。

 

SchedulerFactory

autoStartScheduler (スケジューラー)

スケジューラーを自動起動するかどうか。このオプションのデフォルトは true です。

true

boolean

interruptJobsOnShutdown (スケジューラー)

シャットダウン時にジョブを中断するかどうか。これにより、スケジューラーがより迅速にシャットダウンし、実行中のジョブを中断しようとします。これを有効にすると、実行中のジョブが中断されて失敗する可能性があります。ジョブが中断されると、Camel はエクスチェンジをマークしてルーティングの継続を停止し、java.util.concurrent.RejectedExecutionException を発生した例外として設定します。したがって、Camel ジョブが正常に完了してシャットダウンできるようにする方がよい場合が多いため、これは注意して使用してください。

false

boolean

startDelayedSeconds (スケジューラー)

Quartz スケジューラーを開始する前に待機する秒数。

 

int

39.4. エンドポイントオプション

Quartz エンドポイントは、URI 構文を使用して設定されます。

quartz:groupName/triggerName

パスおよびクエリーパラメーターを使用します。

39.4.1. パスパラメーター (2 パラメーター)

Name説明デフォルトタイプ

groupName (consumer)

使用する Quartz グループ名。グループ名とトリガー名の組み合わせは一意である必要があります。

Camel

String

triggerName (consumer)

必須 使用する quartz トリガー名。グループ名とトリガー名の組み合わせは一意である必要があります。

 

String

39.4.2. クエリーパラメーター (17 パラメーター)

Name説明デフォルトタイプ

bridgeErrorHandler (consumer)

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

false

boolean

cron (consumer)

トリガーするタイミングを定義する cron 式を指定します。

 

String

deleteJob (consumer)

true に設定すると、ルートが停止したときにトリガーが自動的に削除されます。それ以外の場合は、false に設定すると、スケジューラーに残ります。false に設定すると、ユーザーがキャメル Uri で事前設定されたトリガーを再利用できることも意味します。名前が一致していることを確認してください。deleteJob と pauseJob の両方を true に設定することはできないことに注意してください。

true

boolean

durableJob (consumer)

ジョブが孤立した後もジョブを保存したままにするかどうか (それを指すトリガーはありません)。

false

boolean

pauseJob (consumer)

true に設定すると、ルートが停止したときにトリガーが自動的に一時停止します。それ以外の場合は、false に設定すると、スケジューラーに残ります。false に設定すると、ユーザーがキャメル Uri で事前設定されたトリガーを再利用できることも意味します。名前が一致していることを確認してください。deleteJob と pauseJob の両方を true に設定することはできないことに注意してください。

false

boolean

recoverableJob (consumer)

リカバリーまたはフェイルオーバー状況が発生した場合に、ジョブを再実行するかどうかをスケジューラーに指示します。

false

boolean

stateful (consumer)

デフォルトのジョブの代わりに、Quartz PersistJobDataAfterExecution および DisallowConcurrentExecution を使用します。

false

boolean

exceptionHandler (consumer (上級))

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

 

ExceptionHandler

exchangePattern (consumer (上級))

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

列挙値:

  • InOnly
  • InOut
  • InOptionalOut
 

ExchangePattern

customCalendar (上級)

特定の日付範囲を避けるカスタムカレンダーを指定します。

 

カレンダー

jobParameters (advanced)

ジョブの追加オプションを設定するには。

 

マップ

prefixJobNameWithEndpointId (advanced)

ジョブ名の前にエンドポイント ID を付けるかどうか。

false

boolean

triggerParameters (advanced)

トリガーの追加オプションを設定します。

 

Map

usingFixedCamelContextName (advanced)

true の場合、JobDataMap は CamelContext 名を直接使用して CamelContext を参照します。false の場合、JobDataMap はデプロイ時に変更される可能性のある CamelContext 管理名を使用します。

false

boolean

autoStartScheduler (スケジューラー)

スケジューラーを自動起動するかどうか。

true

boolean

startDelayedSeconds (スケジューラー)

Quartz スケジューラーを開始する前に待機する秒数。

 

int

triggerStartDelay (スケジューラー)

スケジューラーがすでに開始されている場合は、現在の時間の少し後にトリガーを開始して、ジョブが開始される前にエンドポイントが完全に開始されるようにします。負の値のシフトは、過去の開始時刻をトリガーします。

500

long

39.4.3. Quartz.properties ファイルの設定

デフォルトでは、Quartz はクラスパスの org/quartz ディレクトリーにある Quartz.properties ファイルを探します。WAR デプロイメントを使用している場合、これは、Quartz.properties を WEB-INF/classes/org/quartz にドロップするだけであることを意味します。

ただし、Camel Quartz コンポーネントでは、プロパティーを設定することもできます。

パラメーターデフォルトタイプ説明

properties

null

プロパティー

java.util.Properties インスタンスを設定できます。

propertiesFile

null

String

クラスパスからロードするプロパティーのファイル名。

これを行うには、Spring XML で次のように設定できます。

<bean id="quartz" class="org.apache.camel.component.quartz.QuartzComponent">
    <property name="propertiesFile" value="com/mycompany/myquartz.properties"/>
</bean>

39.5. JMX で Quartz スケジューラーを有効にする

JMX を有効にするには、Quartz スケジューラープロパティーを設定する必要があります。
これは通常、設定ファイルでオプション org.quartz.scheduler.jmx.exporttrue 値に設定することです。

このオプションは、明示的に無効にしない限り、デフォルトで true に設定されています。

39.6. Quartz スケジューラーの開始

Quartz コンポーネントは、Quartz スケジューラーを遅延して開始するオプション、または自動開始しないオプションを提供します。

以下に例を示します。

<bean id="quartz" class="org.apache.camel.component.quartz.QuartzComponent">
    <property name="startDelayedSeconds" value="5"/>
</bean>

39.7. クラスタリング

クラスター化モードで Quartz を使用する場合 (例: JobStore がクラスター化される場合など)、その後、Quartz コンポーネントは、ノードが停止/シャットダウンされているときにトリガーを一時停止/削除しません。これにより、クラスター内の他のノードでトリガーを実行し続けることができます。

注記

クラスター化されたノードで実行している場合、エンドポイントのジョブ名/グループが一意であることを確認するためのチェックは行われません。

39.8. メッセージヘッダー

Camel は、Quartz 実行コンテキストからの getter をヘッダー値として追加します。次のヘッダーが追加されます。
calendarfireTimejobDetailjobInstancejobRuntTimemergedJobDataMapnextFireTimepreviousFireTimerefireCountresultScheduledFireTimeschedulertriggertriggerNametriggerGroup

fireTime ヘッダーには、エクスチェンジが開始されたときの java.util.Date が含まれています。

39.9. Cron トリガーの使用

Quartz は、便利な形式でタイマーを指定するための Cron のような式 をサポートしています。これらの式は cron URI パラメーターで使用できます。ただし、有効な URI エンコーディングを維持するために、スペースの代わりに + を使用できます。

たとえば、次の例では、平日の午後 12 時 (正午) から午後 6 時まで、5 分ごとにメッセージが送信されます。

from("quartz://myGroup/myTimerName?cron=0+0/5+12-18+?+*+MON-FRI")
    .to("activemq:Totally.Rocks");

これは、cron 式を使用するのと同じです

0 0/5 12-18 ? * MON-FRI

次の表は、有効な URI 構文を維持するために使用する URI 文字エンコーディングを示しています。

URI 文字Cron 文字

+

スペース

39.10. タイムゾーンの指定

Quartz Scheduler を使用すると、トリガーごとにタイムゾーンを設定できます。たとえば、自国のタイムゾーンを使用するには、次のようにします。

quartz://groupName/timerName?cron=0+0/5+12-18+?+*+MON-FRI&trigger.timeZone=Europe/Stockholm

timeZone 値は、java.util.TimeZone によって受け入れられる値です。

39.11. 予期しない命令の設定

quartz スケジューラーは、予期しないトリガーの発生状況を処理するための予期しない命令を使用して設定できます。使用している具体的なトリガータイプでは、このプロパティーの値として設定できる追加の MISFIRE_INSTRUCTION_XXX 定数のセットが定義されています。

たとえば、ミスファイア命令 4 を使用するように単純なトリガーを設定するには、次のようにします。

quartz://myGroup/myTimerName?trigger.repeatInterval=2000&trigger.misfireInstruction=4

同様に、予期しない命令の 1 つを使用して cron トリガーを設定することもできます。

quartz://myGroup/myTimerName?cron=0/2+*+*+*+*+?&trigger.misfireInstruction=2

シンプルトリガーと cron トリガーには、代表的な次の予期しない命令があります。

39.11.1. SimpleTrigger.MISFIRE_INSTRUCTION_FIRE_NOW = 1 (default)

予期しない状況で、SimpleTrigger が Scheduler によってすぐに起動されることを Scheduler に指示します。

この命令は通常、ワンショット (非反復) トリガーにのみ使用する必要があります。繰り返し回数が 0 を超えるトリガーで使用された場合、MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_REMAINING_REPEAT_COUNT 命令と同等です。

39.11.2. SimpleTrigger.MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_EXISTING_REPEAT_COUNT = 2

予期しない状況が発生した場合、SimpleTrigger が (関連付けられた Calendar で今が除外されていても) 繰り返し回数をそのままにして今に再スケジュールされることを Scheduler に指示します。ただし、これはトリガーの終了時間に従います。そのため、現在が終了時間の後にある場合、トリガーは再び起動しません。

この命令を使用すると、トリガは元々設定されていた開始時刻と繰り返し回数を忘れてしまいます(これは、何らかの理由で、後で元の値が何であったかを知ることができるようにしたい場合のみ問題です)。

39.11.3. SimpleTrigger.MISFIRE_INSTRUCTION_RESCHEDULE_NOW_WITH_REMAINING_REPEAT_COUNT = 3

予期しない状況があった場合、SimpleTrigger は 'now' に再スケジュールされることをスケジューラに指示します (関連するカレンダーが 'now' を除外していても)。ただし、これはトリガーの終了時間に従います。そのため、現在が終了時間の後にある場合、トリガーは再び起動しません。

この命令を使用すると、トリガーは、最初に設定された開始時間と繰り返し回数を忘れてしまいます。代わりに、トリガーの繰り返し回数が残りの繰り返し回数に変更されます (これは、何らかの理由で元の値が後でわかるようにしたい場合にのみ問題になります)。

この命令により、すべてのトリガーが失敗した場合、今トリガーした後、'COMPLETE' 状態になる可能性があります。

39.11.4. SimpleTrigger.MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_REMAINING_COUNT = 4

予期しない状況があった場合、SimpleTrigger を 'now' の次のスケジュール時刻に再スケジュールするようスケジューラに指示します - 関連するカレンダーを考慮し、繰り返し回数を、予期しない状況がなかった場合の回数に設定します。

注記

この命令により、すべてのトリガーが失敗した場合、トリガーが直接 COMPLETE 状態になる可能性があります。

39.11.5. SimpleTrigger.MISFIRE_INSTRUCTION_RESCHEDULE_NEXT_WITH_EXISTING_COUNT = 5

予期しない状況が発生した場合、SimpleTrigger が現在の後の次のスケジュールされた時間に再スケジュールされることをスケジューラーに指示します - 関連するすべてのカレンダーを考慮し、繰り返し回数は変更されません。

注記

この命令により、トリガーの終了時刻が到来した場合、トリガーが直接 COMPLETE 状態になる可能性があります。

39.11.6. CronTrigger.MISFIRE_INSTRUCTION_FIRE_ONCE_NOW = 1 (default)

予期しない状況で、CronTrigger が Scheduler によってすぐに起動されることを Scheduler に指示します。

39.11.7. CronTrigger.MISFIRE_INSTRUCTION_DO_NOTHING = 2

予期しない状況が発生した場合、CronTrigger は次回の起動時刻を現在の時刻の後のスケジュール内の次回の時刻に更新する必要があることをスケジューラーに指示します (関連するカレンダーを考慮に入れますが、今すぐ起動する必要はありません)。.

39.12. QuartzScheduledPollConsumerScheduler の使用

Quartz コンポーネントは、File および FTP コンシューマーなどの Polling Consumer に cron ベースのスケジューリングを使用できるようにする Polling Consumer スケジューラーを提供します。

たとえば、cron ベースの式を使用して 2 秒ごとにファイルをポーリングするには、Camel ルートを次のように単純に定義できます。

    from("file:inbox?scheduler=quartz&scheduler.cron=0/2+*+*+*+*+?")
       .to("bean:process");

scheduler=quartz を定義して Camel に Quartz ベースのスケジューラーを使用するように指示していることに注意してください。次に、scheduler.xxx オプションを使用してスケジューラーを設定します。Quartz スケジューラーでは、cron オプションを設定する必要があります。

次のオプションがサポートされています。

パラメーターデフォルトタイプ説明

quartzScheduler

null

org.quartz.Scheduler

カスタム Quartz スケジューラーを使用するには。何も設定しない場合、コンポーネントの共有スケジューラーが使用されます。

cron

null

String

必須: ポーリングをトリガーするための cron 式を定義します。

triggerId

null

String

トリガー ID を指定します。何も指定されていない場合は、UUID が生成されて使用されます。

triggerGroup

QuartzScheduledPollConsumerScheduler

String

トリガーグループを指定します。

timeZone

デフォルト

TimeZone

CRON トリガーに使用するタイムゾーン。

重要

エンドポイントからこれらのオプションを設定するには、URIの先頭に scheduler を付ける必要があることを忘れないでください。

たとえば、トリガー ID とグループを設定するには、次のようにします。

    from("file:inbox?scheduler=quartz&scheduler.cron=0/2+*+*+*+*+?&scheduler.triggerId=myId&scheduler.triggerGroup=myGroup")
       .to("bean:process");

Spring には CRON スケジューラーもあるので、以下も使用できます。

    from("file:inbox?scheduler=spring&scheduler.cron=0/2+*+*+*+*+?")
       .to("bean:process");

39.13. Cron コンポーネントのサポート

Quartz コンポーネントは、Camel 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>

ユーザーは、次のルートのように、quartz コンポーネントの代わりに cron コンポーネントを使用できます。

    from("cron://name?schedule=0+0/5+12-18+?+*+MON-FRI")
    .to("activemq:Totally.Rocks");

39.14. Spring Boot 自動設定

Spring Boot で quartz を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-quartz-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 14 のオプションをサポートします。

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

camel.component.quartz.auto-start-scheduler

スケジューラーを自動起動するかどうか。このオプションのデフォルトは true です。

true

ブール値

camel.component.quartz.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.quartz.bridge-error-handler

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

false

ブール値

camel.component.quartz.enable-jmx

JMX から Quartz スケジューラーを管理できるようにする Quartz JMX を有効にするかどうか。このオプションのデフォルトは true です。

true

ブール値

camel.component.quartz.enabled

Quartz コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.quartz.interrupt-jobs-on-shutdown

シャットダウン時にジョブを中断するかどうか。これにより、スケジューラーがより迅速にシャットダウンし、実行中のジョブを中断しようとします。これを有効にすると、実行中のジョブが中断されて失敗する可能性があります。ジョブが中断されると、Camel はエクスチェンジをマークしてルーティングの継続を停止し、java.util.concurrent.RejectedExecutionException を発生した例外として設定します。したがって、Camel ジョブが正常に完了してシャットダウンできるようにする方がよい場合が多いため、これは注意して使用してください。

false

ブール値

camel.component.quartz.prefix-instance-name

Quartz Scheduler インスタンス名の前に CamelContext 名を付けるかどうか。これはデフォルトで有効になっており、各 CamelContext がデフォルトで独自の Quartz スケジューラーインスタンスを使用できるようになっています。このオプションを false に設定すると、複数の CamelContext 間で Quartz スケジューラーインスタンスを再利用できます。

true

ブール値

camel.component.quartz.prefix-job-name-with-endpoint-id

Quartz ジョブにエンドポイント ID の接頭辞を付けるかどうか。このオプションのデフォルトは false です。

false

ブール値

camel.component.quartz.properties

Quartz スケジューラーを設定するためのプロパティー。

 

マップ

camel.component.quartz.properties-file

クラスパスからロードするプロパティーのファイル名。

 

String

camel.component.quartz.properties-ref

Quartz の設定に使用するレジストリー内のルックアップへの既存のプロパティーまたはマップへの参照。

 

String

camel.component.quartz.scheduler

新しいスケジューラーを作成する代わりに、カスタム設定された Quartz スケジューラーを使用するには。オプションは org.quartz.Scheduler タイプです。

 

スケジューラー

camel.component.quartz.scheduler-factory

スケジューラーの作成に使用されるカスタム SchedulerFactory を使用するには。オプションは org.quartz.SchedulerFactory タイプです。

 

SchedulerFactory

camel.component.quartz.start-delayed-seconds

Quartz スケジューラーを開始する前に待機する秒数。

 

Integer

第40章 Ref

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

Ref コンポーネントは、レジストリーにバインドされている既存のエンドポイントの検索に使用されます。

40.1. URI 形式

ref:someName[?options]

someName は、 レジストリー (常にではありませんが、通常は Spring レジストリー) 内のエンドポイントの名前です。Spring レジストリーを使用している場合、someName は Spring レジストリー内のエンドポイントの Bean ID になります。

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. コンポーネントオプション

Ref コンポーネントは、以下に示す 3 つのオプションをサポートしています。

Name説明デフォルトタイプ

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

40.4. エンドポイントオプション

Ref エンドポイントは、URI 構文を使用して設定されます。

ref:name

パスおよびクエリーパラメーターを使用します。

40.4.1. パスパラメーター(1 パラメーター)

Name説明デフォルトタイプ

name (共通)

必須 レジストリーで検索するエンドポイントの名前。

 

String

40.4.2. クエリーパラメーター (4 パラメーター)

Name説明デフォルトタイプ

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

40.5. ランタイムルックアップ

このコンポーネントは、実行時に URI を計算できるレジストリーでエンドポイントを動的に検出する必要がある場合に使用できます。次に、次のコードを使用してエンドポイントを検索できます。

// lookup the endpoint
String myEndpointRef = "bigspenderOrder";
Endpoint endpoint = context.getEndpoint("ref:" + myEndpointRef);

Producer producer = endpoint.createProducer();
Exchange exchange = producer.createExchange();
exchange.getIn().setBody(payloadToSend);
// send the exchange
producer.process(exchange);

また、次のようなレジストリーで定義されたエンドポイントのリストを作成できます。

<camelContext id="camel" xmlns="http://activemq.apache.org/camel/schema/spring">
    <endpoint id="normalOrder" uri="activemq:order.slow"/>
    <endpoint id="bigspenderOrder" uri="activemq:order.high"/>
</camelContext>

40.6. 例

以下のサンプルでは、URI で ref: を使用して、SpringID endpoint2 を持つエンドポイントを参照します。

もちろん、代わりに ref 属性を使用することもできます。

<to uri="ref:endpoint2"/>

より一般的な書き方です。

40.7. Spring Boot 自動設定

Spring Boot で ref を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-ref-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 4 のオプションをサポートします。

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

camel.component.ref.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.ref.bridge-error-handler

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

false

ブール値

camel.component.ref.enabled

ref コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.ref.lazy-start-producer

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

false

ブール値

第41章 REST

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

REST コンポーネントを使用すると、Rest DSL を使用して REST エンドポイント (consumer) を定義して、REST トランスポートとして他の Camel コンポーネントにプラグインできます。

REST コンポーネントは、REST サービスを呼び出すクライアント (producer) としても使用できます。

41.1. URI 形式

rest://method:path[:uriTemplate]?[options]

41.2. オプションの設定

Camel コンポーネントは、以下の 2 つのレベルで設定されます。

  • コンポーネントレベル
  • エンドポイントレベル

41.2.1. コンポーネントオプションの設定

コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。

コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。

コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。

41.2.2. エンドポイントオプションの設定

多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。

エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。

オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。

以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。

41.3. コンポーネントオプション

REST コンポーネントは、以下に示す 8 個のオプションをサポートしています。

Name説明デフォルトタイプ

bridgeErrorHandler (consumer)

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

false

boolean

consumerComponentName (consumer)

(consumer) REST トランスポート (jetty、servlet、undertow など) に使用する Camel Rest コンポーネント。コンポーネントが明示的に設定されていない場合、Rest DSL と統合する Camel コンポーネントがある場合、または org.apache.camel.spi.RestConsumerFactory がレジストリーに登録されている場合、Camel はルックアップします。いずれかが見つかった場合は、それが使用されています。

 

String

apiDoc (producer)

使用する swagger api doc リソース。リソースはデフォルトでクラスパスからロードされ、JSON 形式である必要があります。

 

String

componentName (producer)

非推奨 http、undertowなどの REST トランスポートに使用する Camel Rest コンポーネント (producer) です。コンポーネントが明示的に設定されていないと、Rest DSL と統合する Camel コンポーネントがある場合、または org.apache.camel.spi.RestProducerFactory がレジストリーに登録されている場合は、Camel がルックアップします。いずれかが見つかった場合は、それが使用されています。

 

String

host (producer)

使用する HTTP サービスのホストとポート (swagger スキーマでホストをオーバーライドします)。

 

String

lazyStartProducer (producer)

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

false

boolean

producerComponentName (producer)

http、undertow などの REST トランスポート (producer) に使用する Camel Rest コンポーネント。コンポーネントが明示的に設定されていないと、Rest DSL と統合する Camel コンポーネントがある場合、または org.apache.camel.spi.RestProducerFactory がレジストリーに登録されている場合は、Camel がルックアップします。いずれかが見つかった場合は、それが使用されています。

 

String

autowiredEnabled (上級)

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

boolean

41.4. エンドポイントオプション

REST エンドポイントは、URI 構文を使用して設定されます。

rest:method:path:uriTemplate

パスおよびクエリーパラメーターを使用します。

41.4.1. パスパラメーター (3 パラメーター)

Name説明デフォルトタイプ

method (共通)

使用する 必須 の HTTP メソッド。

列挙値:

  • get
  • post
  • put
  • delete
  • patch
  • head
  • trace
  • connect
  • options
 

String

path (共通)

必須 ベースパス。

 

String

uriTemplate (共通)

uri テンプレート。

 

String

41.4.2. クエリーパラメーター(16 パラメーター)

Name説明デフォルトタイプ

consumes (共通)

この REST サービスが受け入れる text/xml または application/json などのメディアタイプ。デフォルトでは、すべての種類のタイプを受け入れます。

 

String

inType (共通)

着信 POJO バインディングタイプを FQN クラス名として宣言します。

 

String

outType (共通)

発信 POJO バインディングタイプを FQN クラス名として宣言します。

 

String

produces (Common)

この REST サービスが返す text/xml または application/json などのメディアタイプ。

 

String

routeId (共通)

この REST サービスが作成するルートの名前。

 

String

bridgeErrorHandler (consumer)

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

false

boolean

consumerComponentName (consumer)

(consumer) REST トランスポート (jetty、servlet、undertow など) に使用する Camel Rest コンポーネント。コンポーネントが明示的に設定されていない場合、Rest DSL と統合する Camel コンポーネントがある場合、または org.apache.camel.spi.RestConsumerFactory がレジストリーに登録されている場合、Camel はルックアップします。いずれかが見つかった場合は、それが使用されています。

 

String

description (consumer)

この REST サービスを文書化する人間による説明。

 

String

exceptionHandler (consumer (上級))

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

 

ExceptionHandler

exchangePattern (consumer (上級))

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

列挙値:

  • InOnly
  • InOut
  • InOptionalOut
 

ExchangePattern

apiDoc (producer)

使用する openapi api doc リソース。リソースはデフォルトでクラスパスからロードされ、JSON 形式である必要があります。

 

String

bindingMode (producer)

producer のバインディングモードを設定します。off 以外に設定されている場合、プロデューサは着信メッセージの本文を inType から json または xml に変換し、json または xml からの応答を outType に変換しようとします。

列挙値:

  • auto
  • off
  • json
  • xml
  • json_xml
 

RestBindingMode

host (producer)

使用する HTTP サービスのホストとポート (openapi スキーマでホストをオーバーライドします)。

 

String

lazyStartProducer (producer)

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

false

boolean

producerComponentName (producer)

http、undertow などの REST トランスポート (producer) に使用する Camel Rest コンポーネント。コンポーネントが明示的に設定されていないと、Rest DSL と統合する Camel コンポーネントがある場合、または org.apache.camel.spi.RestProducerFactory がレジストリーに登録されている場合は、Camel がルックアップします。いずれかが見つかった場合は、それが使用されています。

 

String

queryParameters (producer)

呼び出す HTTP サービスのクエリーパラメーター。クエリーパラメーターには、foo=123&bar=456 のように、アンパサンドで区切られた複数のパラメーターを含めることができます。

 

String

41.5. サポートされている残りのコンポーネント

次のコンポーネントは、残りの consumer (Rest DSL) をサポートしています。

  • camel-servlet

次のコンポーネントは、rest producer をサポートしています。

  • camel-http

41.6. パスと uriTemplate の構文

path および uriTemplate オプションは、パラメーターのサポートを使用して REST コンテキストパスを定義する REST 構文を使用して定義されます。

注記

uriTemplate が設定されていない場合、パスオプションは同じように機能します。パスのみを設定するか、両方のオプションを設定するかは問題ではありません。パスと uriTemplate の両方を設定することは、REST ではより一般的な方法ですが。

以下は、パスのみを使用した Camel ルートです。

from("rest:get:hello")
  .transform().constant("Bye World");

次のルートでは、キー me を持つ Camel ヘッダーにマップされたパラメーターを使用します。

from("rest:get:hello/{me}")
  .transform().simple("Bye ${header.me}");

次の例では、基本パスを hello として設定し、uriTemplates を使用して 2 つの REST サービスを設定しています。

from("rest:get:hello:/{me}")
  .transform().simple("Hi ${header.me}");

from("rest:get:hello:/french/{me}")
  .transform().simple("Bonjour ${header.me}");

41.7. Rest producer の例

rest コンポーネントを使用して、他の Camel コンポーネントと同様に REST サービスを呼び出すことができます。

たとえば、hello/{me} を使用して REST サービスを呼び出すには、次のようにします。

from("direct:start")
  .to("rest:get:hello/{me}");

そして、動的な値 {me} が同じ名前の Camel メッセージにマップされます。したがって、この REST サービスを呼び出すには、次のように空のメッセージ本文とヘッダーを送信できます。

template.sendBodyAndHeader("direct:start", null, "me", "Donald Duck");

Rest producer は、次のようにホストオプションを使用して設定できる REST サービスのホスト名とポートを認識する必要があります。

from("direct:start")
  .to("rest:get:hello/{me}?host=myserver:8080/foo");

host オプションを使用する代わりに、次のように restConfiguration でホストを設定できます。

restConfiguration().host("myserver:8080/foo");

from("direct:start")
  .to("rest:get:hello/{me}");

ProducerComponent を使用して、HTTP クライアントとして使用する Camel コンポーネントを選択できます。たとえば、http を使用するには、次のようにします。

restConfiguration().host("myserver:8080/foo").producerComponent("http");

from("direct:start")
  .to("rest:get:hello/{me}");

41.8. Rest producer バーインディング

REST producer は、rest-dsl と同様に JSON または XML を使用したバインディングをサポートします。

たとえば、json バインディングモードをオンにして jetty を使用するには、残りの構成でこれを設定できます。

restConfiguration().component("jetty").host("localhost").port(8080).bindingMode(RestBindingMode.json);

from("direct:start")
  .to("rest:post:user");

次に、rest producer を使用して REST サービスを呼び出すと、REST サービスを呼び出す前に、すべての POJO が json に自動的にバインドされます。

  UserPojo user = new UserPojo();
  user.setId(123);
  user.setName("Donald Duck");

  template.sendBody("direct:start", user);

上記の例では、POJO インスタンス UserPojo をメッセージ本文として送信します。また、REST 設定で JSON バインディングをオンにしたため、REST サービスを呼び出す前に POJO が POJO から JSON にマーシャリングされます。

ただし、応答メッセージ (たとえば、REST サービスが応答として送り返すもの) のバインドも実行する場合は、outType オプションを設定して、JSon から POJO に非整列化する POJO のクラス名を指定する必要があります。

たとえば、REST サービスが com.foo.MyResponsePojo にバインドする JSON ペイロードを返す場合、次のように設定できます。

  restConfiguration().component("jetty").host("localhost").port(8080).bindingMode(RestBindingMode.json);

  from("direct:start")
    .to("rest:post:user?outType=com.foo.MyResponsePojo");
注記

REST サービスの呼び出しから受信した応答メッセージに対して POJO バインディングを行う場合は、outType オプションを設定する必要があります。

41.9. その他の例

より多くの例を提供する Rest DSL と、Rest DSL を使用してより良い RESTful な方法でそれらを定義する方法を参照してください。

Apache Camel ディストリビューションには camel-example-servlet-rest-tomcat の例があり、Apache Tomcat または同様の Web コンテナーにデプロイできるトランスポートとして SERVLET で Rest DSL を使用する方法を示しています。

41.10. Spring Boot 自動設定

Spring Boot で rest を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-rest-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 12 のオプションをサポートします。

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

camel.component.rest-api.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.rest-api.bridge-error-handler

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

false

ブール値

camel.component.rest-api.enabled

rest-api コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.rest.api-doc

使用する swagger api doc リソース。リソースはデフォルトでクラスパスからロードされ、JSON 形式である必要があります。

 

String

camel.component.rest.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.rest.bridge-error-handler

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

false

ブール値

camel.component.rest.consumer-component-name

(consumer) REST トランスポート (jetty、servlet、undertow など) に使用する Camel Rest コンポーネント。コンポーネントが明示的に設定されていない場合、Rest DSL と統合する Camel コンポーネントがある場合、または org.apache.camel.spi.RestConsumerFactory がレジストリーに登録されている場合、Camel はルックアップします。いずれかが見つかった場合は、それが使用されています。

 

String

camel.component.rest.enabled

残りのコンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.rest.host

使用する HTTP サービスのホストとポート (swagger スキーマでホストをオーバーライドします)。

 

String

camel.component.rest.lazy-start-producer

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

false

ブール値

camel.component.rest.producer-component-name

http、undertow などの REST トランスポート (producer) に使用する Camel Rest コンポーネント。コンポーネントが明示的に設定されていないと、Rest DSL と統合する Camel コンポーネントがある場合、または org.apache.camel.spi.RestProducerFactory がレジストリーに登録されている場合は、Camel がルックアップします。いずれかが見つかった場合は、それが使用されています。

 

String

camel.component.rest.component-name

非推奨 http、undertowなどの REST トランスポートに使用する Camel Rest コンポーネント (producer) です。コンポーネントが明示的に設定されていないと、Rest DSL と統合する Camel コンポーネントがある場合、または org.apache.camel.spi.RestProducerFactory がレジストリーに登録されている場合は、Camel がルックアップします。いずれかが見つかった場合は、それが使用されています。

 

String

第42章 Saga

producer のみサポート対象

Saga コンポーネントは、Saga EIP を使用してルート内でカスタムアクションを実行するためのブリッジを提供します。

コンポーネントは、CompletionMode を MANUAL に設定して Saga を完了するか補正するかを決定するなど、高度なタスクに使用する必要があります。

一般的なシナリオで Saga を使用する方法については、Saga EIP のドキュメントを参照してください。

42.1. URI 形式

saga:action

42.2. オプションの設定

Camel コンポーネントは、以下の 2 つのレベルで設定されます。

  • コンポーネントレベル
  • エンドポイントレベル

42.2.1. コンポーネントオプションの設定

コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。

コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。

コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。

42.2.2. エンドポイントオプションの設定

多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。

エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。

オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。

以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。

42.3. コンポーネントオプション

Saga コンポーネントは、以下に示す 2 個のオプションをサポートしています。

Name説明デフォルトタイプ

lazyStartProducer (producer)

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

false

boolean

autowiredEnabled (上級)

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

boolean

42.4. エンドポイントオプション

Saga エンドポイントは、URI 構文を使用して設定されます。

saga:action

パスおよびクエリーパラメーターを使用します。

42.4.1. パスパラメーター(1 パラメーター)

Name説明デフォルトタイプ

action (producer)

実行するために 必要な アクション (完了または補正)。

列挙値:

  • COMPLETE
  • 補正
 

SagaEndpointAction

42.4.2. クエリーパラメーター (1 パラメーター)

Name説明デフォルトタイプ

lazyStartProducer (producer)

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

false

boolean

42.5. Spring Boot 自動設定

Spring Boot で saga を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-saga-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 3 つのオプションをサポートします。

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

camel.component.saga.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.saga.enabled

saga コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.saga.lazy-start-producer

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

false

ブール値

第43章 Salesforce

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

このコンポーネントは、Java DTO を使用して Salesforce と通信する producer エンドポイントと consumer エンドポイントをサポートします。
これらの DTO を生成する付属の maven プラグイン Camel Salesforce Plugin があります (以下を参照)。

Maven ユーザーは、このコンポーネントの pom.xml に以下の依存関係を追加する必要があります。

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-salesforce</artifactId>
    <version>{CamelSBVersion}</version>
    <!-- use the same version as your Camel core version -->
</dependency>
注記

コンポーネントへの貢献を希望する開発者は、README.md ファイルを参照して、統合テストを実行するための環境の開始方法とセットアップ方法を確認するように指示されています。

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. コンポーネントオプション

Salesforce コンポーネントは、以下に示す 90 個のオプションをサポートしています。

Name説明デフォルトタイプ

apexMethod (共通)

APEX メソッド名。

 

String

apexQueryParams (common)

APEX メソッドのクエリーパラメーター。

 

マップ

apiVersion (共通)

Salesforce API バージョン。

53.0

String

backoffIncrement (Common)

CometD 自動再接続を超えた失敗に対するストリーミング接続の再起動を試みるバックオフ間隔の増分。

1000

long

batchId (共通)

Bulk API バッチ ID。

 

String

contentType (共通)

Bulk API コンテンツタイプ。XML、CSV、ZIP_XML、ZIP_CSV のいずれかです。

列挙値:

  • XML
  • CSV
  • JSON
  • ZIP_XML
  • ZIP_CSV
  • ZIP_JSON
 

ContentType

defaultReplayId (共通)

initialReplayIdMap に値が見つからない場合のデフォルトの replayId 設定。

-1

Long

fallBackReplayId (common)

Invalid Replay Id レスポンスの後にフォールバックする ReplayId。

-1

Long

format (共通)

Salesforce API 呼び出しに使用するペイロード形式 (JSON または XML) のデフォルトは JSON です。Camel 3.12 以降、このオプションは Raw 操作にのみ適用されます。

列挙値:

  • JSON
  • XML
 

PayloadFormat

httpClient (Common)

Salesforce への接続に使用するカスタム Jetty Http クライアント。

 

SalesforceHttpClient

httpClientConnectionTimeout (common)

Salesforce サーバーへの接続時に HttpClient によって使用される接続タイムアウト。

60000

long

httpClientIdleTimeout (common)

Salesforce サーバーからの応答を待機するときに HttpClient によって使用されるタイムアウト。

10000

long

httpMaxContentLength (common)

HTTP 応答のコンテンツの最大長。

 

Integer

httpRequestBufferSize (common)

HTTP リクエストのバッファーサイズ。大規模な SOQL クエリーでは、値を増やす必要がある場合があります。

8192

Integer

includeDetails (共通)

Salesforce1 Analytics レポートに詳細を含めます。デフォルトは false です。

 

Boolean

initialReplayIdMap (Common)

チャンネル名ごとに開始する Replay ID。

 

Map

instanceId (共通)

Salesforce1 Analytics レポート実行インスタンス ID。

 

String

jobId (共通)

Bulk API ジョブ ID。

 

String

limit (Common)

返されるレコード数の制限。一部の API に適用されます。Salesforce のドキュメントを確認してください。

 

Integer

locator (共通)

クエリージョブの結果を取得するために使用する、salesforce Bulk 2.0 API によって提供されるロケーター。

 

String

maxBackoff (共通)

CometD 自動再接続を超えた障害に対するストリーミング接続の再起動試行の最大バックオフ間隔。

30000

long

maxRecords (共通)

Bulk 2.0 クエリーの結果セットごとに取得するレコードの最大数。リクエストには引き続きサイズ制限が適用されます。非常に多数のクエリー結果を処理している場合、Salesforce からすべてのデータを受信する前にタイムアウトが発生することがあります。タイムアウトを防ぐには、クライアントが受信することを期待しているレコードの最大数を maxRecords パラメーターで指定します。これにより、この値を最大サイズとして、結果がより小さなセットに分割されます。

 

Integer

notFoundBehaviour (共通)

Salesforce API から受信した 404 not found ステータスの動作を設定します。本文を NULL NotFoundBehaviour#NULL に設定する必要があるか、エクスチェンジで例外を通知する必要があります NotFoundBehaviour#EXCEPTION - デフォルト。

列挙値:

  • EXCEPTION
  • NULL

EXCEPTION

NotFoundBehaviour

notifyForFields (共通)

フィールドの通知、オプションは ALL、REFERENCED、SELECT、WHERE です。

列挙値:

  • ALL
  • REFERENCED
  • SELECT
  • WHERE
 

NotifyForFieldsEnum

notifyForOperationCreate (共通)

作成操作を通知します。デフォルトは false (API バージョン = 29.0) です。

 

ブール値

notifyForOperationDelete (共通)

削除操作を通知します。デフォルトは false (API バージョン = 29.0) です。

 

ブール値

notifyForOperations (共通)

操作を通知します。オプションは ALL、CREATE、EXTENDED、UPDATE (API バージョン 29.0) です。

列挙値:

  • ALL
  • CREATE
  • EXTENDED
  • UPDATE
 

NotifyForOperationsEnum

notifyForOperationUndelete (common)

削除取り消し操作を通知します。デフォルトは false (API バージョン = 29.0) です。

 

ブール値

notifyForOperationUpdate (common)

更新操作を通知します。デフォルトは false (API バージョン = 29.0) です。

 

ブール値

objectMapper (Common)

Salesforce オブジェクトをシリアライズ/デシリアライズするときに使用するカスタム Jackson ObjectMapper。

 

ObjectMapper

packages (共通)

生成された DTO クラスが含まれているパッケージ。通常、クラスは camel-salesforce-maven-plugin を使用して生成されます。生成された DTO を使用して、パラメーター/ヘッダー値で短い SObject 名を使用する利点を得る場合に設定します。複数のパッケージはコンマで区切ることができます。

 

String

pkChunking (共通)

PK チャンクを使用します。元の Bulk API でのみ使用できます。Bulk 2.0 API は、必要に応じて PK チャンクを自動的に実行します。

 

ブール値

pkChunkingChunkSize (共通)

PK チャンクで使用するチャンクサイズ。指定しない場合、salesforce のデフォルトは 100,000 です。最大サイズは 250,000 です。

 

Integer

pkChunkingParent (common)

共有オブジェクトに対するクエリーの PK チャンクを有効にするときに、親オブジェクトを指定します。チャンクは、共有オブジェクトのレコードではなく、親オブジェクトのレコードに基づいています。たとえば、AccountShare に対してクエリーを実行する場合は、Account を親オブジェクトとして指定します。親オブジェクトがサポートされている限り、PK チャンクは共有オブジェクトでサポートされます。

 

String

pkChunkingStartRow (common)

最初のチャンクの下限として使用する 15 文字または 18 文字のレコード ID を指定します。このパラメーターを使用して、バッチ間で失敗したジョブを再開するときに開始 ID を指定します。

 

String

queryLocator (共通)

クエリの結果が 1 回の呼び出しで取得できるレコード数よりも多い場合に使用する、salesforce が提供するクエリロケータです。後続の呼び出しでこの値を使用して、追加のレコードを取得します。

 

String

rawPayload (共通)

DTO の代わりに、リクエストとレスポンス (形式に応じて JSON または XML) に Raw ペイロード文字列を使用します。デフォルトでは false です。

false

boolean

reportId (共通)

Salesforce1 Analytics レポート ID。

 

String

reportMetadata (共通)

フィルタリング用の Salesforce1 Analytics レポートのメタデータ。

 

ReportMetadata

resultId (共通)

Bulk API の結果 ID。

 

String

sObjectBlobFieldName (common)

SObject blob フィールド名。

 

String

sObjectClass (共通)

完全修飾 SObject クラス名。通常は camel-salesforce-maven-plugin を使用して生成されます。

 

String

sObjectFields (共通)

取得する SObject フィールド。

 

String

sObjectId (共通)

API で必要な場合は SObject ID。

 

String

sObjectIdName (共通)

sObject 外部 ID 項目名。

 

String

sObjectIdValue (共通)

sObject 外部 ID 項目の値。

 

String

sObjectName (共通)

API で必要またはサポートされている場合の sObject 名。

 

String

sObjectQuery (共通)

Salesforce SOQL クエリー文字列。

 

String

sObjectSearch (共通)

Salesforce SOSL 検索文字列。

 

String

updateTopic (共通)

ストリーミング API の使用時に既存のプッシュトピックを更新するかどうか。デフォルトは false です。

false

boolean

config (common (上級))

グローバルエンドポイント設定 - すべてのエンドポイントに共通の値を設定するために使用します。

 

SalesforceEndpointConfig

httpClientProperties (共通 (上級))

基になる HTTP クライアントで設定できるプロパティーを設定するために使用されます。利用可能なすべてのオプションについては、SalesforceHttpClient と Jetty HttpClient のプロパティーを参照してください。

 

マップ

longPollingTransportProperties (common (advanced))

ストリーミング API によって使用される BayeuxClient (CometD) によって使用される LongPollingTransport で設定できる任意のプロパティーを設定するために使用されます。

 

マップ

workerPoolMaxSize (共通 (上級))

HTTP 応答の処理に使用されるスレッドプールの最大サイズ。

20

int

workerPoolSize (common (上級))

HTTP 応答の処理に使用されるスレッドプールのサイズ。

10

int

bridgeErrorHandler (consumer)

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

false

boolean

allOrNone (producer)

失敗したレコードがある場合にすべてのレコードをロールバックすることを示す複合 API オプション。

false

boolean

apexUrl (producer)

APEX メソッドの URL。

 

String

compositeMethod (producer)

複合 (raw) 方式。

 

String

lazyStartProducer (producer)

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

false

boolean

rawHttpHeaders (producer)

Raw 操作の HTTP パラメーターとして含めるメッセージヘッダーのコンマ区切りリスト。

 

String

rawMethod (producer)

Raw 操作に使用する HTTP メソッド。

 

String

rawPath (producer)

ドメイン名の後のエンドポイント URL の部分。例: /services/data/v52.0/sobjects/Account/。

 

String

rawQueryParameters (producer)

Raw 操作のクエリーパラメーターとして含めるメッセージヘッダーのコンマ区切りリスト。これは自動的に行われるため、値を URL エンコードしないでください。

 

String

autowiredEnabled (上級)

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

boolean

httpProxyExcludedAddresses (proxy)

HTTP プロキシーサーバーを使用しないアドレスのリスト。

 

Set

httpProxyHost (proxy)

使用する HTTP プロキシーサーバーのホスト名。

 

String

httpProxyIncludedAddresses (proxy)

HTTP プロキシーサーバーを使用するアドレスのリスト。

 

Set

httpProxyPort (proxy)

使用する HTTP プロキシーサーバーのポート番号。

 

Integer

httpProxySocks4 (proxy)

true に設定すると、SOCKS4 プロキシーとして使用するように HTTP プロキシーが設定されます。

false

boolean

authenticationType (セキュリティー)

使用する明示的な認証方法で、USERNAME_PASSWORD、REFRESH_TOKEN、または JWT のいずれかです。Salesforce コンポーネントは、プロパティーセットから使用する認証方法を自動決定できます。このプロパティーを設定してあいまいさを排除します。

列挙値:

  • USERNAME_PASSWORD
  • REFRESH_TOKEN
  • JWT
 

AuthenticationType

clientId (セキュリティー)

Salesforce インスタンス設定で設定された接続アプリケーションの 必須 OAuth consumerキー。通常、接続アプリケーションを設定する必要がありますが、パッケージをインストールすることで提供できます。

 

String

clientSecret (security)

Salesforce インスタンス設定で設定された接続アプリケーションの OAuth consumerシークレット。

 

String

httpProxyAuthUri (security)

HTTP プロキシーサーバーに対する認証で使用されます。httpProxyUsername と httpProxyPassword を認証に使用するには、プロキシーサーバーの URI と一致する必要があります。

 

String

httpProxyPassword (security)

HTTP プロキシーサーバーに対する認証に使用するパスワード。

 

String

httpProxyRealm (security)

HTTP プロキシーサーバーに対するプリエンプティブ Basic/Digest 認証方式で使用される、プロキシーサーバーのレルム。

 

String

httpProxySecure (セキュリティー)

false に設定すると、HTTP プロキシーへのアクセス時に TLS の使用が無効になります。

true

boolean

httpProxyUseDigestAuth (security)

true に設定すると、HTTP プロキシーへの認証時にダイジェスト認証が使用されます。それ以外の場合は、基本認証方法が使用されます。

false

boolean

httpProxyUsername (security)

HTTP プロキシーサーバーに対する認証に使用するユーザー名。

 

String

instanceUrl (セキュリティー)

認証後に使用される Salesforce インスタンスの URL。デフォルトでは、認証の成功時に Salesforce から受信されます。

 

String

jwtAudience (セキュリティー)

OAuth JWT フローを使用するときに Audience クレーム (aud) に使用する値。設定されていない場合は、ログイン URL が使用されますが、これはほとんどの場合に適しています。

 

String

keystore (security)

OAuth JWT フローで使用する KeyStore パラメーター。KeyStore には、秘密鍵と証明書を含むエントリーを 1 つだけ含める必要があります。Salesforce は証明書チェーンを検証しないため、これは簡単に自己署名証明書になる可能性があります。対応する接続アプリケーションに証明書をアップロードしていることを確認してください。

 

KeyStoreParameters

lazyLogin (セキュリティー)

true に設定すると、コンポーネントの開始時にコンポーネントが Salesforce に対して認証されなくなります。通常、これを (デフォルトの) false に設定し、早期に認証して、認証の問題をすぐに認識します。

false

boolean

loginConfig (セキュリティー)

1 つのネストされた Bean 内のすべての認証設定、そこに設定されたすべてのプロパティーは、コンポーネントでも直接設定できます。

 

SalesforceLoginConfig

loginUrl (セキュリティー)

認証に使用される Salesforce インスタンスの 必須 URL。デフォルトでは https://login.salesforce.com に設定されています。

https://login.salesforce.com

String

password (security)

アクセストークンにアクセスするために OAuth フローで使用されるパスワード。パスワード OAuth フローは簡単に開始できますが、他のフローよりも安全性が低いと見なされるため、一般的には避けるべきです。セキュリティートークンを使用する場合は、パスワードの末尾にセキュリティートークンを追加してください。

 

String

refreshToken (セキュリティー)

リフレッシュトークン OAuth フローですでに取得されているリフレッシュトークン。Web アプリケーションをセットアップして、リフレッシュトークンを受け取るコールバック URL を設定するか、https://login.salesforce.com/services/oauth2/success または https://test.salesforce.com/services/oauth2/success で組み込みのコールバックを使用して設定し、フローの最後で URL から refresh_token を取得する必要があります。開発組織では、Salesforce がコールバック Web アプリケーションを localhost でホストすることを許可していることに注意してください。

 

String

sslContextParameters (security)

使用する SSL パラメーター。使用可能なすべてのオプションについては、SSLContextParameters クラスを参照してください。

 

SSLContextParameters

useGlobalSslContextParameters (security)

グローバル SSL コンテキストパラメーターの使用を有効にします。

false

boolean

userName (セキュリティー)

アクセストークンにアクセスするために OAuth フローで使用されるユーザー名。パスワード OAuth フローは簡単に開始できますが、他のフローよりも安全性が低いと見なされるため、一般的には避けるべきです。

 

String

43.3. エンドポイントオプション

Salesforce エンドポイントは、URI 構文を使用して設定されます。

salesforce:operationName:topicName

パスおよびクエリーパラメーターを使用します。

43.3.1. パスパラメーター (2 パラメーター)

Name説明デフォルトタイプ

operationName (producer)

使用する操作。

列挙値:

  • getVersions
  • getResources
  • getGlobalObjects
  • getBasicInfo
  • getDescription
  • getSObject
  • createSObject
  • updateSObject
  • deleteSObject
  • getSObjectWithId
  • upsertSObject
  • deleteSObjectWithId
  • getBlobField
  • query
  • queryMore
  • queryAll
  • search
  • apexCall
  • recent
  • createJob
  • getJob
  • closeJob
  • abortJob
  • createBatch
  • getBatch
  • getAllBatches
  • getRequest
  • getResults
  • createBatchQuery
  • getQueryResultIds
  • getQueryResult
  • getRecentReports
  • getReportDescription
  • executeSyncReport
  • executeAsyncReport
  • getReportInstances
  • getReportResults
  • limits
  • approval
  • 承認
  • composite-tree
  • composite-batch
  • composite
  • compositeRetrieveSObjectCollections
  • compositeCreateSObjectCollections
  • compositeUpdateSObjectCollections
  • compositeUpsertSObjectCollections
  • compositeDeleteSObjectCollections
  • bulk2GetAllJobs
  • bulk2CreateJob
  • bulk2GetJob
  • bulk2CreateBatch
  • bulk2CloseJob
  • bulk2AbortJob
  • bulk2DeleteJob
  • bulk2GetSuccessfulResults
  • bulk2GetFailedResults
  • bulk2GetUnprocessedRecords
  • bulk2CreateQueryJob
  • bulk2GetQueryJob
  • bulk2GetAllQueryJobs
  • bulk2GetQueryJobResults
  • bulk2AbortQueryJob
  • bulk2DeleteQueryJob
  • raw
 

OperationName

topicName (consumer)

使用するトピック/チャネルの名前

 

String

43.3.2. クエリーパラメーター (57 パラメーター)

Name説明デフォルトタイプ

apexMethod (共通)

APEX メソッド名。

 

String

apexQueryParams (common)

APEX メソッドのクエリーパラメーター。

 

マップ

apiVersion (共通)

Salesforce API バージョン。

53.0

String

backoffIncrement (Common)

CometD 自動再接続を超えた失敗に対するストリーミング接続の再起動を試みるバックオフ間隔の増分。

1000

long

batchId (共通)

Bulk API バッチ ID。

 

String

contentType (共通)

Bulk API コンテンツタイプ。XML、CSV、ZIP_XML、ZIP_CSV のいずれかです。

列挙値:

  • XML
  • CSV
  • JSON
  • ZIP_XML
  • ZIP_CSV
  • ZIP_JSON
 

ContentType

defaultReplayId (共通)

initialReplayIdMap に値が見つからない場合のデフォルトの replayId 設定。

-1

Long

fallBackReplayId (common)

Invalid Replay Id レスポンスの後にフォールバックする ReplayId。

-1

Long

format (共通)

Salesforce API 呼び出しに使用するペイロード形式 (JSON または XML) のデフォルトは JSON です。Camel 3.12 以降、このオプションは Raw 操作にのみ適用されます。

列挙値:

  • JSON
  • XML
 

PayloadFormat

httpClient (Common)

Salesforce への接続に使用するカスタム Jetty Http クライアント。

 

SalesforceHttpClient

includeDetails (Common)

Salesforce1 Analytics レポートに詳細を含めます。デフォルトは false です。

 

Boolean

initialReplayIdMap (Common)

チャンネル名ごとに開始する Replay ID。

 

Map

instanceId (共通)

Salesforce1 Analytics レポート実行インスタンス ID。

 

String

jobId (共通)

Bulk API ジョブ ID。

 

String

limit (Common)

返されるレコード数の制限。一部の API に適用されます。Salesforce のドキュメントを確認してください。

 

Integer

locator (共通)

クエリージョブの結果を取得するために使用する、salesforce Bulk 2.0 API によって提供されるロケーター。

 

String

maxBackoff (共通)

CometD 自動再接続を超えた障害に対するストリーミング接続の再起動試行の最大バックオフ間隔。

30000

long

maxRecords (共通)

Bulk 2.0 クエリーの結果セットごとに取得するレコードの最大数。リクエストには引き続きサイズ制限が適用されます。非常に多数のクエリー結果を処理している場合、Salesforce からすべてのデータを受信する前にタイムアウトが発生することがあります。タイムアウトを防ぐには、クライアントが受信することを期待しているレコードの最大数を maxRecords パラメーターで指定します。これにより、この値を最大サイズとして、結果がより小さなセットに分割されます。

 

Integer

notFoundBehaviour (共通)

Salesforce API から受信した 404 not found ステータスの動作を設定します。本文を NULL NotFoundBehaviour#NULL に設定する必要があるか、エクスチェンジで例外を通知する必要があります NotFoundBehaviour#EXCEPTION - デフォルト。

列挙値:

  • EXCEPTION
  • NULL

EXCEPTION

NotFoundBehaviour

notifyForFields (共通)

フィールドの通知、オプションは ALL、REFERENCED、SELECT、WHERE です。

列挙値:

  • ALL
  • REFERENCED
  • SELECT
  • WHERE
 

NotifyForFieldsEnum

notifyForOperationCreate (共通)

作成操作を通知します。デフォルトは false (API バージョン = 29.0) です。

 

ブール値

notifyForOperationDelete (共通)

削除操作を通知します。デフォルトは false (API バージョン = 29.0) です。

 

ブール値

notifyForOperations (共通)

操作を通知します。オプションは ALL、CREATE、EXTENDED、UPDATE (API バージョン 29.0) です。

列挙値:

  • ALL
  • CREATE
  • EXTENDED
  • UPDATE
 

NotifyForOperationsEnum

notifyForOperationUndelete (common)

削除取り消し操作を通知します。デフォルトは false (API バージョン = 29.0) です。

 

ブール値

notifyForOperationUpdate (common)

更新操作を通知します。デフォルトは false (API バージョン = 29.0) です。

 

ブール値

objectMapper (Common)

Salesforce オブジェクトをシリアライズ/デシリアライズするときに使用するカスタム Jackson ObjectMapper。

 

ObjectMapper

pkChunking (共通)

PK チャンクを使用します。元の Bulk API でのみ使用できます。Bulk 2.0 API は、必要に応じて PK チャンクを自動的に実行します。

 

ブール値

pkChunkingChunkSize (共通)

PK チャンクで使用するチャンクサイズ。指定しない場合、salesforce のデフォルトは 100,000 です。最大サイズは 250,000 です。

 

Integer

pkChunkingParent (common)

共有オブジェクトに対するクエリーの PK チャンクを有効にするときに、親オブジェクトを指定します。チャンクは、共有オブジェクトのレコードではなく、親オブジェクトのレコードに基づいています。たとえば、AccountShare に対してクエリーを実行する場合は、Account を親オブジェクトとして指定します。親オブジェクトがサポートされている限り、PK チャンクは共有オブジェクトでサポートされます。

 

String

pkChunkingStartRow (common)

最初のチャンクの下限として使用する 15 文字または 18 文字のレコード ID を指定します。このパラメーターを使用して、バッチ間で失敗したジョブを再開するときに開始 ID を指定します。

 

String

queryLocator (共通)

クエリの結果が 1 回の呼び出しで取得できるレコード数よりも多い場合に使用する、salesforce が提供するクエリロケータです。後続の呼び出しでこの値を使用して、追加のレコードを取得します。

 

String

rawPayload (共通)

DTO の代わりに、リクエストとレスポンス (形式に応じて JSON または XML) に Raw ペイロード文字列を使用します。デフォルトでは false です。

false

boolean

reportId (共通)

Salesforce1 Analytics レポート ID。

 

String

reportMetadata (共通)

フィルタリング用の Salesforce1 Analytics レポートのメタデータ。

 

ReportMetadata

resultId (共通)

Bulk API の結果 ID。

 

String

sObjectBlobFieldName (common)

SObject blob フィールド名。

 

String

sObjectClass (共通)

完全修飾 SObject クラス名。通常は camel-salesforce-maven-plugin を使用して生成されます。

 

String

sObjectFields (共通)

取得する SObject フィールド。

 

String

sObjectId (共通)

API で必要な場合は SObject ID。

 

String

sObjectIdName (共通)

sObject 外部 ID 項目名。

 

String

sObjectIdValue (共通)

sObject 外部 ID 項目の値。

 

String

sObjectName (共通)

API で必要またはサポートされている場合の sObject 名。

 

String

sObjectQuery (共通)

Salesforce SOQL クエリー文字列。

 

String

sObjectSearch (共通)

Salesforce SOSL 検索文字列。

 

String

updateTopic (共通)

ストリーミング API の使用時に既存のプッシュトピックを更新するかどうか。デフォルトは false です。

false

boolean

bridgeErrorHandler (consumer)

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

false

boolean

replayId (consumer)

サブスクライブ時に使用する replayId 値。

 

Long

exceptionHandler (consumer (上級))

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

 

ExceptionHandler

exchangePattern (consumer (上級))

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

列挙値:

  • InOnly
  • InOut
  • InOptionalOut
 

ExchangePattern

allOrNone (producer)

失敗したレコードがある場合にすべてのレコードをロールバックすることを示す複合 API オプション。

false

boolean

apexUrl (producer)

APEX メソッドの URL。

 

String

compositeMethod (producer)

複合 (raw) 方式。

 

String

lazyStartProducer (producer)

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

false

boolean

rawHttpHeaders (producer)

Raw 操作の HTTP パラメーターとして含めるメッセージヘッダーのコンマ区切りリスト。

 

String

rawMethod (producer)

Raw 操作に使用する HTTP メソッド。

 

String

rawPath (producer)

ドメイン名の後のエンドポイント URL の部分。例: /services/data/v52.0/sobjects/Account/。

 

String

rawQueryParameters (producer)

Raw 操作のクエリーパラメーターとして含めるメッセージヘッダーのコンマ区切りリスト。これは自動的に行われるため、値を URL エンコードしないでください。

 

String

43.4. Salesforce への認証

このコンポーネントは、次の 3 つの OAuth 認証フローをサポートしています。

フローごとに、異なるプロパティーセットを設定する必要があります。

表43.1 表 1.認証フローごとに設定するプロパティー

プロパティーSalesforce のどこで見つけることができますかフロー

clientId

接続されたアプリケーション、consumer キー

すべてのフロー

clientSecret

コネクテッドアプリ、consumer シークレット

ユーザー名 - パスワード、リフレッシュトークン

userName

Salesforce ユーザーのユーザー名

ユーザー名 - パスワード、JWT ベアラートークン

password

Salesforce ユーザーのパスワード

Username-Password

refreshToken

OAuth フローコールバックから

トークンの更新

keystore

接続アプリケーション、デジタル証明書

JWT ベアラートークン

コンポーネントは、設定しようとしているフローを自動的に判断し、あいまいさを取り除くために authenticationType プロパティーを設定します。

注記

本番環境でユーザー名とパスワードのフローを使用することはお勧めしません。

注記

JWT ベアラートークンフローで使用される証明書は、自己署名証明書にすることができます。証明書と秘密鍵を保持する KeyStore には、証明書と秘密鍵のエントリーを 1 つだけ含める必要があります。

43.5. URI 形式

ストリーミングイベントを受信する consumer として使用する場合、URI スキームは次のようになります。

salesforce:topic?options

プロデューサとして使用し、Salesforce REST API を呼び出す場合、URI スキームは次のようになります。

salesforce:operationName?options

43.6. Salesforce ヘッダーを渡し、Salesforceレスポンスヘッダーを取得する

受信メッセージヘッダーを介して Salesforce ヘッダー を渡すことがサポートされています。Camel メッセージの Sforce または x-sfdc で始まるヘッダー名は要求で渡され、Sforce で始まるレスポンスヘッダーは送信メッセージヘッダーに存在します。

たとえば、API 制限を取得するには、次のように指定できます。

// in your Camel route set the header before Salesforce endpoint
//...
  .setHeader("Sforce-Limit-Info", constant("api-usage"))
  .to("salesforce:getGlobalObjects")
  .to(myProcessor);

// myProcessor will receive `Sforce-Limit-Info` header on the outbound
// message
class MyProcessor implements Processor {
    public void process(Exchange exchange) throws Exception {
        Message in = exchange.getIn();
        String apiLimits = in.getHeader("Sforce-Limit-Info", String.class);
   }
}

さらに、HTTP レスポンスステータスコードとテキストは、ヘッダー Exchange.HTTP_RESPONSE_CODE および Exchange.HTTP_RESPONSE_TEXT として使用できます。

43.7. サポートされている Salesforce API

このコンポーネントは、次の Salesforce API をサポートしています

producer エンドポイントは、次の API を使用できます。ほとんどの API は一度に 1 つのレコードを処理しますが、Query API は複数のレコードを取得できます。

43.7.1. Rest API

operationName には以下を使用できます。

  • getVersions - サポートされている Salesforce REST API バージョンを取得します
  • getResources - 利用可能な Salesforce REST Resource エンドポイントを取得します
  • getGlobalObjects - 使用可能なすべての SObject タイプのメタデータを取得します
  • getBasicInfo - 特定の SObject タイプの基本的なメタデータを取得します
  • getDescription - 特定の SObject タイプの包括的なメタデータを取得します
  • getSObject - Salesforce ID を使用して SObject を取得します
  • createSObject - SObject を作成します
  • updateSObject - Id を使用して SObject を更新します
  • deleteSObject - Id を使用して SObject を削除します
  • getSObjectWithId - 外部 (ユーザー定義) id フィールドを使用して SObject を取得します
  • upsertSObject - 外部 ID を使用して SObject を更新または挿入します
  • deleteSObjectWithId - 外部 ID を使用して SObject を削除します
  • query - Salesforce SOQL クエリーを実行します
  • queryMore - クエリー API から返された結果リンクを使用して、より多くの結果を取得します (結果が多数の場合)。
  • search - Salesforce SOSL クエリーを実行します
  • 制限 - 組織 API の使用制限をフェッチする
  • recent - 最近のアイテムの取得
  • approval - 承認プロセスのために 1 つまたは複数のレコード (バッチ) を送信します
  • approvals - すべての承認プロセスのリストを取得します
  • composite - 関連する可能性のある最大 25 個の REST リクエストを送信し、個々のレスポンスを受け取ります。raw のコンポジットを無制限に使用することもできます。
  • composite-tree - 親子関係 (最大 5 レベル) を持つ最大 200 レコードを一度に作成します
  • composite-batch - リクエストの設定をバッチで送信します
  • compositeRetrieveSObjectCollections - 同じオブジェクトタイプの 1 つ以上のレコードを取得します。
  • compositeCreateSObjectCollections - 最大 200 レコードを追加し、SaveSObjectResult オブジェクトのリストを返します。
  • compositeUpdateSObjectCollections - 最大 200 レコードを更新し、SaveSObjectResult オブジェクトのリストを返します。
  • compositeUpsertSObjectCollections - 外部 ID フィールドに基づいて、最大 200 レコードを作成または更新 (アップサート) します。UpsertSObjectResult オブジェクトのリストを返します。
  • compositeDeleteSObjectCollections - 最大 200 レコードを削除し、SaveSObjectResult オブジェクトのリストを返します。
  • queryAll - SOQL クエリーを実行します。マージ (最大 3 つのレコードをレコードの 1 つにマージし、他のレコードを削除し、関連するすべてのレコードの親を変更) または削除のために削除された結果を返します。また、アーカイブされたタスクおよびイベントレコードに関する情報も返します。
  • getBlobField - 個々のレコードから指定された BLOB フィールドを取得します。
  • apexCall - ユーザー定義の APEX REST API 呼び出しを実行します。
  • raw - リクエストをセールスフォースに送信し、エンドポイント、パラメーター、本文などを完全に未加工で制御します.

たとえば、次の producer エンドポイントは upsertSObject API を使用し、sObjectIdName パラメーターで Name を外部 ID フィールドとして指定します。リクエストメッセージの本文は、maven プラグインを使用して生成された SObject DTO である必要があります。レスポンスメッセージは、既存のレコードが更新された場合は null になるか、新しいレコードの ID を持つ CreateSObjectResult、または新しいオブジェクトの作成中のエラーのリストのいずれかになります。

...to("salesforce:upsertSObject?sObjectIdName=Name")...

43.7.2. Bulk 2.0 API

Bulk 2.0 API には、元の Bulk API よりも単純化されたモデルがあります。これを使用して、大量のデータを Salesforce にすばやくロードしたり、大量のデータを Salesforce からクエリーしたりします。データは CSV 形式で提供する必要があります。Bulk 2.0 の最小 API バージョンは v41.0 です。一括クエリーの最小 API バージョンは v47.0 です。以下に示す DTO クラスは、org.apache.camel.component.salesforce.api.dto.bulkv2 パッケージからのものです。以下の操作がサポートされます。

  • bulk2CreateJob - 一括ジョブを作成します。メッセージボディーに Job のインスタンスを指定します。
  • bulk2GetJob - 既存のジョブを取得します。jobId パラメーターが必要です。
  • bulk2CreateBatch - CSV レコードのバッチをジョブに追加します。メッセージ本文に CSV データを指定します。最初の行にはヘッダーが含まれている必要があります。jobId パラメーターが必要です。
  • bulk2CloseJob - ジョブを閉じます。ジョブを処理または中止/削除するには、ジョブを閉じる必要があります。jobId パラメーターが必要です。
  • bulk2AbortJob - ジョブを中止します。jobId パラメーターが必要です。
  • bulk2DeleteJob - ジョブを削除します。jobId パラメーターが必要です。
  • bulk2GetSuccessfulResults - ジョブの成功結果を取得します。返されるメッセージボディーには、CSV データの InputStream が含まれます。jobId パラメーターが必要です。
  • bulk2GetFailedResults - ジョブの失敗した結果を取得します。返されるメッセージボディーには、CSV データの InputStream が含まれます。jobId パラメーターが必要です。
  • bulk2GetUnprocessedRecords - ジョブの未処理のレコードを取得します。返されるメッセージボディーには、CSV データの InputStream が含まれます。jobId パラメーターが必要です。
  • bulk2GetAllJobs - すべてのジョブを取得します。レスポンスボディは Jobs のインスタンスです。done プロパティーが false の場合、取得する追加のページがあり、nextRecordsUrl プロパティーには、後続の呼び出しで queryLocator パラメーターに設定される値が含まれます。
  • bulk2CreateQueryJob - 一括クエリージョブを作成します。メッセージ本文に QueryJob のインスタンスを指定します。
  • bulk2GetQueryJob - 一括クエリージョブを取得します。jobId パラメーターが必要です。
  • bulk2GetQueryJobResults - 一括クエリージョブの結果を取得します。jobId パラメーターが必要です。maxRecords および locator パラメーターを受け入れます。応答メッセージヘッダーには、Sforce-NumberOfRecords ヘッダーと Sforce-Locator ヘッダーが含まれます。Sforce-Locator の値は、locator パラメーターを介して後続の呼び出しに渡すことができます。
  • bulk2AbortQueryJob - 一括クエリージョブを中止します。jobId パラメーターが必要です。
  • bulk2DeleteQueryJob - 一括クエリージョブを削除します。jobId パラメーターが必要です。
  • bulk2GetAllQueryJobs - すべてのジョブを取得します。レスポンスボディは QueryJobs のインスタンスです。done プロパティーが false の場合、取得する追加のページがあり、nextRecordsUrl プロパティーには、後続の呼び出しで queryLocator パラメーターに設定される値が含まれます。

43.7.3. Rest Bulk (オリジナル) API

producer エンドポイントは、次の API を使用できます。すべてのジョブデータ形式、つまり xml、csv、zip/xml、および zip/csv がサポートされています。
リクエストとレスポンスは、ルートによってマーシャリング/マーシャリング解除する必要があります。通常、リクエストは CSV ファイルなどのストリームソースになります。
また、応答をファイルに保存して、要求と関連付けることもできます。

operationName には以下を使用できます。

  • createJob - Salesforce 一括ジョブを作成します。本文に JobInfo インスタンスを指定する必要があります。PK Chunking は、pkChunking* オプションを介してサポートされます。ここで 説明を参照してください。
  • getJob - Salesforce ID を使用してジョブを取得します
  • closeJob - ジョブを閉じます
  • abortJob - ジョブを中止します
  • createBatch - 一括ジョブ内でバッチを送信します
  • getBatch - Id を使用してバッチを取得します
  • getAllBatches - 一括ジョブ ID のすべてのバッチを取得します
  • getRequest - バッチのリクエストデータ (XML/CSV) を取得します
  • getResults - 完了時にバッチの結果を取得します
  • createBatchQuery - SOQL クエリーからバッチを作成します
  • getQueryResultIds - バッチクエリーの結果 ID のリストを取得します
  • getQueryResult - 結果 ID の結果を取得します
  • getRecentReports - Report List リソースに GET リクエストを送信して、最近表示したレポートを最大 200 件取得します
  • getReportDescription - レポート、レポートタイプ、およびレポートの関連メタデータを表形式、要約形式、またはマトリックス形式で取得します。
  • executeSyncReport - フィルターを変更して、または変更せずにレポートを同期的に実行し、最新の概要データを返します
  • executeAsyncReport - フィルターの有無にかかわらずレポートのインスタンスを非同期的に実行し、詳細の有無にかかわらず概要データを返します
  • getReportInstances - 非同期実行を要求したレポートのインスタンスのリストを返します。リスト内の各項目は、レポートの個別のインスタンスとして扱われます。
  • getReportResults : レポートの実行結果が含まれます。

たとえば、次の producer エンドポイントは、createBatch API を使用してジョブバッチを作成します。in メッセージには、InputStream に変換できる本文 (通常は、ファイルからの UTF-8 CSV または XML コンテンツなど) と、ジョブのヘッダーフィールド jobId およびジョブコンテンツタイプの contentType が含まれている必要があります。XML、CSV、ZIP_XML、または ZIP_CSV を指定できます。put メッセージの本文には、成功した場合は BatchInfo が含まれ、エラーが発生した場合は SalesforceException が出力されます。

...to("salesforce:createBatch")..

43.7.4. Rest Streaming API

consumer エンドポイントは、ストリーミングエンドポイントに次の構文を使用して、作成/更新時に Salesforce 通知を受信できます。

トピックを作成してサブスクライブするには

from("salesforce:CamelTestTopic?notifyForFields=ALL&notifyForOperations=ALL&sObjectName=Merchandise__c&updateTopic=true&sObjectQuery=SELECT Id, Name FROM Merchandise__c")...

既存のトピックをサブスクライブするには

from("salesforce:CamelTestTopic&sObjectName=Merchandise__c")...

43.7.5. プラットフォームイベント

プラットフォームイベントを発行するには、createSObject 操作を使用します。また、メッセージ本文を JSON 文字列またはキー値データを含む InputStream に設定します。その場合、sObjectName をイベントの API 名、またはイベントの適切なクラス名を持つ AbstractDTOBase から拡張されたクラスに設定する必要があります。

たとえば、DTO を使用すると、次のようになります。

class Order_Event__e extends AbstractDTOBase {
  @JsonProperty("OrderNumber")
  private String orderNumber;
  // ... other properties and getters/setters
}

from("timer:tick")
    .process(exchange -> {
        final Message in = exchange.getIn();
        String orderNumber = "ORD" + exchange.getProperty(Exchange.TIMER_COUNTER);
        Order_Event__e event = new Order_Event__e();
        event.setOrderNumber(orderNumber);
        in.setBody(event);
    })
    .to("salesforce:createSObject");

または、JSON イベントデータを使用します。

from("timer:tick")
    .process(exchange -> {
        final Message in = exchange.getIn();
        String orderNumber = "ORD" + exchange.getProperty(Exchange.TIMER_COUNTER);
        in.setBody("{\"OrderNumber\":\"" + orderNumber + "\"}");
    })
    .to("salesforce:createSObject?sObjectName=Order_Event__e");

プラットフォームイベントを受信するには、プラットフォームイベントの API 名の前に event/ (または /event/) を付けた consumer エンドポイントを使用します (例: salesforce:events/Order_Event__e)。そのエンドポイントから消費するプロセッサーは、rawPayload がそれぞれ false または true であるかに応じて、本文で org.apache.camel.component.salesforce.api.dto.PlatformEvent オブジェクトまたは org.cometd.bayeux.Message のいずれかを受け取ります。

たとえば、1 つのイベントを消費する最も単純な形式では、次のようになります。

PlatformEvent event = consumer.receiveBody("salesforce:event/Order_Event__e", PlatformEvent.class);

43.7.6. 変更データキャプチャイベント

一方で、Salesforce は、選択したオブジェクトのレコード変更に関する通知を発行するように設定できます。一方、Camel Salesforce コンポーネントはそのような通知に反応し、たとえば、これらの変更を外部システムに同期する ことができます。

関心のある通知は、サブスクリプションチャネルを介して Camel ルートの from ("salesforce:XXX") 句で指定できます。次に例を示します。

from("salesforce:data/ChangeEvents?replayId=-1").log("being notified of all change events")
from("salesforce:data/AccountChangeEvent?replayId=-1").log("being notified of change events for Account records")
from("salesforce:data/Employee__ChangeEvent?replayId=-1").log("being notified of change events for Employee__c custom object")

受信したメッセージには、rawPayload がそれぞれ false または true に応じて、本文に java.util.Map<String,Object> または org.cometd.bayeux.Message が含まれます。CamelSalesforceChangeType ヘッダーは、CREATEUPDATEDELETE または UNDELETE のいずれかに値を付けることができます。

Camel Salesforce コンポーネントの変更データキャプチャ機能の使用方法の詳細については、ChangeEventsConsumerIntegrationTest を参照してください。

Salesforce 開発者ガイド は、変更データキャプチャ統合アプリケーションの実装の些細な点をよりよく理解するのに適しています。変更イベント本文フィールドの動的な性質、高レベルのレプリケーション手順、およびセキュリティーの考慮事項は興味深いものになる可能性があります。

43.8. 例

43.8.1. ContentWorkspace へのドキュメントのアップロード

Processor インスタンスを使用して、Java で ContentVersion を作成します。

public class ContentProcessor implements Processor {
    public void process(Exchange exchange) throws Exception {
        Message message = exchange.getIn();

        ContentVersion cv = new ContentVersion();
        ContentWorkspace cw = getWorkspace(exchange);
        cv.setFirstPublishLocationId(cw.getId());
        cv.setTitle("test document");
        cv.setPathOnClient("test_doc.html");
        byte[] document = message.getBody(byte[].class);
        ObjectMapper mapper = new ObjectMapper();
        String enc = mapper.convertValue(document, String.class);
        cv.setVersionDataUrl(enc);
        message.setBody(cv);
    }

    protected ContentWorkspace getWorkSpace(Exchange exchange) {
        // Look up the content workspace somehow, maybe use enrich() to add it to a
        // header that can be extracted here
        ----
    }
}

プロセッサーからの出力を Salesforce コンポーネントに渡します。

from("file:///home/camel/library")
    .to(new ContentProcessor())     // convert bytes from the file into a ContentVersion SObject
                                    // for the salesforce component
    .to("salesforce:createSObject");

43.9. Salesforce 制限 API の使用

salesforce:limits 操作を使用すると、Salesforce から API 制限を取得して、受信したデータに基づいて行動できます。salesforce:limits 操作の結果は org.apache.camel.component.salesforce.api.dto.Limits クラスにマップされ、カスタムプロセッサーまたは式で使用できます。

たとえば、Salesforce の API 使用を制限して、毎日の API リクエストの 10% を他のルートに割り当てる必要があるとします。出力メッセージの本文には org.apache.camel.component.salesforce.api.dto.Limits オブジェクトのインスタンスが含まれています。これは、Content Based Router および Content Based Router と Spring Expression Language (SpEL) と組み合わせて使用して、いつ選択するかを選択できます。クエリーを実行します。

body.dailyApiRequests.remaining に保持されている整数値で 1.0 を乗算すると、式が浮動小数点演算と同じように評価されることに注意してください。それがなければ、整数除算が行われ、0 (いくつかの API 制限が消費されます) または 1 (API 制限は消費されません)。

from("direct:querySalesforce")
    .to("salesforce:limits")
    .choice()
    .when(spel("#{1.0 * body.dailyApiRequests.remaining / body.dailyApiRequests.max < 0.1}"))
        .to("salesforce:query?...")
    .otherwise()
        .setBody(constant("Used up Salesforce API limits, leaving 10% for critical routes"))
    .endChoice()

43.10. 承認の操作

すべてのプロパティーの名前は、Salesforce REST API とまったく同じで、approval.の接頭辞が付いています。テンプレートとして使用されるエンドポイントの approval.PropertyName を設定することで、承認プロパティーを設定できます。つまり、本文にもヘッダーにも存在しないプロパティーは、エンドポイント設定から取得されます。または、approval プロパティーをレジストリー内の Bean への参照に割り当てることで、エンドポイントに承認テンプレートを設定できます。

受信メッセージヘッダーで同じ approval.PropertyName を使用してヘッダー値を指定することもできます。

最後に、本文には、バッチとして処理する 1 つの AprovalRequest または ApprovalRequest オブジェクトの Iterable を含めることができます。

覚えておくべき重要なことは、これら 3 つのメカニズムで指定された値の優先度です。

  1. 本文の値は他の値よりも優先されます
  2. メッセージヘッダーの値はテンプレート値よりも優先されます
  3. ヘッダーまたは本文に他の値が指定されていない場合、テンプレートの値が設定されます

たとえば、ヘッダーの値を使用して承認のために 1 つのレコードを送信するには、次を使用します。

指定した経路:

from("direct:example1")//
        .setHeader("approval.ContextId", simple("${body['contextId']}"))
        .setHeader("approval.NextApproverIds", simple("${body['nextApproverIds']}"))
        .to("salesforce:approval?"//
            + "approval.actionType=Submit"//
            + "&approval.comments=this is a test"//
            + "&approval.processDefinitionNameOrId=Test_Account_Process"//
            + "&approval.skipEntryCriteria=true");

以下を使用して、承認のためにレコードを送信できます。

final Map<String, String> body = new HashMap<>();
body.put("contextId", accountIds.iterator().next());
body.put("nextApproverIds", userId);

final ApprovalResult result = template.requestBody("direct:example1", body, ApprovalResult.class);

43.11. Salesforce 最近の項目 API の使用

最近のアイテムを取得するには、salesforce:recent オペレーションを使用します。このオペレーションは、org.apache.camel.component.salesforce.api.dto.RecentItem オブジェクト (List<RecentItem>) の java.util.List を返します。これには、IdName、および Attributes (type および url プロパティーを含む) が含まれます。返されるレコードの最大数に設定された limit パラメーターを指定することにより、返されるアイテムの数を制限できます。以下に例を示します。

from("direct:fetchRecentItems")
    to("salesforce:recent")
        .split().body()
            .log("${body.name} at ${body.attributes.url}");

43.12. Salesforce Composite API を使用して SObject ツリーを送信する

親子関係を含む最大 200 件のレコードを作成するには、salesforce:composite-tree オペレーションを使用します。これには、入力メッセージで org.apache.camel.component.salesforce.api.dto.composite.SObjectTree のインスタンスが必要であり、出力メッセージでオブジェクトの同じツリーを返します。ツリー内の org.apache.camel.component.salesforce.api.dto.AbstractSObjectBase インスタンスは、識別子の値 (Id プロパティー) または対応する org.apache.camel.component.salesforce.api.dto.composite.SObjectNode で更新されます。失敗すると errors が表示されます。

一部のレコード操作は成功する場合と失敗する場合があることに注意してください。そのため、手動でエラーをチェックする必要があります。

この機能を使用する最も簡単な方法は、camel-salesforce-maven-plugin によって生成された DTO を使用することですが、データベースの主キーなど、ツリー内の各オブジェクトを識別する参照をカスタマイズするオプションもあります。

例を見てみましょう:

Account account = ...
Contact president = ...
Contact marketing = ...

Account anotherAccount = ...
Contact sales = ...
Asset someAsset = ...

// build the tree
SObjectTree request = new SObjectTree();
request.addObject(account).addChildren(president, marketing);
request.addObject(anotherAccount).addChild(sales).addChild(someAsset);

final SObjectTree response = template.requestBody("salesforce:composite-tree", tree, SObjectTree.class);
final Map<Boolean, List<SObjectNode>> result = response.allNodes()
                                                   .collect(Collectors.groupingBy(SObjectNode::hasErrors));

final List<SObjectNode> withErrors = result.get(true);
final List<SObjectNode> succeeded = result.get(false);

final String firstId = succeeded.get(0).getId();

43.13. Salesforce Composite API を使用して複数のリクエストをバッチで送信する

Composite API のバッチ操作 (composite-batch) を使用すると、複数のリクエストをバッチに蓄積して一度に送信できるため、複数の個別のリクエストの往復コストを節約できます。次に、各応答は、順序が保持された応答のリストで受信されるため、n 番目の要求の応答は応答の n 番目の場所になります。

注記

結果は API ごとに異なる可能性があるため、リクエストの結果は java.lang.Object として提供されます。ほとんどの場合、結果は文字列のキーと値を持つ java.util.Map か、値として他の java.util.Map になります。リクエストは JSON 形式で作成され、いくつかのタイプ情報を保持します (つまり、どの値が文字列で、どの値が数値であるかがわかります)。

例を見てみましょう:

final String acountId = ...
final SObjectBatch batch = new SObjectBatch("38.0");

final Account updates = new Account();
updates.setName("NewName");
batch.addUpdate("Account", accountId, updates);

final Account newAccount = new Account();
newAccount.setName("Account created from Composite batch API");
batch.addCreate(newAccount);

batch.addGet("Account", accountId, "Name", "BillingPostalCode");

batch.addDelete("Account", accountId);

final SObjectBatchResponse response = template.requestBody("salesforce:composite-batch", batch, SObjectBatchResponse.class);

boolean hasErrors = response.hasErrors(); // if any of the requests has resulted in either 4xx or 5xx HTTP status
final List<SObjectBatchResult> results = response.getResults(); // results of three operations sent in batch

final SObjectBatchResult updateResult = results.get(0); // update result
final int updateStatus = updateResult.getStatusCode(); // probably 204
final Object updateResultData = updateResult.getResult(); // probably null

final SObjectBatchResult createResult = results.get(1); // create result
@SuppressWarnings("unchecked")
final Map<String, Object> createData = (Map<String, Object>) createResult.getResult();
final String newAccountId = createData.get("id"); // id of the new account, this is for JSON, for XML it would be createData.get("Result").get("id")

final SObjectBatchResult retrieveResult = results.get(2); // retrieve result
@SuppressWarnings("unchecked")
final Map<String, Object> retrieveData = (Map<String, Object>) retrieveResult.getResult();
final String accountName = retrieveData.get("Name"); // Name of the retrieved account, this is for JSON, for XML it would be createData.get("Account").get("Name")
final String accountBillingPostalCode = retrieveData.get("BillingPostalCode"); // Name of the retrieved account, this is for JSON, for XML it would be createData.get("Account").get("BillingPostalCode")

final SObjectBatchResult deleteResult = results.get(3); // delete result
final int updateStatus = deleteResult.getStatusCode(); // probably 204
final Object updateResultData = deleteResult.getResult(); // probably null

43.14. Salesforce Composite API を使用して、チェーン化された複数の要求を送信する

composite 操作では、連鎖可能な最大 25 個のリクエストを送信できます。たとえば、前のリクエストで生成された識別子を後続のリクエストで使用できます。個々のリクエストとレスポンスは、提供された 参照 にリンクされています。

注記

複合 API は JSON ペイロードのみをサポートします。

注記

バッチ API と同様に、結果は API ごとに異なる可能性があるため、リクエストの結果は java.lang.Object として提供されます。ほとんどの場合、結果は文字列のキーと値を持つ java.util.Map か、値として他の java.util.Map になります。リクエストは JSON 形式で作成され、いくつかの型情報を保持します (つまり、どの値が文字列で、どの値が数値であるかがわかります)。

例を見てみましょう:

SObjectComposite composite = new SObjectComposite("38.0", true);

// first insert operation via an external id
final Account updateAccount = new TestAccount();
updateAccount.setName("Salesforce");
updateAccount.setBillingStreet("Landmark @ 1 Market Street");
updateAccount.setBillingCity("San Francisco");
updateAccount.setBillingState("California");
updateAccount.setIndustry(Account_IndustryEnum.TECHNOLOGY);
composite.addUpdate("Account", "001xx000003DIpcAAG", updateAccount, "UpdatedAccount");

final Contact newContact = new TestContact();
newContact.setLastName("John Doe");
newContact.setPhone("1234567890");
composite.addCreate(newContact, "NewContact");

final AccountContactJunction__c junction = new AccountContactJunction__c();
junction.setAccount__c("001xx000003DIpcAAG");
junction.setContactId__c("@{NewContact.id}");
composite.addCreate(junction, "JunctionRecord");

final SObjectCompositeResponse response = template.requestBody("salesforce:composite", composite, SObjectCompositeResponse.class);
final List<SObjectCompositeResult> results = response.getCompositeResponse();

final SObjectCompositeResult accountUpdateResult = results.stream().filter(r -> "UpdatedAccount".equals(r.getReferenceId())).findFirst().get()
final int statusCode = accountUpdateResult.getHttpStatusCode(); // should be 200
final Map<String, ?> accountUpdateBody = accountUpdateResult.getBody();

final SObjectCompositeResult contactCreationResult = results.stream().filter(r -> "JunctionRecord".equals(r.getReferenceId())).findFirst().get()

43.15. raw Salesforce コンポジットの使用

rawPayload オプションのおかげで、ルートに Salesforce JSON リクエストを用意することで、Salesforce コンポジットを直接呼び出すことができます。

たとえば、次のルートを持つことができます。

from("timer:fire?period=2000").setBody(constant("{\n" +
     " \"allOrNone\" : true,\n" +
     " \"records\" : [ { \n" +
     "   \"attributes\" : {\"type\" : \"FOO\"},\n" +
     "   \"Name\" : \"123456789\",\n" +
     "   \"FOO\" : \"XXXX\",\n" +
     "   \"ACCOUNT\" : 2100.0\n" +
     "   \"ExternalID\" : \"EXTERNAL\"\n"
     " }]\n" +
     "}")
   .to("salesforce:composite?rawPayload=true")
   .log("${body}");

ルートはボディを JSON として直接作成し、rawPayload=true オプションを使用して Salesforce エンドポイントに直接送信します。

このアプローチでは、Salesforce リクエストを完全に制御できます。

POST は、raw の複合リクエストを Salesforce に送信するために使用されるデフォルトの HTTP メソッドです。他のサポートされている値 GET にオーバーライドするには、compositeMethod オプションを使用します。この値は、他の使用可能な複合リソースのリストを返します。

43.16. Raw 操作の使用

HTTP リクエストを Salesforce に送信し、通話のすべての側面を完全に直接制御します。リクエストおよびレスポンス本文のシリアル化または逆シリアル化は、ルートで実行する必要があります。Content-Type HTTP ヘッダーは format オプションに基づいて自動的に設定されますが、これは rawHttpHeaders オプションでオーバーライドできます。

パラメーター説明デフォルト必須

要求のボディー

String または InputStream

HTTP リクエストの本文

  

rawPath

String

ドメイン名の後のエンドポイント URL の部分 (/services/data/v51.0/sobjects/Account/など)

 

x

rawMethod

String

HTTP メソッド

 

x

rawQueryParameters

String

クエリーパラメーターとして含めるメッセージヘッダーのコンマ区切りリストこれは自動的に行われるため、値を URL エンコードしないでください。

  

rawHttpHeaders

String

HTTP ヘッダーとして含めるメッセージヘッダーのコンマ区切りリスト

  

43.16.1. クエリーの例

この例では、クエリーを REST API に送信します。クエリーは q という URL パラメーターで渡す必要があるため、q というメッセージヘッダーを作成し、そのメッセージヘッダーを URL パラメーターとして含めるよう raw オペレーションに指示します。

from("direct:queryExample")
  .setHeader("q", "SELECT Id, LastName FROM Contact")
  .to("salesforce:raw?format=JSON&rawMethod=GET&rawQueryParameters=q&rawPath=/services/data/v51.0/query")
  // deserialize JSON results or handle in some other way

43.16.2. SObject の例

この例では、create 操作で Contact を REST API に渡します。raw 操作はシリアル化を実行しないため、メッセージ本文で XML を渡すようにします。

from("direct:createAContact")
  .setBody(constant("<Contact><LastName>TestLast</LastName></Contact>"))
  .to("salesforce:raw?format=XML&rawMethod=POST&rawPath=/services/data/v51.0/sobjects/Contact")

応答は次のとおりです。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Result>
    <id>0034x00000RnV6zAAF</id>
    <success>true</success>
</Result>

43.17. 複合 sObject コレクションの使用

sObject Collections API は、1 つのリクエストで複数のレコードに対してアクションを実行します。sObject コレクションを使用して、クライアントとサーバー間の往復回数を減らします。リクエスト全体が、API 制限に対する 1 回の呼び出しとしてカウントされます。このリソースは、API バージョン 42.0 以降で使用できます。これらの操作に提供される SObject レコード (別名 DTO) は、AbstractDescribeSObjectBase のサブクラスのインスタンスである必要があります。これらの DTO クラスの生成については、Maven プラグインのセクションを参照してください。これらの操作は、提供された DTO を JSON にシリアライズします。

43.17.1. compositeRetrieveSObjectCollections

同じオブジェクトタイプの 1 つ以上のレコードを取得します。

パラメーター説明デフォルト必須

ids

文字列またはコンマ区切り文字列のリスト

返されるオブジェクトの 1 つ以上の ID のリスト。すべての ID は同じオブジェクトタイプに属している必要があります。

 

x

fields

文字列またはコンマ区切り文字列のリスト

応答に含めるフィールドのリスト。指定するフィールド名は有効である必要があり、各フィールドに対する読み取りレベルの権限が必要です。

 

x

sObjectName

String

Account などの SObject のタイプ

 

x

sObjectClass

String

レスポンスの逆シリアル化に使用する DTO クラスの完全修飾クラス名

 

sObjectName パラメーターが、package オプションで指定されたパッケージに存在するクラスに解決されない場合は必須です。

43.17.2. compositeCreateSObjectCollections

最大 200 レコードを追加して、SaveSObjectResult オブジェクトのリストを返します。混合 SObject タイプがサポートされています。

パラメーター説明デフォルト必須

要求のボディー

SObject の一覧

作成する SObject のリスト

 

x

allOrNone

boolean

いずれかのオブジェクトの作成が失敗したときにリクエスト全体をロールバックするか (true)、リクエスト内の他のオブジェクトの独立した作成を続行するかを示します。

false

 

43.17.3. compositeUpdateSObjectCollections

SaveSObjectResult オブジェクトのリストを返し、最大 200 件のレコードを更新します。混合 SObject タイプがサポートされています。

パラメーター説明デフォルト必須

要求のボディー

SObject の一覧

更新する SObject のリスト

 

x

allOrNone

boolean

いずれかのオブジェクトの更新が失敗した場合 (true)、要求全体をロールバックするか、要求内の他のオブジェクトの独立した更新を続行するかを示します。

false

 

43.17.4. compositeUpsertSObjectCollections

UpsertSObjectResult オブジェクトのリストを返し、外部 ID フィールドに基づいて最大 200 のレコードを作成または更新 (アップサート) します。混合 SObject タイプはサポートされていません。

パラメーター説明デフォルト必須

要求のボディー

SObject の一覧

アップサートする SObject のリスト

 

x

allOrNone

boolean

いずれかのオブジェクトの upsert が失敗したときにリクエスト全体をロールバックするか (true)、リクエスト内の他のオブジェクトの独立した upsert を続行するかを示します。

false

 

sObjectName

String

Account などの SObject のタイプ

 

x

sObjectIdName

String

外部 ID フィールドの名前

 

x

43.17.5. compositeDeleteSObjectCollections

最大 200 件のレコードを削除し、DeleteSObjectResult オブジェクトのリストを返します。混合 SObject タイプがサポートされています。

パラメーター説明デフォルト必須

sObjectIds またはリクエストボディ

文字列またはコンマ区切り文字列のリスト

削除するオブジェクトの最大 200 ID のリスト。

 

x

allOrNone

boolean

いずれかのオブジェクトの削除が失敗した場合にリクエスト全体をロールバックするか (true)、リクエスト内の他のオブジェクトの個別の削除を続行するかを示します。

false

 

43.18. null 値を Salesforce に送信する

デフォルトでは、null 値を持つ sObject 項目は Salesforce に送信されません。null 値を Salesforce に送信するには、次のように fieldsToNull プロパティーを使用します。

accountSObject.getFieldsToNull().add("Site");

43.19. SOQL クエリー文字列の生成

org.apache.camel.component.salesforce.api.utils.QueryHelper には、SOQL クエリーを生成するためのヘルパーメソッドが含まれています。たとえば、Account SObject からすべてのカスタム項目を取得するには、次のように呼び出して SOQL SELECT を生成するだけです。

String allCustomFieldsQuery = QueryHelper.queryToFetchFilteredFieldsOf(new Account(), SObjectField::isCustom);

43.20. Camel Salesforce Maven プラグイン

この Maven プラグインは、Camel の DTO を生成します。

明らかなセキュリティー上の理由から、pom.xml では clientId、clientSecret、userName、および password フィールドを設定しないことをお勧めします。プラグインは、残りのプロパティーに対して設定する必要があり、次のコマンドを使用して実行できます。

mvn camel-salesforce:generate -DcamelSalesforce.clientId=<clientid> -DcamelSalesforce.clientSecret=<clientsecret> \
    -DcamelSalesforce.userName=<username> -DcamelSalesforce.password=<password>

生成された DTO は Jackson アノテーションを使用します。すべての Salesforce フィールドタイプがサポートされています。日付と時刻のフィールドはデフォルトで java.time.ZonedDateTime にマップされ、ピックリストフィールドは生成された Java 列挙にマップされます。

DTO の生成方法の詳細については、README.md を参照してください。

43.21. Spring Boot 自動設定

Spring Boot で salesforce を使用する場合は、自動設定をサポートするために次の Maven 依存関係を使用してください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-salesforce-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 91 のオプションをサポートします。

Name説明デフォルトタイプ

camel.component.salesforce.all-or-none

失敗したレコードがある場合にすべてのレコードをロールバックすることを示す複合 API オプション。

false

ブール値

camel.component.salesforce.apex-method

APEX メソッド名。

 

String

camel.component.salesforce.apex-query-params

APEX メソッドのクエリーパラメーター。

 

マップ

camel.component.salesforce.apex-url

APEX メソッドの URL。

 

String

camel.component.salesforce.api-version

Salesforce API バージョン。

53.0

String

camel.component.salesforce.authentication-type

使用する明示的な認証方法で、USERNAME_PASSWORD、REFRESH_TOKEN、または JWT のいずれかです。Salesforce コンポーネントは、プロパティーセットから使用する認証方法を自動決定できます。このプロパティーを設定してあいまいさを排除します。

 

AuthenticationType

camel.component.salesforce.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.salesforce.backoff-increment

CometD 自動再接続を超えた失敗に対するストリーミング接続の再起動を試みるバックオフ間隔の増分。オプションはロング型です。

1000

Long

camel.component.salesforce.batch-id

Bulk API バッチ ID。

 

String

camel.component.salesforce.bridge-error-handler

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

false

ブール値

camel.component.salesforce.client-id

Salesforce インスタンス設定で設定された接続アプリケーションの OAuth consumer キー。通常、接続アプリケーションを設定する必要がありますが、パッケージをインストールすることで提供できます。

 

String

camel.component.salesforce.client-secret

Salesforce インスタンス設定で設定された接続アプリケーションの OAuth consumer シークレット。

 

String

camel.component.salesforce.composite-method

複合 (raw) 方式。

 

String

camel.component.salesforce.config

グローバルエンドポイント設定 - すべてのエンドポイントに共通の値を設定するために使用します。オプションは org.apache.camel.component.salesforce.SalesforceEndpointConfig タイプです。

 

SalesforceEndpointConfig

camel.component.salesforce.content-type

Bulk API コンテンツタイプ。XML、CSV、ZIP_XML、ZIP_CSV のいずれかです。

 

ContentType

camel.component.salesforce.default-replay-id

initialReplayIdMap に値が見つからない場合のデフォルトの replayId 設定。

-1

Long

camel.component.salesforce.enabled

Salesforce コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.salesforce.fall-back-replay-id

Invalid Replay Id レスポンスの後にフォールバックする ReplayId。

-1

Long

camel.component.salesforce.format

Salesforce API 呼び出しに使用するペイロード形式 (JSON または XML) のデフォルトは JSON です。Camel 3.12 以降、このオプションは Raw 操作にのみ適用されます。

 

PayloadFormat

camel.component.salesforce.http-client

Salesforce への接続に使用するカスタム Jetty Http クライアント。オプションは org.apache.camel.component.salesforce.SalesforceHttpClient タイプです。

 

SalesforceHttpClient

camel.component.salesforce.http-client-connection-timeout

Salesforce サーバーへの接続時に HttpClient によって使用される接続タイムアウト。

60000

Long

camel.component.salesforce.http-client-idle-timeout

Salesforce サーバーからの応答を待機するときに HttpClient によって使用されるタイムアウト。

10000

Long

camel.component.salesforce.http-client-properties

基になる HTTP クライアントで設定できるプロパティーを設定するために使用されます。利用可能なすべてのオプションについては、SalesforceHttpClient と Jetty HttpClient のプロパティーを参照してください。

 

マップ

camel.component.salesforce.http-max-content-length

HTTP 応答のコンテンツの最大長。

 

Integer

camel.component.salesforce.http-proxy-auth-uri

HTTP プロキシーサーバーに対する認証で使用されます。httpProxyUsername と httpProxyPassword を認証に使用するには、プロキシーサーバーの URI と一致する必要があります。

 

String

camel.component.salesforce.http-proxy-excluded-addresses

HTTP プロキシーサーバーを使用しないアドレスのリスト。

 

Set

camel.component.salesforce.http-proxy-host

使用する HTTP プロキシーサーバーのホスト名。

 

String

camel.component.salesforce.http-proxy-included-addresses

HTTP プロキシーサーバーを使用するアドレスのリスト。

 

Set

camel.component.salesforce.http-proxy-password

HTTP プロキシーサーバーに対する認証に使用するパスワード。

 

String

camel.component.salesforce.http-proxy-port

使用する HTTP プロキシーサーバーのポート番号。

 

Integer

camel.component.salesforce.http-proxy-realm

HTTP プロキシーサーバーに対するプリエンプティブ Basic/Digest 認証方式で使用される、プロキシーサーバーのレルム。

 

String

camel.component.salesforce.http-proxy-secure

false に設定すると、HTTP プロキシーへのアクセス時に TLS の使用が無効になります。

true

ブール値

camel.component.salesforce.http-proxy-socks4

true に設定すると、SOCKS4 プロキシーとして使用するように HTTP プロキシーが設定されます。

false

ブール値

camel.component.salesforce.http-proxy-use-digest-auth

true に設定すると、HTTP プロキシーへの認証時にダイジェスト認証が使用されます。それ以外の場合は、基本認証方法が使用されます。

false

Boolean

camel.component.salesforce.http-proxy-username

HTTP プロキシーサーバーに対する認証に使用するユーザー名。

 

String

camel.component.salesforce.http-request-buffer-size

HTTP リクエストのバッファーサイズ。大規模な SOQL クエリーでは、値を増やす必要がある場合があります。

8192

Integer

camel.component.salesforce.include-details

Salesforce1 Analytics レポートに詳細を含めます。デフォルトは false です。

 

ブール値

camel.component.salesforce.initial-replay-id-map

チャンネル名ごとに開始する Replay ID。

 

マップ

camel.component.salesforce.instance-id

Salesforce1 Analytics レポート実行インスタンス ID。

 

String

camel.component.salesforce.instance-url

認証後に使用される Salesforce インスタンスの URL。デフォルトでは、認証の成功時に Salesforce から受信されます。

 

String

camel.component.salesforce.job-id

Bulk API ジョブ ID。

 

String

camel.component.salesforce.jwt-audience

OAuth JWT フローを使用するときに Audience クレーム (aud) に使用する値。設定されていない場合は、ログイン URL が使用されますが、これはほとんどの場合に適しています。

 

String

camel.component.salesforce.keystore

OAuth JWT フローで使用する KeyStore パラメーター。KeyStore には、秘密鍵と証明書を含むエントリーを 1 つだけ含める必要があります。Salesforce は証明書チェーンを検証しないため、これは簡単に自己署名証明書になる可能性があります。対応する接続アプリケーションに証明書をアップロードしていることを確認してください。オプションは org.apache.camel.support.jsse.KeyStoreParameters タイプです。

 

KeyStoreParameters

camel.component.salesforce.lazy-login

true に設定すると、コンポーネントの開始時にコンポーネントが Salesforce に対して認証されなくなります。通常、これを (デフォルトの) false に設定し、早期に認証して、認証の問題をすぐに認識します。

false

ブール値

camel.component.salesforce.lazy-start-producer

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

false

ブール値

camel.component.salesforce.limit

返されるレコード数の制限。一部の API に適用されます。Salesforce のドキュメントを確認してください。

 

Integer

camel.component.salesforce.locator

クエリージョブの結果を取得するために使用する、salesforce Bulk 2.0 API によって提供されるロケーター。

 

String

camel.component.salesforce.login-config

1 つのネストされた Bean 内のすべての認証設定、そこに設定されたすべてのプロパティーは、コンポーネントでも直接設定できます。オプションは org.apache.camel.component.salesforce.SalesforceLoginConfig タイプです。

 

SalesforceLoginConfig

camel.component.salesforce.login-url

認証に使用される Salesforce インスタンスの URL。デフォルトでは次のように設定されています。

 

String

camel.component.salesforce.long-polling-transport-properties

ストリーミング API によって使用される BayeuxClient (CometD) によって使用される LongPollingTransport で設定できる任意のプロパティーを設定するために使用されます。

 

マップ

camel.component.salesforce.max-backoff

CometD 自動再接続を超えた障害に対するストリーミング接続の再起動試行の最大バックオフ間隔。オプションはロング型です。

30000

Long

camel.component.salesforce.max-records

Bulk 2.0 クエリーの結果セットごとに取得するレコードの最大数。リクエストには引き続きサイズ制限が適用されます。非常に多数のクエリー結果を処理している場合、Salesforce からすべてのデータを受信する前にタイムアウトが発生することがあります。タイムアウトを防ぐには、クライアントが受信することを期待しているレコードの最大数を maxRecords パラメーターで指定します。これにより、この値を最大サイズとして、結果がより小さなセットに分割されます。

 

Integer

camel.component.salesforce.not-found-behaviour

Salesforce API から受信した 404 not found ステータスの動作を設定します。本文を NULL NotFoundBehaviour#NULL に設定する必要があるか、エクスチェンジで例外を通知する必要があります NotFoundBehaviour#EXCEPTION - デフォルト。

 

NotFoundBehaviour

camel.component.salesforce.notify-for-fields

フィールドの通知、オプションは ALL、REFERENCED、SELECT、WHERE です。

 

NotifyForFieldsEnum

camel.component.salesforce.notify-for-operation-create

作成操作を通知します。デフォルトは false (API バージョン = 29.0) です。

 

ブール値

camel.component.salesforce.notify-for-operation-delete

削除操作を通知します。デフォルトは false (API バージョン = 29.0) です。

 

ブール値

camel.component.salesforce.notify-for-operation-undelete

削除取り消し操作を通知します。デフォルトは false (API バージョン = 29.0) です。

 

ブール値

camel.component.salesforce.notify-for-operation-update

更新操作を通知します。デフォルトは false (API バージョン = 29.0) です。

 

ブール値

camel.component.salesforce.notify-for-operations

操作を通知します。オプションは ALL、CREATE、EXTENDED、UPDATE (API バージョン 29.0) です。

 

NotifyForOperationsEnum

camel.component.salesforce.object-mapper

Salesforce オブジェクトをシリアライズ/デシリアライズするときに使用するカスタム Jackson ObjectMapper。オプションは com.fasterxml.jackson.databind.ObjectMapper タイプです。

 

ObjectMapper

camel.component.salesforce.packages

生成された DTO クラスが含まれているパッケージ。通常、クラスは camel-salesforce-maven-plugin を使用して生成されます。生成された DTO を使用して、パラメーター/ヘッダー値で短い SObject 名を使用する利点を得る場合に設定します。複数のパッケージはコンマで区切ることができます。

 

String

camel.component.salesforce.password

アクセストークンにアクセスするために OAuth フローで使用されるパスワード。パスワード OAuth フローは簡単に開始できますが、他のフローよりも安全性が低いと見なされるため、一般的には避けるべきです。セキュリティートークンを使用する場合は、パスワードの末尾にセキュリティートークンを追加してください。

 

String

camel.component.salesforce.pk-chunking

PK チャンクを使用します。元の Bulk API でのみ使用できます。Bulk 2.0 API は、必要に応じて PK チャンクを自動的に実行します。

 

ブール値

camel.component.salesforce.pk-chunking-chunk-size

PK チャンクで使用するチャンクサイズ。指定しない場合、salesforce のデフォルトは 100,000 です。最大サイズは 250,000 です。

 

Integer

camel.component.salesforce.pk-chunking-parent

共有オブジェクトに対するクエリーの PK チャンクを有効にするときに、親オブジェクトを指定します。チャンクは、共有オブジェクトのレコードではなく、親オブジェクトのレコードに基づいています。たとえば、AccountShare に対してクエリーを実行する場合は、Account を親オブジェクトとして指定します。親オブジェクトがサポートされている限り、PK チャンクは共有オブジェクトでサポートされます。

 

String

camel.component.salesforce.pk-chunking-start-row

最初のチャンクの下限として使用する 15 文字または 18 文字のレコード ID を指定します。このパラメーターを使用して、バッチ間で失敗したジョブを再開するときに開始 ID を指定します。

 

String

camel.component.salesforce.query-locator

クエリの結果が 1 回の呼び出しで取得できるレコード数よりも多い場合に使用する、salesforce が提供するクエリロケータです。後続の呼び出しでこの値を使用して、追加のレコードを取得します。

 

String

camel.component.salesforce.raw-http-headers

Raw 操作の HTTP パラメーターとして含めるメッセージヘッダーのコンマ区切りリスト。

 

String

camel.component.salesforce.raw-method

Raw 操作に使用する HTTP メソッド。

 

String

camel.component.salesforce.raw-path

ドメイン名の後のエンドポイント URL の部分。例: /services/data/v52.0/sobjects/Account/。

 

String

camel.component.salesforce.raw-payload

DTO の代わりに、リクエストとレスポンス (形式に応じて JSON または XML) に Raw ペイロード文字列を使用します。デフォルトでは false です。

false

ブール値

camel.component.salesforce.raw-query-parameters

Raw 操作のクエリーパラメーターとして含めるメッセージヘッダーのコンマ区切りリスト。これは自動的に行われるため、値を URL エンコードしないでください。

 

String

camel.component.salesforce.refresh-token

リフレッシュトークン OAuth フローですでに取得されているリフレッシュトークン。Web アプリケーションをセットアップし、コールバック URL を設定して更新トークンを受け取るか、組み込みのコールバックを使用して設定し、フローの最後で URL から refresh_token を取得する必要があります。開発組織では、Salesforce がコールバック Web アプリケーションを localhost でホストすることを許可していることに注意してください。

 

String

camel.component.salesforce.report-id

Salesforce1 Analytics レポート ID。

 

String

camel.component.salesforce.report-metadata

フィルタリング用の Salesforce1 Analytics レポートのメタデータ。オプションは org.apache.camel.component.salesforce.api.dto.analytics.reports.ReportMetadata タイプです。

 

ReportMetadata

camel.component.salesforce.result-id

Bulk API の結果 ID。

 

String

camel.component.salesforce.s-object-blob-field-name

SObject blob フィールド名。

 

String

camel.component.salesforce.s-object-class

完全修飾 SObject クラス名。通常は camel-salesforce-maven-plugin を使用して生成されます。

 

String

camel.component.salesforce.s-object-fields

取得する SObject フィールド。

 

String

camel.component.salesforce.s-object-id

API で必要な場合は SObject ID。

 

String

camel.component.salesforce.s-object-id-name

sObject 外部 ID 項目名。

 

String

camel.component.salesforce.s-object-id-value

sObject 外部 ID 項目の値。

 

String

camel.component.salesforce.s-object-name

API で必要またはサポートされている場合の sObject 名。

 

String

camel.component.salesforce.s-object-query

Salesforce SOQL クエリー文字列。

 

String

camel.component.salesforce.s-object-search

Salesforce SOSL 検索文字列。

 

String

camel.component.salesforce.ssl-context-parameters

使用する SSL パラメーター。使用可能なすべてのオプションについては、SSLContextParameters クラスを参照してください。オプションは org.apache.camel.support.jsse.SSLContextParameters タイプです。

 

SSLContextParameters

camel.component.salesforce.update-topic

ストリーミング API の使用時に既存のプッシュトピックを更新するかどうか。デフォルトは false です。

false

ブール値

camel.component.salesforce.use-global-ssl-context-parameters

グローバル SSL コンテキストパラメーターの使用を有効にします。

false

Boolean

camel.component.salesforce.user-name

アクセストークンにアクセスするために OAuth フローで使用されるユーザー名。パスワード OAuth フローは簡単に開始できますが、他のフローよりも安全性が低いと見なされるため、一般的には避けるべきです。

 

String

camel.component.salesforce.worker-pool-max-size

HTTP 応答の処理に使用されるスレッドプールの最大サイズ。

20

Integer

camel.component.salesforce.worker-pool-size

HTTP 応答の処理に使用されるスレッドプールのサイズ。

10

Integer

第44章 スケジューラー

consumer のみがサポートされている

スケジューラーコンポーネントは、スケジューラーの起動時にメッセージ交換を生成するために使用されます。このコンポーネントは Timer コンポーネントに似ていますが、スケジュールに関してより多くの機能を提供します。また、このコンポーネントは JDK ScheduledExecutorService を使用します。タイマーは JDK Timer を使用します。

このエンドポイントからのイベントのみを使用できます。

44.1. URI 形式

scheduler:name[?options]

name は、エンドポイント間で作成および共有されるスケジューラーの名前です。したがって、すべてのスケジューラーエンドポイントに同じ名前を使用すると、1 つのスケジューラースレッドプールとスレッドのみが使用されますが、より多くの同時スレッドを許可するようにスレッドプールを設定できます。

注記

生成された交換の IN ボディーは null です。したがって、exchange.getIn().getBody()null を返します。

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. コンポーネントオプション

Scheduler コンポーネントは、以下に示す 3 つのオプションをサポートしています。

Name説明デフォルトタイプ

bridgeErrorHandler (consumer)

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

false

boolean

autowiredEnabled (上級)

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

boolean

poolSize (スケジューラー)

スケジューリングスレッドプールによって使用されるスレッドプール内のコアスレッドの数。デフォルトでは、単一のスレッドを使用します。

1

int

44.4. エンドポイントオプション

スケジューラーエンドポイントは、URI 構文を使用して設定されます。

scheduler:name

パスおよびクエリーパラメーターを使用します。

44.4.1. パスパラメーター(1 パラメーター)

Name説明デフォルトタイプ

name (consumer)

必須 スケジューラーの名前。

 

String

44.4.2. クエリーパラメーター (21 パラメーター)

Name説明デフォルトタイプ

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

synchronous (上級)

同期処理を厳密に使用するかどうかを設定します。

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

poolSize (スケジューラー)

スケジューリングスレッドプールによって使用されるスレッドプール内のコアスレッドの数。デフォルトでは、単一のスレッドを使用します。

1

int

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

44.5. 補足情報

このコンポーネントはスケジューラーの Polling consumer であり、上記のオプションに関する詳細情報と、Polling consumer ページで例を見つけることができます。

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

タイマーが起動すると、次の情報がプロパティーとして Exchange に追加されます。

名前タイプ説明

Exchange.TIMER_NAME

String

name オプションの値。

Exchange.TIMER_FIRED_TIME

日付

consumer が起動した時刻。

44.7. 例

60 秒ごとにイベントを生成するルートを設定するには:

from("scheduler://foo?delay=60000").to("bean:myBean?method=someMethodName");

上記のルートはイベントを生成し、JNDI や Spring などのレジストリーで myBean と呼ばれる Bean で someMethodName メソッドを呼び出します。

そして、Spring DSL の経路:

<route>
  <from uri="scheduler://foo?delay=60000"/>
  <to uri="bean:myBean?method=someMethodName"/>
</route>

44.8. スケジューラーが完了したらすぐにトリガーするように強制する

前のタスクが完了するとすぐにスケジューラーがトリガーされるようにするには、オプション greedy=true を設定できます。ただし、スケジューラーは常に起動し続けることに注意してください。したがって、注意して使用してください。

44.9. スケジューラーを強制的にアイドル状態にする

スケジューラーをトリガーして、Greedy な設定にするようなユースケースがあるとします。ただし、ポーリングするタスクがないことをスケジューラーに通知したい場合もあります。これにより、スケジューラーはバックオフオプションを使用してアイドルモードに変更できます。これを行うには、キー Exchange.SCHEDULER_POLLED_MESSAGES を使用してエクスチェンジのプロパティーを false のブール値に設定する必要があります。これにより、consumer は、ポーリングされたメッセージがなかったことを示します。

それ以外の場合、consumer は、デフォルトで、consumer がエクスチェンジの処理を完了するたびに、スケジューラーにポーリングされた 1 つのメッセージを返します。

44.10. Spring Boot 自動設定

Spring Boot で scheduler を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-scheduler-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 4 のオプションをサポートします。

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

camel.component.scheduler.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.scheduler.bridge-error-handler

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

false

ブール値

camel.component.scheduler.enabled

スケジューラーコンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.scheduler.pool-size

スケジューリングスレッドプールによって使用されるスレッドプール内のコアスレッドの数。デフォルトでは、単一のスレッドを使用します。

1

Integer

第45章 SEDA

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

SEDA コンポーネントは非同期 SEDA 動作を提供するため、BlockingQueue でメッセージがエクスチェンジされ、producer とは別のスレッドで consumer が呼び出されます。

キューは 単一の CamelContext 内でのみ表示されることに注意してください。CamelContext インスタンス間で通信する場合 (たとえば、Web アプリケーション間の通信) は、コンポーネントを参照してください。

このコンポーネントは、メッセージがまだ処理されていない間に仮想マシンが終了した場合、いかなる種類の永続化または回復も実装しません。永続性、信頼性、または分散型 SEDA が必要な場合は、JMS または ActiveMQ を使用してみてください。

注記

同期
Direct コンポーネントは、プロデューサーがメッセージ交換を送信するときに、すべてのコンシューマーの同期呼び出しを提供します。

45.1. URI 形式

seda:someName[?options]

someName は、現在の CamelContext 内のエンドポイントを一意に識別する任意の文字列にすることができます。

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. コンポーネントオプション

SEDA コンポーネントは、以下に示す 10 個のオプションをサポートしています。

Name説明デフォルトタイプ

bridgeErrorHandler (consumer)

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

false

boolean

concurrentConsumers (consumer)

交換を処理する同時スレッドのデフォルト数を設定します。

1

int

defaultPollTimeout (consumer (advanced))

ポーリング時に使用されるタイムアウト (ミリ秒単位)。タイムアウトが発生すると、consumer は実行を継続できるかどうかを確認できます。値を低く設定すると、シャットダウン時に consumer がより迅速に対応できるようになります。

1000

int

defaultBlockWhenFull (producer)

満杯の SEDA キューにメッセージを送信するスレッドが、キューの容量がなくなるまでブロックするかどうか。デフォルトでは、キューがいっぱいであることを示す例外が出力されます。このオプションを有効にすると、呼び出しスレッドは代わりにブロックされ、メッセージが受け入れられるまで待機します。

false

boolean

defaultDiscardWhenFull (producer)

満杯の SEDA キューにメッセージを送信するスレッドを破棄するかどうか。デフォルトでは、キューがいっぱいであることを示す例外が出力されます。このオプションを有効にすると、呼び出しスレッドは送信を中止して続行します。つまり、メッセージは SEDA キューに送信されませんでした。

false

boolean

defaultOfferTimeout (producer)

満杯の SEDA キューにメッセージを送信するスレッドが、キューの容量がなくなるまでブロックするかどうか。デフォルトでは、キューがいっぱいであることを示す例外が出力されます。このオプションを有効にすると、設定されたタイムアウトをブロックケースに追加できます。下線部の Java キューの .offer(timeout) メソッドを利用します。

 

long

lazyStartProducer (producer)

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

false

boolean

autowiredEnabled (上級)

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

boolean

defaultQueueFactory (advanced)

デフォルトのキューファクトリーを設定します。

 

BlockingQueueFactory

queueSize (上級)

SEDA キューのデフォルトの最大容量 (つまり、保持できるメッセージの数) を設定します。

1000

int

45.4. エンドポイントオプション

SEDA エンドポイントは、URI 構文を使用して設定されます。

seda:name

パスおよびクエリーパラメーターを使用します。

45.4.1. パスパラメーター(1 パラメーター)

Name説明デフォルトタイプ

name (共通)

必須 キューの名前。

 

String

45.4.2. クエリーパラメーター (18 パラメーター)

Name説明デフォルトタイプ

size (common)

SEDA キューの最大容量 (つまり、保持できるメッセージの数)。デフォルトでは、SEDA コンポーネントに設定された defaultSize を使用します。

1000

int

bridgeErrorHandler (consumer)

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

false

boolean

concurrentConsumers (consumer)

エクスチェンジを処理する同時スレッドの数。

1

int

exceptionHandler (consumer (上級))

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

 

ExceptionHandler

exchangePattern (consumer (上級))

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

列挙値:

  • InOnly
  • InOut
  • InOptionalOut
 

ExchangePattern

limitConcurrentConsumers (consumer (上級))

concurrentConsumers の数を最大 500 に制限するかどうか。デフォルトでは、エンドポイントがより大きな数で設定されている場合、例外が出力されます。このチェックを無効にするには、このオプションをオフにします。

true

boolean

multipleConsumers (consumer (上級))

複数の consumer を許可するかどうかを指定します。有効にすると、Publish-Subscribe メッセージングに SEDA を使用できます。つまり、メッセージを SEDA キューに送信し、各 consumer にメッセージのコピーを受信させることができます。有効にすると、このオプションはすべての consumerエンドポイントで指定する必要があります。

false

boolean

pollTimeout (consumer (上級))

ポーリング時に使用されるタイムアウト (ミリ秒単位)。タイムアウトが発生すると、consumer は実行を継続できるかどうかを確認できます。値を低く設定すると、シャットダウン時に consumer がより迅速に対応できるようになります。

1000

int

purgeWhenStopping (consumer (上級))

consumer/ルートを停止するときにタスクキューをパージするかどうか。これにより、キューに保留中のメッセージが破棄されるため、より迅速に停止できます。

false

boolean

blockWhenFull (producer)

満杯の SEDA キューにメッセージを送信するスレッドが、キューの容量がなくなるまでブロックするかどうか。デフォルトでは、キューがいっぱいであることを示す例外が出力されます。このオプションを有効にすると、呼び出しスレッドは代わりにブロックされ、メッセージが受け入れられるまで待機します。

false

boolean

discardIfNoConsumers (producer)

アクティブな consumer のないキューに送信するときに、producer がメッセージを破棄する (メッセージをキューに追加しない) かどうか。discardIfNoConsumers オプションと failIfNoConsumers オプションのうち、同時に有効にできるのは 1 つだけです。

false

boolean

discardWhenFull (producer)

満杯の SEDA キューにメッセージを送信するスレッドを破棄するかどうか。デフォルトでは、キューがいっぱいであることを示す例外が出力されます。このオプションを有効にすると、呼び出しスレッドは送信を中止して続行します。つまり、メッセージは SEDA キューに送信されませんでした。

false

boolean

failIfNoConsumers (producer)

アクティブな consumer のないキューに送信するときに、producer が例外を出力して失敗するかどうか。discardIfNoConsumers オプションと failIfNoConsumers オプションのうち、同時に有効にできるのは 1 つだけです。

false

boolean

lazyStartProducer (producer)

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

false

boolean

offerTimeout (producer)

キューがいっぱいの場合、オファータイムアウト (ミリ秒単位) をブロックケースに追加できます。0 または負の値を使用して、タイムアウトを無効にすることができます。

 

long

timeout (producer)

SEDA producer が非同期タスクの完了の待機を停止するまでのタイムアウト (ミリ秒単位)。0 または負の値を使用して、タイムアウトを無効にすることができます。

30000

long

waitForTaskToComplete (producer)

続行する前に呼び出し元が非同期タスクの完了を待つかどうかを指定するオプション。次の 3 つのオプションがサポートされています: Always、Never、または IfReplyExpected。最初の 2 つの値は一目瞭然です。最後の値 IfReplyExpected は、メッセージが Request Reply ベースの場合にのみ待機します。デフォルトのオプションは IfReplyExpected です。

列挙値:

  • Never
  • IfReplyExpected
  • Always

IfReplyExpected

WaitForTaskToComplete

queue (advanced)

エンドポイントで使用されるキューインスタンスを定義します。

 

BlockingQueue

45.5. BlockingQueue 実装の選択

デフォルトでは、SEDA コンポーネントは常に LinkedBlockingQueue をインスタンス化しますが、別の実装を使用できます。独自の BlockingQueue 実装を参照できます。この場合、サイズオプションは使用されません。

<bean id="arrayQueue" class="java.util.ArrayBlockingQueue">
  <constructor-arg index="0" value="10" ><!-- size -->
  <constructor-arg index="1" value="true" ><!-- fairness -->
</bean>

<!-- ... and later -->
<from>seda:array?queue=#arrayQueue</from>

または、BlockingQueueFactory 実装を参照できます。LinkedBlockingQueueFactory、ArrayBlockingQueueFactory、および PriorityBlockingQueueFactory の 3 つの実装が提供されています。

<bean id="priorityQueueFactory" class="org.apache.camel.component.seda.PriorityBlockingQueueFactory">
  <property name="comparator">
    <bean class="org.apache.camel.demo.MyExchangeComparator" />
  </property>
</bean>

<!-- ... and later -->
<from>seda:priority?queueFactory=#priorityQueueFactory&size=100</from>

45.6. Request Reply (リクエストリプライ) の利用

SEDA コンポーネントは、発信者が非同期ルートの完了を待機する Request Reply の使用をサポートしています。たとえば、以下のようになります。

from("mina:tcp://0.0.0.0:9876?textline=true&sync=true").to("seda:input");

from("seda:input").to("bean:processInput").to("bean:createResponse");

上記の経路では、受信リクエストを受け入れるポート 9876 に TCP リスナーがあります。リクエストは seda:input キューにルーティングされます。Request Reply メッセージなので、レスポンスを待ちます。seda:input キューの consumer が完了すると、応答を元のメッセージ応答にコピーします。

45.7. 同時利用者

デフォルトでは、SEDA エンドポイントは単一の consumer スレッドを使用しますが、consumer スレッドを同時に使用するように設定できます。したがって、スレッドプールの代わりに次を使用できます。

from("seda:stageName?concurrentConsumers=5").process(...)

この 2 つの違いについては、スレッドプールは 実行時に負荷に応じて動的に増減できますが、concurrent consumer の数は常に固定されていることに注意してください。

45.8. Thread pools

次のようにして、SEDA エンドポイントにスレッドプールを追加することに注意してください。

from("seda:stageName").thread(5).process(...)

2 つの BlockQueues で終わる可能性があります。1 つは SEDA エンドポイントから、もう 1 つはスレッドプールのワークキューからのものですが、これは望ましくない場合があります。代わりに、同期と非同期の両方でメッセージを処理できるスレッドプールを使用して Direct エンドポイントを設定することをお勧めします。以下に例を示します。

from("direct:stageName").thread(5).process(...)

また、concurrentConsumers オプションを使用して、SEDA エンドポイントでメッセージを処理するスレッドの数を直接設定することもできます。

45.9. 例

以下のルートでは、SEDA キューを使用してこの非同期キューにリクエストを送信し、別のスレッドでさらに処理するためにファイアアンドフォーゲットメッセージを送信し、このスレッドで一定の応答を元の呼び出し元に返すことができるようにします。

Hello World メッセージを送信し、応答が OK であることを期待します。

    @Test
    public void testSendAsync() throws Exception {
        MockEndpoint mock = getMockEndpoint("mock:result");
        mock.expectedBodiesReceived("Hello World");

        // START SNIPPET: e2
        Object out = template.requestBody("direct:start", "Hello World");
        assertEquals("OK", out);
        // END SNIPPET: e2

        assertMockEndpointsSatisfied();
    }

    @Override
    protected RouteBuilder createRouteBuilder() throws Exception {
        return new RouteBuilder() {
            // START SNIPPET: e1
            public void configure() throws Exception {
                from("direct:start")
                    // send it to the seda queue that is async
                    .to("seda:next")
                    // return a constant response
                    .transform(constant("OK"));

                from("seda:next").to("mock:result");
            }
            // END SNIPPET: e1
        };
    }

Hello World メッセージは、さらに処理するために別のスレッドの SEDA キューから消費されます。これは単体テストからのものであるため、単体テストでアサーションを実行できる mock エンドポイントに送信されます。

45.10. multipleConsumers の使用

この例では、2 つの consumer を定義しました。

    @Test
    public void testSameOptionsProducerStillOkay() throws Exception {
        getMockEndpoint("mock:foo").expectedBodiesReceived("Hello World");
        getMockEndpoint("mock:bar").expectedBodiesReceived("Hello World");

        template.sendBody("seda:foo", "Hello World");

        assertMockEndpointsSatisfied();
    }

    @Override
    protected RouteBuilder createRouteBuilder() throws Exception {
        return new RouteBuilder() {
            @Override
            public void configure() throws Exception {
                from("seda:foo?multipleConsumers=true").routeId("foo").to("mock:foo");
                from("seda:foo?multipleConsumers=true").routeId("bar").to("mock:bar");
            }
        };
    }

seda foo エンドポイントで multipleConsumers=true を指定したので、これら 2 つの consumer に、一種の pub-sub スタイルメッセージングとしてメッセージの独自のコピーを受信させることができます。

Bean は単体テストの一部であるため、単純にメッセージをモックエンドポイントに送信します。

45.11. キュー情報の抽出

必要に応じて、次の方法で JMX を使用せずにキューサイズなどの情報を取得できます。

SedaEndpoint seda = context.getEndpoint("seda:xxxx");
int size = seda.getExchanges().size();

45.12. Spring Boot 自動設定

Spring Boot で seda を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-seda-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 11 のオプションをサポートします。

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

camel.component.seda.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.seda.bridge-error-handler

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

false

ブール値

camel.component.seda.concurrent-consumers

交換を処理する同時スレッドのデフォルト数を設定します。

1

Integer

camel.component.seda.default-block-when-full

満杯の SEDA キューにメッセージを送信するスレッドが、キューの容量がなくなるまでブロックするかどうか。デフォルトでは、キューがいっぱいであることを示す例外が出力されます。このオプションを有効にすると、呼び出しスレッドは代わりにブロックされ、メッセージが受け入れられるまで待機します。

false

ブール値

camel.component.seda.default-discard-when-full

満杯の SEDA キューにメッセージを送信するスレッドを破棄するかどうか。デフォルトでは、キューがいっぱいであることを示す例外が出力されます。このオプションを有効にすると、呼び出しスレッドは送信を中止して続行します。つまり、メッセージは SEDA キューに送信されませんでした。

false

ブール値

camel.component.seda.default-offer-timeout

満杯の SEDA キューにメッセージを送信するスレッドが、キューの容量がなくなるまでブロックするかどうか。デフォルトでは、キューがいっぱいであることを示す例外が出力されます。このオプションを有効にすると、設定されたタイムアウトをブロックケースに追加できます。下線部の Java キューの .offer(timeout) メソッドを利用します。

 

Long

camel.component.seda.default-poll-timeout

ポーリング時に使用されるタイムアウト (ミリ秒単位)。タイムアウトが発生すると、consumer は実行を継続できるかどうかを確認できます。値を低く設定すると、シャットダウン時に consumer がより迅速に対応できるようになります。

1000

Integer

camel.component.seda.default-queue-factory

デフォルトのキューファクトリーを設定します。オプションは org.apache.camel.component.seda.BlockingQueueFactory<org.apache.camel.Exchange> タイプです。

 

BlockingQueueFactory

camel.component.seda.enabled

seda コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.seda.lazy-start-producer

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

false

ブール値

camel.component.seda.queue-size

SEDA キューのデフォルトの最大容量 (つまり、保持できるメッセージの数) を設定します。

1000

Integer

第46章 Servlet

consumer のみがサポートされている

サーブレットコンポーネントは、公開されたサーブレットにバインドされた HTTP エンドポイントに到着する HTTP 要求を消費するための HTTP ベースのエンドポイントを提供します。

Maven ユーザーは、このコンポーネントの pom.xml に以下の依存関係を追加する必要があります。

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-servlet</artifactId>
    <version>{CamelSBVersion}</version>
    <!-- use the same version as your Camel core version -->
</dependency>
注記

ストリーム

サーブレットはストリームベースです。つまり、受信した入力はストリームとして Camel に送信されます。つまり、ストリームのコンテンツを 一度 だけ読み取ることができます。もし、メッセージ本文が空のように見える場合や、何度もデータにアクセスする必要がある場合 (例: マルチキャストや再配送エラー処理)、ストリームキャッシュを使用するか、メッセージ本文を何度読んでも安全な String に変換する必要があります。

46.1. URI 形式

servlet://relative_path[?options]

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. コンポーネントオプション

Servlet コンポーネントは、以下に示す 11 個のオプションをサポートしています。

Name説明デフォルトタイプ

bridgeErrorHandler (consumer)

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

false

boolean

muteException (consumer)

有効にすると、エクスチェンジが consumer側で処理に失敗した場合、レスポンスの本文には例外のスタックトレースが含まれません。

false

boolean

servletName (consumer)

使用するサーブレットのデフォルト名。デフォルト名は CamelServlet です。

CamelServlet

String

attachmentMultipartBinding (consumer (上級))

Camel エクスチェンジで multipart/form-data を添付ファイルとして自動的にバインドするかどうか。オプション attachmentMultipartBinding=true と disableStreamCache=false は一緒に使用できません。AttachmentMultipartBinding を使用するには、disableStreamCache を削除します。サーブレットの使用時にこれを有効にするには、サーブレット固有の設定が必要になる場合があるため、これはデフォルトでオフになっています。

false

boolean

fileNameExtWhitelist(consumer (上級))

アップロードされたファイルを受け入れるための受け入れられたファイル名拡張子のホワイトリスト。複数の拡張子は、txt、xml のようにコンマで区切ることができます。

 

String

httpRegistry (consumer (上級))

カスタム org.apache.camel.component.servlet.HttpRegistry を使用します。

 

HttpRegistry

allowJavaSerializedObject (上級)

リクエストが context-type=application/x-java-serialized-object を使用する場合に Java シリアル化を許可するかどうか。これは、デフォルトでオフになっています。これを有効にすると、Java が受信データをリクエストから Java にデシリアライズし、セキュリティー上のリスクが生じる可能性があることに注意してください。

false

boolean

autowiredEnabled (上級)

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

boolean

httpBinding (上級)

カスタム HttpBinding を使用して、Camel メッセージと HttpClient との間のマッピングを制御します。

 

HttpBinding

httpConfiguration (advanced)

共有 HttpConfiguration を基本設定として使用するには、以下を行います。

 

HttpConfiguration

headerFilterStrategy (フィルター)

カスタムの org.apache.camel.spi.HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルターします。

 

HeaderFilterStrategy

46.4. エンドポイントオプション

サーブレットエンドポイントは、URI 構文を使用して設定されます。

servlet:contextPath

パスおよびクエリーパラメーターを使用します。

46.4.1. パスパラメーター(1 パラメーター)

Name説明デフォルトタイプ

contextPath (consumer)

必須 使用するコンテキストパス。

 

String

46.4.2. クエリーパラメーター (22 パラメーター)

Name説明デフォルトタイプ

chunked (consumer)

このオプションが false の場合、サーブレットは HTTP ストリーミングを無効にし、応答に content-length ヘッダーを設定します。

true

boolean

disableStreamCache (common)

サーブレットからの生の入力ストリームがキャッシュされるかどうかを決定します (Camel はストリームをメモリー内/ファイルへのオーバーフロー、ストリームキャッシュに読み込みます)。デフォルトでは、Camel はサーブレット入力ストリームをキャッシュして複数回の読み取りをサポートし、Camel がストリームからすべてのデータを取得できるようにします。ただし、ファイルやその他の永続ストアに直接ストリーミングするなど、生のストリームにアクセスする必要がある場合は、このオプションを true に設定できます。ストリームの複数回の読み取りをサポートするためにこのオプションが false の場合、DefaultHttpBinding は要求入力ストリームをストリームキャッシュにコピーし、それをメッセージ本文に入れます。サーブレットを使用してエンドポイントをブリッジ/プロキシーする場合、メッセージペイロードを複数回読み取る必要がない場合は、このオプションを有効にしてパフォーマンスを向上させることを検討してください。http producer は、デフォルトで応答本文ストリームをキャッシュします。このオプションを true に設定すると、producer は応答本文ストリームをキャッシュせず、応答ストリームをそのままメッセージ本文として使用します。

false

boolean

headerFilterStrategy (common)

カスタムの HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルタリングします。

 

HeaderFilterStrategy

httpBinding (common (上級))

カスタム HttpBinding を使用して、Camel メッセージと HttpClient との間のマッピングを制御します。

 

HttpBinding

async (consumer)

非同期モードで動作するように consumer を設定します。

false

boolean

bridgeErrorHandler (consumer)

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

false

boolean

httpMethodRestrict (consumer)

GET/POST/PUT など、HttpMethod が一致する場合にのみ消費を許可するために使用されます。複数のメソッドをコンマで区切って指定できます。

 

String

matchOnUriPrefix (consumer)

完全に一致するものが見つからない場合に、consumer が URI 接頭辞を照合してターゲット consumer を見つけようとするかどうか。

false

boolean

muteException (consumer)

有効にすると、エクスチェンジが consumer側で処理に失敗した場合、レスポンスの本文には例外のスタックトレースが含まれません。

false

boolean

responseBufferSize (consumer)

javax.servlet.ServletResponse.

 

Integer

servletName (consumer)

使用するサーブレットの名前。

CamelServlet

String

transferException (consumer)

有効にすると、エクスチェンジが consumer 側で処理に失敗し、発生した例外が application/x-java-serialized-object コンテンツタイプとして応答でシリアライズされた場合に、例外がシリアライズされました。producer 側では、例外がデシリアライズされ、HttpOperationFailedException ではなくそのまま出力されます。原因となった例外はシリアライズする必要があります。これは、デフォルトでオフになっています。これを有効にすると、Java が受信データをリクエストから Java にデシリアライズし、セキュリティー上のリスクが生じる可能性があることに注意してください。

false

boolean

attachmentMultipartBinding (consumer (上級))

Camel エクスチェンジで multipart/form-data を添付ファイルとして自動的にバインドするかどうか。オプション attachmentMultipartBinding=true と disableStreamCache=false は一緒に使用できません。AttachmentMultipartBinding を使用するには、disableStreamCache を削除します。サーブレットの使用時にこれを有効にするには、サーブレット固有の設定が必要になる場合があるため、これはデフォルトでオフになっています。

false

boolean

eagerCheckContentAvailable (consumer (上級))

content-length ヘッダーが 0 または存在しない場合に、HTTP リクエストにコンテンツがあるかどうかを積極的にチェックするかどうか。これは、HTTP クライアントがストリーミングデータを送信しない場合に有効にすることができます。

false

boolean

exceptionHandler (consumer (上級))

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

 

ExceptionHandler

exchangePattern (consumer (上級))

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

列挙値:

  • InOnly
  • InOut
  • InOptionalOut
 

ExchangePattern

fileNameExtWhitelist(consumer (上級))

アップロードされたファイルを受け入れるための受け入れられたファイル名拡張子のホワイトリスト。複数の拡張子は、txt、xml のようにコンマで区切ることができます。

 

String

mapHttpMessageBody (consumer (上級))

このオプションが true の場合、交換の IN exchange ボディは HTTP ボディにマップされます。これを false に設定すると、HTTP マッピングが回避されます。

true

boolean

mapHttpMessageFormUrlEncodedBody (consumer (advanced))

このオプションが true の場合、交換の IN exchange Form Encoded ボディは HTTP にマップされます。これを false に設定すると、HTTP Form Encoded ボディマッピングが回避されます。

true

boolean

mapHttpMessageHeaders (consumer (上級))

このオプションが true の場合、交換の IN exchange ヘッダーは HTTP ヘッダーにマップされます。これを false に設定すると、HTTP ヘッダーのマッピングが回避されます。

true

boolean

optionsEnabled (consumer (上級))

このサーブレットconsumer に対して HTTP OPTIONS を有効にするかどうかを指定します。デフォルトでは、OPTIONS はオフになっています。

false

boolean

traceEnabled (consumer (上級))

このサーブレット consumer に対して HTTP TRACE を有効にするかどうかを指定します。デフォルトでは、TRACE はオフになっています。

false

boolean

46.5. メッセージヘッダー

Camel は、HTTP コンポーネントと同じメッセージヘッダーを適用します。

Camel は、すべての request.parameter および request.headers も生成します。たとえば、クライアントリクエストの URL が http://myserver/myserver?orderid=123 の場合、エクスチェンジには、値が 123 の orderid という名前のヘッダーが含まれます。

46.6. 用途

サーブレットコンポーネントによって生成されたエンドポイント from のみ使用できます。したがって、Camel ルートへの入力としてのみ使用する必要があります。他の HTTP エンドポイントに対して HTTP リクエストを発行するには、HTTP コンポーネントを使用します。

46.7. Spring Boot 自動設定

Spring Boot で servlet を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-servlet-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 15 のオプションをサポートします。

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

camel.component.servlet.allow-java-serialized-object

リクエストが context-type=application/x-java-serialized-object を使用する場合に Java シリアル化を許可するかどうか。これは、デフォルトでオフになっています。これを有効にすると、Java が受信データをリクエストから Java にデシリアライズし、セキュリティー上のリスクが生じる可能性があることに注意してください。

false

Boolean

camel.component.servlet.attachment-multipart-binding

Camel エクスチェンジで multipart/form-data を添付として自動的にバインドするかどうか。オプション attachmentMultipartBinding=true と disableStreamCache=false は一緒に使用できません。AttachmentMultipartBinding を使用するには、disableStreamCache を削除します。サーブレットの使用時にこれを有効にするには、サーブレット固有の設定が必要になる場合があるため、これはデフォルトでオフになっています。

false

ブール値

camel.component.servlet.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.servlet.bridge-error-handler

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

false

Boolean

camel.component.servlet.enabled

サーブレットコンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.servlet.file-name-ext-whitelist

アップロードされたファイルを受け入れるための受け入れられたファイル名拡張子のホワイトリスト。複数の拡張子は、txt、xml のようにコンマで区切ることができます。

 

String

camel.component.servlet.header-filter-strategy

カスタムの org.apache.camel.spi.HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルターします。このオプションは org.apache.camel.spi.HeaderFilterStrategy タイプです。

 

HeaderFilterStrategy

camel.component.servlet.http-binding

カスタム HttpBinding を使用して、Camel メッセージと HttpClient との間のマッピングを制御します。オプションは org.apache.camel.http.common.HttpBinding タイプです。

 

HttpBinding

camel.component.servlet.http-configuration

共有 HttpConfiguration を基本設定として使用するには、以下を行います。オプションは org.apache.camel.http.common.HttpConfiguration タイプです。

 

HttpConfiguration

camel.component.servlet.http-registry

カスタム org.apache.camel.component.servlet.HttpRegistry を使用します。オプションは org.apache.camel.http.common.HttpRegistry タイプです。

 

HttpRegistry

camel.component.servlet.mute-exception

有効にすると、エクスチェンジが consumer側で処理に失敗した場合、レスポンスの本文には例外のスタックトレースが含まれません。

false

ブール値

camel.component.servlet.servlet-name

使用するサーブレットのデフォルト名。デフォルト名は CamelServlet です。

CamelServlet

String

camel.servlet.mapping.context-path

自動マッピングのためにサーブレットコンポーネントによって使用されるコンテキストパス。

/camel/*

String

camel.servlet.mapping.enabled

サーブレットコンポーネントの Spring Web コンテキストへの自動マッピングを有効にします。

true

ブール値

camel.servlet.mapping.servlet-name

Camel サーブレットの名前。

CamelServlet

String

第47章 Slack

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

Slack コンポーネントを使用すると、Slack のインスタンスに接続し、事前に確立された Slack 着信 Webhook を介してメッセージ本文に含まれるメッセージを配信できます。

Maven ユーザーは、このコンポーネントの pom.xml に以下の依存関係を追加する必要があります。

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-slack</artifactId>
    <version>{CamelSBVersion}</version>
    <!-- use the same version as your Camel core version -->
</dependency>

47.1. URI 形式

チャネルにメッセージを送信します。

slack:#channel[?options]

slackuser にダイレクトメッセージを送信するには。

slack:@userID[?options]

47.2. オプションの設定

Camel コンポーネントは、以下の 2 つのレベルで設定されます。

  • コンポーネントレベル
  • エンドポイントレベル

47.2.1. コンポーネントオプションの設定

コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。

コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。

コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。

47.2.2. エンドポイントオプションの設定

多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。

エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。

オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。

以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。

47.3. コンポーネントオプション

Slack コンポーネントは、以下に示す 5 個のオプションをサポートしています。

Name説明デフォルトタイプ

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

トークン (トークン)

使用するトークン。

 

String

webhookUrl (webhook)

着信 Webhook URL。

 

String

47.4. エンドポイントオプション

Slack エンドポイントは、URI 構文を使用して設定されます。

slack:channel

パスおよびクエリーパラメーターを使用します。

47.4.1. パスパラメーター(1 パラメーター)

Name説明デフォルトタイプ

channel (共通)

必須 メッセージをユーザーに直接送信するためのチャネル名 (構文 #name) または slackuser (構文 userName)。

 

String

47.4.2. クエリーパラメーター (29 パラメーター)

Name説明デフォルトタイプ

token (共通)

使用するトークン。

 

String

bridgeErrorHandler (consumer)

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

false

boolean

conversationType (consumer)

会話の種類。

列挙値:

  • PUBLIC_CHANNEL
  • PRIVATE_CHANNEL
  • MPIM
  • IM

PUBLIC_CHANNEL

ConversationType

maxResults (consumer)

投票の最大結果。

10

String

naturalOrder (consumer)

自然な順序 (古いものから新しいものへ) でエクスチェンジを作成するか、そうでないか。

false

boolean

sendEmptyMessageWhenIdle (consumer)

ポーリング consumer がファイルをポーリングしなかった場合、このオプションを有効にして、代わりに空のメッセージ (ボディーなし) を送信できます。

false

boolean

serverUrl (consumer)

Slack インスタンスのサーバー URL。

 

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

iconEmoji (producer)

非推奨 Slack 絵文字をアバターとして使用します。

 

String

iconUrl (producer)

非推奨 チャネルまたはユーザーにメッセージを送信するときにコンポーネントが使用するアバター。

 

String

lazyStartProducer (producer)

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

false

boolean

username (producer)

非推奨 これは、チャネルまたはユーザーにメッセージを送信するときにボットが持つユーザー名です。

 

String

webhookUrl (producer)

着信 Webhook URL。

 

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

47.5. スプリント XML での設定

XML を使用する Slack コンポーネントは、Spring または Blueprint Bean として設定する必要があります。この Bean には、パラメーターとして統合用の着信 Webhook URL またはアプリケーショントークンが含まれます。

<bean id="slack" class="org.apache.camel.component.slack.SlackComponent">
    <property name="webhookUrl" value="https://hooks.slack.com/services/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"/>
    <property name="token" value="xoxb-12345678901-1234567890123-xxxxxxxxxxxxxxxxxxxxxxxx"/>
</bean>

Java の場合、Java コードを使用してこれを設定できます。

47.6. 例

ブループリントを使用した CamelContext は次のようになります。

<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0" default-activation="lazy">

    <bean id="slack" class="org.apache.camel.component.slack.SlackComponent">
        <property name="webhookUrl" value="https://hooks.slack.com/services/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"/>
    </bean>

    <camelContext xmlns="http://camel.apache.org/schema/blueprint">
        <route>
            <from uri="direct:test"/>
            <to uri="slack:#channel?iconEmoji=:camel:&amp;username=CamelTest"/>
        </route>
    </camelContext>

</blueprint>

47.7. producer

WebhookUrl の代わりにトークンを使用してメッセージを送信できるようになりました。

from("direct:test")
    .to("slack:#random?token=RAW(<YOUR_TOKEN>)");

Slack API モデルを使用してブロックを作成できるようになりました。詳細については、https://api.slack.com/block-kit を参照してください。

    public void testSlackAPIModelMessage() {
        Message message = new Message();
        message.setBlocks(Collections.singletonList(SectionBlock
                .builder()
                .text(MarkdownTextObject
                        .builder()
                        .text("*Hello from Camel!*")
                        .build())
                .build()));

        template.sendBody(test, message);
    }

47.8. Consumer

チャネル内のメッセージの consumer も使用できます。

from("slack://general?token=RAW(<YOUR_TOKEN>)&maxResults=1")
    .to("mock:result");

このようにして、一般チャネルから最後のメッセージを取得します。consumer は、消費された最後のメッセージのタイムスタンプを追跡し、次のポーリングでそのタイムスタンプからチェックします。

Slack アプリケーションを作成してワークスペースで使用する必要があります。

ボットユーザー OAuth アクセストークンを consumer エンドポイントのトークンとして使用します。

注記

対応する履歴 (channels:history または groups:history または mpim:history または im:history) および読み取り (channels:read または groups:read または mpim:read または im:read) ユーザートークンスコープをアプリケーションに追加して、パーミッションを付与します。対応するチャネルでメッセージを表示します。conversationType オプションを使用して設定する必要があります (PUBLIC_CHANNELPRIVATE_CHANNELMPIMIM)

naturalOrder オプションを使用すると、古いものから新しいものへとメッセージを消費できます。本来なら最新のものを先に取得し、逆方向に消費します (メッセージ 3 ⇒ メッセージ 2 ⇒ メッセージ 1)

注記

conversationType オプションを使用して、公開されているだけではないチャネル (PUBLIC_CHANNELPRIVATE_CHANNELMPIMIM) から履歴とメッセージを読み取ることができます。

47.9. Spring Boot 自動設定

Spring Boot で slack を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-slack-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に示す 6 つのオプションをサポートします。

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

camel.component.slack.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.slack.bridge-error-handler

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

false

ブール値

camel.component.slack.enabled

slack コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.slack.lazy-start-producer

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

false

ブール値

camel.component.slack.token

使用するトークン。

 

String

camel.component.slack.webhook-url

着信 Webhook URL。

 

String

第48章 SQL

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

SQL コンポーネントでは、JDBC クエリーを使用してデータベースを操作することができます。このコンポーネントと JDBC コンポーネントの相違点は、SQL の場合、クエリーがエンドポイントのプロパティーであり、クエリーに渡されるパラメーターとしてメッセージペイロードを使用ことです。

このコンポーネントは、実際の SQL 処理のために舞台裏で spring-jdbc を使用します。

Maven ユーザーは、このコンポーネントの pom.xml に以下の依存関係を追加する必要があります。

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-sql</artifactId>
    <version>{CamelSBVersion}</version>
    <!-- use the same version as your Camel core version -->
</dependency>

SQL コンポーネントは以下もサポートしています。

  • Idempotent Consumer EIP パターン用の JDBC ベースのリポジトリー。以下を参照してください。
  • Aggregator EIP パターンの JDBC ベースのリポジトリー。以下を参照してください。

48.1. URI 形式

注記

このコンポーネントは、Transactional Client として使用できます。

SQL コンポーネントは、次のエンドポイント URI 表記を使用します。

sql:select * from table where id=# order by name[?options]

次のように :`#name_of_the_parameter` スタイルを使用して、名前付きパラメーターを使用できます。

sql:select * from table where id=:#myId order by name[?options]

名前付きパラメーターを使用する場合、Camel は指定された優先順位で名前を検索します。

  1. java.util.Map の場合はメッセージ本文から
  2. メッセージヘッダーから

名前付きパラメーターを解決できない場合は、例外が出力されます。

次のように、Simple 式をパラメーターとして使用できます。

sql:select * from table where id=:#${exchangeProperty.myId} order by name[?options]

標準 ? SQL クエリーのパラメーターを示す記号は # 記号に置き換えられます。記号は、エンドポイントのオプションを指定するために使用されます。? シンボルの置換は、エンドポイントごとに設定できます。

次のように、SQL クエリーをクラスパスまたはファイルシステム内のファイルに外部化できます。

sql:classpath:sql/myquery.sql[?options]

そして、myquery.sql ファイルはクラスパスにあり、単なるプレーンテキストです。

-- this is a comment
select *
from table
where
  id = :#${exchangeProperty.myId}
order by
  name

ファイルでは、複数行を使用して、必要に応じて SQL をフォーマットできます。– 破線などのコメントも使用します。

48.2. オプションの設定

Camel コンポーネントは、以下の 2 つのレベルで設定されます。

  • コンポーネントレベル
  • エンドポイントレベル

48.2.1. コンポーネントオプションの設定

コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。

コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。

コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。

48.2.2. エンドポイントオプションの設定

多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。

エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。

オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。

以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。

48.3. コンポーネントオプション

SQL コンポーネントは、以下に示す 5 個のオプションをサポートしています。

Name説明デフォルトタイプ

dataSource (共通)

Autowired データベースとの通信に使用する DataSource を設定します。

 

DataSource

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

usePlaceholder (上級)

SQL クエリーでプレースホルダーを使用し、すべてのプレースホルダー文字を符号に置き換えるかどうかを設定します。このオプションのデフォルトは true です。

true

boolean

48.4. エンドポイントオプション

SQL エンドポイントは、URI 構文を使用して設定されます。

sql:query

パスおよびクエリーパラメーターを使用します。

48.4.1. パスパラメーター(1 パラメーター)

Name説明デフォルトタイプ

query (共通)

必須 実行する SQL クエリーを設定します。file: または classpath: を接頭辞として使用してクエリーを外部化し、ファイルの場所を指定できます。

 

String

48.4.2. クエリーパラメーター (45 パラメーター)

Name説明デフォルトタイプ

allowNamedParameters (common)

クエリーで名前付きパラメーターの使用を許可するかどうか。

true

boolean

dataSource (共通)

Autowired エンドポイントレベルでデータベースと通信するために使用する DataSource を設定します。

 

DataSource

outputClass (共通)

outputType=SelectOne の場合、変換として使用する完全なパッケージとクラス名を指定します。

 

String

outputHeader (common)

メッセージ本文ではなく、ヘッダーにクエリー結果を格納します。デフォルトでは、outputHeader == null で、クエリー結果はメッセージ本文に格納され、メッセージ本文の既存のコンテンツは破棄されます。outputHeader が設定されている場合、値はクエリー結果を格納するヘッダーの名前として使用され、元のメッセージ本文は保持されます。

 

String

outputType (common)

以下の方法で、consumer または producer の出力を Map のリストとして SelectList、または単一の Java オブジェクトとして SelectOne にします。a) クエリーが単一の列を持っている場合、その JDBC 列オブジェクトが返されます。(SELECT COUNT( ) FROM PROJECT のような場合、Long オブジェクトを返します。) b) クエリーが複数の列を持つ場合、その結果の Map を返します。c) 出力クラスが設定されている場合、列名に一致するすべてのセッターを呼び出して、クエリーの結果を Java Bean オブジェクトに変換します。クラスには、インスタンスを作成するためのデフォルトのコンストラクターがあると想定されます。d) クエリーの結果が複数の行になった場合、一意でない結果の例外が出力されます。StreamList は、Iterator を使用してクエリーの結果をストリーミングします。これは、ストリーミング方式で ResultSet を処理するために、ストリーミングモードでスプリッタ EIP とともに使用できます。

列挙値:

  • SelectOne
  • SelectList
  • StreamList

SelectList

SqlOutputType

separator (common)

パラメーター値がメッセージ本文 (本文が文字列型の場合) から取得されるときに使用するセパレーターで、# プレースホルダーに挿入されます。名前付きパラメーターを使用する場合は、代わりに Map タイプが使用されることに注意してください。デフォルト値は、コンマです。

,

char

breakBatchOnConsumeFail (consumer)

onConsume が失敗した場合にバッチを中断するかどうかを設定します。

false

boolean

bridgeErrorHandler (consumer)

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

false

boolean

expectedUpdateCount (consumer)

onConsume を使用するときに検証する予想更新カウントを設定します。

-1

int

maxMessagesPerPoll (consumer)

ポーリングするメッセージの最大数を設定します。

 

int

onConsume (consumer)

各行を処理した後、エクスチェンジが正常に処理された場合、たとえば行を処理済みとしてマークするために、このクエリーを実行できます。クエリーにはパラメーターを含めることができます。

 

String

onConsumeBatchComplete (consumer)

バッチ全体を処理した後、このクエリーを実行して行などを一括更新できます。クエリーにパラメーターを含めることはできません。

 

String

onConsumeFailed (consumer)

各行を処理した後、エクスチェンジが失敗した場合、たとえば、行を失敗としてマークするために、このクエリーを実行できます。クエリーにはパラメーターを含めることができます。

 

String

routeEmptyResultSet (consumer)

空の結果セットを次のホップに送信できるようにするかどうかを設定します。デフォルトは false です。したがって、空の結果セットは除外されます。

false

boolean

sendEmptyMessageWhenIdle (consumer)

ポーリング consumer がファイルをポーリングしなかった場合、このオプションを有効にして、代わりに空のメッセージ (ボディーなし) を送信できます。

false

boolean

transacted (consumer)

トランザクションを有効または無効にします。有効にした場合、エクスチェンジの処理が失敗した場合、consumer はそれ以上のエクスチェンジの処理を中断して、ロールバックイーガーを引き起こします。

false

boolean

useIterator (consumer)

結果セットをルートに配信する方法を設定します。リストまたは個々のオブジェクトとして配信を示します。デフォルトは真です。

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

processingStrategy (consumer (上級))

consumer が行/バッチを処理したときに、カスタム org.apache.camel.component.sql.SqlProcessingStrategy を使用してクエリーを実行するプラグインを許可します。

 

SqlProcessingStrategy

batch (producer)

バッチモードを有効または無効にします。

false

boolean

lazyStartProducer (producer)

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

false

boolean

noop (producer)

設定されている場合、SQL クエリーの結果を無視し、既存の IN メッセージを OUT メッセージとして使用して処理を続行します。

false

boolean

useMessageBodyForSql (producer)

メッセージ本文を SQL として使用し、次にパラメーターのヘッダーを使用するかどうか。このオプションを有効にすると、URI の SQL は使用されません。メッセージ本文のクエリーパラメーターは、# 記号ではなく疑問符で表されることに注意してください。

false

boolean

alwaysPopulateStatement (advanced)

有効にすると、org.apache.camel.component.sql.SqlPrepareStatementStrategy の populateStatement メソッドが常に呼び出されます。また、準備する必要のあるパラメーターがない場合も同様です。これが false の場合、populateStatement は、1 つ以上の予期されるパラメーターが設定される場合にのみ呼び出されます。たとえば、これにより、パラメーターのない SQL クエリーのメッセージ本文/ヘッダーの読み取りが回避されます。

false

boolean

parametersCount (advanced)

0 より大きい値を設定すると、Camel は JDBC メタデータ API を介してクエリーを実行する代わりに、このパラメーターのカウント値を使用して置き換えます。これは、JDBC ベンダーが正しいパラメーター数を返すことができず、ユーザーが代わりにオーバーライドできる場合に役立ちます。

 

int

placeholder (advanced)

SQL クエリーで置換される文字を指定します。これは単純な String.replaceAll() 操作であり、SQL 解析が含まれていないことに注意してください (引用符で囲まれた文字列も変更されます)。

#

String

prepareStatementStrategy (advanced)

プラグインでカスタム org.apache.camel.component.sql.SqlPrepareStatementStrategy を使用して、クエリーと準備済みステートメントの準備を制御できるようにします。

 

SqlPrepareStatementStrategy

templateOptions (上級)

マップからのキー/値を使用して Spring JdbcTemplate を設定します。

 

マップ

usePlaceholder (advanced)

SQL クエリーでプレースホルダーを使用し、すべてのプレースホルダー文字を符号に置き換えるかどうかを設定します。

true

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

48.5. メッセージボディーの扱い

SQL コンポーネントは、メッセージボディーを java.util.Iterator 型のオブジェクトに変換しようとし、この反復子を使用してクエリーパラメーターを入力します (各クエリーパラメーターは、エンドポイント URI の # 記号 (または設定されたプレースホルダー) で表されます)。.メッセージ本文が配列でもコレクションでもない場合、変換の結果は、本文自体である 1 つのオブジェクトのみを反復処理する反復子になります。

たとえば、メッセージ本文が java.util.List のインスタンスである場合、リストの最初の項目は SQL クエリーで最初に出現する # に置換され、リストの 2 番目の項目は 2 番目に出現する # などに置換されます

batchtrue に設定されている場合、受信メッセージ本文の解釈がわずかに変更されます。コンポーネントは、パラメーターのイテレーターではなく、パラメーターの反復子を含む反復子を期待します。外側の反復子のサイズによってバッチサイズが決まります。

メッセージ本文を SQL ステートメントとして使用できるようにするオプション useMessageBodyForSql を使用できます。次に、SQL パラメーターをキー SqlConstants.SQL_PARAMETERS を使用してヘッダーに指定する必要があります。これにより、SQL クエリーがメッセージ本文からのものであるため、SQL コンポーネントがより動的に動作できるようになります。テンプレート (VelocityFreemarker など) を条件付き処理に使用します。たとえば、クエリーパラメーターの存在に応じて where 句を含めたり除外したりします。

48.6. クエリーの結果

select 操作の場合、結果は JdbcTemplate.queryForList () メソッドによって返される List<Map<String, Object>> タイプのインスタンスです。update 操作の場合、update 操作はヘッダーとしてのみ設定され、本体としては設定されないため、NULL 本体が返されます。

注記

update 操作の詳細については、ヘッダー値 を参照してください。

デフォルトでは、結果はメッセージボディーに配置されます。outputHeader パラメーターが設定されている場合、結果はヘッダーに配置されます。これは、完全なメッセージエンリッチメントパターンを使用してヘッダーを追加する代わりの方法であり、シーケンスまたはその他の小さな値をヘッダーにクエリーするための簡潔な構文を提供します。outputHeader と outputType を一緒に使用すると便利です。

from("jms:order.inbox")
    .to("sql:select order_seq.nextval from dual?outputHeader=OrderId&outputType=SelectOne")
    .to("jms:order.booking");

48.7. StreamList の使用

producer は、反復子を使用してクエリーの出力をストリーミングする outputType=StreamList をサポートします。これにより、ストリーミング方式でデータを処理できます。たとえば、スプリッター EIP で各行を 1 つずつ処理し、必要に応じてデータベースからデータをロードするために使用できます。

from("direct:withSplitModel")
        .to("sql:select * from projects order by id?outputType=StreamList&outputClass=org.apache.camel.component.sql.ProjectModel")
        .to("log:stream")
        .split(body()).streaming()
            .to("log:row")
            .to("mock:result")
        .end();

48.8. ヘッダーの値

update 操作を実行すると、SQL コンポーネントは更新カウントを次のメッセージヘッダーに格納します。

ヘッダー説明

CamelSqlUpdateCount

update 操作によって更新された行の数を Integer オブジェクトとして返します。outputType=StreamList を使用する場合、このヘッダーは提供されません。

CamelSqlRowCount

select 操作によって返される行の数を Integer オブジェクトで返します。outputType=StreamList を使用する場合、このヘッダーは提供されません。

CamelSqlQuery

実行するクエリー。このクエリーは、エンドポイント URI で指定されたクエリーよりも優先されます。ヘッダーのクエリーパラメータは # 記号の代わりに ? 記号で表 される ことに注意してください

insert 操作を実行すると、SQL コンポーネントは、生成されたキーとこれらの行の数を含む行を次のメッセージヘッダーに格納します。

ヘッダー説明

CamelSqlGeneratedKeysRowCount

生成されたキーを含むヘッダー内の行数。

CamelSqlGeneratedKeyRows

生成されたキー (キーのマップのリスト) を含む行。

48.9. 生成されたキー

SQL INSERT を使用してデータを挿入する場合、RDBMS は自動生成されたキーをサポートしている可能性があります。生成されたキーをヘッダーで返すように SQL producer に指示できます。
これを行うには、ヘッダー CamelSqlRetrieveGeneratedKeys=true を設定します。次に、生成されたキーは、上記の表にリストされているキーを含むヘッダーとして提供されます。

生成されたどの列を取得するかを指定するには、ヘッダー CamelSqlGeneratedColumnsString または int に設定し、それぞれ列名またはインデックスを示します。Oracle など、一部のデータベースではこれが必要です。ドライバーがパラメーターの数を正しく判断できない場合は、parametersCount オプションを使用する必要がある場合もあります。

この 単体テスト で詳細を確認できます。

48.10. DataSource

URI で直接 DataSource への参照を設定できます。

sql:select * from table where id=# order by name?dataSource=#myDS

48.11. 名前付きパラメーターの使用

以下の特定のルートでは、projects テーブルからすべてのプロジェクトを取得します。SQL クエリーには、:#lic と :#min という 2 つの名前付きパラメーターがあることに注意してください。
Camel は、メッセージ本文またはメッセージヘッダーからこれらのパラメーターを検索します。上記の例では、2 つのヘッダーに定数値を設定していることに注意してください。
名前付きパラメーターの場合:

   from("direct:projects")
     .setHeader("lic", constant("ASF"))
     .setHeader("min", constant(123))
     .to("sql:select * from projects where license = :#lic and id > :#min order by id")

ただし、メッセージボディーが java.util.Map の場合、名前付きパラメーターは本文から取得されます。

   from("direct:projects")
     .to("sql:select * from projects where license = :#lic and id > :#min order by id")

48.12. プロデューサでの式パラメーターの使用

以下の特定のルートでは、データベースからすべてのプロジェクトを取得します。ライセンスを定義するためにエクスチェンジの本文を使用し、プロパティーの値を 2 番目のパラメーターとして使用します。

from("direct:projects")
  .setBody(constant("ASF"))
  .setProperty("min", constant(123))
  .to("sql:select * from projects where license = :#${body} and id > :#${exchangeProperty.min} order by id")

48.12.1. consumer での式パラメーターの使用

SQL コンポーネントを consumer として使用する場合、式パラメーター (Simple 言語) を使用して、Bean でメソッドを呼び出して ID や日付などを取得するなど、動的クエリーパラメーターを作成することもできるようになりました。

たとえば、以下のサンプルでは、Bean myIdGenerator で nextId メソッドを呼び出します。

from("sql:select * from projects where id = :#${bean:myIdGenerator.nextId}")
    .to("mock:result");

また、Bean には次のメソッドがあります。

public static class MyIdGenerator {

    private int id = 1;

    public int nextId() {
        return id++;
    }

メッセージボディーとヘッダーを持つ既存の Exchange がないことに注意してください。したがって、consumer で使用できる単純な式は、この例のように Bean メソッドを呼び出すのに最も役立ちます。

48.13. 動的な値での IN クエリーの使用

SQL producer では、IN 値が動的に計算される IN ステートメントで SQL クエリーを使用できます。たとえば、メッセージ本文やヘッダーなどから。

IN を使用するには、次のことが必要です。

  • パラメーター名の前に in:
  • パラメーターの前後に ( ) を追加します

例はこれをよりよく説明しています。次のクエリーが使用されます。

-- this is a comment
select *
from projects
where project in (:#in:names)
order by id

次の経路で:

from("direct:query")
    .to("sql:classpath:sql/selectProjectsIn.sql")
    .to("log:query")
    .to("mock:query");

次に、IN クエリーは、次のような動的な値を持つキー名を持つヘッダーを使用できます。

// use an array
template.requestBodyAndHeader("direct:query", "Hi there!", "names", new String[]{"Camel", "AMQ"});

// use a list
List<String> names = new ArrayList<String>();
names.add("Camel");
names.add("AMQ");

template.requestBodyAndHeader("direct:query", "Hi there!", "names", names);

// use a string separated values with comma
template.requestBodyAndHeader("direct:query", "Hi there!", "names", "Camel,AMQ");

クエリーは、外部化する代わりにエンドポイントで指定することもできます (外部化すると SQL クエリーの維持が容易になることに注意してください)。

from("direct:query")
    .to("sql:select * from projects where project in (:#in:names) order by id")
    .to("log:query")
    .to("mock:query");

48.14. JDBC ベースのべき等リポジトリーの使用

このセクションでは、JDBC ベースのべき等リポジトリーを使用します。

注記

抽象クラス
カスタム JDBC べき等リポジトリーを構築するために拡張できる抽象クラス org.apache.camel.processor.idempotent.jdbc.AbstractJdbcMessageIdRepository があります。

最初に、べき等リポジトリーで使用されるデータベーステーブルを作成する必要があります。次のスキーマを使用します。

CREATE TABLE CAMEL_MESSAGEPROCESSED ( processorName VARCHAR(255),
messageId VARCHAR(100) )

createdAt 列を追加しました。

CREATE TABLE CAMEL_MESSAGEPROCESSED ( processorName VARCHAR(255),
messageId VARCHAR(100), createdAt TIMESTAMP )
注記

SQL Server の TIMESTAMP 型は、固定長のバイナリー文字列型です。DATETIME、または TIMESTAMP のいずれの JDBC 時刻型にもマップされません。

concurrent consumerと連携する場合、列の processorName と messageId に一意の制約を作成することが重要です。この制約の構文はデータベースによって異なるため、ここでは示しません。

48.14.1. JDBC べき等リポジトリーをカスタマイズする

必要に応じて org.apache.camel.processor.idempotent.jdbc.JdbcMessageIdRepository を調整するためのいくつかのオプションがあります。

パラメーターデフォルト値説明

createTableIfNotExists

true

テーブルが存在しない場合、Camel がテーブルを作成しようとするかどうかを定義します。

tableName

CAMEL_MESSAGEPROCESSED

デフォルト名の代わりにカスタムテーブル名を使用するには: CAMEL_MESSAGEPROCESSED。

tableExistsString

SELECT 1 FROM CAMEL_MESSAGEPROCESSED WHERE 1 = 0

このクエリーは、テーブルがすでに存在するかどうかを確認するために使用されます。テーブルが存在しないことを示すには、例外を出力する必要があります。

createString

CREATE TABLE CAMEL_MESSAGEPROCESSED (processorName VARCHAR(255), messageId VARCHAR(100), createdAt TIMESTAMP)

テーブルの作成に使用されるステートメント。

queryString

SELECT COUNT(*) FROM CAMEL_MESSAGEPROCESSED WHERE processorName = ?AND messageId = ?

メッセージがリポジトリーにすでに存在するかどうかを判断するために使用されるクエリー (結果は 0 に等しくない)。2 つのパラメーターを取ります。この最初のものはプロセッサー名 (String) で、2 つ目はメッセージ ID (String) です。

insertString

INSERT INTO CAMEL_MESSAGEPROCESSED (processorName, messageId, createdAt) VALUES (?, ?, ?)

エントリーをテーブルに追加するために使用されるステートメント。3 つのパラメーターを取ります。1 つ目はプロセッサー名 (String)、2 つ目はメッセージ ID (String)、3 つ目はこのエントリーがリポジトリーに追加されたときのタイムスタンプ (java.sql.Timestamp) です。

deleteString

DELETE FROM CAMEL_MESSAGEPROCESSED WHERE processorName = ?AND messageId = ?

データベースからエントリーを削除するために使用されるステートメント。2 つのパラメーターを取ります。この最初のものはプロセッサー名 (String) で、2 つ目はメッセージ ID (String) です。

オプション tableName を使用すると、デフォルトの SQL クエリーを使用できますが、テーブル名が異なります。ただし、SQL クエリーをカスタマイズする場合は、それぞれを個別に設定できます。

48.14.2. Orphan Lock 対応の Jdbc IdempotentRepository

org.apache.camel.processor.idempotent.jdbc.JdbcMessageIdRepository の制限の 1 つは、JVM クラッシュまたは正常でないシャットダウンに起因する孤立ロックを処理しないことです。この実装が camel-file や camel-ftp などで使用されている場合、未処理のファイル/メッセージが発生する可能性があります。孤立したロック処理に対処する必要がある場合は、org.apache.camel.processor.idempotent.jdbc.JdbcOrphanLockAwareIdempotentRepository を使用してください。このリポジトリーは、アプリケーションのインスタンスが保持するロックを追跡します。保持されているロックごとに、アプリケーションはキープアライブシグナルをロックリポジトリーに送信し、その結果、createdAt 列が現在のタイムスタンプで更新されます。アプリケーションインスタンスがロックを取得しようとする場合、次の 3 つの可能性があります。

  • ロックエントリーが存在しない場合、ロックは JdbcMessageIdRepository の基本実装を使用して提供されます。
  • ロックはすでに存在し、createdAt < System.currentTimeMillis () - lockMaxAgeMillis.この場合、アクティブなインスタンスにロックがあり、ロックを要求している新しいインスタンスにロックが提供されていないと想定されます。
  • ロックはすでに存在し、createdAt > = System.currentTimeMillis () - lockMaxAgeMillis.この場合、ロックを持つアクティブなインスタンスは存在しないと想定され、ロックは要求側インスタンスに提供されます。背後にある理由は、ロックを持っていた元のインスタンスがまだ実行されていた場合、その keepAlive メカニズムを使用して createdAt のタイムスタンプを更新したためです。

このリポジトリーには、2 つの追加の設定パラメーターがあります。

パラメーター説明

lockMaxAgeMillis

これは、ロックが孤立したと見なされるまでの期間を指します。つまり、currentTimestamp - createdAt >= lockMaxAgeMillis の場合、ロックは孤立しています。

lockKeepAliveIntervalMillis

createdAt Timestamp 列に対してキープアライブ更新が行われる頻度。

48.14.3. Jdbc IdempotentRepository のキャッシング

一部の SQL 実装は、クエリーごとに高速ではありません。JdbcMessageIdRepository 実装は、SQL トランザクション内で個別にべき等チェックを行います。わずか 100 個のキーをチェックするだけでも、数分かかることがあります。JdbcCachedMessageIdRepository は、開始時にキーのリスト全体をメモリー内キャッシュにプリロードします。このキャッシュは、元の実装に渡される前に最初にチェックされます。

すべてのキャッシュの実装と同様に、古いデータと特定の使用法に関して考慮すべき事項があります。

48.15. JDBC ベースの集約リポジトリーの使用

JdbcAggregationRepositoryAggregationRepository であり、その場で集約されたメッセージを永続化します。デフォルトのアグリゲーターはメモリー内のみの AggregationRepository を使用するため、これによりメッセージが失われないことが保証されます。JdbcAggregationRepository を使用すると、Camel と一緒に Aggregator の永続的なサポートを提供できます。

エクスチェンジが正常に処理された場合にのみ、AggregationRepositoryconfirm メソッドが呼び出されたときに完了としてマークされます。これは、同じエクスチェンジが再び失敗した場合、成功するまで再試行されることを意味します。

オプション maximumRedeliveries を使用して、復元された特定の Exchange の再配信試行の最大回数を制限できます。maximumRedeliveries に達したときに Camel がエクスチェンジの送信先を認識できるように、deadLetterUri オプションも設定する必要があります。

JdbcAggregateRecoverDeadLetterChannelTest.java など、camel-sql の単体テストでいくつかの例を確認できます。

48.15.1. データベース

操作可能にするために、各アグリゲーターは 2 つのテーブルを使用します: アグリゲーションと完了したテーブルです。慣例により、完了したものは、"_COMPLETED" という接尾辞が付いた集約と同じ名前になります。この名前は、Spring Bean で RepositoryName プロパティーを使用して設定する必要があります。次の例では、集約が使用されます。

両方のテーブルのテーブル構造定義は同一です。どちらの場合も、文字列値がキー (id) として使用されますが、ブロブにはバイト配列でシリアル化されたエクスチェンジが含まれます。
ただし、1 つの違いを覚えておく必要があります。テーブルによっては、id フィールドの内容が同じではありません。
集約テーブルの id は、コンポーネントがメッセージを集約するために使用する相関 ID を保持します。完成したテーブルの id には、対応する ブロブフィールドに格納されているエクスチェンジの ID が保持されます。

テーブルの作成に使用される SQL クエリーを次に示します。aggregation をアグリゲーターリポジトリー名に置き換えてください。

CREATE TABLE aggregation (
 id varchar(255) NOT NULL,
 exchange blob NOT NULL,
 version BIGINT NOT NULL,
 constraint aggregation_pk PRIMARY KEY (id)
);
CREATE TABLE aggregation_completed (
 id varchar(255) NOT NULL,
 exchange blob NOT NULL,
 version BIGINT NOT NULL,
 constraint aggregation_completed_pk PRIMARY KEY (id)
);

48.16. 本文とヘッダーをテキストとして保存する

JdbcAggregationRepository を設定して、メッセージ本文と select (ed) ヘッダーを文字列として別々の列に格納できます。たとえば、本文を保存するには、次の 2 つのヘッダー companyNameaccountName は次の SQL を使用します。

CREATE TABLE aggregationRepo3 (
 id varchar(255) NOT NULL,
 exchange blob NOT NULL,
 version BIGINT NOT NULL,
 body varchar(1000),
 companyName varchar(1000),
 accountName varchar(1000),
 constraint aggregationRepo3_pk PRIMARY KEY (id)
);
CREATE TABLE aggregationRepo3_completed (
 id varchar(255) NOT NULL,
 exchange blob NOT NULL,
 version BIGINT NOT NULL,
 body varchar(1000),
 companyName varchar(1000),
 accountName varchar(1000),
 constraint aggregationRepo3_completed_pk PRIMARY KEY (id)
);

次に、以下に示すように、この動作を有効にするようにリポジトリーを設定します。

<bean id="repo3"
  class="org.apache.camel.processor.aggregate.jdbc.JdbcAggregationRepository">
  <property name="repositoryName" value="aggregationRepo3"/>
  <property name="transactionManager" ref="txManager3"/>
  <property name="dataSource" ref="dataSource3"/>
  <!-- configure to store the message body and following headers as text in the repo -->
  <property name="storeBodyAsText" value="true"/>
  <property name="headersToStoreAsText">
    <list>
      <value>companyName</value>
      <value>accountName</value>
    </list>
  </property>
</bean>

48.16.1. コーデック (シリアル化)

あらゆるタイプのペイロードを含めることができるため、エクスチェンジは設計上シリアライズできません。データベースのブロブフィールドに格納されるバイト配列に変換されます。これらの変換はすべて JdbcCodec クラスによって処理されます。コードの 1 つの詳細に注意する必要があります: ClassLoadingAwareObjectInputStream です。

ClassLoadingAwareObjectInputStream は、Apache ActiveMQ プロジェクトから再利用されています。ObjectInputStream をラップし、currentThread ではなく ContextClassLoader で使用します。利点は、他のバンドルによって公開されたクラスをロードできることです。これにより、交換の本文とヘッダーにカスタム型のオブジェクト参照を含めることができます。

48.16.2. Transaction

トランザクションを調整するには、Spring PlatformTransactionManager が必要です。

48.16.2.1. Service (Start/Stop)

start メソッドは、データベースの接続と必要なテーブルの存在を確認します。何か問題があると、起動時に失敗します。

48.16.3. アグリゲーターの設定

対象となる環境によっては、アグリゲーターに何らかの設定が必要になる場合があります。ご存知のように、各アグリゲーターには独自のリポジトリー (対応するテーブルのペアがデータベースに作成されている) とデータソースが必要です。デフォルトの lobHandler がデータベースシステムに適合していない場合は、lobHandler プロパティーを挿入できます。

Oracle の宣言は次のとおりです。

<bean id="lobHandler" class="org.springframework.jdbc.support.lob.OracleLobHandler">
  <property name="nativeJdbcExtractor" ref="nativeJdbcExtractor"/>
</bean>
<bean id="nativeJdbcExtractor"
  class="org.springframework.jdbc.support.nativejdbc.CommonsDbcpNativeJdbcExtractor"/>
<bean id="repo"
  class="org.apache.camel.processor.aggregate.jdbc.JdbcAggregationRepository">
  <property name="transactionManager" ref="transactionManager"/>
  <property name="repositoryName" value="aggregation"/>
  <property name="dataSource" ref="dataSource"/>
  <!-- Only with Oracle, else use default -->
  <property name="lobHandler" ref="lobHandler"/>
</bean>

48.16.4. Optimistic locking

optimisticLocking をオンにして、複数の Camel アプリケーションが集約リポジトリー用の同じデータベースを共有するクラスター化された環境で、この JDBC ベースの集約リポジトリーを使用できます。競合状態がある場合、JDBC ドライバーは、JdbcAggregationRepository が対応できるベンダー固有の例外を出力します。JDBC ドライバーからの例外の原因が楽観的ロックエラーと見なされるかを知るには、これを行うマッパーが必要です。したがって、org.apache.camel.processor.aggregate.jdbc.JdbcOptimisticLockingExceptionMapper があり、必要に応じてカスタムロジックを実装できます。次のように動作するデフォルトの実装 org.apache.camel.processor.aggregate.jdbc.DefaultJdbcOptimisticLockingExceptionMapper があります。

次のチェックが行われます。

  • 原因となった例外が SQLException の場合、SQLState が 23 で始まるかどうかがチェックされます。
  • 原因となった例外が DataIntegrityViolationException の場合
  • 発生した例外クラス名に ConstraintViolation が含まれる場合。
  • クラス名が設定されている場合、FQN クラス名の一致をオプションでチェックします。

さらに、FQN クラス名を追加できます。発生した例外 (またはネストされた例外) のいずれかが FQN クラス名のいずれかと等しい場合は、楽観的ロックエラーになります。

以下は、JDBC ベンダーからの 2 つの追加の FQN クラス名を定義する例です。

<bean id="repo"
class="org.apache.camel.processor.aggregate.jdbc.JdbcAggregationRepository">
  <property name="transactionManager" ref="transactionManager"/>
  <property name="repositoryName" value="aggregation"/>
  <property name="dataSource" ref="dataSource"/>
  <property name="jdbcOptimisticLockingExceptionMapper" ref="myExceptionMapper"/>
</bean>
<!-- use the default mapper with extraFQN class names from our JDBC driver -->
<bean id="myExceptionMapper" class="org.apache.camel.processor.aggregate.jdbc.DefaultJdbcOptimisticLockingExceptionMapper">
  <property name="classNames">
    <util:set>
      <value>com.foo.sql.MyViolationExceptoion</value>
      <value>com.foo.sql.MyOtherViolationExceptoion</value>
    </util:set>
  </property>
</bean>

48.16.5. 伝播動作

JdbcAggregationRepository は、Spring-TX の 2 つの異なる トランザクションテンプレート を使用します。1 つは読み取り専用で、もう 1 つは読み書き操作に使用されます。

ただし、それ自体が <transacted /> を使用するルート内で JdbcAggregationRepository を使用し、共通の PlatformTransactionManager が使用されている場合、JdbcAggregationRepository 内のトランザクションテンプレートによって使用される 伝播動作 を設定する必要がある場合があります。

これを行う方法は次のとおりです。

<bean id="repo"
class="org.apache.camel.processor.aggregate.jdbc.JdbcAggregationRepository">
  <property name="propagationBehaviorName" value="PROPAGATION_NESTED" />
</bean>

伝播は org.springframework.transaction.TransactionDefinitionインターフェイスの定数で指定されるので、propagationBehaviorName は定数の名前を使用できる便利なセッターです。

48.16.6. PostgreSQL の場合

JdbcAggregationRepository によって使用される楽観的ロックで問題を引き起こす可能性がある特別なデータベースがあります。PostgreSQL は、データ整合性違反の例外 (SQLState 23505 の例外) の場合、接続を無効としてマークします。これにより、ネストされたトランザクション内で接続が事実上使用できなくなります。詳細は ドキュメント に記載されています..

org.apache.camel.processor.aggregate.jdbc.PostgresAggregationRepositoryJdbcAggregationRepository を拡張し、楽観的なロック動作を提供する特別な INSERT ..ON CONFLICT .. ステートメントを使用します。

このステートメントは次のとおりです (デフォルトの集計テーブル定義を使用)。

INSERT INTO aggregation (id, exchange) values (?, ?) ON CONFLICT DO NOTHING

詳細については、PostgreSQL のドキュメント を参照してください。

この節を使用すると、java.sql.PreparedStatement.executeUpdate() 呼び出しは、SQLState=23505 で SQLException を出力する代わりに 0 を返します。以降の処理は、一般的な JdbcAggregationRepository とまったく同じですが、PostgreSQL 接続を無効としてマークすることはありません。

48.17. Camel Sql スターター

spring-boot ユーザーは、スターターモジュールを利用できます。スターターを使用する場合、spring-boot プロパティーを使用して DataSource を直接設定できます。

# Example for a mysql datasource
spring.datasource.url=jdbc:mysql://localhost/test
spring.datasource.username=dbuser
spring.datasource.password=dbpass
spring.datasource.driver-class-name=com.mysql.jdbc.Driver

この機能を使用するには、Spring Boot pom.xml ファイルに次の依存関係を追加します。

<dependency>
    <groupId>org.apache.camel.springboot</groupId>
    <artifactId>camel-sql-starter</artifactId>
    <version>${camel.version}</version> <!-- use the same version as your Camel core version -->
</dependency>

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
    <version>${spring-boot-version}</version>
</dependency>

必要に応じて、特定のデータベースドライバーも含める必要があります。

48.18. Spring Boot 自動設定

Spring Boot で sql を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-sql-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 8 個のオプションをサポートします。

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

camel.component.sql-stored.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.sql-stored.enabled

sql-stored コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.sql-stored.lazy-start-producer

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

false

ブール値

camel.component.sql.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.sql.bridge-error-handler

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

false

ブール値

camel.component.sql.enabled

sql コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.sql.lazy-start-producer

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

false

ブール値

camel.component.sql.use-placeholder

SQL クエリーでプレースホルダーを使用し、すべてのプレースホルダー文字を符号に置き換えるかどうかを設定します。このオプションのデフォルトは true です。

true

ブール値

第49章 Stub

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

Stub コンポーネントは、開発中またはテスト中に物理エンドポイントをスタブ化する簡単な方法を提供します。これにより、たとえば、特定の特定の SMTP または HTTP エンドポイントに実際に接続する必要なく経路を実行できます。エンドポイント URI の前に stub: を追加するだけで、エンドポイントをスタブ化できます。

内部的に、Stub コンポーネントは 仮想マシン エンドポイントを作成します。Stub と 仮想マシン の主な違いは、仮想マシンは指定した URI とパラメーターを検証するため、クエリー引数を含む一般的な URI の前に vm: を配置すると、通常は失敗することです。ただし、Stub はそうではありません。基本的にすべてのクエリーパラメーターを無視して、ルート内の 1 つ以上のエンドポイントを一時的にすばやく stub 化できるためです。

49.1. URI 形式

stub:someUri

someUri は、任意のクエリーパラメーターを持つ任意の URI にすることができます。

49.2. オプションの設定

Camel コンポーネントは、以下の 2 つのレベルで設定されます。

  • コンポーネントレベル
  • エンドポイントレベル

49.2.1. コンポーネントオプションの設定

コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。

コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。

コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。

49.2.1.1. エンドポイントオプションの設定

多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。

エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。

オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。

以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。

49.3. コンポーネントオプション

Stub コンポーネントは、以下に示す 10 個のオプションをサポートしています。

Name説明デフォルトタイプ

bridgeErrorHandler (consumer)

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

false

boolean

concurrentConsumers (consumer)

交換を処理する同時スレッドのデフォルト数を設定します。

1

int

defaultPollTimeout (consumer (advanced))

ポーリング時に使用されるタイムアウト (ミリ秒単位)。タイムアウトが発生すると、consumer は実行を継続できるかどうかを確認できます。値を低く設定すると、シャットダウン時に consumer がより迅速に対応できるようになります。

1000

int

defaultBlockWhenFull (producer)

満杯の SEDA キューにメッセージを送信するスレッドが、キューの容量がなくなるまでブロックするかどうか。デフォルトでは、キューがいっぱいであることを示す例外が出力されます。このオプションを有効にすると、呼び出しスレッドは代わりにブロックされ、メッセージが受け入れられるまで待機します。

false

boolean

defaultDiscardWhenFull (producer)

満杯の SEDA キューにメッセージを送信するスレッドを破棄するかどうか。デフォルトでは、キューがいっぱいであることを示す例外が出力されます。このオプションを有効にすると、呼び出しスレッドは送信を中止して続行します。つまり、メッセージは SEDA キューに送信されませんでした。

false

boolean

defaultOfferTimeout (producer)

満杯の SEDA キューにメッセージを送信するスレッドが、キューの容量がなくなるまでブロックするかどうか。デフォルトでは、キューがいっぱいであることを示す例外が出力されます。このオプションを有効にすると、設定されたタイムアウトをブロックケースに追加できます。下線部の Java キューの .offer(timeout) メソッドを利用します。

 

long

lazyStartProducer (producer)

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

false

boolean

autowiredEnabled (上級)

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

boolean

defaultQueueFactory (advanced)

デフォルトのキューファクトリーを設定します。

 

BlockingQueueFactory

queueSize (上級)

SEDA キューのデフォルトの最大容量 (つまり、保持できるメッセージの数) を設定します。

1000

int

49.4. エンドポイントオプション

Stub エンドポイントは、URI 構文を使用して設定されます。

stub:name

パスおよびクエリーパラメーターを使用します。

49.4.1. パスパラメーター(1 パラメーター)

Name説明デフォルトタイプ

name (共通)

必須 キューの名前。

 

String

49.4.2. クエリーパラメーター (18 パラメーター)

Name説明デフォルトタイプ

size (common)

SEDA キューの最大容量 (つまり、保持できるメッセージの数)。デフォルトでは、SEDA コンポーネントに設定された defaultSize を使用します。

1000

int

bridgeErrorHandler (consumer)

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

false

boolean

concurrentConsumers (consumer)

エクスチェンジを処理する同時スレッドの数。

1

int

exceptionHandler (consumer (上級))

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

 

ExceptionHandler

exchangePattern (consumer (上級))

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

列挙値:

  • InOnly
  • InOut
  • InOptionalOut
 

ExchangePattern

limitConcurrentConsumers (consumer (上級))

concurrentConsumers の数を最大 500 に制限するかどうか。デフォルトでは、エンドポイントがより大きな数で設定されている場合、例外が出力されます。このチェックを無効にするには、このオプションをオフにします。

true

boolean

multipleConsumers (consumer (上級))

複数の consumer を許可するかどうかを指定します。有効にすると、Publish-Subscribe メッセージングに SEDA を使用できます。つまり、メッセージを SEDA キューに送信し、各 consumer にメッセージのコピーを受信させることができます。有効にすると、このオプションはすべての consumerエンドポイントで指定する必要があります。

false

boolean

pollTimeout (consumer (上級))

ポーリング時に使用されるタイムアウト (ミリ秒単位)。タイムアウトが発生すると、consumer は実行を継続できるかどうかを確認できます。値を低く設定すると、シャットダウン時に consumer がより迅速に対応できるようになります。

1000

int

purgeWhenStopping (consumer (上級))

consumer/ルートを停止するときにタスクキューをパージするかどうか。これにより、キューに保留中のメッセージが破棄されるため、より迅速に停止できます。

false

boolean

blockWhenFull (producer)

満杯の SEDA キューにメッセージを送信するスレッドが、キューの容量がなくなるまでブロックするかどうか。デフォルトでは、キューがいっぱいであることを示す例外が出力されます。このオプションを有効にすると、呼び出しスレッドは代わりにブロックされ、メッセージが受け入れられるまで待機します。

false

boolean

discardIfNoConsumers (producer)

アクティブな consumer のないキューに送信するときに、producer がメッセージを破棄する (メッセージをキューに追加しない) かどうか。discardIfNoConsumers オプションと failIfNoConsumers オプションのうち、同時に有効にできるのは 1 つだけです。

false

boolean

discardWhenFull (producer)

満杯の SEDA キューにメッセージを送信するスレッドを破棄するかどうか。デフォルトでは、キューがいっぱいであることを示す例外が出力されます。このオプションを有効にすると、呼び出しスレッドは送信を中止して続行します。つまり、メッセージは SEDA キューに送信されませんでした。

false

boolean

failIfNoConsumers (producer)

アクティブな consumer のないキューに送信するときに、producer が例外を出力して失敗するかどうか。discardIfNoConsumers オプションと failIfNoConsumers オプションのうち、同時に有効にできるのは 1 つだけです。

false

boolean

lazyStartProducer (producer)

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

false

boolean

offerTimeout (producer)

キューがいっぱいの場合、オファータイムアウト (ミリ秒単位) をブロックケースに追加できます。0 または負の値を使用して、タイムアウトを無効にすることができます。

 

long

timeout (producer)

SEDA producer が非同期タスクの完了の待機を停止するまでのタイムアウト (ミリ秒単位)。0 または負の値を使用して、タイムアウトを無効にすることができます。

30000

long

waitForTaskToComplete (producer)

続行する前に呼び出し元が非同期タスクの完了を待つかどうかを指定するオプション。次の 3 つのオプションがサポートされています: Always、Never、または IfReplyExpected。最初の 2 つの値は一目瞭然です。最後の値 IfReplyExpected は、メッセージが Request Reply ベースの場合にのみ待機します。デフォルトのオプションは IfReplyExpected です。

列挙値:

  • Never
  • IfReplyExpected
  • Always

IfReplyExpected

WaitForTaskToComplete

queue (advanced)

エンドポイントで使用されるキューインスタンスを定義します。

 

BlockingQueue

49.5. 例

エンドポイント URI の stub 化のサンプルをいくつか示します。

stub:smtp://somehost.foo.com?user=whatnot&something=else
stub:http://somehost.bar.com/something

49.6. Spring Boot 自動設定

Spring Boot で stub を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-stub-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 11 のオプションをサポートします。

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

camel.component.stub.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.stub.bridge-error-handler

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

false

ブール値

camel.component.stub.concurrent-consumers

交換を処理する同時スレッドのデフォルト数を設定します。

1

Integer

camel.component.stub.default-block-when-full

満杯の SEDA キューにメッセージを送信するスレッドが、キューの容量がなくなるまでブロックするかどうか。デフォルトでは、キューがいっぱいであることを示す例外が出力されます。このオプションを有効にすると、呼び出しスレッドは代わりにブロックされ、メッセージが受け入れられるまで待機します。

false

ブール値

camel.component.stub.default-discard-when-full

満杯の SEDA キューにメッセージを送信するスレッドを破棄するかどうか。デフォルトでは、キューがいっぱいであることを示す例外が出力されます。このオプションを有効にすると、呼び出しスレッドは送信を中止して続行します。つまり、メッセージは SEDA キューに送信されませんでした。

false

ブール値

camel.component.stub.default-offer-timeout

満杯の SEDA キューにメッセージを送信するスレッドが、キューの容量がなくなるまでブロックするかどうか。デフォルトでは、キューがいっぱいであることを示す例外が出力されます。このオプションを有効にすると、設定されたタイムアウトをブロックケースに追加できます。下線部の Java キューの .offer(timeout) メソッドを利用します。

 

Long

camel.component.stub.default-poll-timeout

ポーリング時に使用されるタイムアウト (ミリ秒単位)。タイムアウトが発生すると、consumer は実行を継続できるかどうかを確認できます。値を低く設定すると、シャットダウン時に consumer がより迅速に対応できるようになります。

1000

Integer

camel.component.stub.default-queue-factory

デフォルトのキューファクトリーを設定します。オプションは org.apache.camel.component.seda.BlockingQueueFactory<org.apache.camel.Exchange> タイプです。

 

BlockingQueueFactory

camel.component.stub.enabled

stub コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.stub.lazy-start-producer

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

false

ブール値

camel.component.stub.queue-size

SEDA キューのデフォルトの最大容量 (つまり、保持できるメッセージの数) を設定します。

1000

Integer

第50章 Telegram

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

Telegram コンポーネントは、Telegram Bot API へのアクセスを提供します。これにより、Camel ベースのアプリケーションは、ボットとして機能し、通常のユーザー、プライベートおよびパブリックグループまたはチャネルとの直接の会話に参加して、メッセージを送受信できます。

このコンポーネントを使用する前に、Telegram Bot 開発者 ホームの指示に従って、Telegram Bot を作成する必要があります。新しいボットが作成されると、BotFather は ボットに対応する 認証トークン を提供します。認証トークンは、camel-telegram エンドポイントの必須パラメーターです。

注記

Bot がグループまたはチャネル内で交換されるすべてのメッセージ (/文字で始まるメッセージだけでなく) を受信できるようにするには、/setprivacy コマンドを使用して、BotFather に プライバシーモードを無効にするよう に依頼します。

Maven ユーザーは、このコンポーネントの pom.xml に以下の依存関係を追加する必要があります。

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-telegram</artifactId>
    <version>{CamelSBVersion}</version>
    <!-- use the same version as your Camel core version -->
</dependency>

50.1. URI 形式

telegram:type[?options]

50.2. オプションの設定

Camel コンポーネントは、以下の 2 つのレベルで設定されます。

  • コンポーネントレベル
  • エンドポイントレベル

50.2.1. コンポーネントオプションの設定

コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。

コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。

コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。

50.2.2. エンドポイントオプションの設定

多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。

エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。

オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。

以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。

50.3. コンポーネントオプション

Telegram コンポーネントは、以下に示す 7 つのオプションをサポートしています。

Name説明デフォルトタイプ

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

baseUri (advanced)

コンポーネントをモック Telegram API に対してテストする場合などに、代替のベース URI を設定するために使用できます。

 

String

client (上級)

カスタム AsyncHttpClient を使用するには。

 

AsyncHttpClient

clientConfig (上級)

カスタム com.ning.http.client.AsyncHttpClientConfig インスタンスを使用するように AsyncHttpClient を設定するには。

 

AsyncHttpClientConfig

authorizationToken (セキュリティー)

エンドポイントで情報が提供されない場合に使用されるデフォルトの Telegram 認証トークン。

 

String

50.4. エンドポイントオプション

Telegram エンドポイントは、URI 構文を使用して設定されます。

telegram:type

パスおよびクエリーパラメーターを使用します。

50.4.1. パスパラメーター(1 パラメーター)

Name説明デフォルトタイプ

type (共通)

必須 エンドポイントのタイプ。現在、ボットタイプのみがサポートされています。

列挙値:

  • bots
 

String

50.4.2. クエリーパラメーター (30 パラメーター)

Name説明デフォルトタイプ

bridgeErrorHandler (consumer)

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

false

boolean

limit (consumer)

1 回のポーリングリクエストで受信できる更新の数を制限します。

100

Integer

sendEmptyMessageWhenIdle (consumer)

ポーリング consumer がファイルをポーリングしなかった場合、このオプションを有効にして、代わりに空のメッセージ (ボディーなし) を送信できます。

false

boolean

timeout (consumer)

ロングポーリングのタイムアウト (秒単位)。ショートポーリングの場合は 0 を、ロングポーリングの場合はより大きな数を入力します。ポーリングが長いと、応答時間が短くなります。

30

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

chatId (producer)

生成されたメッセージを受け取るチャットの識別子。チャット ID は、最初に着信メッセージから取得できます (たとえば、テレグラムユーザーがボットとの会話を開始すると、そのクライアントはチャット ID を含む/start メッセージを自動的に送信します)。チャット ID は送信メッセージごとに (本文またはヘッダーを使用して) 動的に設定できるため、オプションのパラメーターです。

 

String

lazyStartProducer (producer)

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

false

boolean

baseUri (advanced)

コンポーネントをモック Telegram API に対してテストする場合などに、代替のベース URI を設定するために使用できます。

 

String

bufferSize (上級)

Camel と AHC クライアントの間でデータを転送するときに使用される初期メモリー内バッファーサイズ。

4096

int

clientConfig (上級)

カスタム com.ning.http.client.AsyncHttpClientConfig インスタンスを使用するように AsyncHttpClient を設定するには。

 

AsyncHttpClientConfig

proxyHost (プロキシー)

メッセージの送信時に使用できる HTTP プロキシーホスト。

 

String

proxyPort (プロキシー)

メッセージの送信時に使用できる HTTP プロキシーポート。

 

Integer

proxyType (プロキシー)

メッセージの送信時に使用できる HTTP プロキシータイプ。

列挙値:

  • HTTP
  • SOCKS4
  • SOCKS5

HTTP

TelegramProxyType

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

authorizationToken (セキュリティー)

必須 ボットを使用するための認証トークン (BotFather に問い合わせてください)。

 

String

50.4.3. メッセージヘッダー

名前説明

CamelTelegramChatId

このヘッダーは、メッセージを受信するチャット ID を解決するために producer エンドポイントによって使用されます。受信者のチャット ID は、メッセージ本文、CamelTelegramChatId ヘッダー、またはエンドポイント設定 (chatId オプション) に (優先度順に) 配置できます。このヘッダーは、すべての受信メッセージにも存在します。

CamelTelegramMediaType

このヘッダーは、送信メッセージが純粋なバイナリーデータで設定されている場合にメディアタイプを識別するために使用されます。可能な値は、org.apache.camel.component.telegram.TelegramMediaType 列挙に属する文字列または列挙値です。

CamelTelegramMediaTitleCaption

このヘッダーは、発信バイナリーメッセージのキャプションまたはタイトルを提供するために使用されます。

CamelTelegramParseMode

このヘッダーは、HTML または Markdown を使用してテキストメッセージをフォーマットするために使用されます (org.apache.camel.component.telegram.TelegramParseMode を参照)。

50.5. 用途

Telegram コンポーネントは、producer エンドポイントと producer エンドポイントの両方をサポートします。また、リアクティブチャットボットモード で使用することもできます (メッセージを消費してから生成するため)。

50.6. producer の例

以下は、Telegram Bot API を介して Telegram チャットにメッセージを送信する方法の基本的な例です。

Java DSL で

from("direct:start").to("telegram:bots?authorizationToken=123456789:insertYourAuthorizationTokenHere");

または Spring XML で

<route>
    <from uri="direct:start"/>
    <to uri="telegram:bots?authorizationToken=123456789:insertYourAuthorizationTokenHere"/>
<route>

コード 123456789:insertYourAuthorizationTokenHere ボットに対応する 認証トークン です。

チャット ID オプションを指定せずに producer エンドポイントを使用すると、メッセージの本文またはヘッダーに含まれる情報を使用してターゲットチャットが識別されます。次のメッセージ本文は producer エンドポイントで許可されます (タイプ OutgoingXXXMessage のメッセージはパッケージ org.apache.camel.component.telegram.model に属します)

Java タイプ説明

OutgoingTextMessage

チャットにテキストメッセージを送信するには

OutgoingPhotoMessage

写真 (JPG、PNG) をチャットに送信するには

OutgoingAudioMessage

mp3 オーディオをチャットに送信するには

OutgoingVideoMessage

mp4 ビデオをチャットに送信するには

OutgoingDocumentMessage

チャットにファイルを送信するには (任意のメディアタイプ)

OutgoingStickerMessage

スタンプをチャットに送信するには (WEBP)

OutgoingAnswerInlineQuery

インラインクエリーに回答を送信するには

EditMessageTextMessage

テキストとゲームメッセージを編集するには (editMessageText)

EditMessageCaptionMessage

メッセージのキャプションを編集するには (editMessageCaption)

EditMessageMediaMessage

アニメーション、オーディオ、ドキュメント、写真、またはビデオメッセージを編集するため。(編集メッセージメディア)

EditMessageReplyMarkupMessage

メッセージの返信マークアップのみを編集します。(編集メッセージ返信マークアップ)

EditMessageDelete

サービスメッセージを含むメッセージを削除するには。(メッセージを削除)

SendLocationMessage

場所を送信するには (setSendLocation)

EditMessageLiveLocationMessage

変更をライブロケーションに送信するには (editMessageLiveLocation)

StopMessageLiveLocationMessage

live_period が期限切れになる前に、ボットまたはボット (インラインボットの場合) を介して送信されたライブロケーションメッセージの更新を停止するには (stopMessageLiveLocation)

SendVenueMessage

venue に関する情報を送信するには (sendVenue)

byte[]

サポートされている任意のメディアタイプを送信します。CamelTelegramMediaType ヘッダーを適切なメディアタイプに設定する必要があります。

String

チャットにテキストメッセージを送信します。自動的に OutgoingTextMessage に変換されます

50.7. consumer の例

以下は、テレグラムユーザーが設定済みボットに送信するすべてのメッセージを受信する方法の基本的な例です。Java DSL で

from("telegram:bots?authorizationToken=123456789:insertYourAuthorizationTokenHere")
.bean(ProcessorBean.class)

または Spring XML で

<route>
    <from uri="telegram:bots?authorizationToken=123456789:insertYourAuthorizationTokenHere"/>
    <bean ref="myBean" />
<route>

<bean id="myBean" class="com.example.MyBean"/>

MyBean は、メッセージを受け取る単純な Bean です。

public class MyBean {

    public void process(String message) {
        // or Exchange, or org.apache.camel.component.telegram.model.IncomingMessage (or both)

        // do process
    }

}

着信メッセージでサポートされているタイプは次のとおりです。

Java タイプ説明

IncomingMessage

着信メッセージの完全なオブジェクト表現

String

メッセージの内容 (テキストメッセージのみ)

50.8. リアクティブなチャットボットの例

リアクティブチャットボットモードは、Camel コンポーネントを使用して、Telegram ユーザーから受信したチャットメッセージに直接返信する単純なチャットボットを構築する簡単な方法です。

以下は、Java DSL でのチャットボットの基本設定です。

from("telegram:bots?authorizationToken=123456789:insertYourAuthorizationTokenHere")
.bean(ChatBotLogic.class)
.to("telegram:bots?authorizationToken=123456789:insertYourAuthorizationTokenHere");

または Spring XML で

<route>
    <from uri="telegram:bots?authorizationToken=123456789:insertYourAuthorizationTokenHere"/>
    <bean ref="chatBotLogic" />
    <to uri="telegram:bots?authorizationToken=123456789:insertYourAuthorizationTokenHere"/>
<route>

<bean id="chatBotLogic" class="com.example.ChatBotLogic"/>

ChatBotLogic は、汎用の String-to-String メソッドを実装する単純な Bean です。

public class ChatBotLogic {

    public String chatBotProcess(String message) {
        if( "do-not-reply".equals(message) ) {
            return null; // no response in the chat
        }

        return "echo from the bot: " + message; // echoes the message
    }

}

chatBotProcess メソッドによって返されるすべての非 null 文字列は、リクエストを発信したチャットに自動的にルーティングされます (メッセージのルーティングには CamelTelegramChatId ヘッダーが使用されるため)。

50.9. チャット ID の取得

イベントが発生したときに特定のテレグラムチャットにメッセージをプッシュする場合は、対応するチャット ID を取得する必要があります。チャット ID は現在テレグラムクライアントに表示されていませんが、簡単なルートを使用して取得できます。

まず、メッセージをプッシュするチャットにボットを追加してから、次のようなルートを実行します。

from("telegram:bots?authorizationToken=123456789:insertYourAuthorizationTokenHere")
.to("log:INFO?showHeaders=true");

ボットが受信したメッセージは、チャットに関する情報 (CamelTelegramChatId ヘッダー) と共にログにダンプされます。

チャット ID を取得したら、次のサンプルルートを使用してメッセージをプッシュできます。

from("timer:tick")
.setBody().constant("Hello")
to("telegram:bots?authorizationToken=123456789:insertYourAuthorizationTokenHere&chatId=123456")

対応する URI パラメーターは単純に chatId であることに注意してください。

50.10. キーボードのカスタマイズ

オプションを記述するように依頼する代わりに、ユーザーキーボードをカスタマイズできます。OutgoingTextMessage に は、このような目的で使用できる ReplyMarkup プロパティーがあります。

from("telegram:bots?authorizationToken=123456789:insertYourAuthorizationTokenHere")
    .process(exchange -> {

        OutgoingTextMessage msg = new OutgoingTextMessage();
        msg.setText("Choose one option!");

        InlineKeyboardButton buttonOptionOneI = InlineKeyboardButton.builder()
                .text("Option One - I").build();

        InlineKeyboardButton buttonOptionOneII = InlineKeyboardButton.builder()
                .text("Option One - II").build();

        InlineKeyboardButton buttonOptionTwoI = InlineKeyboardButton.builder()
                .text("Option Two - I").build();

        ReplyKeyboardMarkup replyMarkup = ReplyKeyboardMarkup.builder()
                .keyboard()
                    .addRow(Arrays.asList(buttonOptionOneI, buttonOptionOneII))
                    .addRow(Arrays.asList(buttonOptionTwoI))
                    .close()
                .oneTimeKeyboard(true)
                .build();

        msg.setReplyMarkup(replyMarkup);

        exchange.getIn().setBody(msg);
    })
    .to("telegram:bots?authorizationToken=123456789:insertYourAuthorizationTokenHere");

無効にする場合は、次のメッセージで ReplyKeyboardMarkup オブジェクトにプロパティー removeKeyboard を設定する必要があります。

from("telegram:bots?authorizationToken=123456789:insertYourAuthorizationTokenHere")
    .process(exchange -> {

        OutgoingTextMessage msg = new OutgoingTextMessage();
        msg.setText("Your answer was accepted!");

        ReplyKeyboardMarkup replyMarkup = ReplyKeyboardMarkup.builder()
                .removeKeyboard(true)
                .build();

        msg.setReplyKeyboardMarkup(replyMarkup);

        exchange.getIn().setBody(msg);
    })
    .to("telegram:bots?authorizationToken=123456789:insertYourAuthorizationTokenHere");

50.11. Webhook モード

Telegram コンポーネントは、camel-webhook コンポーネントを使用した Webhook モード での使用をサポートしています。

Webhook モードを有効にするには、まずアプリケーションに REST 実装を追加する必要があります。たとえば、Maven ユーザーは、netty-httppom.xml ファイルに追加できます。

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-netty-http</artifactId>
    <version>{CamelSBVersion}</version>
    <!-- use the same version as your Camel core version -->
</dependency>

完了したら、使用するテレグラム URI の先頭に Webhook URI を追加する必要があります。

Java DSL で:

from("webhook:telegram:bots?authorizationToken=123456789:insertYourAuthorizationTokenHere").to("log:info");

一部のエンドポイントはアプリケーションによって公開され、Telegram はそれらにメッセージを送信するように設定されます。サーバーがインターネットに公開されていることを確認し、camel.component.webhook.configuration.webhook-external-url プロパティーの正しい値を渡す必要があります。

設定方法については、camel-webhook コンポーネントのドキュメントを参照してください。

50.12. Spring Boot 自動設定

Spring Boot で telegram を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-telegram-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 8 個のオプションをサポートします。

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

camel.component.telegram.authorization-token

エンドポイントで情報が提供されない場合に使用されるデフォルトの Telegram 認証トークン。

 

String

camel.component.telegram.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.telegram.base-uri

コンポーネントをモック Telegram API に対してテストする場合などに、代替のベース URI を設定するために使用できます。

 

String

camel.component.telegram.bridge-error-handler

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

false

ブール値

camel.component.telegram.client

カスタム AsyncHttpClient を使用するには。オプションは org.asynchttpclient です。AsyncHttpClient タイプ。

 

AsyncHttpClient

camel.component.telegram.client-config

カスタム com.ning.http.client.AsyncHttpClientConfig インスタンスを使用するように AsyncHttpClient を設定するには。オプションは org.asynchttpclient.AsyncHttpClientConfig タイプです。

 

AsyncHttpClientConfig

camel.component.telegram.enabled

Telegram コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.telegram.lazy-start-producer

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

false

ブール値

第51章 Timer

consumer のみがサポートされている

Timer コンポーネントは、タイマーが起動したときにメッセージエクスチェンジを生成するために使用されます。このエンドポイントからのイベントのみを使用できます。

51.1. URI 形式

timer:name[?options]

name は、エンドポイント間で作成および共有される Timer オブジェクトの名前です。したがって、すべてのタイマーエンドポイントに同じ名前を使用すると、Timer オブジェクトとスレッドは 1 つだけ使用されます。

注記

生成された交換の IN ボディーは null です。したがって、exchange.getIn().getBody()null を返します。

注記

高度なスケジューラー
より高度なスケジューリングをサポートする Quartz コンポーネントも参照してください。

51.2. オプションの設定

Camel コンポーネントは、以下の 2 つのレベルで設定されます。

  • コンポーネントレベル
  • エンドポイントレベル

51.2.1. コンポーネントオプションの設定

コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。

コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。

コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。

51.2.2. エンドポイントオプションの設定

多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。

エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。

オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。

以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。

51.3. コンポーネントオプション

Timer コンポーネントは、以下に示す 2 個のオプションをサポートします。

Name説明デフォルトタイプ

bridgeErrorHandler (consumer)

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

false

boolean

autowiredEnabled (上級)

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

boolean

51.4. エンドポイントオプション

Timer エンドポイントは、URI 構文を使用して設定されます。

timer:timerName

パスおよびクエリーパラメーターを使用します。

51.4.1. パスパラメーター(1 パラメーター)

Name説明デフォルトタイプ

timerName (consumer)

必須 タイマーの名前。

 

String

51.4.2. クエリーパラメーター (13 パラメーター)

Name説明デフォルトタイプ

bridgeErrorHandler (consumer)

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

false

boolean

delay (consumer)

最初のイベントがトリガーされるまでの遅延。

1000

long

fixedRate (consumer)

イベントは、指定された期間で区切られたほぼ一定の間隔で発生します。

false

boolean

includeMetadata (consumer)

起動時間、タイマー名、タイマーカウントなどのメタデータを交換に含めるかどうか。この情報はデフォルトで含まれています。

true

boolean

period (consumer)

0 より大きい場合、周期ごとに定期的なイベントを生成します。

1000

long

repeatCount (consumer)

実行の最大数を指定します。したがって、1 に設定すると、タイマーは 1 回だけ起動します。これを 5 に設定した場合、5 回だけ実行されます。0 または負の値を設定すると、無制限に実行されます。

 

long

exceptionHandler (consumer (上級))

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

 

ExceptionHandler

exchangePattern (consumer (上級))

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

列挙値:

  • InOnly
  • InOut
  • InOptionalOut
 

ExchangePattern

daemon (advanced)

タイマーエンドポイントに関連付けられたスレッドがデーモンとして実行されるかどうかを指定します。デフォルト値は true です。

true

boolean

pattern (advanced)

URI 構文を使用して時間オプションを設定するために使用するカスタムの日付パターンを指定できます。

 

String

synchronous (上級)

同期処理を厳密に使用するかどうかを設定します。

false

boolean

time (advanced)

最初のイベントが生成される java.util.Date。URI を使用する場合、予想されるパターンは次のとおりです: yyyy-MM-dd HH:mm:ss または yyyy-MM-dd'T'HH:mm:ss。

 

日付

timer (上級)

カスタムタイマーを使用するには。

 

Timer

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

タイマーが起動すると、次の情報がプロパティーとして Exchange に追加されます。

名前タイプ説明

Exchange.TIMER_NAME

String

name オプションの値。

Exchange.TIMER_TIME

日付

time オプションの値。

Exchange.TIMER_PERIOD

long

period オプションの値。

Exchange.TIMER_FIRED_TIME

日付

consumer が起動した時刻。

Exchange.TIMER_COUNTER

Long

現在の火災カウンター。1 から始まります。

51.6. 例

60 秒ごとにイベントを生成するルートを設定するには:

from("timer://foo?fixedRate=true&period=60000").to("bean:myBean?method=someMethodName");

上記のルートはイベントを生成し、レジストリー内の myBean と呼ばれる Bean で someMethodName メソッドを呼び出します。

そして、Spring DSL の経路:

<route>
  <from uri="timer://foo?fixedRate=true&amp;period=60000"/>
  <to uri="bean:myBean?method=someMethodName"/>
</route>

51.7. できるだけ早く起動

Camel 2.17 以降

Camel ルートでできるだけ早くメッセージを送信したい場合は、負の遅延を使用できます。

<route>
  <from uri="timer://foo?delay=-1"/>
  <to uri="bean:myBean?method=someMethodName"/>
</route>

このようにして、タイマーはすぐにメッセージを送信します。

また、repeatCount パラメーターを負の遅延と組み合わせて指定し、固定数に達した後にメッセージの送信を停止することもできます。

repeatCount を指定しない場合、タイマーはルートが停止するまでメッセージを発し続けます。

51.8. 起動は 1 回のみ

ルートの開始時など、Camel ルートでメッセージを 1 回だけ起動したい場合があります。これを行うには、次のように repeatCount オプションを使用します。

<route>
  <from uri="timer://foo?repeatCount=1"/>
  <to uri="bean:myBean?method=someMethodName"/>
</route>

51.9. Spring Boot 自動設定

Spring Boot で timer を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-timer-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 3 つのオプションをサポートします。

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

camel.component.timer.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.timer.bridge-error-handler

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

false

ブール値

camel.component.timer.enabled

タイマーコンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

第52章 バリデーター

producer のみサポート対象

Validation コンポーネントは、JAXP Validation API を使用し、サポートされている XML スキーマ言語のいずれかに基づいて、メッセージ本文の XML 検証を実行します。デフォルトは XML スキーマ です。

このコンポーネントは、次の便利なスキーマ言語もサポートしていることに注意してください。

MSV コンポーネントは、RelaxNG XML 構文もサポートしています。

52.1. URI 形式

validator:someLocalOrRemoteResource

someLocalOrRemoteResource は、クラスパス上のローカルリソースへの URL、または検証対象の XSD を含むファイルシステム上のリモートリソースまたはリソースへの完全な URL です。以下に例を示します。

  • msv:org/foo/bar.xsd
  • msv:file:../foo/bar.xsd
  • msv:http://acme.com/cheese.xsd
  • validator:com/mypackage/myschema.xsd

Validation コンポーネントは camel-core で直接提供されます。

52.2. オプションの設定

Camel コンポーネントは、以下の 2 つのレベルで設定されます。

  • コンポーネントレベル
  • エンドポイントレベル

52.2.1. コンポーネントオプションの設定

コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。

コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。

コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。

52.2.2. エンドポイントオプションの設定

多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。

エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。

オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。

以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。

52.3. コンポーネントオプション

Validator コンポーネントは、以下に示す 3 個のオプションをサポートします。

Name説明デフォルトタイプ

lazyStartProducer (producer)

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

false

boolean

autowiredEnabled (上級)

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

boolean

resourceResolverFactory (上級)

動的エンドポイントリソース URI に依存するカスタム LSResourceResolver を使用するには。

 

ValidatorResourceResolverFactory

52.4. エンドポイントオプション

Validator エンドポイントは URI 構文を使用して設定されます。

validator:resourceUri

パスおよびクエリーパラメーターを使用します。

52.4.1. パスパラメーター(1 パラメーター)

Name説明デフォルトタイプ

resourceUri (producer)

クラスパス上のローカルリソースへの 必須 URL、またはレジストリー内の Bean を検索するための参照、または検証対象の XSD を含むファイルシステム上のリモートリソースまたはリソースへの完全な URL。

 

String

52.4.2. クエリーパラメーター (10 パラメーター)

Name説明デフォルトタイプ

failOnNullBody (producer)

本文が存在しない場合に失敗するかどうか。

true

boolean

failOnNullHeader (producer)

ヘッダーに対して検証するときに、ヘッダーが存在しない場合に失敗するかどうか。

true

boolean

headerName (producer)

メッセージボディーではなくヘッダーに対して検証します。

 

String

lazyStartProducer (producer)

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

false

boolean

errorHandler (上級)

カスタム org.apache.camel.processor.validation.ValidatorErrorHandler を使用するには。デフォルトのエラーハンドラーはエラーをキャプチャし、例外を出力します。

 

ValidatorErrorHandler

resourceResolver (advanced)

カスタム LSResourceResolver を使用するには。resourceResolverFactory と一緒に使用しないでください。

 

LSResourceResolver

resourceResolverFactory (advanced)

動的エンドポイントリソース URI に依存するカスタム LSResourceResolver を使用するには。デフォルトのリソースリゾルバーファクトリーは、クラスパスとファイルシステムからファイルを読み取ることができるリソースリゾルバーを返します。resourceResolver と一緒に使用しないでください。

 

ValidatorResourceResolverFactory

schemaFactory (上級)

カスタム javax.xml.validation.SchemaFactory を使用するには。

 

SchemaFactory

schemaLanguage (advanced)

W3C XML スキーマの namespace URI を設定します。

http://www.w3.org/2001/XMLSchema

String

useSharedSchema (上級)

Schema インスタンスを共有するかどうか。このオプションは、JDK 1.6.x のバグを回避するために導入されました。Xerces にはこの問題はありません。

true

boolean

52.5. 例

次の は、エンドポイント direct:start からのルートを設定する方法を示しており、このルートは、XML が指定されたスキーマ (クラスパスで提供される) と一致するかどうかに基づいて、mock:valid または mock:invalid の 2 つのエンドポイントのいずれかに移動します。.

52.6. 高度: JMX メソッド clearCachedSchema

JMX オペレーション clearCachedSchema を使用して、バリデーターエンドポイントのキャッシュされたスキーマを強制的にクリアし、次のプロセス呼び出しで再読み込みすることができます。このメソッドを使用して、プログラムでキャッシュをクリアすることもできます。このメソッドは、ValidatorEndpoint クラスで使用できます。

52.7. Spring Boot 自動設定

Spring Boot で validator を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-validator-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 4 のオプションをサポートします。

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

camel.component.validator.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.validator.enabled

validator コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.validator.lazy-start-producer

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

false

ブール値

camel.component.validator.resource-resolver-factory

動的エンドポイントリソース URI に依存するカスタム LSResourceResolver を使用するには。オプションは org.apache.camel.component.validator.ValidatorResourceResolverFactory タイプです。

 

ValidatorResourceResolverFactory

第53章 Webhook

consumer のみがサポートされている

Webhook メタコンポーネントを使用すると、他の Camel コンポーネントがリモート Webhook プロバイダーで Webhook を設定し、それらをリッスンできます。

現在、次のコンポーネントが Webhook エンドポイントを提供しています。

  • Telegram

Maven ユーザーは、このコンポーネントの pom.xml に次の依存関係を追加できます。

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-webhook</artifactId>
    <version>{CamelSBVersion}</version>
    <!-- use the same version as your Camel core version -->
</dependency>

通常、Webhook をサポートする他のコンポーネントは、この依存関係を推移的にもたらします。

53.1. URI 形式

webhook:endpoint[?options]

53.2. オプションの設定

Camel コンポーネントは、以下の 2 つのレベルで設定されます。

  • コンポーネントレベル
  • エンドポイントレベル

53.2.1. コンポーネントオプションの設定

コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。

コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。

コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。

53.2.2. エンドポイントオプションの設定

多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。

エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。

オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。

以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。

53.3. コンポーネントオプション

Webhook コンポーネントは、以下に示す 8 つのオプションをサポートしています。

Name説明デフォルトタイプ

bridgeErrorHandler (consumer)

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

false

boolean

webhookAutoRegister (consumer)

起動時に Webhook を自動的に登録し、シャットダウン時に登録解除します。

true

boolean

webhookBasePath (consumer)

Webhook が公開される最初の (ベース) パス要素。権限のない第三者が推測できないように、ランダムな文字列に設定することをお勧めします。

 

String

webhookComponentName (consumer)

netty-http などの REST トランスポートに使用する Camel Rest コンポーネント。

 

String

webhookExternalUrl (consumer)

Webhook プロバイダーから見た現在のサービスの URL。

 

String

webhookPath (consumer)

Webhook エンドポイントが公開されるパス (存在する場合は、basePath に対する相対パス)。

 

String

autowiredEnabled (上級)

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

boolean

configuration (上級)

Webhook メタコンポーネントのデフォルト設定を設定します。

 

WebhookConfiguration

53.4. エンドポイントオプション

Webhook エンドポイントは、URI 構文を使用して設定されます。

webhook:endpointUri

パスおよびクエリーパラメーターを使用します。

53.4.1. パスパラメーター(1 パラメーター)

Name説明デフォルトタイプ

endpointUri (consumer)

必須 デリゲート uri。Webhook をサポートするコンポーネントに属している必要があります。

 

String

53.4.2. クエリーパラメーター (8 パラメーター)

Name説明デフォルトタイプ

bridgeErrorHandler (consumer)

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

false

boolean

webhookAutoRegister (consumer)

起動時に Webhook を自動的に登録し、シャットダウン時に登録解除します。

true

boolean

webhookBasePath (consumer)

Webhook が公開される最初の (ベース) パス要素。権限のない第三者が推測できないように、ランダムな文字列に設定することをお勧めします。

 

String

webhookComponentName (consumer)

netty-http などの REST トランスポートに使用する Camel Rest コンポーネント。

 

String

webhookExternalUrl (consumer)

Webhook プロバイダーから見た現在のサービスの URL。

 

String

webhookPath (consumer)

Webhook エンドポイントが公開されるパス (存在する場合は、basePath に対する相対パス)。

 

String

exceptionHandler (consumer (上級))

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

 

ExceptionHandler

exchangePattern (consumer (上級))

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

列挙値:

  • InOnly
  • InOut
  • InOptionalOut
 

ExchangePattern

53.5. 例

Webhook コンポーネントの例は、それをサポートするデリゲートコンポーネントのドキュメントに記載されています。

53.6. Spring Boot 自動設定

Spring Boot で webhook を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-webhook-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

このコンポーネントは、以下に示す 9 のオプションをサポートします。

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

camel.component.webhook.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.webhook.bridge-error-handler

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

false

ブール値

camel.component.webhook.configuration

Webhook メタコンポーネントのデフォルト設定を設定します。オプションは org.apache.camel.component.webhook.WebhookConfiguration タイプです。

 

WebhookConfiguration

camel.component.webhook.enabled

Webhook コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.webhook.webhook-auto-register

起動時に Webhook を自動的に登録し、シャットダウン時に登録解除します。

true

ブール値

camel.component.webhook.webhook-base-path

Webhook が公開される最初の (ベース) パス要素。権限のない第三者が推測できないように、ランダムな文字列に設定することをお勧めします。

 

String

camel.component.webhook.webhook-component-name

netty-http などの REST トランスポートに使用する Camel Rest コンポーネント。

 

String

camel.component.webhook.webhook-external-url

Webhook プロバイダーから見た現在のサービスの URL。

 

String

camel.component.webhook.webhook-path

Webhook エンドポイントが公開されるパス (存在する場合は、basePath に対する相対パス)。

 

String

第54章 XSLT

producer のみサポート対象

XSLT コンポーネントを使用すると、XSLT テンプレートを使用してメッセージを処理できます。これは、Templating を使用してリクエストに対するレスポンスを生成する場合に理想的です。

54.1. URI 形式

xslt:templateName[?options]

URI 形式には、次のいずれかの templateName が含まれます。

  • 呼び出すテンプレートのクラスパ出力ローカル URI
  • リモートテンプレートの完全な URL。

URI には、次の形式でクエリーオプションを追加できます。

?option=value&option=value&…​

表54.1 表 1.URI の例

URI説明

xslt:com/acme/mytransform.xsl

クラスパス上のファイル com/acme/mytransform.xsl を参照します

xslt:file:///foo/bar.xsl

ファイル /foo/bar.xsl を参照します

xslt:http://acme.com/cheese/foo.xsl

リモート http リソースを参照します

54.2. オプションの設定

Camel コンポーネントは、以下の 2 つのレベルで設定されます。

  • コンポーネントレベル
  • エンドポイントレベル

54.2.1. コンポーネントオプションの設定

コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。

コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。

コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。

54.2.2. エンドポイントオプションの設定

多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントが consumer (from) または producer (to) として使用されるか、または両方に使用されるかにも分類されます。

エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。

オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。

以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。

54.3. コンポーネントオプション

XSLT コンポーネントは、以下に示す 7 個のオプションをサポートしています。

Name説明デフォルトタイプ

contentCache (producer)

ロード時のリソースコンテンツ (スタイルシートファイル) のキャッシュ。false に設定すると、Camel は各メッセージ処理でスタイルシートファイルをリロードします。これは開発に適しています。キャッシュされたスタイルシートは、clearCachedStylesheet 操作を使用して、JMX 経由で実行時に強制的に再読み込みできます。

true

boolean

lazyStartProducer (producer)

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

false

boolean

autowiredEnabled (上級)

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

boolean

transformerFactoryClass (上級)

カスタム XSLT トランスフォーマーファクトリーを使用するには、FQN クラス名として指定します。

 

String

transformerFactoryConfigurationStrategy (上級)

新しく作成された TransformerFactory のインスタンスに適用する設定戦略。

 

TransformerFactoryConfigurationStrategy

uriResolver (上級)

カスタム UriResolver を使用するには。オプション uriResolverFactory と一緒に使用しないでください。

 

URIResolver

uriResolverFactory (上級)

動的エンドポイントリソース URI に依存するカスタム UriResolver を使用するには。オプション uriResolver と一緒に使用しないでください。

 

XsltUriResolverFactory

54.4. エンドポイントオプション

XSLT エンドポイントは、URI 構文を使用して設定されます。

xslt:resourceUri

パスおよびクエリーパラメーターを使用します。

54.4.1. パスパラメーター(1 パラメーター)

Name説明デフォルトタイプ

resourceUri (producer)

テンプレートへの 必須 パス。以下は、デフォルトの URIResolver でサポートされています。プリフィックスには、classpath、file、http、ref、または bean. classpath、file、http を付けることができます (classpath はデフォルト)。ref は、レジストリーでリソースを検索します。Bean は、リソースとして使用される Bean のメソッドを呼び出します。Bean の場合は、ドットの後にメソッド名を指定できます (例:bean:myBean.myMethod)。

 

String

54.4.2. クエリーパラメーター (13 パラメーター)

Name説明デフォルトタイプ

contentCache (producer)

ロード時のリソースコンテンツ (スタイルシートファイル) のキャッシュ。false に設定すると、Camel は各メッセージ処理でスタイルシートファイルをリロードします。これは開発に適しています。キャッシュされたスタイルシートは、clearCachedStylesheet 操作を使用して、JMX 経由で実行時に強制的に再読み込みできます。

true

boolean

deleteOutputFile (producer)

output=file を指定した場合、このオプションは、エクスチェンジの処理が完了したときに出力ファイルを削除するかどうかを指定します。たとえば、出力ファイルが一時ファイルである場合、使用後に削除することをお勧めします。

false

boolean

failOnNullBody (producer)

入力本文が null の場合に例外を出力するかどうか。

true

boolean

lazyStartProducer (producer)

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

false

boolean

output (producer)

使用する出力タイプを指定するオプション。可能な値は次のとおりです: 文字列、バイト、DOM、ファイル。最初の 3 つのオプションはすべてメモリーベースであり、ファイルは直接 java.io.File にストリーミングされます。ファイルの場合、キー Exchange.XSLT_FILE_NAME を使用して IN ヘッダーにファイル名を指定する必要があります。これは CamelXsltFileName でもあります。また、ファイル名につながるパスは事前に作成する必要があります。そうしないと、実行時に例外が出力されます。

列挙値:

  • string
  • bytes
  • DOM
  • file

string

XsltOutput

transformerCacheSize (producer)

Template.newTransformer() の呼び出しを避けるため、再利用のためにキャッシュされる javax.xml.transform.Transformer オブジェクトの数。

0

int

entityResolver (上級)

javax.xml.transform.sax.SAXSource でカスタム org.xml.sax.EntityResolver を使用するには。

 

EntityResolver

errorListener (advanced)

カスタム javax.xml.transform.ErrorListener を使用するように設定できます。これを行うときは、エラーまたは致命的なエラーをキャプチャし、プロパティーとして Exchange に情報を格納するデフォルトのエラーリスナが使用されていないことに注意してください。したがって、このオプションは特別なユースケースにのみ使用してください。

 

ErrorListener

resultHandlerFactory (advanced)

カスタム org.apache.camel.builder.xml.ResultHandlerFactory を使用できるようにします。これは、カスタム org.apache.camel.builder.xml.ResultHandler 型を使用できるようにします。

 

ResultHandlerFactory

transformerFactory (上級)

カスタム XSLT トランスフォーマーファクトリーを使用するためのものです。

 

TransformerFactory

transformerFactoryClass (上級)

カスタム XSLT トランスフォーマーファクトリーを使用するには、FQN クラス名として指定します。

 

String

transformerFactoryConfigurationStrategy (上級)

新しく作成された TransformerFactory のインスタンスに適用する設定戦略。

 

TransformerFactoryConfigurationStrategy

uriResolver (上級)

カスタム javax.xml.transform.URIResolver を使用するためのものです。

 

URIResolver

54.5. XSLT エンドポイントの使用

次の形式は、XSLT テンプレートを使用して、InOut メッセージ交換 (JMSReplyTo ヘッダーがある場合) のメッセージに対する応答を作成する例です。

from("activemq:My.Queue").
  to("xslt:com/acme/mytransform.xsl");

InOnly を使用してメッセージを消費し、別の宛先に送信する場合は、次のルートを使用できます。

from("activemq:My.Queue").
  to("xslt:com/acme/mytransform.xsl").
  to("activemq:Another.Queue");

54.6. 使用可能なパラメーターの XSLT への取り込み

デフォルトでは、すべてのヘッダーがパラメーターとして追加され、XSLT で使用できるようになります。
パラメーターを使用可能にするには、そのパラメーターを宣言する必要があります。

<setHeader name="myParam"><constant>42</constant></setHeader>
<to uri="xslt:MyTransform.xsl"/>

また、パラメーターを使用できるようにするには、XSLT の最上位レベルでパラメーターを宣言する必要もあります。

<xsl: ...... >

   <xsl:param name="myParam"/>

    <xsl:template ...>

54.7. Spring XML バージョン

上記の例を Spring XML で使用するには、次のようなコードを使用します。

  <camelContext xmlns="http://activemq.apache.org/camel/schema/spring">
    <route>
      <from uri="activemq:My.Queue"/>
      <to uri="xslt:org/apache/camel/spring/processor/example.xsl"/>
      <to uri="activemq:Another.Queue"/>
    </route>
  </camelContext>

54.8. xsl:include の使用

Camel は URIResolver の独自の実装を提供します。これにより、Camel はクラスパスからインクルードファイルをロードできます。

たとえば、次のコードのインクルードファイルは、開始エンドポイントの相対パスに配置されます。

<xsl:include href="staff_template.xsl"/>

つまり、Camel は org/apache/camel/component/xslt/staff_template.xslクラスパス にファイルを配置します。

classpath: または file: を使用して、Camel にクラスパスまたはファイルシステムのいずれかを検索するように指示できます。接頭辞を省略した場合には、Camel はエンドポイント設定の接頭辞を使用します。エンドポイント設定で接頭辞が指定されていない場合、デフォルトは classpath: です。

インクルードパスで後方参照することもできます。次の例では、xsl ファイルは org/apache/camel/component の下で解決されます。

    <xsl:include href="../staff_other_template.xsl"/>

54.9. xsl:include とデフォルトの接頭辞の使用

Camel は、エンドポイント設定の接頭辞をデフォルトの接頭辞として使用します。

file: または classpath: の読み込みを明示的に指定できます。必要に応じて、2 つの読み込みタイプを XSLT スクリプトで混在させることができます。

54.10. 動的スタイルシート

実行時に動的スタイルシートを提供するために、動的 URI を定義できます。詳細は to() で動的 URI を使用する方法 を参照してください。

54.11. XSLT ErrorListener からの警告、エラー、および致命的なエラーへのアクセス

すべての警告/エラーまたは致命的エラーは、キーが Exchange.XSLT_ERRORExchange.XSLT_FATAL_ERROR、または Exchange.XSLT_WARNING のプロパティーとして現在の Exchange に格納されるので、エンドユーザーは変換中に発生したエラーを把握できます。

たとえば、以下のスタイルシートでは、スタッフに Dob フィールドがある場合には終了していきます。また、xsl:message を使用してカスタムエラーメッセージを含めます。

<xsl:template match="/">
  <html>
    <body>
      <xsl:for-each select="staff/programmer">
        <p>Name: <xsl:value-of select="name"/><br />
          <xsl:if test="dob=''">
            <xsl:message terminate="yes">Error: DOB is an empty string!</xsl:message>
          </xsl:if>
        </p>
      </xsl:for-each>
    </body>
  </html>
</xsl:template>

例外は、キーが Exchange.XSLT_WARNING. の警告として Exchange に保存されます。

54.12. Spring Boot 自動設定

Spring Boot で xslt を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-xslt-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- use the same version as your Camel core version -->
</dependency>

コンポーネントは、以下に記載される 8 個のオプションをサポートします。

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

camel.component.xslt.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.xslt.content-cache

ロード時のリソースコンテンツ (スタイルシートファイル) のキャッシュ。false に設定すると、Camel は各メッセージ処理でスタイルシートファイルをリロードします。これは開発に適しています。キャッシュされたスタイルシートは、clearCachedStylesheet 操作を使用して、JMX 経由で実行時に強制的に再読み込みできます。

true

ブール値

camel.component.xslt.enabled

xslt コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.xslt.lazy-start-producer

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

false

ブール値

camel.component.xslt.transformer-factory-class

カスタム XSLT トランスフォーマーファクトリーを使用するには、FQN クラス名として指定します。

 

String

camel.component.xslt.transformer-factory-configuration-strategy

新しく作成された TransformerFactory のインスタンスに適用する設定戦略。オプションは org.apache.camel.component.xslt.TransformerFactoryConfigurationStrategy タイプです。

 

TransformerFactoryConfigurationStrategy

camel.component.xslt.uri-resolver

カスタム UriResolver を使用するには。オプション uriResolverFactory と一緒に使用しないでください。オプションは javax.xml.transform.URIResolver タイプです。

 

URIResolver

camel.component.xslt.uri-resolver-factory

動的エンドポイントリソース URI に依存するカスタム UriResolver を使用するには。オプション uriResolver と一緒に使用しないでください。オプションは org.apache.camel.component.xslt.XsltUriResolverFactory タイプです。

 

XsltUriResolverFactory

第55章 Avro

このコンポーネントは、avro のデータ形式を提供するので、Apache Avro のバイナリーデータ形式を使用したメッセージのシリアル化と逆シリアル化が可能になります。Camel 3.2 以降、rpc 機能は別の camel-avro-rpc コンポーネントに移動されました。

Maven ユーザーは、このコンポーネントの pom.xml に以下の依存関係を追加する必要があります。

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-avro</artifactId>
    <version>{CamelSBVersion}</version>
    <!-- use the same version as your Camel core version -->
</dependency>

Maven、ant などを使用して、スキーマから簡単にクラスを生成できます。詳細には、Apache Avro のドキュメント を参照してください。

55.1. Avro データ形式オプション

Avro データ形式は、以下にリストされている 1 つのオプションをサポートしています。

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

instanceClassName

 

String

マーシャリングとアンマーシャリングに使用するクラス名。

55.2. Avro データ形式の使用

avro データ形式の使用は、ルートでマーシャリングまたはアンマーシャリングするクラスを指定するのと同様に簡単です。

AvroDataFormat format = new AvroDataFormat(Value.SCHEMA$);

from("direct:in").marshal(format).to("direct:marshal");
from("direct:back").unmarshal(format).to("direct:unmarshal");

ここで、値は Avro Maven プラグインで生成されたクラス

または XML です。

    <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
        <route>
            <from uri="direct:in"/>
            <marshal>
                <avro instanceClass="org.apache.camel.dataformat.avro.Message"/>
            </marshal>
            <to uri="log:out"/>
        </route>
    </camelContext>

別の方法として、コンテキスト内でデータ形式を指定し、ルートから参照することもできます。

    <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
         <dataFormats>
            <avro id="avro" instanceClass="org.apache.camel.dataformat.avro.Message"/>
        </dataFormats>
        <route>
            <from uri="direct:in"/>
            <marshal><custom ref="avro"/></marshal>
            <to uri="log:out"/>
        </route>
    </camelContext>

同じ方法で、avro データ形式を使用してアンマーシャリングできます。

55.3. Spring Boot 自動設定

Spring Boot で avro を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-avro-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 2 つのオプションをサポートします。

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

camel.dataformat.avro.enabled

avro データ形式の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.dataformat.avro.instance-class-name

マーシャリングとアンマーシャリングに使用するクラス名。

 

String

第56章 Avro Jackson

Jackson Avro は、Jackson ライブラリーAvro 拡張機能 を使用して、Avro ペイロードを Java オブジェクトにアンマーシャリングするか、Java オブジェクトを Avro ペイロードにマーシャリングするデータ形式です。

注記

Jackson に精通している場合、この Avro データ形式は対応する JSON と同じように動作するため、JSON シリアライゼーション/デシリアライゼーションのアノテーションが付けられたクラスで使用できます。

from("kafka:topic").
  unmarshal().avro(AvroLibrary.Jackson, JsonNode.class).
  to("log:info");

56.1. SchemaResolver の設定

Avro シリアル化はスキーマベースであるため、このデータ形式では、マーシャリング/アンマーシャリングされる各交換のスキーマを検索できる SchemaResolver オブジェクトを提供する必要があります。

単一の SchemaResolver をレジストリーに追加すると、自動的に検索されます。または、カスタム SchemaResolver への参照を明示的に指定できます。

56.2. Avro Jackson オプション

Avro Jackson データ形式は、以下に示す 18 のオプションをサポートしています。

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

objectMapper

 

String

Jackson を使用する場合は、指定された ID で既存の ObjectMapper を検索して使用します。

useDefaultObjectMapper

 

ブール値

レジストリーからデフォルトの Jackson ObjectMapper を検索して使用するかどうか。

unmarshalType

 

String

アンマーシャリング時に使用する Java 型のクラス名。

jsonView

 

String

POJO を JSON にマーシャリングする際に、JSON 出力から特定のフィールドを除外する場合があります。Jackson では、JSON ビューを使用してこれを実現できます。このオプションは、JsonView アノテーションを持つクラスを参照するためのものです。

include

 

String

pojo を JSON にマーシャリングする必要があり、pojo に null 値を持つフィールドがいくつかある場合。これらの null 値をスキップする場合は、このオプションを NON_NULL に設定できます。

allowJmsType

 

ブール値

JMS ユーザーが JMS 仕様の JMSType ヘッダーを使用して、アンマーシャリングに使用する FQN クラス名を指定できるようにするために使用されます。

collectionType

 

String

使用するレジストリーを参照するカスタムコレクションタイプを参照します。このオプションはあまり使用しないでください。ただし、デフォルトとして java.util.Collection に基づくものとは異なるコレクションタイプを使用できます。

useList

 

ブール値

Map の List または Pojo の List にアンマーシャリングします。

moduleClassNames

 

String

カスタム Jackson モジュール com.fasterxml.jackson.databind.Module を使用するには、FQN クラス名を持つ文字列として指定します。複数のクラスはコンマで区切ることができます。

moduleRefs

 

String

Camel レジストリーから参照されるカスタム Jackson モジュールを使用します。複数のモジュールはコンマで区切ることができます。

enableFeatures

 

String

Jackson com.fasterxml.jackson.databind.ObjectMapper で有効にする機能のセット。機能は、com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature、または com.fasterxml.jackson.databind.MapperFeature の列挙型と一致する名前である必要があります。複数の機能はコンマで区切ることができます。

disableFeatures

 

String

Jackson com.fasterxml.jackson.databind.ObjectMapper で無効にする機能のセット。機能は、com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature、または com.fasterxml.jackson.databind.MapperFeature の列挙型と一致する名前である必要があります。複数の機能はコンマで区切ることができます。

allowUnmarshallType

 

ブール値

有効にすると、Jackson はアンマーシャリング中に CamelJacksonUnmarshalType ヘッダーの使用を試みることができます。これは、使用する必要がある場合にのみ有効にする必要があります。

timezone

 

String

設定されている場合、Jackson はマーシャリング/アンマーシャリング時にタイムゾーンを使用します。

autoDiscoverObjectMapper

 

ブール値

true に設定すると、Jackson は objectMapper をレジストリーで検索します。

contentTypeHeader

 

ブール値

データ形式が Content-Type ヘッダーにデータ形式のタイプを設定する必要があるかどうか。たとえば、XML にマーシャリングするデータ形式の場合は application/xml、JSON にマーシャリングするデータ形式の場合は application/json です。

schemaResolver

 

String

転送中のデータのスキーマを検索するために使用されるオプションのスキーマリゾルバー。

autoDiscoverSchemaResolver

 

ブール値

無効にしない場合、SchemaResolver はレジストリーで検索されます。

56.3. カスタム AvroMapper の使用

マッピング設定をさらに制御する必要がある場合は、カスタム AvroMapper を使用するように JacksonAvroDataFormat を設定できます。

レジストリーに AvroMapper を 1 つ設定すると、Camel が自動的に検索し、この AvroMapper を使用します。

56.4. 依存関係

camel ルートで Avro Jackson を使用するには、このデータ形式を実装する camel-jackson-avro に依存関係を追加する必要があります。

Maven を使用する場合は、pom.xml に以下を追加するだけで、バージョン番号を最新かつ最高のリリースに置き換えます (最新バージョンのダウンロードページを参照してください)。

<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-jackson-avro</artifactId>
  <version>{CamelSBVersion}</version>
  <!-- use the same version as your Camel core version -->
</dependency>

56.5. Spring Boot 自動設定

Spring Boot で avro-jackson を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-jackson-avro-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 19 のオプションをサポートします。

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

camel.dataformat.avro-jackson.allow-jms-type

JMS ユーザーが JMS 仕様の JMSType ヘッダーを使用して、アンマーシャリングに使用する FQN クラス名を指定できるようにするために使用されます。

false

ブール値

camel.dataformat.avro-jackson.allow-unmarshall-type

有効にすると、Jackson はアンマーシャリング中に CamelJacksonUnmarshalType ヘッダーの使用を試みることができます。これは、使用する必要がある場合にのみ有効にする必要があります。

false

ブール値

camel.dataformat.avro-jackson.auto-discover-object-mapper

true に設定すると、Jackson は objectMapper をレジストリーで検索します。

false

ブール値

camel.dataformat.avro-jackson.auto-discover-schema-resolver

無効にしない場合、SchemaResolver はレジストリーで検索されます。

true

ブール値

camel.dataformat.avro-jackson.collection-type

使用するレジストリーを参照するカスタムコレクションタイプを参照します。このオプションはあまり使用しないでください。ただし、デフォルトとして java.util.Collection に基づくものとは異なるコレクションタイプを使用できます。

 

String

camel.dataformat.avro-jackson.content-type-header

データ形式が Content-Type ヘッダーにデータ形式のタイプを設定する必要があるかどうか。たとえば、XML にマーシャリングするデータ形式の場合は application/xml、JSON にマーシャリングするデータ形式の場合は application/json です。

true

ブール値

camel.dataformat.avro-jackson.disable-features

Jackson com.fasterxml.jackson.databind.ObjectMapper で無効にする機能のセット。機能は、com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature、または com.fasterxml.jackson.databind.MapperFeature の列挙型と一致する名前である必要があります。複数の機能はコンマで区切ることができます。

 

String

camel.dataformat.avro-jackson.enable-features

Jackson com.fasterxml.jackson.databind.ObjectMapper で有効にする機能のセット。機能は、com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature、または com.fasterxml.jackson.databind.MapperFeature の列挙型と一致する名前である必要があります。複数の機能はコンマで区切ることができます。

 

String

camel.dataformat.avro-jackson.enabled

avro-jackson データ形式の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.dataformat.avro-jackson.include

pojo を JSON にマーシャリングする必要があり、pojo に null 値を持つフィールドがいくつかある場合。これらの null 値をスキップする場合は、このオプションを NON_NULL に設定できます。

 

String

camel.dataformat.avro-jackson.json-view

POJO を JSON にマーシャリングする際に、JSON 出力から特定のフィールドを除外する場合があります。Jackson では、JSON ビューを使用してこれを実現できます。このオプションは、JsonView アノテーションを持つクラスを参照するためのものです。

 

String

camel.dataformat.avro-jackson.module-class-names

カスタム Jackson モジュール com.fasterxml.jackson.databind.Module を使用するには、FQN クラス名を持つ文字列として指定します。複数のクラスはコンマで区切ることができます。

 

String

camel.dataformat.avro-jackson.module-refs

Camel レジストリーから参照されるカスタム Jackson モジュールを使用します。複数のモジュールはコンマで区切ることができます。

 

String

camel.dataformat.avro-jackson.object-mapper

Jackson を使用する場合は、指定された ID で既存の ObjectMapper を検索して使用します。

 

String

camel.dataformat.avro-jackson.schema-resolver

転送中のデータのスキーマを検索するために使用されるオプションのスキーマリゾルバー。

 

String

camel.dataformat.avro-jackson.timezone

設定されている場合、Jackson はマーシャリング/アンマーシャリング時にタイムゾーンを使用します。

 

String

camel.dataformat.avro-jackson.unmarshal-type

アンマーシャリング時に使用する Java 型のクラス名。

 

String

camel.dataformat.avro-jackson.use-default-object-mapper

レジストリーからデフォルトの Jackson ObjectMapper を検索して使用するかどうか。

true

ブール値

camel.dataformat.avro-jackson.use-list

Map の List または Pojo の List にアンマーシャリングします。

false

ブール値

第57章 Bindy

このコンポーネントの目的は、アノテーションでバインディングマッピングが定義された Java Bean との間で、非構造化データ (より正確には非 XML データ) の解析/バインディングを可能にすることです。Bindy を使用すると、次のようなソースからデータをバインドできます。

  • CSV レコード、
  • 固定長レコード、
  • FIX メッセージ、
  • またはほとんどすべての非構造化データ

1 つまたは複数の Plain Old Java Object (POJO)。Bindy は、Java プロパティーの型に従ってデータを変換します。POJO は、場合によっては利用可能な 1 対多の関係と合わせてリンクできます。さらに、Date、Double、Float、Integer、Short、Long、BigDecimal などのデータ型の場合に、プロパティーのフォーマット中に適用するパターンを指定できます。

BigDecimal 数値の場合、精度と小数点またはグループ区切り記号も定義できます。

Decimal には Double、Integer、Float、Short、Long を指定できます。

対応フォーマット

この最初のリリースでは、コンマ区切りの値フィールドとキーと値のペアフィールド (例: FIX メッセージ) のみがサポートされています。

camel-bindy を使用するには、最初にモデルをパッケージ (例: com.acme.model) で定義し、モデルクラス (例: Order、Client、Instrument など) ごとに必要なアノテーション (後述) をクラスまたはフィールドに追加する必要があります。

複数のモデル

パッケージ名の代わりにクラス名を使用して bindy を設定すると、複数のモデルを同じパッケージに入れることができます。

57.1. オプション

Bindy データ形式は、以下に示す 5 つのオプションをサポートしています。

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

type

 

Enum

必須: Csv、Fixed、KeyValue のいずれを使用できます。

列挙値:

  • Csv
  • Fixed
  • KeyValue

classType

 

String

使用するモデルクラスの名前。

locale

 

String

米国の us など、使用する既定のロケールを設定します。JVM プラットフォームのデフォルトロケールを使用するには、default という名前を使用します。

unwrapSingleInstance

 

ブール値

アンマーシャリング時に、java.util.List にラップする代わりに、単一のインスタンスをアンラップして返す必要があります。

allowEmptyStream

 

ブール値

アンマーシャルプロセスで空のストリームを許可するかどうか。true の場合、レコードのないボディが提供されたときに例外は出力されません。

57.2. アノテーション

作成されたアノテーションにより、モデルのさまざまな概念を次のように POJO にマップできます。

  • レコードのタイプ (CSV、キーと値のペア (FIX メッセージなど)、固定長など)、
  • リンク (別のオブジェクトにあるオブジェクトをリンクする)、
  • DataField とそのプロパティー (int、type、…)、
  • KeyValuePairField (FIX 財務メッセージにあるようなキー = 値形式の場合)、
  • セクション (ヘッダー、本文、およびフッターセクションを識別する)、
  • OneToMany,
  • BindyConverter,
  • FormatFactories

このセクションでは、上記について説明します。

57.2.1. 1.CsvRecord

CsvRecord アノテーションは、モデルのルートクラスを識別するために使用されます。レコード = CSV ファイルの 1 行を表し、複数の子モデルクラスにリンクできます。

アノテーション名レコードの種類レベル

CsvRecord

CSV

クラス

パラメーター名タイプ必須/任意デフォルト値Info

separator

String

 

トークンでレコードを分割するために使用される区切り記号 (必須): ',' または ';'、'anything' にすることができます。サポートされている唯一の空白文字はタブ (\t) です。その他の空白文字 (スペース) はサポートされていません。この値は正規表現として解釈されます。正規表現で特別な意味を持つ記号を使用する場合は、'|' の記号であれば、'|' のようにマスクする必要があります。

allowEmptyStream

boolean

 

false

allowEmptyStream パラメーターは、利用できないストリームを CSV ファイル向けに処理できるようにします。

autospanLine

boolean

 

false

Last record spans rest of line (オプション): 有効にすると、コメントなどの場合に、最後の列が自動的に行末に広がります。この設定により、その行にすべての文字と区切り文字を含めることができます。

crlf

String

 

WINDOWS

Character to be used to add a carriage return after each record (オプション): 使用するキャリッジリターン文字を定義できます。上記の 3 つ以外の値を指定すると、入力した値 (カスタム) が CRLF 文字として使用されます。WINDOWS、UNIX、MAC、またはカスタムの 3 つの値を使用できます。

endWithLineBreak

boolean

 

true

endWithLineBreak パラメーターは、CSV ファイルが改行で終了するかどうかを示します (オプション)

generateHeaderColumns

boolean

 

false

generateHeaderColumns パラメーターを使用すると、列の名前を含むヘッダーを生成した CSV に追加できます

isOrdered

boolean

 

false

出力でメッセージを並べ替える必要があるかどうかを示します

name

String

  

レコードを説明する名前 (オプション)

quote

String

 

"

指定された引用文字で列をマーシャリングするかどうか (オプション): CSV の生成時にフィールドの引用文字を指定できるようにします。このアノテーションは、モデルのルートクラスに関連付けられており、一度宣言する必要があります。

引用

boolean

 

false

マーシャリング時に値 (およびヘッダー) を引用符で囲む必要があるかどうかを示します (オプション)

quotingEscaped

boolean

 

false

引用時に値をエスケープする必要があるかどうかを示します (オプション)

removeQuotes

boolean

 

true

remove quotes パラメーターフラグ。アンマーシャリングで各フィールドの引用符を削除しようとするかどうか。

skipField

boolean

 

false

skipField パラメーターを使用すると、CSV ファイルのフィールドをスキップできます。一部のフィールドが不要な場合は、スキップできます。

skipFirstLine

boolean

 

false

skipFirstLine パラメーターを使用すると、CSV ファイルの最初の行をスキップするかどうかを指定できます。この行には、多くの場合、列の定義が含まれています

ケース 1: separator = ','

CSV レコード内のフィールド分離に使用されるセパレーターは , です。

10, J, Pauline, M, XD12345678, Fortis Dynamic 15/15, 2500, USD, 08-01-2009
@CsvRecord( separator = "," )
public Class Order {

}

ケース 2: separator = ';'

前のケースと比較して、ここでのセパレーターは , の代わり ; を使用しています。

10; J; Pauline; M; XD12345678; Fortis Dynamic 15/15; 2500; USD; 08-01-2009
@CsvRecord( separator = ";" )
public Class Order {

}

ケース 3: separator = '|'

前のケースと比較して、ここでのセパレーターは ; の代わり | を使用しています。

10| J| Pauline| M| XD12345678| Fortis Dynamic 15/15| 2500| USD| 08-01-2009
@CsvRecord( separator = "\\|" )
public Class Order {

}

ケース 4: separator = '\",\"'

Camel 2.8.2 以前に該当

CSV レコードの解析対象フィールドに , または ; が含まれる場合。これはセパレーターとしても使用されるため、Camel バインドにこのケースの処理方法を伝える別のストラテジーを見つける必要があります。データを含むフィールドをコンマで定義するには、一重引用符または二重引用符を区切り文字として使用します (例: '10', 'Street 10, NY', 'USA' or "10", "Street 10, NY", "USA")。

__

この場合、行頭または行末にある一重引用符または二重引用符の文字は bindy によって削除されます。

"10","J","Pauline"," M","XD12345678","Fortis Dynamic 15,15","2500","USD","08-01-2009"
@CsvRecord( separator = "\",\"" )
public Class Order {

}

Bindy は、レコードが一重引用符または二重引用符で囲まれているかどうかを自動的に検出し、CSV からオブジェクトへのアンマーシャリング時にそれらの引用符を自動的に削除します。したがって、セパレーターに引用符を 含めず に、単に以下を実行するだけです。

"10","J","Pauline"," M","XD12345678","Fortis Dynamic 15,15","2500","USD","08-01-2009"
@CsvRecord( separator = "," )
public Class Order {

}

Object から CSV にマーシャリングして引用符を使用する場合は、以下に示すように @CsvRecordquote 属性を使用して、使用する引用符を指定する必要があることに注意してください。

@CsvRecord( separator = ",", quote = "\"" )
public Class Order {

}

ケース 5: separator & skipFirstLine

この機能は、クライアントがファイルの最初の行にデータフィールドの名前を入れる場合に役立ちます。

order id, client id, first name, last name, isin code, instrument name, quantity, currency, date

解析プロセス中にこの最初の行をスキップする必要があることを bindy に通知するには、次の属性を使用します。

@CsvRecord(separator = ",", skipFirstLine = true)
public Class Order {

}

ケース 6: generateHeaderColumns

生成された CSV の最初の行に追加するには、次のようにアノテーションで属性 generateHeaderColumns を true に設定する必要があります。

@CsvRecord( generateHeaderColumns = true )
public Class Order {

}

その結果、アンマーシャリングプロセス中の Bindy は、次のような CSV を生成します。

order id, client id, first name, last name, isin code, instrument name, quantity, currency, date
10, J, Pauline, M, XD12345678, Fortis Dynamic 15/15, 2500, USD, 08-01-2009

ケース 7: carriage return

camel-bindy が実行されるプラットフォームが Windows ではなく、Macintosh または Unix である場合には、次のように crlf プロパティーを変更できます。WINDOWS、UNIX、または MAC の 3 つの値を使用できます。

@CsvRecord(separator = ",", crlf="MAC")
public Class Order {

}

さらに、何らかの理由で別の行末文字を追加する必要がある場合は、crlf パラメーターを使用して指定できます。次の例では、コンマとそれに続く改行文字で行を終了できます。

@CsvRecord(separator = ",", crlf=",\n")
public Class Order {

}

ケース 8: isOrdered

モデルから CSV レコードを作成する際に従う順序が、解析時に使用される順序と異なる場合があります。次に、この場合、属性 isOrdered = true を使用して、DataField アノテーションの属性 position と組み合わせて指定できます。

@CsvRecord(isOrdered = true)
public Class Order {

   @DataField(pos = 1, position = 11)
   private int orderNr;

   @DataField(pos = 2, position = 10)
   private String clientNr;

}

__

pos はファイルストリームの解析に、position は CSV の生成に使用されます。

57.2.3. 3.DataField

DataField アノテーションは、フィールドのプロパティーを定義します。各データフィールドは、レコード内の位置、タイプ (string、int、date など)、およびパターン (任意) によって識別されます。

アノテーション名レコードの種類レベル

DataField

all

プロパティー

パラメーター名タイプ必須/任意デフォルト値Info

pos

int

 

入力レコード内のデータの位置。1 から開始する必要があります (必須)。位置パラメーターを参照してください。

align

String

 

R

テキストを右または左に揃えます。値 <tt>R</tt> または <tt>L</tt> を使用します。

clip

boolean

 

false

固定長の使用時に許容される長さを超える場合は、フィールド内のデータを切り取ることを示します。

columnName

String

  

ヘッダー列の名前 (オプション)。プロパティーの名前をデフォルトとして使用します。CsvRecordgenerateHeaderColumns = true の場合にのみ適用可能

decimalSeparator

String

  

BigDecimal 数値で使用する小数点区切り記号

defaultValue

String

  

値が設定されていない場合のフィールドのデフォルト値

delimiter

String

  

フィールドが可変長の場合に使用するオプションの区切り文字

groupingSeparator

String

  

123,456.789 などのグループ化された数値にフォーマット/解析する場合に、BigDecimal 数値と併用するグループ化セパレーター。

impliedDecimalSeparator

boolean

 

false

指定された位置に暗黙の小数点があるかどうかを示します

長さ

int

 

0

レコードが固定長に設定されている場合のデータブロックの長さ (文字数)

lengthPos

int

 

0

このフィールドで必要とされる固定長を定義するレコードのデータフィールドを識別します

メソッド

String

  

このようなカスタマイズを DataField に適用するために呼び出すメソッド名。これは、データフィールド自体のメソッドである必要があります。そうでない場合には、クラスのメソッドの静的な完全修飾名を指定する必要があります。(例: org.apache.camel.dataformat.bindy.csv.BindySimpleCsvFunctionWithExternalMethodTest.replaceToBar の単体テストを参照)

name

String

  

フィールドの名前 (オプション)

paddingChar

char

  

レコードが固定長に設定されている場合に埋め込む文字

pattern

String

  

Java フォーマッター (例: SimpleDateFormat) がデータの変換に使用するパターン (オプション)。パターンを使用する場合は、バインドデータ形式にロケールを設定することをお勧めします。us などの既知のロケールに設定するか、default を使用してプラットフォームのデフォルトロケールを使用します。

position

int

 

0

生成された出力メッセージ内のフィールドの位置 (1 から開始する必要があります)。生成された CSV 内のフィールドの位置 (出力メッセージ) が、入力位置 (pos) と比較して異なる必要がある場合に使用します。pos パラメーターを参照してください。

精度

int

 

0

作成される \{@link java.math.BigDecimal} 数値の精度

必須

boolean

 

false

フィールドが必須かどうかを示します

rounding

String

 

CEILING

BigDecimal の丸め/スケーリングに使用される丸めモード 値: UP、DOWN、CEILING、FLOOR、HALF_UP、HALF_DOWN、HALF_EVEN、UNNECESSARY (例: Number = 123456.789, Precision = 2, Rounding = CEILING Result : 123456.79)

timezone

String

  

使用するタイムゾーン。

trim

boolean

 

false

値をトリミングする必要があるかどうかを示します

ケース 1: pos

このパラメーター/属性は、CSV レコード内のフィールドの位置を表します。

Position

@CsvRecord(separator = ",")
public class Order {

    @DataField(pos = 1)
    private int orderNr;

    @DataField(pos = 5)
    private String isinCode;

}

この例でわかるように、位置は 1 から始まりますが、クラス Order では続きは 5 になります。2 から 4 までの数字はクラス Client で定義されています (以下を参照)。

位置は別のモデルクラスで継続する

public class Client {

    @DataField(pos = 2)
    private String clientNr;

    @DataField(pos = 3)
    private String firstName;

    @DataField(pos = 4)
    private String lastName;
}

ケース 2: pattern

パターンを使用すると、データの形式を強化または検証できます

Pattern

@CsvRecord(separator = ",")
public class Order {

    @DataField(pos = 1)
    private int orderNr;

    @DataField(pos = 5)
    private String isinCode;

    @DataField(name = "Name", pos = 6)
    private String instrumentName;

    @DataField(pos = 7, precision = 2)
    private BigDecimal amount;

    @DataField(pos = 8)
    private String currency;

    // pattern used during parsing or when the date is created
    @DataField(pos = 9, pattern = "dd-MM-yyyy")
    private Date orderDate;
}

ケース 3: precision

精度は、数値の小数部分を定義する場合に役立ちます。

精度

@CsvRecord(separator = ",")
public class Order {

    @DataField(pos = 1)
    private int orderNr;

    @Link
    private Client client;

    @DataField(pos = 5)
    private String isinCode;

    @DataField(name = "Name", pos = 6)
    private String instrumentName;

    @DataField(pos = 7, precision = 2)
    private BigDecimal amount;

    @DataField(pos = 8)
    private String currency;

    @DataField(pos = 9, pattern = "dd-MM-yyyy")
    private Date orderDate;
}

ケース 4: 出力で位置が異なる

position 属性は、生成された CSV レコードにフィールドを配置する方法を bindy に通知します。デフォルトでは、使用される位置は属性 pos で定義された位置に対応します。位置が異なる場合 (つまり、マーシャリングとアンマーシャリングを比較する非対称プロセスがあることを意味します)、position を使用してこれを指定できます。

以下に例を示します。

出力位置が異なる

@CsvRecord(separator = ",", isOrdered = true)
public class Order {

    // Positions of the fields start from 1 and not from 0

    @DataField(pos = 1, position = 11)
    private int orderNr;

    @DataField(pos = 2, position = 10)
    private String clientNr;

    @DataField(pos = 3, position = 9)
    private String firstName;

    @DataField(pos = 4, position = 8)
    private String lastName;

    @DataField(pos = 5, position = 7)
    private String instrumentCode;

    @DataField(pos = 6, position = 6)
    private String instrumentNumber;
}

アノテーション @DataField のこの属性は、アノテーション @CsvRecord の属性 isOrdered = true と組み合わせて使用する必要があります。

ケース 5: 必須

フィールドが必須の場合は、required 属性を true に設定して使用します。

必須

@CsvRecord(separator = ",")
public class Order {

    @DataField(pos = 1)
    private int orderNr;

    @DataField(pos = 2, required = true)
    private String clientNr;

    @DataField(pos = 3, required = true)
    private String firstName;

    @DataField(pos = 4, required = true)
    private String lastName;
}

このフィールドがレコードに存在しない場合には、パーサーにより次の情報を含めてエラーが報告されます。

Some fields are missing (optional or mandatory), line :

ケース 6: trim

フィールドの先頭および/または末尾にスペースがあり、処理する前に削除する必要がある場合は、trim 属性を true に設定してください。

Trim

@CsvRecord(separator = ",")
public class Order {

    @DataField(pos = 1, trim = true)
    private int orderNr;

    @DataField(pos = 2, trim = true)
    private Integer clientNr;

    @DataField(pos = 3, required = true)
    private String firstName;

    @DataField(pos = 4)
    private String lastName;
}

ケース 7: defaultValue

フィールドが定義されていない場合は、defaultValue 属性で示される値が使用されます。

デフォルト値

@CsvRecord(separator = ",")
public class Order {

    @DataField(pos = 1)
    private int orderNr;

    @DataField(pos = 2)
    private Integer clientNr;

    @DataField(pos = 3, required = true)
    private String firstName;

    @DataField(pos = 4, defaultValue = "Barin")
    private String lastName;
}

ケース 8: columnName

@CsvRecord にアノテーション generateHeaderColumns = true がある場合にのみ、プロパティーの列名を指定します。

列名

@CsvRecord(separator = ",", generateHeaderColumns = true)
public class Order {

    @DataField(pos = 1)
    private int orderNr;

    @DataField(pos = 5, columnName = "ISIN")
    private String isinCode;

    @DataField(name = "Name", pos = 6)
    private String instrumentName;
}

この属性は、オプションのフィールドにのみ適用されます。

57.2.4. 4.FixedLengthRecord

FixedLengthRecord アノテーションは、モデルのルートクラスを識別するために使用されます。これは、レコード = 固定長 (文字数) でフォーマットされたデータを含むファイル/メッセージの行を表し、複数の子モデルクラスにリンクできます。フィールドのデータは右または左に位置合わせできるため、この形式は少し特殊です。

データのサイズがフィールドの長さを完全に満たしていない場合は、埋め込み文字を追加できます。

アノテーション名レコードの種類レベル

FixedLengthRecord

固定:

クラス

パラメーター名タイプ必須/任意デフォルト値Info

countGrapheme

boolean

 

false

文字数のカウント方法を示します

crlf

String

 

WINDOWS

各レコードの後に改行を追加するために使用する文字 (オプション)。使用可能な値: WINDOWS、UNIX、MAC、またはカスタム。このオプションはマーシャリング中にのみ使用されますが、アンマーシャリングでは、eol がカスタマイズされていない限り、JDK が提供するシステムのデフォルトの行区切り文字が使用されます。

eol

String

  

アンマーシャリング中に各レコードの後ろの行末を考慮する処理に使用される文字 (オプション、デフォルト: "" で、他の行区切り文字が指定されていない場合にデフォルトの JDK が提供する行区切り文字を使用できるようにします)。このオプションは、アンマーシャリング中にのみ使用されます。他の値が指定されていない限り、マーシャリング時に "WINDOWS" として、システムのデフォルトで提供される行区切り文字を使用します。

footer

クラス

 

void

このタイプのレコードでは、ファイルの最後に単一のフッターレコードが続く可能性があることを指定します。

header

Class

 

void

このタイプのレコードでは、ファイルの先頭に単一のヘッダーレコードがある可能性があることを指定します。

ignoreMissingChars

boolean

 

false

短すぎる行を無視するかどうかを示します

ignoreTrailingChars

boolean

 

false

アンマーシャリング/解析時に、最後にマップされたフィールドを超える文字を無視できることを示します。このアノテーションは、モデルのルートクラスに関連付けられており、一度宣言する必要があります。

長さ

int

 

0

レコードの固定長 (文字数)。これは、レコードが常に \{#paddingChar ()} でパディングされることを意味します

name

String

  

レコードを説明する名前 (オプション)

paddingChar

char

  

パディングする文字。

skipFooter

boolean

 

false

フッターレコードのマーシャリング/アンマーシャリングをスキップするようにデータ形式を設定します。プライマリーレコードでこのパラメーターを設定します (たとえば、ヘッダーやフッターではありません)。

skipHeader

boolean

 

false

ヘッダーレコードのマーシャリング/アンマーシャリングをスキップするようにデータ形式を設定します。プライマリーレコードでこのパラメーターを設定します (たとえば、ヘッダーやフッターではありません)。

レコードは、ヘッダー/フッターと、プライマリーの固定長レコードを両方に指定できません。

ケース 1: 単純な固定長レコード

この単純な例は、固定メッセージを解析/フォーマットするモデル設計方法を示しています

10A9PaulineMISINXD12345678BUYShare2500.45USD01-08-2009

Fixed-simple

@FixedLengthRecord(length=54, paddingChar=' ')
public static class Order {

    @DataField(pos = 1, length=2)
    private int orderNr;

    @DataField(pos = 3, length=2)
    private String clientNr;

    @DataField(pos = 5, length=7)
    private String firstName;

    @DataField(pos = 12, length=1, align="L")
    private String lastName;

    @DataField(pos = 13, length=4)
    private String instrumentCode;

    @DataField(pos = 17, length=10)
    private String instrumentNumber;

    @DataField(pos = 27, length=3)
    private String orderType;

    @DataField(pos = 30, length=5)
    private String instrumentType;

    @DataField(pos = 35, precision = 2, length=7)
    private BigDecimal amount;

    @DataField(pos = 42, length=3)
    private String currency;

    @DataField(pos = 45, length=10, pattern = "dd-MM-yyyy")
    private Date orderDate;
}

ケース 2: アラインメントとパディングのある固定長レコード

こちらの詳細な例は、フィールドの配置を定義する方法と、ここで ' ' であるパディング文字を割り当てる方法を示しています。

10A9 PaulineM ISINXD12345678BUYShare2500.45USD01-08-2009

Fixed-padding-align

@FixedLengthRecord(length=60, paddingChar=' ')
public static class Order {

    @DataField(pos = 1, length=2)
    private int orderNr;

    @DataField(pos = 3, length=2)
    private String clientNr;

    @DataField(pos = 5, length=9)
    private String firstName;

    @DataField(pos = 14, length=5, align="L")   // align text to the LEFT zone of the block
    private String lastName;

    @DataField(pos = 19, length=4)
    private String instrumentCode;

    @DataField(pos = 23, length=10)
    private String instrumentNumber;

    @DataField(pos = 33, length=3)
    private String orderType;

    @DataField(pos = 36, length=5)
    private String instrumentType;

    @DataField(pos = 41, precision = 2, length=7)
    private BigDecimal amount;

    @DataField(pos = 48, length=3)
    private String currency;

    @DataField(pos = 51, length=10, pattern = "dd-MM-yyyy")
    private Date orderDate;
}

ケース 3: フィールドパディング

' ' の代わりに '0' をパディングする数値形式があるため、レコードに定義されたデフォルトのパディングをフィールドに適用できない場合があります。この場合、モデルで @DataField の属性 paddingChar を使用して、この値を設定できます。

10A9 PaulineM ISINXD12345678BUYShare000002500.45USD01-08-2009

Fixed-padding-field

@FixedLengthRecord(length = 65, paddingChar = ' ')
public static class Order {

    @DataField(pos = 1, length = 2)
    private int orderNr;

    @DataField(pos = 3, length = 2)
    private String clientNr;

    @DataField(pos = 5, length = 9)
    private String firstName;

    @DataField(pos = 14, length = 5, align = "L")
    private String lastName;

    @DataField(pos = 19, length = 4)
    private String instrumentCode;

    @DataField(pos = 23, length = 10)
    private String instrumentNumber;

    @DataField(pos = 33, length = 3)
    private String orderType;

    @DataField(pos = 36, length = 5)
    private String instrumentType;

    @DataField(pos = 41, precision = 2, length = 12, paddingChar = '0')
    private BigDecimal amount;

    @DataField(pos = 53, length = 3)
    private String currency;

    @DataField(pos = 56, length = 10, pattern = "dd-MM-yyyy")
    private Date orderDate;
}

ケース 4: 区切り文字付きの固定長レコード

固定長レコードでは、レコード内のコンテンツが区切られている場合があります。次の例では、firstName フィールドと lastName フィールドが ^ 文字で区切られています。

10A9Pauline^M^ISINXD12345678BUYShare000002500.45USD01-08-2009

Fixed-delimited

@FixedLengthRecord
public static class Order {

    @DataField(pos = 1, length = 2)
    private int orderNr;

    @DataField(pos = 2, length = 2)
    private String clientNr;

    @DataField(pos = 3, delimiter = "^")
    private String firstName;

    @DataField(pos = 4, delimiter = "^")
    private String lastName;

    @DataField(pos = 5, length = 4)
    private String instrumentCode;

    @DataField(pos = 6, length = 10)
    private String instrumentNumber;

    @DataField(pos = 7, length = 3)
    private String orderType;

    @DataField(pos = 8, length = 5)
    private String instrumentType;

    @DataField(pos = 9, precision = 2, length = 12, paddingChar = '0')
    private BigDecimal amount;

    @DataField(pos = 10, length = 3)
    private String currency;

    @DataField(pos = 11, length = 10, pattern = "dd-MM-yyyy")
    private Date orderDate;
}

固定長レコードの pos 値は、オプションで、正確な列番号の代わりに序数の連続した値を使用して定義できます。

ケース 5: レコード定義フィールド長の固定長レコード

固定長レコードには、同じレコード内の別のフィールドで必要とされる長さを定義するフィールドが含まれる場合があります。次の例では、instrumentNumber フィールド値の長さは、レコード内の instrumentNumberLen フィールドの値によって定義されます。

10A9Pauline^M^ISIN10XD12345678BUYShare000002500.45USD01-08-2009

Fixed-delimited

@FixedLengthRecord
public static class Order {

    @DataField(pos = 1, length = 2)
    private int orderNr;

    @DataField(pos = 2, length = 2)
    private String clientNr;

    @DataField(pos = 3, delimiter = "^")
    private String firstName;

    @DataField(pos = 4, delimiter = "^")
    private String lastName;

    @DataField(pos = 5, length = 4)
    private String instrumentCode;

    @DataField(pos = 6, length = 2, align = "R", paddingChar = '0')
    private int instrumentNumberLen;

    @DataField(pos = 7, lengthPos=6)
    private String instrumentNumber;

    @DataField(pos = 8, length = 3)
    private String orderType;

    @DataField(pos = 9, length = 5)
    private String instrumentType;

    @DataField(pos = 10, precision = 2, length = 12, paddingChar = '0')
    private BigDecimal amount;

    @DataField(pos = 11, length = 3)
    private String currency;

    @DataField(pos = 12, length = 10, pattern = "dd-MM-yyyy")
    private Date orderDate;
}

ケース 6: ヘッダーとフッター付きの固定長レコード

Bindy は、モデルの一部として設定されている固定長のヘッダーおよびフッターレコードを検出します。ただし、アノテーション付きのクラスが、プライマリー @FixedLengthRecord クラスと同じパッケージに存在するか、設定されたスキャンパッケージの 1 つに含まれている必要があります。次のテキストは、ヘッダーレコードとフッターレコードで囲まれた 2 つの固定長レコードを示しています。

101-08-2009
10A9 PaulineM ISINXD12345678BUYShare000002500.45USD01-08-2009
10A9 RichN ISINXD12345678BUYShare000002700.45USD01-08-2009
9000000002

Fixed-header-and-footer-main-class

@FixedLengthRecord(header = OrderHeader.class, footer = OrderFooter.class)
public class Order {

    @DataField(pos = 1, length = 2)
    private int orderNr;

    @DataField(pos = 2, length = 2)
    private String clientNr;

    @DataField(pos = 3, length = 9)
    private String firstName;

    @DataField(pos = 4, length = 5, align = "L")
    private String lastName;

    @DataField(pos = 5, length = 4)
    private String instrumentCode;

    @DataField(pos = 6, length = 10)
    private String instrumentNumber;

    @DataField(pos = 7, length = 3)
    private String orderType;

    @DataField(pos = 8, length = 5)
    private String instrumentType;

    @DataField(pos = 9, precision = 2, length = 12, paddingChar = '0')
    private BigDecimal amount;

    @DataField(pos = 10, length = 3)
    private String currency;

    @DataField(pos = 11, length = 10, pattern = "dd-MM-yyyy")
    private Date orderDate;
}

@FixedLengthRecord
public  class OrderHeader {
    @DataField(pos = 1, length = 1)
    private int recordType = 1;

    @DataField(pos = 2, length = 10, pattern = "dd-MM-yyyy")
    private Date recordDate;
}

@FixedLengthRecord
public class OrderFooter {

    @DataField(pos = 1, length = 1)
    private int recordType = 9;

    @DataField(pos = 2, length = 9, align = "R", paddingChar = '0')
    private int numberOfRecordsInTheFile;
}

ケース 7: 固定長レコードの解析時にコンテンツをスキップする

ターゲットユースケースに必要以上の情報を含む、固定長レコードを提供するシステムと統合するのが一般的です。この状況では、不要なフィールドの宣言と解析をスキップすると便利です。これに対応するために、次に宣言されたフィールドの pos 値が最後に解析されたフィールドのカーソル位置を超えている場合には、Bindy により、レコード内で次にマップされたフィールドに移動されます。対象のフィールドに (順序値ではなく) 絶対位置を使用すると、Bindy は 2 つのフィールド間のコンテンツをスキップします。

同様に、先のフィールドに対象となるコンテンツがない場合があります。この場合には、@FixedLengthRecord 宣言で ignoreTrailingChars プロパティーを設定して、最後にマップされたフィールド以降のすべての解析をスキップするように Bindy に指示できます。

@FixedLengthRecord(ignoreTrailingChars = true)
public static class Order {

    @DataField(pos = 1, length = 2)
    private int orderNr;

    @DataField(pos = 3, length = 2)
    private String clientNr;

    // any characters that appear beyond the last mapped field will be ignored

}

57.2.5. 5.メッセージ

Message アノテーションは、キーと値のペアフィールドを含むモデルのクラスを識別するために使用されます。この種の形式は、主に Financial Exchange Protocol Messages (FIX) で使用されます。いずれの場合も、このアノテーションは、データがキーによって識別される他の形式に使用できます。キーペアの値は、区切り記号で互いに区切られます。区切り文字には、タブ区切り記号 (Unicode 表現: \u0009) または見出しの開始 (Unicode 表現: \u0001) などの特殊文字を使用できます。

注記

FIX メッセージを操作するには、モデルに、Order クラスである可能性があるルートメッセージクラスにリンクされた Header クラスと Trailer クラスが含まれている必要があります。これは必須ではありませんが、camel-bindy を、quickFix プロジェクトに基づく修正ゲートウェイである camel-fix と組み合わせて使用する場合に非常に役立ちます。

アノテーション名レコードの種類レベル

メッセージ

キーと値のペア。

Class

パラメーター名タイプ必須/任意デフォルト値Info

keyValuePairSeparator

String

 

キーと値のペアの区切り文字は、キーから値を分割するために使用されます (必須)。'\u0001'、'\u0009'、'#', または 'anything' を指定できます。

pairSeparator

String

 

キーと値のペアをトークンに分割するために使用されるペアの区切り文字 (必須)。'='、';'、または 'anything' を指定できます。

crlf

String

 

WINDOWS

各レコードの後に改行を追加するために使用する文字 (オプション)。使用可能な値 = WINDOWS、UNIX、MAC、またはカスタム。上記の 3 つ以外の値を指定すると、入力した値 (カスタム) が CRLF 文字として使用されます。

isOrdered

boolean

 

false

出力でメッセージを並べ替える必要があるかどうかを示します。このアノテーションは、モデルのメッセージクラスに関連付けられており、一度宣言する必要があります。

name

String

  

メッセージを説明する名前 (オプション)

type

String

 

FIX

type は、メッセージのタイプを定義するために使用されます (FIX、EMX など) (オプション)

version

String

 

4.1

version は、メッセージのバージョンを定義します (4.1 など) (オプション)

ケース 1: separator = 'u0001'

FIX メッセージでキーと値のペアフィールドを分離するために使用される区切り文字は、ASCII 01 文字または Unicode 形式の \u0001 です。Java ランタイムエラーを回避するには、この文字をもう一度エスケープする必要があります。以下は例です。

8=FIX.4.1 9=20 34=1 35=0 49=INVMGR 56=BRKR 1=BE.CHM.001 11=CHM0001-01 22=4 ...

およびアノテーションの使用方法:

FIX - メッセージ

@Message(keyValuePairSeparator = "=", pairSeparator = "\u0001", type="FIX", version="4.1")
public class Order {

}

テストケースを見る

タブなどの ASCII 文字は、WIKI ページでは表示できません。したがって、camel-bindy のテストケースを見て、FIX メッセージ (https://github.com/apache/camel/blob/main/components/camel-bindy/src/test/data/fix/fix.txt) および Order、Trailer、Header クラス (https://github.com/apache/camel/blob/main/components/camel-bindy/src/test/java/org/apache/camel/dataformat/bindy/model/fix/simple/Order.java) が実際にどのように見えるかを確認してください。

57.2.6. 6.KeyValuePairField

KeyValuePairField アノテーションは、キーと値のペアフィールドのプロパティーを定義します。各 KeyValuePairField は、タグ (= キー) とそれに関連付けられた値、タイプ (文字列、整数、日付など)、オプションのパターン、およびフィールドが必須かどうかによって識別されます。

アノテーション名レコードの種類レベル

KeyValuePairField

キーと値のペア - FIX

プロパティー

パラメーター名タイプ必須/任意デフォルト値Info

tag

int

 

メッセージ内のフィールドを識別するタグ (必須) - 一意である必要があります

impliedDecimalSeparator

boolean

 

false

<b>Camel 2.11:</b> 指定された位置に暗黙の小数点があるかどうかを示します

name

String

  

フィールドの名前 (オプション)

pattern

String

  

フォーマッターがデータの変換に使用するパターン (オプション)

position

int

 

0

生成されたメッセージ内のフィールドの位置 - FIX メッセージ内のキー/タグの位置が異なる必要がある場合に使用する必要があります

精度

int

 

0

作成する BigDecimal 数値の精度

必須

boolean

 

false

フィールドが必須かどうかを示します

timezone

String

  

使用するタイムゾーン。

ケース 1: tag

このパラメーターは、メッセージ内のフィールドのキーを表します。

FIX メッセージ - タグ

@Message(keyValuePairSeparator = "=", pairSeparator = "\u0001", type="FIX", version="4.1")
public class Order {

    @Link Header header;

    @Link Trailer trailer;

    @KeyValuePairField(tag = 1) // Client reference
    private String Account;

    @KeyValuePairField(tag = 11) // Order reference
    private String ClOrdId;

    @KeyValuePairField(tag = 22) // Fund ID type (Sedol, ISIN, ...)
    private String IDSource;

    @KeyValuePairField(tag = 48) // Fund code
    private String SecurityId;

    @KeyValuePairField(tag = 54) // Movement type ( 1 = Buy, 2 = sell)
    private String Side;

    @KeyValuePairField(tag = 58) // Free text
    private String Text;
}

ケース 2: 出力での別の位置

FIX メッセージに入れるタグ/キーを事前定義された順序に従ってソートする必要がある場合は、アノテーション @KeyValuePairField の属性 position を使用します。

FIX メッセージ - タグ - 並べ替え

@Message(keyValuePairSeparator = "=", pairSeparator = "\\u0001", type = "FIX", version = "4.1", isOrdered = true)
public class Order {

    @Link Header header;

    @Link Trailer trailer;

    @KeyValuePairField(tag = 1, position = 1) // Client reference
    private String account;

    @KeyValuePairField(tag = 11, position = 3) // Order reference
    private String clOrdId;
}

57.2.7. 7.セクション

固定長レコードの FIX メッセージでは、情報の表現にさまざまなセクション (ヘッダー、ボディ、およびセクション) があるのが一般的です。アノテーション @Section の目的は、モデルのどのクラスがヘッダー (= セクション 1)、ボディ (= セクション 2)、およびフッター (= セクション 3) を表しているかを bindy に通知することです。

このアノテーションには、1 つの属性/パラメーターのみが存在します。

アノテーション名レコードの種類レベル

セクション

FIX

Class

パラメーター名タイプ必須/任意デフォルト値Info

number

int

 

セクション番号

ケース 1: セクション

ヘッダーセクションの定義:

FIX メッセージ - セクション - ヘッダー

@Section(number = 1)
public class Header {

    @KeyValuePairField(tag = 8, position = 1) // Message Header
    private String beginString;

    @KeyValuePairField(tag = 9, position = 2) // Checksum
    private int bodyLength;
}

本文セクションの定義:

FIX メッセージ - セクション - 本文

@Section(number = 2)
@Message(keyValuePairSeparator = "=", pairSeparator = "\\u0001", type = "FIX", version = "4.1", isOrdered = true)
public class Order {

    @Link Header header;

    @Link Trailer trailer;

    @KeyValuePairField(tag = 1, position = 1) // Client reference
    private String account;

    @KeyValuePairField(tag = 11, position = 3) // Order reference
    private String clOrdId;

フッターセクションの定義:

FIX メッセージ - セクション - フッター

@Section(number = 3)
public class Trailer {

    @KeyValuePairField(tag = 10, position = 1)
    // CheckSum
    private int checkSum;

    public int getCheckSum() {
        return checkSum;
    }

57.2.8. 8.OneToMany

アノテーション @OneToMany の目的は、POJO クラスで定義された List<?> フィールドを操作できるようにすること、または反復グループを含むレコードから操作できるようにすることです。

注記

OneToMany の制限事項
bindy の 1 対多では、複数レベルの階層で繰り返しが定義されている場合に処理できない点に注意してください。

OneToMany の関係は、次の場合にのみ機能します。

  • 反復グループ (= タグ/キーのグループ) を含む FIX メッセージの読み取り
  • 反復データを含む CSV の生成
アノテーション名レコードの種類レベル

OneToMany

all

プロパティー

パラメーター名タイプ必須/任意デフォルト値Info

mappedTo

String

  

List<Type of the Class> の型に関連付けられたクラス名

ケース 1: 反復データで CSV を生成する

必要な CSV 出力は次のとおりです。

Claus,Ibsen,Camel in Action 1,2010,35
Claus,Ibsen,Camel in Action 2,2012,35
Claus,Ibsen,Camel in Action 3,2013,35
Claus,Ibsen,Camel in Action 4,2014,35
注記

反復データは書籍のタイトルとその発行日に関するものですが、姓名と年齢は一般的であり、これをモデル化するために使用されるクラスです。Author クラスには、書籍リストが含まれています。

反復データを含む CSV を生成する

@CsvRecord(separator=",")
public class Author {

    @DataField(pos = 1)
    private String firstName;

    @DataField(pos = 2)
    private String lastName;

    @OneToMany
    private List<Book> books;

    @DataField(pos = 5)
    private String Age;
}

public class Book {

    @DataField(pos = 3)
    private String title;

    @DataField(pos = 4)
    private String year;
}

ケース 2: タグ/キーのグループを含む FIX メッセージの読み取り

モデルで処理するメッセージは次のとおりです。

8=FIX 4.19=2034=135=049=INVMGR56=BRKR
1=BE.CHM.00111=CHM0001-0158=this is a camel - bindy test
22=448=BE000124567854=1
22=548=BE000987654354=2
22=648=BE000999999954=3
10=220

タグ 22、48、および 54 が繰り返されます。

およびコード:

タグ/キーのグループを含む FIX メッセージの読み取り

public class Order {

    @Link Header header;

    @Link Trailer trailer;

    @KeyValuePairField(tag = 1) // Client reference
    private String account;

    @KeyValuePairField(tag = 11) // Order reference
    private String clOrdId;

    @KeyValuePairField(tag = 58) // Free text
    private String text;

    @OneToMany(mappedTo = "org.apache.camel.dataformat.bindy.model.fix.complex.onetomany.Security")
    List<Security> securities;
}

public class Security {

    @KeyValuePairField(tag = 22) // Fund ID type (Sedol, ISIN, ...)
    private String idSource;

    @KeyValuePairField(tag = 48) // Fund code
    private String securityCode;

    @KeyValuePairField(tag = 54) // Movement type ( 1 = Buy, 2 = sell)
    private String side;
}

57.2.9. 9.BindyConverter

アノテーション @BindyConverter の目的は、フィールドレベルで使用されるコンバーターを定義することです。提供されたクラスは、Format インターフェイスを実装する必要があります。

@FixedLengthRecord(length = 10, paddingChar = ' ')
public static class DataModel {
    @DataField(pos =  1, length = 10, trim = true)
    @BindyConverter(CustomConverter.class)
    public String field1;
}

public static class CustomConverter implements Format<String> {
    @Override
    public String format(String object) throws Exception {
        return (new StringBuilder(object)).reverse().toString();
    }

    @Override
    public String parse(String string) throws Exception {
        return (new StringBuilder(string)).reverse().toString();
    }
}

57.2.10. 10.FormatFactories

アノテーション @FormatFactories の目的は、一連のコンバーターをレコードレベルで定義することです。提供されるクラスは、FormatFactoryInterface インターフェイスを実装する必要があります。

@CsvRecord(separator = ",")
@FormatFactories({OrderNumberFormatFactory.class})
public static class Order {

    @DataField(pos = 1)
    private OrderNumber orderNr;

    @DataField(pos = 2)
    private String firstName;
}

public static class OrderNumber {
    private int orderNr;

    public static OrderNumber ofString(String orderNumber) {
        OrderNumber result = new OrderNumber();
        result.orderNr = Integer.valueOf(orderNumber);
        return result;
    }
}

public static class OrderNumberFormatFactory extends AbstractFormatFactory {

    {
        supportedClasses.add(OrderNumber.class);
    }

    @Override
    public Format<?> build(FormattingOptions formattingOptions) {
        return new Format<OrderNumber>() {
            @Override
            public String format(OrderNumber object) throws Exception {
                return String.valueOf(object.orderNr);
            }

            @Override
            public OrderNumber parse(String string) throws Exception {
                return OrderNumber.ofString(string);
            }
        };
    }
}

57.3. サポートされるデータタイプ

DefaultFormatFactory は、提供された FormattingOptions に基づいてインターフェイス FormatFactoryInterface のインスタンスを返して、次のデータ型のフォーマットを使用できるようにします。

  • BigDecimal
  • BigInteger
  • Boolean
  • Byte
  • Character
  • 日付
  • double
  • Enum
  • Float
  • Integer
  • LocalDate
  • LocalDateTime
  • LocalTime
  • Long
  • Short
  • String

DefaultFormatFactory は、使用中のレジストリー (Spring または JNDI など) で FactoryRegistry のインスタンスを提供してオーバーライドできます。

57.4. Java DSL を使用

次の手順では、このレコードタイプに関連付けられた DataFormat バインドクラスをインスタンス化し、クラスをパラメーターとして提供します。

たとえば、次の例では、com.acme.model.MyModel.class で設定されたクラス BindyCsvDataFormat (CSV レコードタイプに関連付けられたクラスに対応) を使用して、このパッケージで設定されたモデルオブジェクトを初期化します。

DataFormat bindy = new BindyCsvDataFormat(com.acme.model.MyModel.class);

57.4.1. ロケールの設定

Bindy は、次のようなデータ形式でのロケールの設定をサポートしています。

BindyCsvDataFormat bindy = new BindyCsvDataFormat(com.acme.model.MyModel.class);

bindy.setLocale("us");

または、プラットフォームのデフォルトロケールを使用するには、ロケール名として default を使用します。

BindyCsvDataFormat bindy = new BindyCsvDataFormat(com.acme.model.MyModel.class);

bindy.setLocale("default");

57.4.2. アンマーシャリング

from("file://inbox")
  .unmarshal(bindy)
  .to("direct:handleOrders");

または、Spring XML ファイルなどのレジストリーで定義できるデータ形式への名前付き参照を使用できます。

from("file://inbox")
  .unmarshal("myBindyDataFormat")
  .to("direct:handleOrders");

Camel ルートは、受信トレイディレクトリー内のファイルをピックアップし、CSV レコードをモデルオブジェクトのコレクションにアンマーシャリングして、handleOrders によって参照されるルートにコレクション
を送信します。

返されるコレクションは、List of Map オブジェクト です。リスト内の各 Map には、CSV の各行からマーシャリングされたモデルオブジェクトが含まれています。理由は、各行が複数のオブジェクトに対応している可能性 があるためです。1 行にオブジェクト 1 つだけが返されることを想定している場合には、混乱を招く可能性があります。

各オブジェクトは、そのクラス名を使用して取得できます。

List<Map<String, Object>> unmarshaledModels = (List<Map<String, Object>>) exchange.getIn().getBody();

int modelCount = 0;
for (Map<String, Object> model : unmarshaledModels) {
  for (String className : model.keySet()) {
     Object obj = model.get(className);
     LOG.info("Count : " + modelCount + ", " + obj.toString());
  }
 modelCount++;
}

LOG.info("Total CSV records received by the csv bean : " + modelCount);

ルート内で処理するためにこのマップから単一の Order オブジェクトを抽出すると仮定する場合に、次のようにスプリッターとプロセッサーの組み合わせを使用できます。

from("file://inbox")
    .unmarshal(bindy)
    .split(body())
        .process(new Processor() {
            public void process(Exchange exchange) throws Exception {
                Message in = exchange.getIn();
                Map<String, Object> modelMap = (Map<String, Object>) in.getBody();
                in.setBody(modelMap.get(Order.class.getCanonicalName()));
            }
        })
        .to("direct:handleSingleOrder")
    .end();

Bindy は CHARSET_NAME プロパティーまたは CHARSET_NAME ヘッダーを Exchange インターフェイスで定義されているように使用して、アンマーシャリングのために受信した入力ストリームの文字セット変換を行うことに注意してください。一部のプロデューサ (file-endpoint など) では、文字セットを定義できます。文字セット変換は、このプロデューサによってすでに実行されている可能性があります。アンマーシャルに送信する前に、エクスチェンジからこのプロパティーまたはヘッダーを削除する必要がある場合があります。削除しないと、変換が 2 回行われ、想定外の結果が生じる可能性があります。

from("file://inbox?charset=Cp922")
  .removeProperty(Exchange.CHARSET_NAME)
  .unmarshal("myBindyDataFormat")
  .to("direct:handleOrders");

57.4.3. マーシャリング

モデルオブジェクトのコレクションから CSV レコードを生成するには、次のルートを作成します。

from("direct:handleOrders")
   .marshal(bindy)
   .to("file://outbox")

57.5. Spring XML の使用

これにより、お気に入りの DSL 言語として Spring を使用して、非常に簡単に camel-bindy に使用するルートを宣言できます。次の例は、最初のルートがファイルからレコードを取得し、コンテンツをアンマーシャリングしてモデルにバインドする 2 つのルートを示しています。結果は pojo に送信され (特別なことは何も行われません)、キューに入れられます。

2 番目のルートは、キューから pojo を抽出し、コンテンツをマーシャリングして、CSV レコードを含むファイルを生成します。

Spring DSL

<?xml version="1.0" encoding="UTF-8"?>

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

    <!-- Queuing engine - ActiveMq - work locally in mode virtual memory -->
    <bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent">
        <property name="brokerURL" value="vm://localhost:61616"/>
    </bean>

    <camelContext xmlns="http://camel.apache.org/schema/spring">
        <dataFormats>
          <bindy id="bindyDataformat" type="Csv" classType="org.apache.camel.bindy.model.Order"/>
        </dataFormats>

        <route>
            <from uri="file://src/data/csv/?noop=true" />
            <unmarshal ref="bindyDataformat" />
            <to uri="bean:csv" />
            <to uri="activemq:queue:in" />
        </route>

        <route>
            <from uri="activemq:queue:in" />
            <marshal ref="bindyDataformat" />
            <to uri="file://src/data/csv/out/" />
        </route>
    </camelContext>
</beans>

注記

モデルクラスが serializable を実装していることを確認してください。実装されていない場合には、キューマネージャーでエラーが発生します。

57.6. 依存関係

camel ルートで Bindy を使用するには、このデータ形式を実装する camel-bindy に依存関係を追加する必要があります。

Maven を使用する場合は、pom.xml に以下を追加するだけで、バージョン番号を最新かつ最高のリリースに置き換えます (最新バージョンのダウンロードページを参照してください)。

<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-bindy</artifactId>
  <version>{CamelSBVersion}</version>
</dependency>

57.7. Spring Boot 自動設定

Spring Boot で bindy-csv を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-bindy-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 18 のオプションをサポートします。

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

camel.dataformat.bindy-csv.allow-empty-stream

アンマーシャルプロセスで空のストリームを許可するかどうか。true の場合、レコードのないボディが提供されたときに例外は出力されません。

false

ブール値

camel.dataformat.bindy-csv.class-type

使用するモデルクラスの名前。

 

String

camel.dataformat.bindy-csv.enabled

bindy-csv データ形式の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.dataformat.bindy-csv.locale

米国の us など、使用する既定のロケールを設定します。JVM プラットフォームのデフォルトロケールを使用するには、default という名前を使用します。

 

String

camel.dataformat.bindy-csv.type

Csv、Fixed、または KeyValue を使用するかどうか。

 

String

camel.dataformat.bindy-csv.unwrap-single-instance

アンマーシャリング時に、java.util.List にラップする代わりに、単一のインスタンスをアンラップして返す必要があります。

true

ブール値

camel.dataformat.bindy-fixed.allow-empty-stream

アンマーシャルプロセスで空のストリームを許可するかどうか。true の場合、レコードのないボディが提供されたときに例外は出力されません。

false

ブール値

camel.dataformat.bindy-fixed.class-type

使用するモデルクラスの名前。

 

String

camel.dataformat.bindy-fixed.enabled

bindy-fixed データ形式の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.dataformat.bindy-fixed.locale

米国の us など、使用する既定のロケールを設定します。JVM プラットフォームのデフォルトロケールを使用するには、default という名前を使用します。

 

String

camel.dataformat.bindy-fixed.type

Csv、Fixed、または KeyValue を使用するかどうか。

 

String

camel.dataformat.bindy-fixed.unwrap-single-instance

アンマーシャリング時に、java.util.List にラップする代わりに、単一のインスタンスをアンラップして返す必要があります。

true

ブール値

camel.dataformat.bindy-kvp.allow-empty-stream

アンマーシャルプロセスで空のストリームを許可するかどうか。true の場合、レコードのないボディが提供されたときに例外は出力されません。

false

ブール値

camel.dataformat.bindy-kvp.class-type

使用するモデルクラスの名前。

 

String

camel.dataformat.bindy-kvp.enabled

bindy-kvp データ形式の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.dataformat.bindy-kvp.locale

米国の us など、使用する既定のロケールを設定します。JVM プラットフォームのデフォルトロケールを使用するには、default という名前を使用します。

 

String

camel.dataformat.bindy-kvp.type

Csv、Fixed、または KeyValue を使用するかどうか。

 

String

camel.dataformat.bindy-kvp.unwrap-single-instance

アンマーシャリング時に、java.util.List にラップする代わりに、単一のインスタンスをアンラップして返す必要があります。

true

ブール値

第58章 HL7

HL7 コンポーネントは、HAPI ライブラリー を使用して HL7 MLLP プロトコルおよび HL7 v2 メッセージ を操作するために使用されます。

このコンポーネントは以下をサポートします。

  • Mina 用 HL7 MLLP コーデック
  • Netty 用の HL7 MLLP コーデック
  • HAPI および文字列との間の型コンバーター
  • HAPI ライブラリーを使用した HL7 DataFormat

Maven ユーザーは、このコンポーネントの pom.xml に以下の依存関係を追加する必要があります。

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-hl7</artifactId>
    <version>{CamelSBVersion}</version>
    <!-- use the same version as your Camel core version -->
</dependency>

58.1. HL7 MLLP プロトコル

HL7 は、多くの場合、テキストベースの TCP ソケットベースのプロトコルである HL7 MLLP プロトコルと共に使用されます。このコンポーネントには、MLLP プロトコルに準拠する Mina および Netty コーデックが付属しているため、TCP トランスポート層を介して HL7 要求を受け入れる HL7 リスナーを簡単に公開できます。HL7 リスナーサービスを公開するには、camel-mina または link: camel-netty コンポーネントを HL7MLLPCodec (mina) または HL7MLLPNettyDecoder/HL7MLLPNettyEncoder (Netty) と合わせて使用します。

HL7 MLLP コーデックは、次のように設定できます。

名前デフォルト値説明

startByte

0x0b

HL7 ペイロードにまたがる開始バイト。

endByte1

0x1c

HL7 ペイロードにまたがる最初のエンドバイト。

endByte2

0x0d

HL7 ペイロードにまたがる 2 番目のエンドバイト。

charset

JVM デフォルト

コーデックに使用するエンコーディング (文字セット名)。指定しない場合、Camel は JVM のデフォルトの文字セット を使用します。

produceString

true

true の場合、コーデックは定義された文字セットを使用して文字列を作成します。false の場合、コーデックはプレーンバイト配列をルートに送信し、HL7 データ形式で HL7 メッセージコンテンツからの実際の文字セットを判別できるようにします。

convertLFtoCR

false

HL7 が \r をセグメント終端記号として規定しているため、\n\r (0x0d、10 進数の 13) に変換します。HAPI ライブラリーでは \r を使用する必要があります。

58.1.1. Mina を使用した HL7 リスナーの公開

Spring XML ファイルでは、ポート 8888 で TCP を使用して HL7 リクエストをリッスンするように mina エンドポイントを設定します。

<endpoint id="hl7MinaListener" uri="mina:tcp://localhost:8888?sync=true&amp;codec=#hl7codec"/>

sync=true は、このリスナーが同期的であるため、HL7 応答を呼び出し元に返すことを示します。HL7 コーデックは、codec=#hl7codec で設定されます。hl7codec は単なる Spring Bean ID であるため、mygreatcodecforhl7 などの名前を指定できることに注意してください。コーデックは、Spring XML ファイルにも設定されています。

<bean id="hl7codec" class="org.apache.camel.component.hl7.HL7MLLPCodec">
    <property name="charset" value="iso-8859-1"/>
</bean>

以下の Java DSL の例が示すように、エンドポイント hl7MinaLlistener をルートで consumer として使用できます。

from("hl7MinaListener")
  .bean("patientLookupService");

これは、HL7 をリッスンし、patientLookupService という名前のサービスにルーティングする非常に単純なルートです。これは Spring Bean ID でもあり、Spring XML で次のように設定されます。

<bean id="patientLookupService" class="com.mycompany.healthcare.service.PatientLookupService"/>

次に示すように、Camel に依存しない POJO クラスでビジネスロジックを実装できます。

import ca.uhn.hl7v2.HL7Exception;
import ca.uhn.hl7v2.model.Message;
import ca.uhn.hl7v2.model.v24.segment.QRD;

public class PatientLookupService {
    public Message lookupPatient(Message input) throws HL7Exception {
        QRD qrd = (QRD)input.get("QRD");
        String patientId = qrd.getWhoSubjectFilter(0).getIDNumber().getValue();

        // find patient data based on the patient id and create a HL7 model object with the response
        Message response = ... create and set response data
        return response
    }

58.1.2. Netty を使用した HL7 リスナーの公開 (Camel 2.15 以降で使用可能)

Spring XML ファイルでは、ポート 8888 で TCP を使用して HL7 リクエストをリッスンするように netty エンドポイントを設定します。

<endpoint id="hl7NettyListener" uri="netty:tcp://localhost:8888?sync=true&amp;encoders=#hl7encoder&amp;decoders=#hl7decoder"/>

sync=true は、このリスナーが同期的であるため、HL7 応答を呼び出し元に返すことを示します。HL7 コーデックは、encoders=#hl7encoder*and*decoders=#hl7decoder で設定されます。hl7encoderhl7decoder は単なる Bean ID であるため、異なる名前が付けられる可能性があることに注意してください。Bean は Spring XML ファイルで設定できます。

<bean id="hl7decoder" class="org.apache.camel.component.hl7.HL7MLLPNettyDecoderFactory"/>
<bean id="hl7encoder" class="org.apache.camel.component.hl7.HL7MLLPNettyEncoderFactory"/>

次の Java DSL の例が示すように、エンドポイント hl7NettyListener を consumer としてルートで使用できます。

from("hl7NettyListener")
  .bean("patientLookupService");

58.2. java.lang.String または byte を使用する HL7 モデル

HL7 MLLP コーデックは、プレーンな String をデータ形式として使用します。Camel は Type Converter を使用して文字列を HAPI HL7 モデルオブジェクトに変換しますが、たとえば、データを自分で解析する場合など、必要に応じてプレーンな String オブジェクトを使用することもできます。

また、ProduceString プロパティーを false に設定することで、Mina コーデックと Netty コーデックの両方でプレーンな byte をデータ形式として使用できるようにします。Type Converter は、byte を HAPI HL7 モデルオブジェクトとの間で変換することもできます。

58.3. HAPI を使用した HL7v2 モデル

HL7v2 モデルは、HAPI ライブラリーの Java オブジェクトを使用します。このライブラリーを使用すると、HL7v2 で主に使用される EDI 形式 (ER7) からエンコードおよびデコードできます。

以下のサンプルは、患者 ID が 0101701234 の患者を検索するリクエストです。

MSH|^~\\&|MYSENDER|MYRECEIVER|MYAPPLICATION||200612211200||QRY^A19|1234|P|2.4
QRD|200612211200|R|I|GetPatient|||1^RD|0101701234|DEM||

HL7 モデルを使用すると、ca.uhn.hl7v2.model.Message オブジェクトを操作して、患者 ID などを取得できます。

Message msg = exchange.getIn().getBody(Message.class);
QRD qrd = (QRD)msg.get("QRD");
String patientId = qrd.getWhoSubjectFilter(0).getIDNumber().getValue();  // 0101701234

byteString、またはその他の単純なオブジェクト形式を操作する必要がないため、これは HL7 リスナーと組み合わせると強力です。HAPI HL7v2 モデルオブジェクトをそのまま使用できます。メッセージのタイプが事前にわかっている場合は、型の安全性をさらに確保できます。

QRY_A19 msg = exchange.getIn().getBody(QRY_A19.class);
String patientId = msg.getQRD().getWhoSubjectFilter(0).getIDNumber().getValue();

58.4. HL7 DataFormat

camel-hl7 JAR には、HL7 モデルオブジェクトのマーシャリングまたはアンマーシャリングに使用できる HL7 データ形式が同梱されています。

HL7 データ形式は、以下にリストされている 1 つのオプションをサポートしています。

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

validate

 

ブール値

HL7 メッセージを検証するかどうかデフォルトでは true です。

  • marshal = メッセージからバイトストリームへ (HL7 MLLP コーデックを使用して応答するときに使用できます)
  • unmarshal = バイトストリームからメッセージへ (HL7 MLLP からストリーミングデータを受信するときに使用できます)

データ形式を使用するには、単にインスタンスをインスタンス化し、ルートビルダーで整列化または非整列化操作を呼び出します。

  DataFormat hl7 = new HL7DataFormat();

  from("direct:hl7in")
    .marshal(hl7)
    .to("jms:queue:hl7out");

上記のサンプルでは、HL7 が HAPI メッセージオブジェクトからバイトストリームにマーシャリングされ、JMS キューに配置されます。
次の例は逆です。

  DataFormat hl7 = new HL7DataFormat();

  from("jms:queue:hl7out")
    .unmarshal(hl7)
    .to("patientLookupService");

ここでは、患者の検索サービスに渡される HAPI メッセージオブジェクトにバイトストリームを非整列化します。

58.4.1. セグメント区切り

アンマーシャリングは、\n\r に変換することによってセグメント区切りを自動的に修正しなくなりました。
この変換が必要な場合には、org.apache.camel.component.hl7.HL7#convertLFToCR は、この目的向けに便利な Expression を提供します。

58.4.2. Charset

marshal と unmarshal の両方が、フィールド MSH-18 で提供される文字セットを評価します。このフィールドが空の場合には、デフォルトで、対応する Camel 文字セットプロパティー/ヘッダーに含まれる文字セットが想定されます。HL7DataFormat クラスから継承するときに、guessCharsetName メソッドをオーバーライドして、このデフォルトの動作を変更することもできます。

Camel には、一般的に使用される既知のデータ形式の簡略構文があります。HL7DataFormat オブジェクトのインスタンスを作成する必要はありません。

  from("direct:hl7in")
    .marshal().hl7()
    .to("jms:queue:hl7out");

  from("jms:queue:hl7out")
    .unmarshal().hl7()
    .to("patientLookupService");

58.5. メッセージヘッダー

非整列化操作は、MSH セグメントからこれらのフィールドを Camel メッセージのヘッダーとして追加します。

キーMSH フィールド

CamelHL7SendingApplication

MSH-3

MYSERVER

CamelHL7SendingFacility

MSH-4

MYSERVERAPP

CamelHL7ReceivingApplication

MSH-5

MYCLIENT

CamelHL7ReceivingFacility

MSH-6

MYCLIENTAPP

CamelHL7Timestamp

MSH-7

20071231235900

CamelHL7Security

MSH-8

null

CamelHL7MessageType

MSH-9-1

ADT

CamelHL7TriggerEvent

MSH-9-2

A01

CamelHL7MessageControl

MSH-10

1234

CamelHL7ProcessingId

MSH-11

P

CamelHL7VersionId

MSH-12

2.4

CamelHL7Context

``

メッセージの解析に使用された内容が含まれる

CamelHL7Charset

MSH-18

UNICODE UTF-8

CamelHL7Context を除くすべてのヘッダーは String 型です。ヘッダー値が欠落している場合、その値は null です。

58.6. 依存関係

Camel ルートで HL7 を使用するには、このデータ形式を実装する上記の camel-hl7 に依存関係を追加する必要があります。

HAPI ライブラリーは、基本ライブラリー といくつかの構造ライブラリー (HL7v2 メッセージバージョンごとに 1 つ) に分割されています。

デフォルトでは、camel-hl7 は HAPI 基本ライブラリー のみを参照します。アプリケーションは、構造ライブラリー自体を追加します。たとえば、アプリケーションが HL7v2 メッセージバージョン 2.4 および 2.5 で動作する場合には、次の依存関係を追加する必要があります。

<dependency>
    <groupId>ca.uhn.hapi</groupId>
    <artifactId>hapi-structures-v24</artifactId>
    <version>2.2</version>
    <!-- use the same version as your hapi-base version -->
</dependency>
<dependency>
    <groupId>ca.uhn.hapi</groupId>
    <artifactId>hapi-structures-v25</artifactId>
    <version>2.2</version>
    <!-- use the same version as your hapi-base version -->
</dependency>

あるいは、基本ライブラリー、すべての構造ライブラリー、および必要な依存関係 (バンドルクラスパス上) を含む OSGi バンドルを 中央の Maven リポジトリー からダウンロードできます。

<dependency>
    <groupId>ca.uhn.hapi</groupId>
    <artifactId>hapi-osgi-base</artifactId>
    <version>2.2</version>
</dependency>

58.7. Spring Boot 自動設定

Spring Boot で hl7 を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-hl7-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 4 のオプションをサポートします。

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

camel.dataformat.hl7.enabled

hl7 データ形式の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.dataformat.hl7.validate

HL7 メッセージを検証するかどうかデフォルトでは true です。

true

ブール値

camel.language.hl7terser.enabled

hl7terser 言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.hl7terser.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

第59章 JacksonXML

Jackson XML は、Jackson ライブラリーXMLMapper 拡張機能 を使用して、XML ペイロードを Java オブジェクトにアンマーシャリングするか、Java オブジェクトを XML ペイロードにマーシャリングするデータ形式です。注記: Jackson に精通している場合、この XML データ形式は対応する JSON と同じように動作するため、JSON シリアライゼーション/デシリアライゼーションのアノテーションが付けられたクラスで使用できます。

この拡張機能は、JAXB のコードファーストアプローチ も模倣しています。

このデータ形式は、高速で効率的な XML プロセッサーである Woodstox (特に Pretty Print などの機能) に依存しています。

from("activemq:My.Queue").
  unmarshal().jacksonxml().
  to("mqseries:Another.Queue");

59.1. JacksonXML オプション

JacksonXML データ形式は、以下に示す 15 のオプションをサポートしています。

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

xmlMapper

 

String

指定された ID を持つ既存の XmlMapper を検索して使用します。

prettyPrint

false

ブール値

適切にフォーマットされたきれいな印刷出力を有効にします。デフォルトでは false です。

unmarshalType

 

String

アンマーシャリング時に使用する Java 型のクラス名。

jsonView

 

String

POJO を JSON にマーシャリングする際に、JSON 出力から特定のフィールドを除外する場合があります。Jackson では、JSON ビューを使用してこれを実現できます。このオプションは、JsonView アノテーションを持つクラスを参照するためのものです。

include

 

String

pojo を JSON にマーシャリングする必要があり、pojo に null 値を持つフィールドがいくつかある場合。これらの null 値をスキップする場合は、このオプションを NON_NULL に設定できます。

allowJmsType

 

ブール値

JMS ユーザーが JMS 仕様の JMSType ヘッダーを使用して、アンマーシャリングに使用する FQN クラス名を指定できるようにするために使用されます。

collectionType

 

String

使用するレジストリーを参照するカスタムコレクションタイプを参照します。このオプションはあまり使用しないでください。ただし、デフォルトとして java.util.Collection に基づくものとは異なるコレクションタイプを使用できます。

useList

 

ブール値

Map の List または Pojo の List にアンマーシャリングします。

enableJaxbAnnotationModule

 

ブール値

jackson の使用時に JAXB アノテーションモジュールを有効にするかどうか。有効にすると、Jackson によって JAXB アノテーションを使用できます。

moduleClassNames

 

String

カスタム Jackson モジュール com.fasterxml.jackson.databind.Module を使用するには、FQN クラス名を持つ文字列として指定します。複数のクラスはコンマで区切ることができます。

moduleRefs

 

String

Camel レジストリーから参照されるカスタム Jackson モジュールを使用します。複数のモジュールはコンマで区切ることができます。

enableFeatures

 

String

Jackson com.fasterxml.jackson.databind.ObjectMapper で有効にする機能のセット。機能は、com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature、または com.fasterxml.jackson.databind.MapperFeature の列挙型と一致する名前である必要があります。複数の機能はコンマで区切ることができます。

disableFeatures

 

String

Jackson com.fasterxml.jackson.databind.ObjectMapper で無効にする機能のセット。機能は、com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature、または com.fasterxml.jackson.databind.MapperFeature の列挙型と一致する名前である必要があります。複数の機能はコンマで区切ることができます。

allowUnmarshallType

 

ブール値

有効にすると、Jackson はアンマーシャリング中に CamelJacksonUnmarshalType ヘッダーの使用を試みることができます。これは、使用する必要がある場合にのみ有効にする必要があります。

contentTypeHeader

 

ブール値

データ形式が Content-Type ヘッダーにデータ形式のタイプを設定する必要があるかどうか。たとえば、XML にマーシャリングするデータ形式の場合は application/xml、JSON にマーシャリングするデータ形式の場合は application/json です。

59.1.1. Spring DSL での Jackson XML の使用

Spring DSL でデータ形式を使用する場合には、最初にデータ形式を宣言する必要があります。これは DataFormats XML タグで行われます。

        <dataFormats>
            <!-- here we define a Xml data format with the id jack and that it should use the TestPojo as the class type when
                 doing unmarshal. The unmarshalType is optional, if not provided Camel will use a Map as the type -->
            <jacksonxml id="jack" unmarshalType="org.apache.camel.component.jacksonxml.TestPojo"/>
        </dataFormats>

そして、ルートでこの ID を参照できます。

       <route>
            <from uri="direct:back"/>
            <unmarshal><custom ref="jack"/></unmarshal>
            <to uri="mock:reverse"/>
        </route>

59.1.2. POJO フィールドをマーシャリングから除外する

POJO を XML にマーシャリングするときに、XML 出力から特定のフィールドを除外する場合があります。Jackson では、JSON ビュー を使用してこれを実現できます。まず、1 つ以上のマーカークラスを作成します。

@JsonView アノテーションでマーカークラスを使用して、特定のフィールドの追加や除外を行います。アノテーションはゲッターでも機能します。

最後に、Camel JacksonXMLDataFormat を使用して、上記の POJO を XML にマーシャリングします。

結果の XML に weight フィールドがないことに注意してください。

<pojo age="30" weight="70"/>

59.2. `JacksonXML`DataFormat で jsonView 属性を使用する Include/Exclude フィールド

この属性を使用する例として、代わりに次のことができます。

JacksonXMLDataFormat ageViewFormat = new JacksonXMLDataFormat(TestPojoView.class, Views.Age.class);
from("direct:inPojoAgeView").
  marshal(ageViewFormat);

Java DSL 内で JSON ビュー を次のように直接指定します。

from("direct:inPojoAgeView").
  marshal().jacksonxml(TestPojoView.class, Views.Age.class);

XML DSL でも同じです。

<from uri="direct:inPojoAgeView"/>
  <marshal>
    <jacksonxml unmarshalType="org.apache.camel.component.jacksonxml.TestPojoView" jsonView="org.apache.camel.component.jacksonxml.Views$Age"/>
  </marshal>

59.3. シリアル化の include オプションの設定

pojo を XML にマーシャリングする必要があり、pojo に null 値を持つフィールドがいくつかある場合。これらの null 値をスキップする場合は、pojo にアノテーションを設定する必要があります。

@JsonInclude(Include.NON_NULL)
public class MyPojo {
   ...
}

ただし、これには pojo ソースコードにそのアノテーションを含める必要があります。以下に示すように、Camel JacksonXMLDataFormat を設定して include オプションを設定することもできます。

JacksonXMLDataFormat format = new JacksonXMLDataFormat();
format.setInclude("NON_NULL");

または、XML DSL から、これを次のように設定します。

    <dataFormats>
      <jacksonxml id="jacksonxml" include="NON_NULL"/>
    </dataFormats>

59.4. 動的クラス名を使用した XML から POJO へのアンマーシャリング

jackson を使用して XML を POJO に非整列化する場合、非整列化先のクラス名を示すヘッダーをメッセージに指定できるようになりました。
そのヘッダーがメッセージに存在する場合、ヘッダーにはキー CamelJacksonUnmarshalType があり、Jackson はそれを POJO クラスの FQN として使用して、XML ペイロードを非整列化します。

 For JMS end users there is the JMSType header from the JMS spec that
indicates that also. To enable support for JMSType you would need to
turn that on, on the jackson data format as shown:
JacksonDataFormat format = new JacksonDataFormat();
format.setAllowJmsType(true);

または、XML DSL から、これを次のように設定します。

    <dataFormats>
      <jacksonxml id="jacksonxml" allowJmsType="true"/>
    </dataFormats>

59.5. XML から List<Map> または List<pojo> へのアンマーシャリング

Jackson を使用して XML を map/pojo のリストに非整列化する場合には、useList="true" を設定するか、org.apache.camel.component.jacksonxml.ListJacksonXMLDataFormat を使用してこれを指定できるようになりました。たとえば、Java を使用すると、次のように実行できます。

JacksonXMLDataFormat format = new ListJacksonXMLDataFormat();
// or
JacksonXMLDataFormat format = new JacksonXMLDataFormat();
format.useList();
// and you can specify the pojo class type also
format.setUnmarshalType(MyPojo.class);

また、XML DSL を使用する場合は、以下に示すように useList 属性でリストを使用するように設定します。

    <dataFormats>
      <jacksonxml id="jack" useList="true"/>
    </dataFormats>

また、pojo タイプも指定できます。

    <dataFormats>
      <jacksonxml id="jack" useList="true" unmarshalType="com.foo.MyPojo"/>
    </dataFormats>

59.6. カスタム Jackson モジュールの使用

以下に示すように、moduleClassNames オプションを使用してそれらのクラス名を指定して、カスタム Jackson モジュールを使用できます。

    <dataFormats>
      <jacksonxml id="jack" useList="true" unmarshalType="com.foo.MyPojo" moduleClassNames="com.foo.MyModule,com.foo.MyOtherModule"/>
    </dataFormats>

moduleClassNames を使用する場合には、デフォルトのコンストラクターを使って作成され、そのまま使用されるので、カスタム jackson モジュールは設定されません。カスタムモジュールにカスタム設定が必要な場合は、モジュールのインスタンスを作成して設定し、次に示すように modulesRefs を使用してモジュールを参照できます。

    <bean id="myJacksonModule" class="com.foo.MyModule">
      ... // configure the module as you want
    </bean>

    <dataFormats>
      <jacksonxml id="jacksonxml" useList="true" unmarshalType="com.foo.MyPojo" moduleRefs="myJacksonModule"/>
    </dataFormats>
 Multiple modules can be specified separated by comma, such as
moduleRefs="myJacksonModule,myOtherModule"

59.7. Jackson を使用した機能の有効化または無効化

Jackson には、有効または無効にできる機能が多くあり、その ObjectMapper が使用します。たとえば、マーシャリング時に不明なプロパティーでの失敗を無効にするには、disableFeatures を使用してこれを設定できます。

 <dataFormats>
      <jacksonxml id="jacksonxml" unmarshalType="com.foo.MyPojo" disableFeatures="FAIL_ON_UNKNOWN_PROPERTIES"/>
 </dataFormats>

コンマを使用して値を区切って、複数の機能を無効にすることができます。機能の値は、次の列挙型クラスの Jackson の列挙型の名前である必要があります

  • com.fasterxml.jackson.databind.SerializationFeature
  • com.fasterxml.jackson.databind.DeserializationFeature
  • com.fasterxml.jackson.databind.MapperFeature

機能を有効にするには、代わりに enableFeatures オプションを使用します。

Java コードからは、camel-jackson モジュールのタイプセーフなメソッドを使用できます。

JacksonDataFormat df = new JacksonDataFormat(MyPojo.class);
df.disableFeature(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES);
df.disableFeature(DeserializationFeature.FAIL_ON_NULL_FOR_PRIMITIVES);

59.8. Jackson を使用してマップを POJO に変換する

Jackson ObjectMapper を使用して、マップを POJO オブジェクトに変換できます。Jackson コンポーネントには、java.util.Map インスタンスを String、Primitive、および Number 以外のオブジェクトに変換のに使用できるデータコンバーターが付属しています。

Map<String, Object> invoiceData = new HashMap<String, Object>();
invoiceData.put("netValue", 500);
producerTemplate.sendBody("direct:mapToInvoice", invoiceData);
...
// Later in the processor
Invoice invoice = exchange.getIn().getBody(Invoice.class);

Camel レジストリーで利用可能な ObjectMapper インスタンスが 1 つある場合には、コンバーターはそれを使用して変換します。それ以外の場合は、デフォルトのマッパーが使用されます。

59.9. フォーマット済み XML マーシャリング (pretty-printing)

prettyPrint オプションを使用すると、マーシャリング中に適切にフォーマットされた XML を出力できます。

 <dataFormats>
      <jacksonxml id="jack" prettyPrint="true"/>
 </dataFormats>

そして Java DSL の場合:

from("direct:inPretty").marshal().jacksonxml(true);

unmarshalTypejsonView などの他の設定と組み合わせて prettyPrint オプションをサポートする、オーバーロードされた jacksonxml () DSL メソッドが 5 種あることに注意してください。

59.10. 依存関係

camel ルートで Jackson XML を使用するには、このデータ形式を実装する camel-jacksonxml に依存関係を追加する必要があります。

Maven を使用する場合は、pom.xml に以下を追加するだけで、バージョン番号を最新かつ最高のリリースに置き換えます (最新バージョンのダウンロードページを参照してください)。

<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-jacksonxml</artifactId>
  <version>{CamelSBVersion}</version>
  <!-- use the same version as your Camel core version -->
</dependency>

59.11. Spring Boot 自動設定

Spring Boot で jacksonxml を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-jacksonxml-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 16 のオプションをサポートします。

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

camel.dataformat.jacksonxml.allow-jms-type

JMS ユーザーが JMS 仕様の JMSType ヘッダーを使用して、アンマーシャリングに使用する FQN クラス名を指定できるようにするために使用されます。

false

Boolean

camel.dataformat.jacksonxml.allow-unmarshall-type

有効にすると、Jackson はアンマーシャリング中に CamelJacksonUnmarshalType ヘッダーの使用を試みることができます。これは、使用する必要がある場合にのみ有効にする必要があります。

false

ブール値

camel.dataformat.jacksonxml.collection-type

使用するレジストリーを参照するカスタムコレクションタイプを参照します。このオプションはあまり使用しないでください。ただし、デフォルトとして java.util.Collection に基づくものとは異なるコレクションタイプを使用できます。

 

String

camel.dataformat.jacksonxml.content-type-header

データ形式が Content-Type ヘッダーにデータ形式のタイプを設定する必要があるかどうか。たとえば、XML にマーシャリングするデータ形式の場合は application/xml、JSON にマーシャリングするデータ形式の場合は application/json です。

true

ブール値

camel.dataformat.jacksonxml.disable-features

Jackson com.fasterxml.jackson.databind.ObjectMapper で無効にする機能のセット。機能は、com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature、または com.fasterxml.jackson.databind.MapperFeature の列挙型と一致する名前である必要があります。複数の機能はコンマで区切ることができます。

 

String

camel.dataformat.jacksonxml.enable-features

Jackson com.fasterxml.jackson.databind.ObjectMapper で有効にする機能のセット。機能は、com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature、または com.fasterxml.jackson.databind.MapperFeature の列挙型と一致する名前である必要があります。複数の機能はコンマで区切ることができます。

 

String

camel.dataformat.jacksonxml.enable-jaxb-annotation-module

jackson の使用時に JAXB アノテーションモジュールを有効にするかどうか。有効にすると、Jackson によって JAXB アノテーションを使用できます。

false

Boolean

camel.dataformat.jacksonxml.enabled

jacksonxml データ形式の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.dataformat.jacksonxml.include

pojo を JSON にマーシャリングする必要があり、pojo に null 値を持つフィールドがいくつかある場合。これらの null 値をスキップする場合は、このオプションを NON_NULL に設定できます。

 

String

camel.dataformat.jacksonxml.json-view

POJO を JSON にマーシャリングする際に、JSON 出力から特定のフィールドを除外する場合があります。Jackson では、JSON ビューを使用してこれを実現できます。このオプションは、JsonView アノテーションを持つクラスを参照するためのものです。

 

String

camel.dataformat.jacksonxml.module-class-names

カスタム Jackson モジュール com.fasterxml.jackson.databind.Module を使用するには、FQN クラス名を持つ文字列として指定します。複数のクラスはコンマで区切ることができます。

 

String

camel.dataformat.jacksonxml.module-refs

Camel レジストリーから参照されるカスタム Jackson モジュールを使用します。複数のモジュールはコンマで区切ることができます。

 

String

camel.dataformat.jacksonxml.pretty-print

適切にフォーマットされたきれいな印刷出力を有効にします。デフォルトでは false です。

false

ブール値

camel.dataformat.jacksonxml.unmarshal-type

アンマーシャリング時に使用する Java 型のクラス名。

 

String

camel.dataformat.jacksonxml.use-list

Map の List または Pojo の List にアンマーシャリングします。

false

Boolean

camel.dataformat.jacksonxml.xml-mapper

指定された ID を持つ既存の XmlMapper を検索して使用します。

 

String

第60章 JAXB

JAXB は、Java 6 に含まれている JAXB2 XML マーシャリング標準を使用して、XML ペイロードを Java オブジェクトにアンマーシャリングするか、Java オブジェクトを XML ペイロードにマーシャリングするデータ形式です。

60.1. オプション

JAXB データ形式は、以下にリストされているオプションを 19 個サポートしています。

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

contextPath

 

String

必須 JAXB クラスが配置されているパッケージ名。

contextPathIsClassName

 

ブール値

これを true に設定すると、contextPath がパッケージ名ではなくクラス名を参照していることを示すことができます。

schema

 

String

既存のスキーマに対して検証します。接頭辞 classpath:、file:、または http: を使用して、リソースの解決方法を指定できます。「,」文字を使用して、複数のスキーマファイルを区切ることができます。

schemaSeverityLevel

 

Enum

スキーマに対して検証するときに使用するスキーマの重大度レベルを設定します。このレベルは、重大度が最小のエラーを判断し、JAXB をトリガーして解析の続行を停止します。デフォルト値の 0 (警告) は、エラー (警告、エラー、または致命的なエラー) によって JAXB が停止することを意味します。0=警告、1=エラー、2=致命的なエラーという 3 つのレベルがあります。

列挙値:

  • 0
  • 1
  • 2

prettyPrint

 

ブール値

適切にフォーマットされたきれいな印刷出力を有効にします。デフォルトでは false です。

objectFactory

 

ブール値

マーシャリング中に ObjectFactory クラスを使用して POJO クラスを作成できるようにするかどうか。これは、JAXB でアノテーションが付けられておらず、jaxb.index 記述子ファイルを提供していない POJO クラスにのみ適用されます。

ignoreJAXBElement

 

ブール値

JAXBElement 要素を無視するかどうか。非常に特殊なユースケースでのみ false に設定する必要があります。

mustBeJAXBElement

 

ブール値

マーシャリングが JAXB アノテーション付きの Java オブジェクトでなければならないかどうか。そうでない場合は失敗します。このオプションを false に設定すると、データがすでに XML 形式になっている場合など、設定が緩和されます。

filterNonXmlChars

 

ブール値

xml 以外の文字を無視し、空白に置き換えます。

encoding

 

String

特定のエンコーディングを無効にして使用します。

fragment

 

ブール値

XML フラグメントツリーのマーシャリングをオンにします。デフォルトでは、JAXB は指定されたクラスの XmlRootElement アノテーションを探して、XML ツリー全体を操作します。これは便利ですが、常に有用であるわけではありません。たとえば、生成されたコードに XmlRootElement アノテーションがない場合や、ツリーの一部だけを非整列化する必要がある場合などが挙げられます。その場合、部分的なアンマーシャリングを使用できます。この動作を有効にするには、プロパティー partClass を設定する必要があります。Camel は、このクラスを JAXB のアンマーシャラーに渡します。

partClass

 

String

フラグメント解析に使用されるクラスの名前。詳細については、フラグメントオプションを参照してください。

partNamespace

 

String

フラグメントの解析に使用する XML 名前空間。詳細については、フラグメントオプションを参照してください。

namespacePrefixRef

 

String

JAXB または SOAP を使用してマーシャリングする場合、JAXB 実装は、ns2、ns3、ns4 などの名前空間接頭辞を自動的に割り当てます。このマッピングを制御するために、Camel では目的のマッピングを含むマップを参照できます。

xmlStreamWriterWrapper

 

String

カスタム xml ストリームライターを使用します。

schemaLocation

 

String

スキーマの場所を定義します。

noNamespaceSchemaLocation

 

String

名前空間のないスキーマの場所を定義します。

jaxbProviderProperties

 

String

カスタム java.util.Map を参照して、JAXB マーシャラーで使用されるカスタム JAXB プロバイダープロパティーを含むレジストリーを検索します。

contentTypeHeader

 

ブール値

データ形式が Content-Type ヘッダーにデータ形式のタイプを設定する必要があるかどうか。たとえば、XML にマーシャリングするデータ形式の場合は application/xml、JSON にマーシャリングするデータ形式の場合は application/json です。

60.2. Java DSL を使用

たとえば、次の例では、多数の Java パッケージ名で設定された jaxb の名前付き DataFormat を使用して JAXBContext を初期化します。

DataFormat jaxb = new JaxbDataFormat("com.acme.model");

from("activemq:My.Queue").
  unmarshal(jaxb).
  to("mqseries:Another.Queue");

必要に応じて、Spring XML ファイルなどを介してレジストリーで定義できるデータ形式への名前付き参照を使用できます。以下の例を示します。

from("activemq:My.Queue").
  unmarshal("myJaxbDataType").
  to("mqseries:Another.Queue");

60.3. Spring XML の使用

次の例は、JaxbDataFormat を設定し、それを複数のルートで使用する方法を示しています。

<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="myJaxb" class="org.apache.camel.converter.jaxb.JaxbDataFormat">
    <property name="contextPath" value="org.apache.camel.example"/>
  </bean>

  <camelContext xmlns="http://camel.apache.org/schema/spring">
    <route>
      <from uri="direct:start"/>
      <marshal><custom ref="myJaxb"/></marshal>
      <to uri="direct:marshalled"/>
    </route>
    <route>
      <from uri="direct:marshalled"/>
      <unmarshal><custom ref="myJaxb"/></unmarshal>
      <to uri="mock:result"/>
    </route>
  </camelContext>

</beans>

複数のコンテキストパス

このデータ形式は、複数のコンテキストパスで使用できます。com.mycompany:com.mycompany2 のように、セパレータとして : を使用してコンテキストパスを指定できます。これは JAXB 実装によって処理され、RI とは異なるベンダーを使用すると変更される可能性があることに注意してください。

60.4. 部分マーシャリング/アンマーシャリング

JAXB 2 は、XML ツリーフラグメントのマーシャリングとアンマーシャリングをサポートしています。デフォルトでは、JAXB は指定されたクラスの @XmlRootElement アノテーションを探して、XML ツリー全体を操作します。これは便利ですが、常に有用であるわけではありません。たとえば、生成されたコードに @XmlRootElement アノテーションがない場合や、ツリーの一部だけを非整列化する必要がある場合などが挙げられます。

その場合、部分的なアンマーシャリングを使用できます。この動作を有効にするには、プロパティー partClass を設定する必要があります。Camel は、このクラスを JAXB のアンマーシャラーに渡します。JaxbConstants.JAXB_PART_CLASS がヘッダーの 1 つとして設定されている場合 (DataFormat に partClass プロパティーが設定されていても)、DataFormat のプロパティーが優先され、ヘッダーに設定されているものが使用されます。

マーシャリング用に、宛先名前空間の QName を含む partNamespace 属性を追加する必要があります。Spring DSL の例は、上記で確認できます。

JaxbConstants.JAXB_PART_NAMESPACE がヘッダーの 1 つとして設定されている場合 (DataFormat で partNamespace プロパティーが設定されていても)、DataFormat のプロパティーが優先されて、ヘッダーに設定されているものが使用されます。JaxbConstants.JAXB_PART_NAMESPACE を使用して partNamespace を設定する際、それに対する値 \{namespaceUri}localPart を指定する必要があることに注意してください。

   ...
   .setHeader(JaxbConstants.JAXB_PART_NAMESPACE, simple("{http://www.camel.apache.org/jaxb/example/address/1}address"));
   ...

60.5. フラグメント

JaxbDataFormat には、JAXB Marshaller で Marshaller.JAXB_FRAGMENT エンコーディングプロパティーを設定できる新しいプロパティーフラグメントがあります。JAXB Marshaller に XML 宣言を生成さない場合は、このオプションを true に設定できます。このプロパティーのデフォルト値は false です。

60.6. XML 以外の文字の無視

JaxbDataFormat は NonXML Character の無視をサポートしています。filterNonXmlChars プロパティーを true に設定するだけで、JaxbDataFormat はメッセージのマーシャリングまたはアンマーシャリング時に NonXML 文字を " " に置き換えます。Exchange プロパティー Exchange.FILTER_NON_XML_CHARS を設定して行うこともできます。

 JDK 1.5JDK 1.6 以降

フィルタリングの使用

StAX API と実装

いいえ

フィルタリングの使用なし

StAX API のみ

いいえ

この機能は、Woodstox 3.2.9 および Sun JDK 1.6 StAX 実装でテストされています。

JaxbDataFormat では、ストリームを XML にマーシャリングするために使用される XMLStreamWriter をカスタマイズできるようになりました。この設定を使用すると、独自のストリームライターを追加して、xml 以外の文字を完全に削除、エスケープ、または置換できます。

   JaxbDataFormat customWriterFormat = new JaxbDataFormat("org.apache.camel.foo.bar");
  customWriterFormat.setXmlStreamWriterWrapper(new TestXmlStreamWriter());

次の例は、Spring DSL を使用し、Camel の NonXML フィルタリングも有効にすることを示しています。

<bean id="testXmlStreamWriterWrapper" class="org.apache.camel.jaxb.TestXmlStreamWriter"/>
<jaxb filterNonXmlChars="true"  contextPath="org.apache.camel.foo.bar" xmlStreamWriterWrapper="#testXmlStreamWriterWrapper" />

60.7. ObjectFactory の操作

XJC を使用してスキーマから Java クラスを作成すると、JAXB コンテキストの ObjectFactory が取得されます。ObjectFactory は JAXBElement を使用してスキーマと要素インスタンス値の参照を保持するため、jaxbDataformat はデフォルトで JAXBElement を無視し、アンマーシャリングされたメッセージボディーから JAXBElement オブジェクトの代わりに要素インスタンス値を取得します。

アンマーシャリングされたメッセージボディーから JAXBElement オブジェクトを取得する場合は、JaxbDataFormat オブジェクトの ignoreJAXBElement プロパティーを false に設定する必要があります。

60.8. エンコーディングの設定

マーシャリング時に使用する エンコード オプションを設定できます。JAXB Marshaller の Marshaller.JAXB_ENCODING エンコーディングプロパティーです。

JAXB データ形式を宣言するときに使用するエンコーディングを設定できます。Exchange プロパティー Exchange.CHARSET_NAME でエンコーディングを指定することもできます。このプロパティーは、JAXB データ形式に設定されたエンコーディングを無効にします。

この Spring DSL で、エンコードとして iso-8859-1 を使用するように定義しました。

60.9. 名前空間接頭辞のマッピングの制御

JAXB または SOAP を使用してマーシャリングする場合、JAXB 実装は、ns2、ns3、ns4 などの namespace 接頭辞を自動的に割り当てます。このマッピングを制御するために、Camel では目的のマッピングを含むマップを参照できます。

マッピング機能は、サポートされているかどうかにかかわらず、JAXB の実装に依存するため、クラスパスに JAXB-RI 2.1 以降 (SUN から) が必要であることに注意してください。

たとえば、Spring XML では、マッピングを使用して Map を定義できます。以下のマッピングファイルでは、SOAP を接頭辞として使用するように SOAP をマッピングします。カスタムの名前空間 http://www.mycompany.com/foo/2 は接頭辞を使用していません。

  <util:map id="myMap">
    <entry key="http://www.w3.org/2003/05/soap-envelope" value="soap"/>
    <!-- we dont want any prefix for our namespace -->
    <entry key="http://www.mycompany.com/foo/2" value=""/>
  </util:map>

これを JAXB または SOAP で使用するには、以下に示すように namespacePrefixRef 属性を使用して、このマップを参照します。次に、Camel はレジストリーで、上記で定義した ID "myMap" を持つ java.util.Map を検索します。

  <marshal>
    <soapjaxb version="1.2" contextPath="com.mycompany.foo" namespacePrefixRef="myMap"/>
  </marshal>

60.10. スキーマ検証

JAXB データ形式は、XML との間でマーシャリングおよびアンマーシャリングによる検証をサポートしています。接頭辞 classpath:file:、または http: を使用して、リソースの解決方法を指定できます。',' 文字を使用して、複数のスキーマファイルを区切ることができます。

Java DSL を使用すると、次のように設定できます。

JaxbDataFormat jaxbDataFormat = new JaxbDataFormat();
jaxbDataFormat.setContextPath(Person.class.getPackage().getName());
jaxbDataFormat.setSchema("classpath:person.xsd,classpath:address.xsd");

XML DSL を使用して同じことができます。

<marshal>
    <jaxb id="jaxb" schema="classpath:person.xsd,classpath:address.xsd"/>
</marshal>

JDK に同梱されている SchemaFactory はスレッドセーフではないため、Camel はその場で下層の SchemaFactory インスタンスを作成してプールします。
ただし、スレッドセーフな SchemaFactory 実装がある場合は、JAXB データ形式を設定して、この実装を使用できます。

JaxbDataFormat jaxbDataFormat = new JaxbDataFormat();
jaxbDataFormat.setSchemaFactory(thradSafeSchemaFactory);

60.11. スキーマの場所

JAXB データ形式は、XML のマーシャリング時に SchemaLocation の指定をサポートしています。

Java DSL を使用すると、次のように設定できます。

JaxbDataFormat jaxbDataFormat = new JaxbDataFormat();
jaxbDataFormat.setContextPath(Person.class.getPackage().getName());
jaxbDataFormat.setSchemaLocation("schema/person.xsd");

XML DSL を使用して同じことができます。

<marshal>
    <jaxb id="jaxb" schemaLocation="schema/person.xsd"/>
</marshal>

60.12. すでに XML になっているデータのマーシャリング

JAXB マーシャラーは、メッセージボディーが JAXB 互換である必要があります (例: JAXBElement、JAXB アノテーションを持つ、または JAXBElement を拡張する Java インスタンス)。メッセージボディーがすでに XML になっている場合があります (例: String 型)。

このチェックを緩和するために、false に設定できる新しいオプション mustBeJAXBElement があるため、JAXB マーシャラーは JAXBElement のみをマーシャリングしようとします (javax.xml.bind.JAXBIntrospector#isElement は true を返します)。このような状況では、マーシャラーはフォールバックして、メッセージボディーをそのままマーシャリングします。

60.13. 依存関係

camel ルートで JAXB を使用するには、このデータ形式を実装する camel-jaxb に依存関係を追加する必要があります。

Maven を使用する場合は、pom.xml に以下を追加するだけで、バージョン番号を最新かつ最高のリリースに置き換えます (最新バージョンのダウンロードページを参照してください)。

<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-jaxb</artifactId>
  <version>{CamelSBVersion}</version>
</dependency>

60.14. Spring Boot 自動設定

Spring Boot で jaxb を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-jaxb-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 20 のオプションをサポートします。

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

camel.dataformat.jaxb.content-type-header

データ形式が Content-Type ヘッダーにデータ形式のタイプを設定する必要があるかどうか。たとえば、XML にマーシャリングするデータ形式の場合は application/xml、JSON にマーシャリングするデータ形式の場合は application/json です。

true

ブール値

camel.dataformat.jaxb.context-path

JAXB クラスが配置されているパッケージ名。

 

String

camel.dataformat.jaxb.context-path-is-class-name

これを true に設定すると、contextPath がパッケージ名ではなくクラス名を参照していることを示すことができます。

false

ブール値

camel.dataformat.jaxb.enabled

jaxb データ形式の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.dataformat.jaxb.encoding

特定のエンコーディングを無効にして使用します。

 

String

camel.dataformat.jaxb.filter-non-xml-chars

xml 以外の文字を無視し、空白に置き換えます。

false

Boolean

camel.dataformat.jaxb.fragment

XML フラグメントツリーのマーシャリングをオンにします。デフォルトでは、JAXB は指定されたクラスの XmlRootElement アノテーションを探して、XML ツリー全体を操作します。これは便利ですが、常に有用であるわけではありません。たとえば、生成されたコードに XmlRootElement アノテーションがない場合や、ツリーの一部だけを非整列化する必要がある場合などが挙げられます。その場合、部分的なアンマーシャリングを使用できます。この動作を有効にするには、プロパティー partClass を設定する必要があります。Camel は、このクラスを JAXB のアンマーシャラーに渡します。

false

Boolean

camel.dataformat.jaxb.ignore-j-a-x-b-element

JAXBElement 要素を無視するかどうか。非常に特殊なユースケースでのみ false に設定する必要があります。

false

Boolean

camel.dataformat.jaxb.jaxb-provider-properties

カスタム java.util.Map を参照して、JAXB マーシャラーで使用されるカスタム JAXB プロバイダープロパティーを含むレジストリーを検索します。

 

String

camel.dataformat.jaxb.must-be-j-a-x-b-element

マーシャリングが JAXB アノテーション付きの Java オブジェクトでなければならないかどうか。そうでない場合は失敗します。このオプションを false に設定すると、データがすでに XML 形式になっている場合など、設定が緩和されます。

false

Boolean

camel.dataformat.jaxb.namespace-prefix-ref

JAXB または SOAP を使用してマーシャリングする場合、JAXB 実装は、ns2、ns3、ns4 などの名前空間接頭辞を自動的に割り当てます。このマッピングを制御するために、Camel では目的のマッピングを含むマップを参照できます。

 

String

camel.dataformat.jaxb.no-namespace-schema-location

名前空間のないスキーマの場所を定義します。

 

String

camel.dataformat.jaxb.object-factory

マーシャリング中に ObjectFactory クラスを使用して POJO クラスを作成できるようにするかどうか。これは、JAXB でアノテーションが付けられておらず、jaxb.index 記述子ファイルを提供していない POJO クラスにのみ適用されます。

false

Boolean

camel.dataformat.jaxb.part-class

フラグメント解析に使用されるクラスの名前。詳細については、フラグメントオプションを参照してください。

 

String

camel.dataformat.jaxb.part-namespace

フラグメントの解析に使用する XML 名前空間。詳細については、フラグメントオプションを参照してください。

 

String

camel.dataformat.jaxb.pretty-print

適切にフォーマットされたきれいな印刷出力を有効にします。デフォルトでは false です。

false

Boolean

camel.dataformat.jaxb.schema

既存のスキーマに対して検証します。接頭辞 classpath:、file:、または http: を使用して、リソースの解決方法を指定できます。「,」文字を使用して、複数のスキーマファイルを区切ることができます。

 

String

camel.dataformat.jaxb.schema-location

スキーマの場所を定義します。

 

String

camel.dataformat.jaxb.schema-severity-level

スキーマに対して検証するときに使用するスキーマの重大度レベルを設定します。このレベルは、重大度が最小のエラーを判断し、JAXB をトリガーして解析の続行を停止します。デフォルト値の 0 (警告) は、エラー (警告、エラー、または致命的なエラー) によって JAXB が停止することを意味します。0=警告、1=エラー、2=致命的なエラーという 3 つのレベルがあります。

0

Integer

camel.dataformat.jaxb.xml-stream-writer-wrapper

カスタム xml ストリームライターを使用します。

 

String

第61章 JSON Gson

Gson は、Gson Library を使用するデータ形式です。

from("activemq:My.Queue").
  marshal().json(JsonLibrary.Gson).
  to("mqseries:Another.Queue");

61.1. Gson オプション

JSON Gson データ形式は、以下に示す 3 つのオプションをサポートしています。

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

prettyPrint

 

ブール値

適切にフォーマットされたきれいな印刷出力を有効にします。デフォルトでは false です。

unmarshalType

 

String

アンマーシャリング時に使用する Java 型のクラス名。

contentTypeHeader

 

ブール値

データ形式が Content-Type ヘッダーにデータ形式のタイプを設定する必要があるかどうか。たとえば、XML にマーシャリングするデータ形式の場合は application/xml、JSON にマーシャリングするデータ形式の場合は application/json です。

61.2. 依存関係

camel ルートで Gson を使用するには、このデータ形式を実装する camel-gson への依存関係を追加する必要があります。

Maven を使用する場合は、pom.xml に以下を追加するだけで、バージョン番号を最新かつ最高のリリースに置き換えます (最新バージョンのダウンロードページを参照してください)。

<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-gson</artifactId>
  <version>{CamelSBVersion}</version>
  <!-- use the same version as your Camel core version -->
</dependency>

61.3. Spring Boot 自動設定

Spring Boot で json-gson を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-gson-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 4 のオプションをサポートします。

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

camel.dataformat.json-gson.content-type-header

データ形式が Content-Type ヘッダーにデータ形式のタイプを設定する必要があるかどうか。たとえば、XML にマーシャリングするデータ形式の場合は application/xml、JSON にマーシャリングするデータ形式の場合は application/json です。

true

ブール値

camel.dataformat.json-gson.enabled

json-gson データ形式の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.dataformat.json-gson.pretty-print

適切にフォーマットされたきれいな印刷出力を有効にします。デフォルトでは false です。

false

ブール値

camel.dataformat.json-gson.unmarshal-type

アンマーシャリング時に使用する Java 型のクラス名。

 

String

第62章 JSON Jackson

Jackson は、Jackson Library を使用するデータ形式です。

from("activemq:My.Queue").
  marshal().json(JsonLibrary.Jackson).
  to("mqseries:Another.Queue");

62.1. Jackson オプション

JSON Jackson データ形式は、以下に示す 20 のオプションをサポートしています。

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

objectMapper

 

String

Jackson を使用する場合は、指定された ID で既存の ObjectMapper を検索して使用します。

useDefaultObjectMapper

 

ブール値

レジストリーからデフォルトの Jackson ObjectMapper を検索して使用するかどうか。

prettyPrint

 

ブール値

適切にフォーマットされたきれいな印刷出力を有効にします。デフォルトでは false です。

unmarshalType

 

String

アンマーシャリング時に使用する Java 型のクラス名。

jsonView

 

String

POJO を JSON にマーシャリングする際に、JSON 出力から特定のフィールドを除外する場合があります。Jackson では、JSON ビューを使用してこれを実現できます。このオプションは、JsonView アノテーションを持つクラスを参照するためのものです。

include

 

String

pojo を JSON にマーシャリングする必要があり、pojo に null 値を持つフィールドがいくつかある場合。これらの null 値をスキップする場合は、このオプションを NON_NULL に設定できます。

allowJmsType

 

ブール値

JMS ユーザーが JMS 仕様の JMSType ヘッダーを使用して、アンマーシャリングに使用する FQN クラス名を指定できるようにするために使用されます。

collectionType

 

String

使用するレジストリーを参照するカスタムコレクションタイプを参照します。このオプションはあまり使用しないでください。ただし、デフォルトとして java.util.Collection に基づくものとは異なるコレクションタイプを使用できます。

useList

 

ブール値

Map の List または Pojo の List にアンマーシャリングします。

moduleClassNames

 

String

カスタム Jackson モジュール com.fasterxml.jackson.databind.Module を使用するには、FQN クラス名を持つ文字列として指定します。複数のクラスはコンマで区切ることができます。

moduleRefs

 

String

Camel レジストリーから参照されるカスタム Jackson モジュールを使用します。複数のモジュールはコンマで区切ることができます。

enableFeatures

 

String

Jackson com.fasterxml.jackson.databind.ObjectMapper で有効にする機能のセット。機能は、com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature、または com.fasterxml.jackson.databind.MapperFeature の列挙型と一致する名前である必要があります。複数の機能はコンマで区切ることができます。

disableFeatures

 

String

Jackson com.fasterxml.jackson.databind.ObjectMapper で無効にする機能のセット。機能は、com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature、または com.fasterxml.jackson.databind.MapperFeature の列挙型と一致する名前である必要があります。複数の機能はコンマで区切ることができます。

allowUnmarshallType

 

ブール値

有効にすると、Jackson はアンマーシャリング中に CamelJacksonUnmarshalType ヘッダーの使用を試みることができます。これは、使用する必要がある場合にのみ有効にする必要があります。

timezone

 

String

設定されている場合、Jackson はマーシャリング/アンマーシャリング時にタイムゾーンを使用します。このオプションは、gson、fastjson、xstream など、他の Json DataFormat には影響を与えません。

autoDiscoverObjectMapper

 

ブール値

true に設定すると、Jackson は objectMapper をレジストリーで検索します。

contentTypeHeader

 

ブール値

データ形式が Content-Type ヘッダーにデータ形式のタイプを設定する必要があるかどうか。たとえば、XML にマーシャリングするデータ形式の場合は application/xml、JSON にマーシャリングするデータ形式の場合は application/json です。

schemaResolver

 

String

転送中のデータのスキーマを検索するために使用されるオプションのスキーマリゾルバー。

autoDiscoverSchemaResolver

 

ブール値

無効にしない場合、SchemaResolver はレジストリーで検索されます。

namingStrategy

 

String

設定されている場合、Jackson は定義済みのプロパティー命名ストラテジーを使用します。使用可能な値は、LOWER_CAMEL_CASE、LOWER_DOT_CASE、LOWER_CASE、KEBAB_CASE、SNAKE_CASE、および UPPER_CAMEL_CASE です。

62.2. カスタム ObjectMapper の使用

マッピング設定をさらに制御する必要がある場合は、カスタムの ObjectMapper を使用するように JacksonDataFormat を設定できます。

レジストリーに単一の ObjectMapper を設定すると、Camel は自動検索してこの ObjectMapper を使用します。たとえば、Spring Boot を使用する場合、Spring MVC が有効になっている場合、Spring Boot はデフォルトの ObjectMapper を提供できます。これにより、Camel は、Spring Boot Bean レジストリーに ObjectMapper クラス型の Bean が 1 つあることを検出し、その Bean を使用します。このような場合には、Camel からの INFO ログを設定する必要があります。

62.3. Jackson を使用した自動型変換

camel-jackson モジュールを使用すると、Jackson を Type Converter として統合できます。これは、Camel の型コンバーターと統合する JAXB と同様の方法で機能します。

この camel-jackson を使用するには、次のように CamelContext グローバルオプションで次のオプションを設定することによって有効にする必要があります。

@Bean
CamelContextConfiguration contextConfiguration() {
    return new CamelContextConfiguration() {
        @Override
        public void beforeApplicationStart(CamelContext context) {
        // Enable Jackson JSON type converter.
            context.getGlobalOptions().put(JacksonConstants.ENABLE_TYPE_CONVERTER, "true");
        // Allow Jackson JSON to convert to pojo types also
        // (by default Jackson only converts to String and other simple types)
            getContext().getGlobalOptions().put(JacksonConstants.TYPE_CONVERTER_TO_POJO, "true");
        }

        @Override
        public void afterApplicationStart(CamelContext camelContext) {

        }
    };
}

camel-jackson 型コンバーターは JAXB と統合されるので、Jackson が使用できる JAXB アノテーションで POJO クラスにアノテーションを付けることができます。POJO クラスで Jackson 独自のアノテーションを使用することもできます。

62.4. 依存関係

camel ルートで Jackson を使用するには、このデータ形式を実装する camel-jackson に依存関係を追加する必要があります。

Maven を使用する場合は、pom.xml に以下を追加するだけで、バージョン番号を最新かつ最高のリリースに置き換えます (最新バージョンのダウンロードページを参照してください)。

<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-jackson</artifactId>
  <version>{CamelSBVersion}</version>
  <!-- use the same version as your Camel core version -->
</dependency>

62.5. Spring Boot 自動設定

Spring Boot で json-jackson を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-jackson-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 21 のオプションをサポートします。

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

camel.dataformat.json-jackson.allow-jms-type

JMS ユーザーが JMS 仕様の JMSType ヘッダーを使用して、アンマーシャリングに使用する FQN クラス名を指定できるようにするために使用されます。

false

Boolean

camel.dataformat.json-jackson.allow-unmarshall-type

有効にすると、Jackson はアンマーシャリング中に CamelJacksonUnmarshalType ヘッダーの使用を試みることができます。これは、使用する必要がある場合にのみ有効にする必要があります。

false

ブール値

camel.dataformat.json-jackson.auto-discover-object-mapper

true に設定すると、Jackson は objectMapper をレジストリーで検索します。

false

ブール値

camel.dataformat.json-jackson.auto-discover-schema-resolver

無効にしない場合、SchemaResolver はレジストリーで検索されます。

true

ブール値

camel.dataformat.json-jackson.collection-type

使用するレジストリーを参照するカスタムコレクションタイプを参照します。このオプションはあまり使用しないでください。ただし、デフォルトとして java.util.Collection に基づくものとは異なるコレクションタイプを使用できます。

 

String

camel.dataformat.json-jackson.content-type-header

データ形式が Content-Type ヘッダーにデータ形式のタイプを設定する必要があるかどうか。たとえば、XML にマーシャリングするデータ形式の場合は application/xml、JSON にマーシャリングするデータ形式の場合は application/json です。

true

ブール値

camel.dataformat.json-jackson.disable-features

Jackson com.fasterxml.jackson.databind.ObjectMapper で無効にする機能のセット。機能は、com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature、または com.fasterxml.jackson.databind.MapperFeature の列挙型と一致する名前である必要があります。複数の機能はコンマで区切ることができます。

 

String

camel.dataformat.json-jackson.enable-features

Jackson com.fasterxml.jackson.databind.ObjectMapper で有効にする機能のセット。機能は、com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature、または com.fasterxml.jackson.databind.MapperFeature の列挙型と一致する名前である必要があります。複数の機能はコンマで区切ることができます。

 

String

camel.dataformat.json-jackson.enabled

json-jackson データ形式の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.dataformat.json-jackson.include

pojo を JSON にマーシャリングする必要があり、pojo に null 値を持つフィールドがいくつかある場合。これらの null 値をスキップする場合は、このオプションを NON_NULL に設定できます。

 

String

camel.dataformat.json-jackson.json-view

POJO を JSON にマーシャリングする際に、JSON 出力から特定のフィールドを除外する場合があります。Jackson では、JSON ビューを使用してこれを実現できます。このオプションは、JsonView アノテーションを持つクラスを参照するためのものです。

 

String

camel.dataformat.json-jackson.module-class-names

カスタム Jackson モジュール com.fasterxml.jackson.databind.Module を使用するには、FQN クラス名を持つ文字列として指定します。複数のクラスはコンマで区切ることができます。

 

String

camel.dataformat.json-jackson.module-refs

Camel レジストリーから参照されるカスタム Jackson モジュールを使用します。複数のモジュールはコンマで区切ることができます。

 

String

camel.dataformat.json-jackson.naming-strategy

設定されている場合、Jackson は定義済みのプロパティー命名ストラテジーを使用します。使用可能な値は、LOWER_CAMEL_CASE、LOWER_DOT_CASE、LOWER_CASE、KEBAB_CASE、SNAKE_CASE、および UPPER_CAMEL_CASE です。

 

String

camel.dataformat.json-jackson.object-mapper

Jackson を使用する場合は、指定された ID で既存の ObjectMapper を検索して使用します。

 

String

camel.dataformat.json-jackson.pretty-print

適切にフォーマットされたきれいな印刷出力を有効にします。デフォルトでは false です。

false

ブール値

camel.dataformat.json-jackson.schema-resolver

転送中のデータのスキーマを検索するために使用されるオプションのスキーマリゾルバー。

 

String

camel.dataformat.json-jackson.timezone

設定されている場合、Jackson はマーシャリング/アンマーシャリング時にタイムゾーンを使用します。このオプションは、gson、fastjson、xstream など、他の Json DataFormat には影響を与えません。

 

String

camel.dataformat.json-jackson.unmarshal-type

アンマーシャリング時に使用する Java 型のクラス名。

 

String

camel.dataformat.json-jackson.use-default-object-mapper

レジストリーからデフォルトの Jackson ObjectMapper を検索して使用するかどうか。

true

Boolean

camel.dataformat.json-jackson.use-list

Map の List または Pojo の List にアンマーシャリングします。

false

ブール値

第63章 Protobuf Jackson

Jackson Protobuf は、Jackson ライブラリーProtobuf 拡張機能 を使用して、Protobuf ペイロードを Java オブジェクトにアンマーシャリングするか、Java オブジェクトを Protobuf ペイロードにマーシャリングするデータ形式です。

注記

Jackson に精通している場合、この Protobuf データ形式は対応する JSON と同じように動作するため、JSON シリアライゼーション/デシリアライゼーションのアノテーションが付けられたクラスで使用できます。

from("kafka:topic").
  unmarshal().protobuf(ProtobufLibrary.Jackson, JsonNode.class).
  to("log:info");

63.1. SchemaResolver の設定

Protobuf シリアル化はスキーマベースであるため、このデータ形式では、マーシャリング/アンマーシャリングされる各交換のスキーマを検索できる SchemaResolver オブジェクトを提供する必要があります。

単一の SchemaResolver をレジストリーに追加すると、自動的に検索されます。または、カスタム SchemaResolver への参照を明示的に指定できます。

63.2. Protobuf Jackson オプション

Protobuf Jackson データ形式は、以下にリストされている 18 個のオプションをサポートしています。

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

contentTypeHeader

 

ブール値

データ形式が Content-Type ヘッダーにデータ形式のタイプを設定する必要があるかどうか。たとえば、XML にマーシャリングするデータ形式の場合は application/xml、JSON にマーシャリングするデータ形式の場合は application/json です。

objectMapper

 

String

Jackson を使用する場合は、指定された ID で既存の ObjectMapper を検索して使用します。

useDefaultObjectMapper

 

ブール値

レジストリーからデフォルトの Jackson ObjectMapper を検索して使用するかどうか。

unmarshalType

 

String

アンマーシャリング時に使用する Java 型のクラス名。

jsonView

 

String

POJO を JSON にマーシャリングする際に、JSON 出力から特定のフィールドを除外する場合があります。Jackson では、JSON ビューを使用してこれを実現できます。このオプションは、JsonView アノテーションを持つクラスを参照するためのものです。

include

 

String

pojo を JSON にマーシャリングする必要があり、pojo に null 値を持つフィールドがいくつかある場合。これらの null 値をスキップする場合は、このオプションを NON_NULL に設定できます。

allowJmsType

 

ブール値

JMS ユーザーが JMS 仕様の JMSType ヘッダーを使用して、アンマーシャリングに使用する FQN クラス名を指定できるようにするために使用されます。

collectionType

 

String

使用するレジストリーを参照するカスタムコレクションタイプを参照します。このオプションはあまり使用しないでください。ただし、デフォルトとして java.util.Collection に基づくものとは異なるコレクションタイプを使用できます。

useList

 

ブール値

Map の List または Pojo の List にアンマーシャリングします。

moduleClassNames

 

String

カスタム Jackson モジュール com.fasterxml.jackson.databind.Module を使用するには、FQN クラス名を持つ文字列として指定します。複数のクラスはコンマで区切ることができます。

moduleRefs

 

String

Camel レジストリーから参照されるカスタム Jackson モジュールを使用します。複数のモジュールはコンマで区切ることができます。

enableFeatures

 

String

Jackson com.fasterxml.jackson.databind.ObjectMapper で有効にする機能のセット。機能は、com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature、または com.fasterxml.jackson.databind.MapperFeature の列挙型と一致する名前である必要があります。複数の機能はコンマで区切ることができます。

disableFeatures

 

String

Jackson com.fasterxml.jackson.databind.ObjectMapper で無効にする機能のセット。機能は、com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature、または com.fasterxml.jackson.databind.MapperFeature の列挙型と一致する名前である必要があります。複数の機能はコンマで区切ることができます。

allowUnmarshallType

 

ブール値

有効にすると、Jackson はアンマーシャリング中に CamelJacksonUnmarshalType ヘッダーの使用を試みることができます。これは、使用する必要がある場合にのみ有効にする必要があります。

timezone

 

String

設定されている場合、Jackson はマーシャリング/アンマーシャリング時にタイムゾーンを使用します。

autoDiscoverObjectMapper

 

ブール値

true に設定すると、Jackson は objectMapper をレジストリーで検索します。

schemaResolver

 

String

転送中のデータのスキーマを検索するために使用されるオプションのスキーマリゾルバー。

autoDiscoverSchemaResolver

 

ブール値

無効にしない場合、SchemaResolver はレジストリーで検索されます。

63.3. カスタム ProtobufMapper の使用

マッピング設定をさらに制御する必要がある場合は、JacksonProtobufDataFormat を設定してカスタム ProtobufMapperを使用できます。

レジストリーに単一の ProtobufMapper を設定すると、Camel は自動的に検索し、この ProtobufMapper を使用します。

63.4. 依存関係

camel ルートで Protobuf Jackson を使用するには、このデータ形式を実装する camel-jackson-protobuf に依存関係を追加する必要があります。

Maven を使用する場合は、pom.xml に以下を追加するだけで、バージョン番号を最新かつ最高のリリースに置き換えます (最新バージョンのダウンロードページを参照してください)。

<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-jackson-protobuf</artifactId>
  <version>{CamelSBVersion}</version>
  <!-- use the same version as your Camel core version -->
</dependency>

63.5. Spring Boot 自動設定

Spring Boot で protobuf-jackson を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-jackson-protobuf-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- use the same version as your Camel core version -->
</dependency>

コンポーネントは、以下に記載される 19 のオプションをサポートします。

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

camel.dataformat.protobuf-jackson.allow-jms-type

JMS ユーザーが JMS 仕様の JMSType ヘッダーを使用して、アンマーシャリングに使用する FQN クラス名を指定できるようにするために使用されます。

false

ブール値

camel.dataformat.protobuf-jackson.allow-unmarshall-type

有効にすると、Jackson はアンマーシャリング中に CamelJacksonUnmarshalType ヘッダーの使用を試みることができます。これは、使用する必要がある場合にのみ有効にする必要があります。

false

ブール値

camel.dataformat.protobuf-jackson.auto-discover-object-mapper

true に設定すると、Jackson は objectMapper をレジストリーで検索します。

false

ブール値

camel.dataformat.protobuf-jackson.auto-discover-schema-resolver

無効にしない場合、SchemaResolver はレジストリーで検索されます。

true

ブール値

camel.dataformat.protobuf-jackson.collection-type

使用するレジストリーを参照するカスタムコレクションタイプを参照します。このオプションはあまり使用しないでください。ただし、デフォルトとして java.util.Collection に基づくものとは異なるコレクションタイプを使用できます。

 

String

camel.dataformat.protobuf-jackson.content-type-header

データ形式が Content-Type ヘッダーにデータ形式のタイプを設定する必要があるかどうか。たとえば、XML にマーシャリングするデータ形式の場合は application/xml、JSON にマーシャリングするデータ形式の場合は application/json です。

true

ブール値

camel.dataformat.protobuf-jackson.disable-features

Jackson com.fasterxml.jackson.databind.ObjectMapper で無効にする機能のセット。機能は、com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature、または com.fasterxml.jackson.databind.MapperFeature の列挙型と一致する名前である必要があります。複数の機能はコンマで区切ることができます。

 

String

camel.dataformat.protobuf-jackson.enable-features

Jackson com.fasterxml.jackson.databind.ObjectMapper で有効にする機能のセット。機能は、com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature、または com.fasterxml.jackson.databind.MapperFeature の列挙型と一致する名前である必要があります。複数の機能はコンマで区切ることができます。

 

String

camel.dataformat.protobuf-jackson.enabled

protobuf-jackson データ形式の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.dataformat.protobuf-jackson.include

pojo を JSON にマーシャリングする必要があり、pojo に null 値を持つフィールドがいくつかある場合。これらの null 値をスキップする場合は、このオプションを NON_NULL に設定できます。

 

String

camel.dataformat.protobuf-jackson.json-view

POJO を JSON にマーシャリングする際に、JSON 出力から特定のフィールドを除外する場合があります。Jackson では、JSON ビューを使用してこれを実現できます。このオプションは、JsonView アノテーションを持つクラスを参照するためのものです。

 

String

camel.dataformat.protobuf-jackson.module-class-names

カスタム Jackson モジュール com.fasterxml.jackson.databind.Module を使用するには、FQN クラス名を持つ文字列として指定します。複数のクラスはコンマで区切ることができます。

 

String

camel.dataformat.protobuf-jackson.module-refs

Camel レジストリーから参照されるカスタム Jackson モジュールを使用します。複数のモジュールはコンマで区切ることができます。

 

String

camel.dataformat.protobuf-jackson.object-mapper

Jackson を使用する場合は、指定された ID で既存の ObjectMapper を検索して使用します。

 

String

camel.dataformat.protobuf-jackson.schema-resolver

転送中のデータのスキーマを検索するために使用されるオプションのスキーマリゾルバー。

 

String

camel.dataformat.protobuf-jackson.timezone

設定されている場合、Jackson はマーシャリング/アンマーシャリング時にタイムゾーンを使用します。

 

String

camel.dataformat.protobuf-jackson.unmarshal-type

アンマーシャリング時に使用する Java 型のクラス名。

 

String

camel.dataformat.protobuf-jackson.use-default-object-mapper

レジストリーからデフォルトの Jackson ObjectMapper を検索して使用するかどうか。

true

ブール値

camel.dataformat.protobuf-jackson.use-list

Map の List または Pojo の List にアンマーシャリングします。

false

ブール値

第64章 SOAP

SOAP は、JAXB2 および JAX-WS アノテーションを使用して SOAP ペイロードをマーシャリングおよびアンマーシャリングするデータ形式です。CXF スタックを必要とせずに、Apache CXF の基本機能を提供します。

名前空間接頭辞のマッピング

SOAP データ形式を使用してマーシャリングするときに、名前空間接頭辞のマッピングを制御する方法は、JAXB を参照してください。

64.1. SOAP オプション

SOAP データ形式は、以下にリストされている 6 つのオプションをサポートしています。

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

contextPath

 

String

必須 JAXB クラスが配置されているパッケージ名。

encoding

 

String

特定のエンコーディングを無効にして使用します。

elementNameStrategyRef

 

String

レジストリーから検索する要素ストラテジーを参照します。要素名ストラテジーは 2 つの目的で使用されます。1 つ目は、オブジェクトを SOAP メッセージにマーシャリングするときに、特定のオブジェクトと SOAP アクションの xml 要素名を見つけることで、2 つ目は、指定された SOAP エラー名の Exception クラスを見つけることです。次の 3 つの要素のストラテジークラス名は、そのまま使用できます。QNameStrategy: インスタンス化時に設定される固定の qName を使用します。例外ルックアップはサポートされていません。TypeNameStrategy: 指定された型の XMLType アノテーションの名前と名前空間を使用します。名前空間が設定されていない場合は、package-info が使用されます。例外ルックアップはサポートされていません。ServiceInterfaceStrategy: Web サービスインターフェイスからの情報を使用して、型名を決定し、SOAP 障害の例外クラスを見つけます。3 つのクラスはすべて、パッケージ名 org.apache.camel.dataformat.soap.name にあります。cxf-codegen または同様のツールを使用して Web サービスのスタブコードを生成した場合は、おそらく ServiceInterfaceStrategy を使用する必要があります。アノテーション付きのサービスインターフェイスがない場合は、QNameStrategy または TypeNameStrategy を使用する必要があります。

version

 

String

SOAP バージョンは 1.1 または 1.2 のいずれかである必要があります。デフォルトは 1.1 です。

namespacePrefixRef

 

String

JAXB または SOAP を使用してマーシャリングする場合、JAXB 実装は、ns2、ns3、ns4 などの名前空間接頭辞を自動的に割り当てます。このマッピングを制御するために、Camel では目的のマッピングを含むマップを参照できます。

schema

 

String

既存のスキーマに対して検証します。接頭辞 classpath:、file:、または http: を使用して、リソースの解決方法を指定できます。「,」文字を使用して、複数のスキーマファイルを区切ることができます。

64.2. ElementNameStrategy

要素名ストラテジーは 2 つの目的で使用されます。1 つ目は、オブジェクトを SOAP メッセージにマーシャリングするときに、特定のオブジェクトと SOAP アクションの xml 要素名を見つけることで、2 つ目は、指定された SOAP エラー名の Exception クラスを見つけることです。

ストラテジー用途

QNameStrategy

インスタンス化時に設定される固定の qName を使用します。例外ルックアップはサポートされていません。

TypeNameStrategy

指定された型の @XMLType アノテーションの名前と名前空間を使用します。名前空間が設定されていない場合は、package-info が使用されます。例外ルックアップはサポートされていません。

ServiceInterfaceStrategy

Web サービスインターフェイスからの情報を使用して、型名を決定し、SOAP エラーの例外クラスを見つけます。

cxf-codegen または同様のツールを使用して Web サービスのスタブコードを生成した場合は、おそらく ServiceInterfaceStrategy を使用するようにしてください。アノテーション付きのサービスインターフェイスがない場合は、QNameStrategy または TypeNameStrategy を使用する必要があります。

64.3. Java DSL を使用

次の例では、パッケージ com.example.customerservice で設定された soap の名前付き DataFormat を使用して、JAXBContext を初期化します。2 番目のパラメーターは ElementNameStrategy です。ルートは、通常のオブジェクトと例外をマーシャリングできます。(以下は、SOAP エンベロープをキューに送信するだけである点に注意してください。Web サービスプロバイダーは、SOAP 呼び出しが実際に発生するために実際にキューをリッスンする必要があります。この場合には、一方向の SOAP 要求になります。リクエストの返信が必要な場合は、次の例を参照してください。)

SoapJaxbDataFormat soap = new SoapJaxbDataFormat("com.example.customerservice", new ServiceInterfaceStrategy(CustomerService.class));
from("direct:start")
  .marshal(soap)
  .to("jms:myQueue");
注記

参照内容:
。SOAP データ形式は JAXB データ形式を継承しているため、ほとんどの設定がここにも適用されます。

64.3.1. SOAP 1.2 の使用

Camel 2.11 以降

SoapJaxbDataFormat soap = new SoapJaxbDataFormat("com.example.customerservice", new ServiceInterfaceStrategy(CustomerService.class));
soap.setVersion("1.2");
from("direct:start")
  .marshal(soap)
  .to("jms:myQueue");

XML DSL を使用する場合、<soapjaxb> 要素に設定できる version 属性があります。

    <!-- Defining a ServiceInterfaceStrategy for retrieving the element name when marshalling -->
    <bean id="myNameStrategy" class="org.apache.camel.dataformat.soap.name.ServiceInterfaceStrategy">
        <constructor-arg value="com.example.customerservice.CustomerService"/>
    <constructor-arg value="true"/>
    </bean>

そして Camel ルートの場合:

<route>
  <from uri="direct:start"/>
  <marshal>
    <soapjaxb contentPath="com.example.customerservice" version="1.2" elementNameStrategyRef="myNameStrategy"/>
  </marshal>
  <to uri="jms:myQueue"/>
</route>

64.4. マルチパートメッセージ

マルチパート SOAP メッセージは ServiceInterfaceStrategy でサポートされています。ServiceInterfaceStrategy は、JAX-WS 2.2 に従ってアノテーションが付けられ、Document Bare スタイルの要件を満たすサービスインターフェイス定義で初期化する必要があります。ターゲットメソッドは、JAX-WS 仕様に従い、以下の基準を満たす必要があります。1) in または in/out のヘッダー以外のパラメーターを最大 1 つ持っている、2) void 以外の戻り型が含まれる場合には、 in/out または out のヘッダー以外のパラメーターを含めることができない、3) void の戻り型が含まれる場合には最大 1 つの in/out または out ヘッダー以外のパラメーターを持つ必要がある。

ServiceInterfaceStrategy は、マッピング戦略が要求パラメーターまたは応答パラメーターのどちらに適用されるかを示すブール値パラメーターで初期化する必要があります。

ServiceInterfaceStrategy strat =  new ServiceInterfaceStrategy(com.example.customerservice.multipart.MultiPartCustomerService.class, true);
SoapJaxbDataFormat soapDataFormat = new SoapJaxbDataFormat("com.example.customerservice.multipart", strat);

64.4.1. ホルダーオブジェクトのマッピング

JAX-WS は、In/Out および Out パラメーターに対して型パラメーター化された javax.xml.ws.Holder オブジェクトの使用を指定します。パラメーター化された型のインスタンスを直接使用できます。camel-soap DataFormat は、 Holder の値クラスの JAXB マッピングに従って、Holder 値をマーシャリングします。アンマーシャリングされたレスポンス内の \'Holder オブジェクトには、マッピングが提供されません。

64.5. 例

64.5.1. Web サービスクライアント

次のルートは、リクエストのマーシャリングと、レスポンスまたはエラーのアンマーシャリングをサポートしています。

String WS_URI = "cxf://http://myserver/customerservice?serviceClass=com.example.customerservice&dataFormat=RAW";
SoapJaxbDataFormat soapDF = new SoapJaxbDataFormat("com.example.customerservice", new ServiceInterfaceStrategy(CustomerService.class));
from("direct:customerServiceClient")
  .onException(Exception.class)
    .handled(true)
    .unmarshal(soapDF)
  .end()
  .marshal(soapDF)
  .to(WS_URI)
  .unmarshal(soapDF);

以下のスニペットは、サービスインターフェイスのプロキシーを作成し、上記のルートへの SOAP 呼び出しを行います。

import org.apache.camel.Endpoint;
import org.apache.camel.component.bean.ProxyHelper;
...

Endpoint startEndpoint = context.getEndpoint("direct:customerServiceClient");
ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
// CustomerService below is the service endpoint interface, *not* the javax.xml.ws.Service subclass
CustomerService proxy = ProxyHelper.createProxy(startEndpoint, classLoader, CustomerService.class);
GetCustomersByNameResponse response = proxy.getCustomersByName(new GetCustomersByName());

64.5.2. Web サービスサーバー

次のルートを使用すると、jms キュー customerServiceQueue をリッスンし、クラス CustomerServiceImpl を使用してリクエストを処理する Web サービスサーバーが設定されます。当然、customerServiceImpl はインターフェイス CustomerService を実装する必要があります。サーバークラスを直接インスタンス化する代わりに、Spring コンテキストで通常の Bean として定義できます。

SoapJaxbDataFormat soapDF = new SoapJaxbDataFormat("com.example.customerservice", new ServiceInterfaceStrategy(CustomerService.class));
CustomerService serverBean = new CustomerServiceImpl();
from("jms://queue:customerServiceQueue")
  .onException(Exception.class)
    .handled(true)
    .marshal(soapDF)
  .end()
  .unmarshal(soapDF)
  .bean(serverBean)
  .marshal(soapDF);

64.6. 依存関係

camel ルートで SOAP データ形式を使用するには、次の依存関係を pom に追加する必要があります。

<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-soap</artifactId>
  <version>{CamelSBVersion}</version>
</dependency>

64.7. Spring Boot 自動設定

Spring Boot で soapjaxb を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-soap-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 7 のオプションをサポートします。

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

camel.dataformat.soapjaxb.context-path

JAXB クラスが配置されているパッケージ名。

 

String

camel.dataformat.soapjaxb.element-name-strategy-ref

レジストリーから検索する要素ストラテジーを参照します。要素名ストラテジーは 2 つの目的で使用されます。1 つ目は、オブジェクトを SOAP メッセージにマーシャリングするときに、特定のオブジェクトと SOAP アクションの xml 要素名を見つけることで、2 つ目は、指定された SOAP エラー名の Exception クラスを見つけることです。次の 3 つの要素のストラテジークラス名は、そのまま使用できます。QNameStrategy: インスタンス化時に設定される固定の qName を使用します。例外ルックアップはサポートされていません。TypeNameStrategy: 指定された型の XMLType アノテーションの名前と名前空間を使用します。名前空間が設定されていない場合は、package-info が使用されます。例外ルックアップはサポートされていません。ServiceInterfaceStrategy: Web サービスインターフェイスからの情報を使用して、型名を決定し、SOAP 障害の例外クラスを見つけます。3 つのクラスはすべて、パッケージ名 org.apache.camel.dataformat.soap.name にあります。cxf-codegen または同様のツールを使用して Web サービスのスタブコードを生成した場合は、おそらく ServiceInterfaceStrategy を使用する必要があります。アノテーション付きのサービスインターフェイスがない場合は、QNameStrategy または TypeNameStrategy を使用する必要があります。

 

String

camel.dataformat.soapjaxb.enabled

soapjaxb データ形式の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.dataformat.soapjaxb.encoding

特定のエンコーディングを無効にして使用します。

 

String

camel.dataformat.soapjaxb.namespace-prefix-ref

JAXB または SOAP を使用してマーシャリングする場合、JAXB 実装は、ns2、ns3、ns4 などの名前空間接頭辞を自動的に割り当てます。このマッピングを制御するために、Camel では目的のマッピングを含むマップを参照できます。

 

String

camel.dataformat.soapjaxb.schema

既存のスキーマに対して検証します。接頭辞 classpath:、file:、または http: を使用して、リソースの解決方法を指定できます。「,」文字を使用して、複数のスキーマファイルを区切ることができます。

 

String

camel.dataformat.soapjaxb.version

SOAP バージョンは 1.1 または 1.2 のいずれかである必要があります。デフォルトは 1.1 です。

1.1

String

第65章 Zip ファイル

Zip ファイルデータ形式は、メッセージの圧縮および展開形式です。メッセージはエントリーを 1 つ含む Zip ファイルにマーシャリング (圧縮) でき、エントリーを 1つ含む Zip ファイルは元のファイルの内容にアンマーシャリング (展開) できます。このデータ形式は、Java 7 以降が使用されている限り、ZIP64 をサポートします。

65.1. Zip ファイルのオプション

Zip ファイルのデータ形式は、以下に示す 4 つのオプションをサポートしています。

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

usingIterator

 

ブール値

zip ファイルに複数のエントリーがある場合には、このオプションを true に設定すると、スプリッター EIP を使用して、ストリーミングモードで反復子を使用してデータを分割できます。

allowEmptyDirectory

 

ブール値

zip ファイルに複数のエントリーがある場合、このオプションを true に設定すると、ディレクトリーが空であっても反復子を取得できます。

preservePathElements

 

ブール値

ファイル名にパス要素が含まれている場合、このオプションを true に設定すると、zip ファイルでパスを維持できます。

maxDecompressedSize

 

Integer

zip ファイルの最大展開サイズ (バイト単位) を設定します。指定されていない場合のデフォルト値は、1 ギガバイト相当です。展開後のサイズがこの量を超えると、IOException が出力されます。最大展開サイズの設定を無効にするには、-1 に設定します。

65.2. Marshal

この例では、Zip ファイル圧縮を使用して通常のテキスト/XML ペイロードを圧縮ペイロードにマーシャリングし、それを MY_QUEUE という ActiveMQ キューに送信します。

from("direct:start")
    .marshal().zipFile()
    .to("activemq:queue:MY_QUEUE");

作成された Zip ファイル内の Zip エントリーの名前は、受信した CamelFileName メッセージヘッダーに基づいています。これは、ファイルコンポーネントによって使用される標準のメッセージヘッダーです。さらに、送信 CamelFileName メッセージヘッダーは、受信 CamelFileName メッセージヘッダーの値に ".zip" 接尾辞を付けて自動的に設定されます。たとえば、次のルートで入力ディレクトリーに test.txt という名前のファイルが見つかった場合には、出力は test.txt という名前の単一の Zip エントリーを含む test.txt.zip という名前の Zip ファイルになります。

from("file:input/directory?antInclude=*/.txt")
    .marshal().zipFile()
    .to("file:output/directory");

着信 CamelFileName メッセージヘッダーがない場合 (ファイルコンポーネントが consumer でない場合など)、メッセージ ID がデフォルトで使用されます。メッセージ ID は通常、一意に生成された ID であるため、ID-MACHINENAME-2443-1211718892437-1-0.zip のようなファイル名になります。この動作をオーバーライドする場合は、ルートで CamelFileName ヘッダーの値を明示的に設定できます。

from("direct:start")
    .setHeader(Exchange.FILE_NAME, constant("report.txt"))
    .marshal().zipFile()
    .to("file:output/directory");

このルートにより、出力ディレクトリーに report.txt.zip という名前の Zip ファイルが作成され、report.txt という名前の Zip エントリーが 1 つ含まれます。

65.3. Unmarshal

この例では、MY_QUEUE という ActiveMQ キューから Zip ファイルペイロードを元の形式にアンマーシャリングして UnZippedMessageProcessor に転送し、処理します。

from("activemq:queue:MY_QUEUE")
    .unmarshal().zipFile()
    .process(new UnZippedMessageProcessor());

zip ファイルに複数のエントリーがある場合には、ZipFileDataFormat の usingIterator オプションを true にすると、スプリッターを使用してさらに作業を行うことができます。

ZipFileDataFormat zipFile = new ZipFileDataFormat();
zipFile.setUsingIterator(true);

from("file:src/test/resources/org/apache/camel/dataformat/zipfile/?delay=1000&noop=true")
    .unmarshal(zipFile)
    .split(body(Iterator.class)).streaming()
        .process(new UnZippedMessageProcessor())
    .end();

または、このように ZipSplitter をスプリッターの式として直接使用できます

from("file:src/test/resources/org/apache/camel/dataformat/zipfile?delay=1000&noop=true")
    .split(new ZipSplitter()).streaming()
        .process(new UnZippedMessageProcessor())
    .end();

65.3.1. Aggregate

注記

この集約ストラテジーでは、正しく機能させるには、先行して完了チェックを行う必要があります。

この例では、入力ディレクトリーで見つかったすべてのテキストファイルを、出力ディレクトリーに格納される 1 つの Zip ファイルに集約します。

from("file:input/directory?antInclude=*/.txt")
    .aggregate(constant(true), new ZipAggregationStrategy())
        .completionFromBatchConsumer().eagerCheckCompletion()
        .to("file:output/directory");

発信 CamelFileName メッセージヘッダーは、java.io.File.createTempFile を使用して作成され、".zip" 接尾辞が付きます。この動作をオーバーライドする場合は、ルートで CamelFileName ヘッダーの値を明示的に設定できます。

from("file:input/directory?antInclude=*/.txt")
    .aggregate(constant(true), new ZipAggregationStrategy())
        .completionFromBatchConsumer().eagerCheckCompletion()
        .setHeader(Exchange.FILE_NAME, constant("reports.zip"))
        .to("file:output/directory");

65.4. 依存関係

camel ルートで Zip ファイルを使用するには、このデータ形式を実装する camel-zipfile に依存関係を追加する必要があります。

Maven を使用する場合は、pom.xml に以下を追加するだけで、バージョン番号を最新かつ最高のリリースに置き換えます (最新バージョンのダウンロードページを参照してください)。

<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-zipfile</artifactId>
  <version>{CamelSBVersion}</version>
  <!-- use the same version as your Camel core version -->
</dependency>

65.5. Spring Boot 自動設定

Spring Boot で zipfile を使用する場合は、自動設定をサポートするために次の Maven 依存関係を使用してください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-zipfile-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に示す 5 個のオプションをサポートします。

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

camel.dataformat.zipfile.allow-empty-directory

zip ファイルに複数のエントリーがある場合、このオプションを true に設定すると、ディレクトリーが空であっても反復子を取得できます。

false

Boolean

camel.dataformat.zipfile.enabled

zipfile データ形式の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.dataformat.zipfile.max-decompressed-size

zip ファイルの最大展開サイズ (バイト単位) を設定します。指定されていない場合のデフォルト値は、1 ギガバイト相当です。展開後のサイズがこの量を超えると、IOException が出力されます。最大展開サイズの設定を無効にするには、-1 に設定します。

1073741824

Long

camel.dataformat.zipfile.preserve-path-elements

ファイル名にパス要素が含まれている場合、このオプションを true に設定すると、zip ファイルでパスを維持できます。

false

Boolean

camel.dataformat.zipfile.using-iterator

zip ファイルに複数のエントリーがある場合には、このオプションを true に設定すると、スプリッター EIP を使用して、ストリーミングモードで反復子を使用してデータを分割できます。

false

ブール値

第66章 Constant

定数式言語は、実際には定数値またはオブジェクトを使用する方法にすぎません。

注記

これは、ルートの開始時に一度だけ設定される固定定数値 (またはオブジェクト) であるため、ルーティング中に動的な値が必要な場合は、この値は使用しないでください。

66.1. Constant オプション

Constant 言語は、以下に示す 2 つのオプションをサポートしています。

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

resultType

 

String

定数型のクラス名を設定します。

trim

 

ブール値

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

66.2. 例

setHeader EIP は、次のような定数式を利用できます。

<route>
  <from uri="seda:a"/>
  <setHeader name="theHeader">
    <constant>the value</constant>
  </setHeader>
  <to uri="mock:b"/>
</route>

この場合、seda:a エンドポイントからのメッセージには、キー theHeader を含むヘッダーが含まれ、その値が the value (文字列型) として設定されます。

Java DSL を使用した同じ例:

from("seda:a")
  .setHeader("theHeader", constant("the value"))
  .to("mock:b");

66.2.1. 値の型の指定

オプション resultType を使用して、値が 文字列 値として指定されている場合に、値のタイプを指定できます。これは、XML または YAML DSL を使用する場合に発生します。

たとえば、int 型のヘッダーを設定するには、次のようにします。

<route>
  <from uri="seda:a"/>
  <setHeader name="zipCode">
    <constant resultType="int">90210</constant>
  </setHeader>
  <to uri="mock:b"/>
</route>

66.3. 外部リソースからの定数のロード

constant を外部化して、"classpath:""file:"、または "http:" などのリソースから Camel に読み込むことができます。
これは、"resource:scheme:location" の構文を使用して行われます。たとえば、クラスパス上のファイルを参照するには、以下を実行します。

.setHeader("myHeader").constant("resource:classpath:constant.txt")

66.4. 依存関係

Constant 言語は camel-core の一部です。

66.5. Spring Boot 自動設定

Spring Boot で constant を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-core-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- use the same version as your Camel core version -->
</dependency>

コンポーネントは、以下に記載される 147 のオプションをサポートします。

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

camel.cloud.consul.service-discovery.acl-token

Consul で使用する ACL トークンを設定します。

 

String

camel.cloud.consul.service-discovery.block-seconds

監視イベントを待機する秒数。デフォルトは 10 秒です。

10

Integer

camel.cloud.consul.service-discovery.configurations

追加の設定定義を定義します。

 

マップ

camel.cloud.consul.service-discovery.connect-timeout-millis

OkHttpClient の接続タイムアウト。

 

Long

camel.cloud.consul.service-discovery.datacenter

データセンター。

 

String

camel.cloud.consul.service-discovery.enabled

コンポーネントを有効にします。

true

ブール値

camel.cloud.consul.service-discovery.password

基本認証に使用するパスワードを設定します。

 

String

camel.cloud.consul.service-discovery.properties

使用するクライアントプロパティーを設定します。これらのプロパティーは、使用中のサービスコールの実装に固有です。たとえば、リボンを使用していると、クライアントプロパティーは com.netflix.client.config.CommonClientConfigKey で定義されます。

 

マップ

camel.cloud.consul.service-discovery.read-timeout-millis

OkHttpClient の読み取りタイムアウト。

 

Long

camel.cloud.consul.service-discovery.url

Consul エージェントの URL。

 

String

camel.cloud.consul.service-discovery.user-name

Basic 認証に使用するユーザー名を設定します。

 

String

camel.cloud.consul.service-discovery.write-timeout-millis

OkHttpClient の書き込みタイムアウト。

 

Long

camel.cloud.dns.service-discovery.configurations

追加の設定定義を定義します。

 

マップ

camel.cloud.dns.service-discovery.domain

ドメイン名;.

 

String

camel.cloud.dns.service-discovery.enabled

コンポーネントを有効にします。

true

ブール値

camel.cloud.dns.service-discovery.properties

使用するクライアントプロパティーを設定します。これらのプロパティーは、使用中のサービスコールの実装に固有です。たとえば、リボンを使用していると、クライアントプロパティーは com.netflix.client.config.CommonClientConfigKey で定義されます。

 

マップ

camel.cloud.dns.service-discovery.proto

目的のサービスのトランスポートプロトコル。

_tcp

String

camel.cloud.etcd.service-discovery.configurations

追加の設定定義を定義します。

 

マップ

camel.cloud.etcd.service-discovery.enabled

コンポーネントを有効にします。

true

ブール値

camel.cloud.etcd.service-discovery.password

基本認証に使用するパスワード。

 

String

camel.cloud.etcd.service-discovery.properties

使用するクライアントプロパティーを設定します。これらのプロパティーは、使用中のサービスコールの実装に固有です。たとえば、リボンを使用していると、クライアントプロパティーは com.netflix.client.config.CommonClientConfigKey で定義されます。

 

マップ

camel.cloud.etcd.service-discovery.service-path

サービス検出のために探すパス。

/services/

String

camel.cloud.etcd.service-discovery.timeout

アクションが完了するまでにかかる最大時間を設定します。

 

Long

camel.cloud.etcd.service-discovery.type

検出タイプを設定するには、有効な値はオンデマンドとウォッチです。

オンデマンド

String

camel.cloud.etcd.service-discovery.uris

クライアントが接続できる URI。

 

String

camel.cloud.etcd.service-discovery.user-name

基本認証に使用するユーザー名。

 

String

camel.cloud.kubernetes.service-discovery.api-version

クライアントルックアップを使用する場合の API バージョンを設定します。

 

String

camel.cloud.kubernetes.service-discovery.ca-cert-data

クライアントルックアップをする際に使用する認証局データを設定します。

 

String

camel.cloud.kubernetes.service-discovery.ca-cert-file

クライアントルックアップをする際にファイルからロードされる認証局データを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-cert-data

クライアントルックアップをする際に使用するクライアント証明書データを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-cert-file

クライアントルックアップをする際にファイルからロードされるクライアント証明書データを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-key-algo

クライアントルックアップをする際に使用する、RSA などのクライアントキーストアアルゴリズムを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-key-data

クライアントルックアップをする際に使用する、クライアントキーストアデータを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-key-file

クライアントルックアップをする際にファイルからロードされるクライアントキーストアデータを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-key-passphrase

クライアントルックアップをする際に使用する、クライアントキーストアパスフレーズを設定します。

 

String

camel.cloud.kubernetes.service-discovery.configurations

追加の設定定義を定義します。

 

マップ

camel.cloud.kubernetes.service-discovery.dns-domain

DNS ルックアップに使用する DNS ドメインを設定します。

 

String

camel.cloud.kubernetes.service-discovery.enabled

コンポーネントを有効にします。

true

ブール値

camel.cloud.kubernetes.service-discovery.lookup

サービスルックアップの実行方法。可能な値: client、dns、environment。クライアントを使用する場合、クライアントは kubernetes マスターにクエリーを実行して、サービスを提供するアクティブな Pod のリストを取得し、Pod をランダム (またはラウンドロビン) に選択します。DNS を使用する場合、サービス名は name.namespace.svc.dnsDomain として解決されます。dnssrv を使用する場合、サービス名は、.…svc…の SRV クエリーで解決されます。環境を使用する場合は、環境変数を使用してサービスを検索します。デフォルトの環境が使用されます。

environment

String

camel.cloud.kubernetes.service-discovery.master-url

クライアントルックアップを使用するときに URL をマスターに設定します。

 

String

camel.cloud.kubernetes.service-discovery.namespace

使用する名前空間を設定します。デフォルトでは、ENV 変数 KUBERNETES_MASTER の名前空間を使用します。

 

String

camel.cloud.kubernetes.service-discovery.oauth-token

クライアントルックアップを使用する際に (ユーザー名/パスワードの代わりに) 認証用の OAUTH トークンを設定します。

 

String

camel.cloud.kubernetes.service-discovery.password

クライアントルックアップを使用する際に使用する、認証パスワードを設定します。

 

String

camel.cloud.kubernetes.service-discovery.port-name

DNS/DNSSRV ルックアップに使用するポート名を設定します。

 

String

camel.cloud.kubernetes.service-discovery.port-protocol

DNS/DNSSRV ルックアップに使用するポートプロトコルを設定します。

 

String

camel.cloud.kubernetes.service-discovery.properties

使用するクライアントプロパティーを設定します。これらのプロパティーは、使用中のサービスコールの実装に固有です。たとえば、リボンを使用していると、クライアントプロパティーは com.netflix.client.config.CommonClientConfigKey で定義されます。

 

マップ

camel.cloud.kubernetes.service-discovery.trust-certs

クライアントルックアップを使用する際に使用する、トラスト証明書のチェックを有効にするかどうかを設定します。

false

ブール値

camel.cloud.kubernetes.service-discovery.username

クライアントルックアップを使用する際に使用する、認証ユーザー名を設定します。

 

String

camel.cloud.ribbon.load-balancer.client-name

リボンクライアント名を設定します。

 

String

camel.cloud.ribbon.load-balancer.configurations

追加の設定定義を定義します。

 

マップ

camel.cloud.ribbon.load-balancer.enabled

コンポーネントを有効にします。

true

ブール値

camel.cloud.ribbon.load-balancer.namespace

namespace。

 

String

camel.cloud.ribbon.load-balancer.password

パスワード。

 

String

camel.cloud.ribbon.load-balancer.properties

使用するクライアントプロパティーを設定します。これらのプロパティーは、使用中のサービスコールの実装に固有です。たとえば、リボンを使用していると、クライアントプロパティーは com.netflix.client.config.CommonClientConfigKey で定義されます。

 

マップ

camel.cloud.ribbon.load-balancer.username

ユーザー名

 

String

camel.hystrix.allow-maximum-size-to-diverge-from-core-size

maximumSize の設定を有効にします。その値は、coreSize 以上にすることができます。

false

ブール値

camel.hystrix.circuit-breaker-enabled

HystrixCircuitBreaker を使用するかどうか。false の場合、サーキットブレーカーロジックは使用されず、すべての要求が許可されます。これは実質的に circuitBreakerForceClosed() と似ていますが、メトリックの追跡を継続し、それを開閉する必要があるかどうかを認識しているため、このプロパティーによってサーキットブレーカーがインスタンス化されることもありません。

true

ブール値

camel.hystrix.circuit-breaker-error-threshold-percentage

サーキットブレーカーが開いて要求を拒否するエラー率のしきい値 (50 などの整数)。circuitBreakerSleepWindowInMilliseconds で定義された期間、トリップしたままになります。これが比較されるエラーのパーセンテージは、HystrixCommandMetrics.getHealthCounts() から取得されます。

50

Integer

camel.hystrix.circuit-breaker-force-closed

true の場合、HystrixCircuitBreaker#allowRequest() は常に true を返し、HystrixCommandMetrics.getHealthCounts() からのエラーパーセンテージに関係なくリクエストを許可します。circuitBreakerForceOpen() プロパティーが優先されるため、true に設定すると、このプロパティーは何もしません。

false

ブール値

camel.hystrix.circuit-breaker-force-open

true の場合、HystrixCircuitBreaker.allowRequest() は常に false を返します。これにより、回路が開かれ (トリップされ)、すべての要求が拒否されます。このプロパティーは circuitBreakerForceClosed() よりも優先されます。

false

ブール値

camel.hystrix.circuit-breaker-request-volume-threshold

HystrixCircuitBreaker が作動する前に存在しなければならない metricsRollingStatisticalWindowInMilliseconds() 内の要求の最小数。この数値を下回ると、エラーのパーセンテージに関係なく、回路はトリップしません。

20

Integer

camel.hystrix.circuit-breaker-sleep-window-in-milliseconds

HystrixCircuitBreaker がトリップして開いてから、要求を再試行するまで待機する時間 (ミリ秒単位)。

5000

Integer

camel.hystrix.configurations

追加の設定定義を定義します。

 

マップ

camel.hystrix.core-pool-size

java.util.concurrent.ThreadPoolExecutor#setCorePoolSize(int) に渡されるコアスレッドプールサイズ。

10

Integer

camel.hystrix.enabled

コンポーネントを有効にします。

true

ブール値

camel.hystrix.execution-isolation-semaphore-max-concurrent-requests

HystrixCommand.run() に許可された同時要求の数。同時制限を超えるリクエストは拒否されます。executionIsolationStrategy == SEMAPHORE の場合にのみ適用されます。

20

Integer

camel.hystrix.execution-isolation-strategy

HystrixCommand.run() を実行する分離戦略。THREAD の場合は、別のスレッドで実行し、同時要求はスレッドプール内のスレッド数によって制限されます。SEMAPHORE の場合、呼び出しスレッドで実行し、同時要求はセマフォ数によって制限されます。

スレッド

String

camel.hystrix.execution-isolation-thread-interrupt-on-timeout

スレッドがタイムアウトしたときに、実行スレッドが (Future#cancel を使用して) 割り込みを試みるかどうか。executionIsolationStrategy() == THREAD の場合にのみ適用されます。

true

ブール値

camel.hystrix.execution-timeout-enabled

このコマンドのタイムアウトメカニズムを有効にするかどうか。

true

ブール値

camel.hystrix.execution-timeout-in-milliseconds

コマンドがタイムアウトして実行を停止する時間 (ミリ秒単位)。executionIsolationThreadInterruptOnTimeout == true で、コマンドがスレッド分離されている場合、実行中のスレッドは中断されます。コマンドがセマフォ分離されており、HystrixObservableCommand である場合、そのコマンドはサブスクライブ解除されます。

1000

Integer

camel.hystrix.fallback-enabled

障害が発生したときに HystrixCommand.getFallback() を試行するかどうか。

true

ブール値

camel.hystrix.fallback-isolation-semaphore-max-concurrent-requests

HystrixCommand.getFallback() に許可された同時要求の数。同時制限を超えるリクエストはフェールファストになり、フォールバックの取得は試行されません。

10

Integer

camel.hystrix.group-key

使用するグループキーを設定します。デフォルト値は、CamelHystrix です。

CamelHystrix

String

camel.hystrix.keep-alive-time

ThreadPoolExecutor#setKeepAliveTime(long,TimeUnit) に渡されるキープアライブ時間 (分単位)。

1

Integer

camel.hystrix.max-queue-size

HystrixConcurrencyStrategy.getBlockingQueue(int) で BlockingQueue に渡される最大キューサイズ。これは、スレッドプールのインスタンス化にのみ影響します。その場でキューサイズを変更することはできません。そのためには、queueSizeRejectionThreshold() を使用します。

-1

Integer

camel.hystrix.maximum-size

ThreadPoolExecutor#setMaximumPoolSize(int) に渡されるスレッドプールの最大サイズ。これは、HystrixCommands を拒否し始めることなくサポートできる同時実行の最大量です。この設定は、allowMaximumSizeToDivergeFromCoreSize も設定した場合にのみ有効になることに注意してください。

10

Integer

camel.hystrix.metrics-health-snapshot-interval-in-milliseconds

成功率とエラー率を計算し、HystrixCircuitBreaker.isOpen() ステータスに影響を与えるヘルススナップショットの取得を許可するまでの待機時間 (ミリ秒単位)。大量の回路では、エラーパーセンテージの継続的な計算によって CPU が集中的に使用される可能性があるため、これが計算の頻度を制御します。

500

Integer

camel.hystrix.metrics-rolling-percentile-bucket-size

ローリングパーセンタイルの各バケットに格納される値の最大数。これは、HystrixCommandMetrics 内の HystrixRollingPercentile に渡されます。

10

Integer

camel.hystrix.metrics-rolling-percentile-enabled

HystrixCommandMetrics 内の HystrixRollingPercentile を使用してパーセンタイルメトリックをキャプチャする必要があるかどうか。

true

ブール値

camel.hystrix.metrics-rolling-percentile-window-buckets

ローリングパーセンテージウィンドウが分割されるバケットの数。これは、HystrixCommandMetrics 内の HystrixRollingPercentile に渡されます。

6

Integer

camel.hystrix.metrics-rolling-percentile-window-in-milliseconds

ミリ秒単位のパーセンタイルローリングウィンドウの期間。これは、HystrixCommandMetrics 内の HystrixRollingPercentile に渡されます。

10000

Integer

camel.hystrix.metrics-rolling-statistical-window-buckets

ローリング統計ウィンドウが分割されるバケットの数。これは、HystrixCommandMetrics 内の HystrixRollingNumber に渡されます。

10

Integer

camel.hystrix.metrics-rolling-statistical-window-in-milliseconds

このプロパティーは、統計ローリングウィンドウの期間をミリ秒単位で設定します。スレッドプール用にメトリクスが保持される期間です。ウィンドウは、それらの増分によってバケットとロールに分割されます。

10000

Integer

camel.hystrix.queue-size-rejection-threshold

キューサイズの拒否しきい値は、maxQueueSize に到達していない場合でも拒否できる人為的な最大キューサイズを設定します。これは、BlockingQueue の maxQueueSize を動的に変更することができず、拒否に影響するキューサイズの動的な変更をサポートするために行われます。これは、実行のためにスレッドをキューに入れるときに HystrixCommand によって使用されます。

5

Integer

camel.hystrix.request-log-enabled

HystrixCommand の実行およびイベントを HystrixRequestLog に記録するべきかどうかを示します。

true

ブール値

camel.hystrix.thread-pool-key

使用するスレッドプールキーを設定します。デフォルトでは、groupKey が使用するように設定されているのと同じ値を使用します。

CamelHystrix

String

camel.hystrix.thread-pool-rolling-number-statistical-window-buckets

ローリング統計ウィンドウが分割されるバケットの数。これは、各 HystrixThreadPoolMetrics インスタンス内の HystrixRollingNumber に渡されます。

10

Integer

camel.hystrix.thread-pool-rolling-number-statistical-window-in-milliseconds

統計ローリングウィンドウの期間をミリ秒単位で設定します。これは、各 HystrixThreadPoolMetrics インスタンス内の HystrixRollingNumber に渡されます。

10000

Integer

camel.language.constant.enabled

定数言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.constant.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.csimple.enabled

csimple 言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.csimple.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.exchangeproperty.enabled

exchangeProperty 言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.exchangeproperty.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.file.enabled

ファイル言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.file.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.header.enabled

ヘッダー言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.header.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.ref.enabled

ref 言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.ref.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.simple.enabled

簡易言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.simple.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.tokenize.enabled

tokenize 言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.tokenize.group-delimiter

グループ化時に使用する区切り文字を設定します。これが設定されていない場合は、トークンが区切り文字として使用されます。

 

String

camel.language.tokenize.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.resilience4j.automatic-transition-from-open-to-half-open-enabled

waitDurationInOpenState が経過すると、OPEN から HALF_OPEN 状態への自動移行を有効にします。

false

ブール値

camel.resilience4j.circuit-breaker-ref

レジストリーから検索して使用する既存の io.github.resilience4j.circuitbreaker.CircuitBreaker インスタンスを参照します。これを使用する場合、他のサーキットブレーカーオプションは使用されません。

 

String

camel.resilience4j.config-ref

レジストリーから検索して使用する既存の github.resilience4j.circuitbreaker.CircuitBreakerConfig インスタンスを参照します。

 

String

camel.resilience4j.configurations

追加の設定定義を定義します。

 

マップ

camel.resilience4j.enabled

コンポーネントを有効にします。

true

ブール値

camel.resilience4j.failure-rate-threshold

失敗率のしきい値をパーセンテージで設定します。失敗率がしきい値以上の場合、CircuitBreaker はオープンに移行し、コールのショートサーキットを開始します。しきい値は 0 より大きく 100 以下である必要があります。デフォルト値は 50% です。

 

Float

camel.resilience4j.minimum-number-of-calls

CircuitBreaker がエラー率を計算できるようになるまでに必要な (スライディングウィンドウ期間ごとの) 呼び出しの最小数を設定します。たとえば、minimumNumberOfCalls が 10 の場合、失敗率を計算するには、少なくとも 10 件の呼び出しが記録される必要があります。9 つのコールのみが記録されている場合、CircuitBreaker は 9 つのコールすべてが失敗した場合でもオープンに移行しません。デフォルトの minimumNumberOfCalls は 100 です。

100

Integer

camel.resilience4j.permitted-number-of-calls-in-half-open-state

CircuitBreaker が半分開いているときに許可される呼び出しの数を設定します。サイズは 0 より大きくなければなりませんデフォルトのサイズは 10 です。

10

Integer

camel.resilience4j.sliding-window-size

CircuitBreaker が閉じられたときに呼び出しの結果を記録するために使用されるスライディングウィンドウのサイズを設定します。slideWindowSize は、スライディングウィンドウのサイズを設定します。スライディングウィンドウは、カウントベースまたは時間ベースのいずれかです。slidingWindowType が COUNT_BASED の場合、最後の slideWindowSize 呼び出しが記録され、集計されます。SlidingWindowType が TIME_BASED の場合は、最後の slideWindowSize 秒の呼び出しが記録され、集計されます。slidingWindowSize は 0 より大きくなければなりません。minimumNumberOfCalls は 0 より大きくする必要があります。SlidingWindowType が COUNT_BASED の場合、minimumNumberOfCalls を slideWindowSize より大きくすることはできません。slidingWindowType が TIME_BASED の場合は、好きなものを選択できます。デフォルトの slidingWindowType は 100 です。

100

Integer

camel.resilience4j.sliding-window-type

CircuitBreaker が閉じられたときに呼び出しの結果を記録するために使用されるスライディングウィンドウのサイズを設定します。スライディングウィンドウは、カウントベースまたは時間ベースのいずれかです。slidingWindowType が COUNT_BASED の場合、最後の slideWindowSize 呼び出しが記録され、集計されます。SlidingWindowType が TIME_BASED の場合は、最後の slideWindowSize 秒の呼び出しが記録され、集計されます。デフォルトの slidingWindowType は COUNT_BASED です。

COUNT_BASED

String

camel.resilience4j.slow-call-duration-threshold

それを超えると呼び出しが低速と見なされ、低速呼び出しのパーセンテージが増加する期間のしきい値 (秒) を設定します。デフォルト値は 60 秒です。

60

Integer

camel.resilience4j.slow-call-rate-threshold

パーセンテージでしきい値を設定します。CircuitBreaker は、呼び出し時間が slowCallDurationThreshold Duration よりも長い場合、呼び出しが遅いと見なします。失敗率がしきい値以上の場合、CircuitBreaker はオープンに移行し、ショートサーキット呼び出しを開始します。しきい値は 0 より大きく 100 以下である必要があります。デフォルト値は 100 パーセントです。これは、記録されたすべてのコールが slowCallDurationThreshold より遅くなければならないことを意味します。

 

Float

camel.resilience4j.wait-duration-in-open-state

ハーフオープンに切り替わる前に CircuitBreaker が開いたままになる時間を指定する待機期間 (秒単位) を設定します。デフォルト値は 60 秒です。

60

Integer

camel.resilience4j.writable-stack-trace-enabled

書き込み可能なスタックトレースを有効にします。false に設定すると、Exception.getStackTrace は長さゼロの配列を返します。これは、例外の原因が既にわかっている (サーキットブレーカーが呼び出しを短絡している) ため、サーキットブレーカーが開いているときにログスパムを減らすために使用できます。

true

ブール値

camel.rest.api-component

REST API として使用する Camel コンポーネントの名前 (swagger など)。API コンポーネントが明示的に設定されていない場合は、REST API ドキュメントのサービスおよび生成を担当する Camel コンポーネントがある場合、または org.apache.camel.spi.RestApiProcessorFactory がレジストリーに登録されているかどうかを調べます。いずれかが見つかった場合は、それが使用されています。

 

String

camel.rest.api-context-path

REST API サービスが使用する主要な API コンテキストパスを設定します。これは、デプロイされた Web アプリケーションがコンテキストパスを使用してデプロイされる camel-servlet などのコンポーネントを使用する場合に使用できます。

 

String

camel.rest.api-context-route-id

REST API にサービスを提供するルートに使用するルート ID を設定します。デフォルトでは、ルートは自動割り当てのルート ID を使用します。

 

String

camel.rest.api-host

API ドキュメント (swagger など) に特定のホスト名を使用するには、これを使用して、生成されたホストをこの設定済みホスト名でオーバーライドできます。

 

String

camel.rest.api-property

API ドキュメント (swagger) の追加プロパティーをできるだけ多く設定できます。たとえば、プロパティー api.title をクールスタッフに設定します。

 

マップ

camel.rest.api-vendor-extension

Rest API でベンダー拡張機能が有効になっているかどうか。有効にすると、Camel はルート ID、クラス名などの追加情報をベンダー拡張 (x- で始まるキーなど) として含めます。API ドキュメントをインポートするときに、すべてのサードパーティー API ゲートウェイおよびツールがベンダー拡張をサポートしているわけではありません。

false

ブール値

camel.rest.binding-mode

使用するバインドモードを設定します。デフォルト値は off です。

 

RestBindingMode

camel.rest.client-request-validation

クライアント要求の検証を有効にして、クライアントからの Content-Type および Accept ヘッダーがその消費/生成設定の Rest-DSL 設定によってサポートされているかどうかを確認するかどうか。これをオンにして、このチェックを有効にすることができます。検証エラーの場合は、HTTP ステータスコード 415 または 406 が返されます。デフォルト値は false です。

false

ブール値

camel.rest.component

netty-http、jetty、servlet、undertow などの REST トランスポート (consumer) に使用する Camel Rest コンポーネント。コンポーネントが明示的に設定されていない場合、Rest DSL と統合する Camel コンポーネントがある場合、または org.apache.camel.spi.RestConsumerFactory がレジストリーに登録されている場合、Camel はルックアップします。いずれかが見つかった場合は、それが使用されています。

 

String

camel.rest.component-property

使用中の残りのコンポーネントの追加プロパティーをできるだけ多く設定できます。

 

マップ

camel.rest.consumer-property

使用中の残りの consumer の追加プロパティーをできるだけ多く設定できます。

 

マップ

camel.rest.context-path

REST サービスが使用する主要なコンテキストパスを設定します。これは、デプロイされた Web アプリケーションがコンテキストパスを使用してデプロイされる camel-servlet などのコンポーネントを使用する場合に使用できます。または、HTTP サーバーを含む camel -jetty や camel-netty-http などのコンポーネントの場合。

 

String

camel.rest.cors-headers

カスタム CORS ヘッダーを設定できます。

 

マップ

camel.rest.data-format-property

使用中のデータ形式の追加プロパティーをできるだけ多く設定できます。たとえば、プロパティー prettyPrint を true に設定すると、json がプリティモードで出力されます。オプションが JSON または XML のいずれか、および IN または OUT のいずれか専用であることを示すために、プロパティーに接頭辞を付けることができます。接頭辞は、json.in.、json.out.、xml.in.、xml.outです。たとえば、値が xml.out.mustBeJAXBElement のキーは、送信用の XML データ形式専用です。接頭辞のないキーは、すべての状況で共通のキーです。

 

マップ

camel.rest.enable-cors

HTTP 応答で CORS ヘッダーを有効にするかどうか。デフォルト値は false です。

false

ブール値

camel.rest.endpoint-property

使用中の残りのエンドポイントの追加プロパティーをできるだけ多く設定できます。

 

マップ

camel.rest.host

REST サービスの公開に使用するホスト名。

 

String

camel.rest.host-name-resolver

ホスト名が明示的に設定されていない場合、このリゾルバーは、REST サービスが使用するホスト名を計算するために使用されます。

 

RestHostNameResolver

camel.rest.json-data-format

使用する特定の json データ形式の名前。デフォルトでは json-jackson が使用されます。重要: このオプションは、データ形式のカスタム名を設定するためのものであり、既存のデータ形式インスタンスを参照するためのものではありません。

 

String

camel.rest.port

REST サービスの公開に使用するポート番号。サーブレットコンポーネントを使用する場合は、ここで設定したポート番号は適用されないことに注意してください。使用中のポート番号は、サーブレットコンポーネントが使用している実際のポート番号であるためです。たとえば、Apache Tomcat を使用する場合は Tomcat http ポート、Apache Karaf を使用する場合はデフォルトでポート 8181 を使用する Karaf の HTTP サービスなどです。このような状況では、ここでポート番号を設定すると、ツールと JMX がポート番号を認識できるようになるため、ポート番号をサーブレットエンジンが使用する番号に設定することをお勧めします。

 

String

camel.rest.producer-api-doc

REST producer が REST uri を検証するために使用する API ドキュメント (swagger api) の場所を設定し、API ドキュメントに応じてクエリーパラメーターが有効です。これには、クラスパスに camel-swagger-java を追加する必要があり、設定に誤りがあると、Camel が起動時に失敗し、エラーが報告されます。API ドキュメントの場所はデフォルトでクラスパスから読み込まれますが、file: または http: を使用してリソースを参照し、ファイルまたは http url から読み込むことができます。

 

String

camel.rest.producer-component

REST producer として使用する Camel コンポーネントの名前を設定します。

 

String

camel.rest.scheme

REST サービスの公開に使用するスキーム。通常、http または https がサポートされます。デフォルト値は http です。

 

String

camel.rest.skip-binding-on-error-code

カスタム HTTP エラーコードヘッダーがある場合は、出力でバインディングをスキップするかどうか。これにより、json/xml などにバインドしないカスタムエラーメッセージを作成できます。それ以外の場合は成功メッセージが作成されます。

false

ブール値

camel.rest.use-x-forward-headers

ホストおよび関連する設定に X-Forward ヘッダーを使用するかどうか。デフォルト値は true です。

true

ブール値

camel.rest.xml-data-format

使用する特定の XML データ形式の名前。デフォルトでは jaxb が使用されます。重要: このオプションは、データ形式のカスタム名を設定するためのものであり、既存のデータ形式インスタンスを参照するためのものではありません。

 

String

camel.rest.api-context-id-pattern

非推奨 CamelContext ID パターンを設定して、名前がパターンに一致する CamelContext 内の REST サービスからの Rest API のみを許可します。パターン は CamelContext 名を参照し、現在の CamelContext のみに一致します。その他の値の場合、パターンは PatternHelper#matchPattern (String,String) のルールを使用します。

 

String

camel.rest.api-context-listing

非推奨 JVM で REST サービスを使用して使用可能なすべての CamelContext のリストを有効にするかどうかを設定します。有効にすると、これらのコンテキストを検出できます。false の場合、現在の CamelContext のみが使用されます。

false

ブール値

第67章 CSimple

CSimple 言語は コンパイルされた Simple 言語です。

67.1. CSimple と Simple の相違点

Simple 言語は動的な式言語であり、一連の Camel 式または述語に実行時に解析されます。

csimple 言語は、通常の Java ソースコードに解析され、他のすべてのソースコードと一緒にコンパイルされるか、camel-csimple-joor モジュールを介してブートストラップ中に 1 回コンパイルされます。

Simple 言語は通常、非常に軽量で高速ですが、OGNL パスを介した動的メソッドの呼び出しを伴う一部のユースケースでは、Sinmple 言語が実行時のイントロスペクションとリフレクションの呼び出しを行います。これにはパフォーマンスのオーバーヘッドがあり、csimple が作成された理由の 1 つです。

csimple 言語はタイプセーフである必要があり、OGNL パスを介したメソッド呼び出しでは、解析中に型を把握しておく必要があります。つまり、csimple 言語式の場合、スクリプトでクラスタイプを提供する必要ですが、simple の場合は実行時にこれをイントロスペクトします。

言い換えると、Simple 言語は ダックタイピング (アヒルのように見え、アヒルのように鳴く場合、それはアヒルである) を使用しており、csimple は Java 型 (タイプセーフ) を使用しています。型エラーがある場合には、Simple は実行時にこれを報告し、csimple では Java コンパイルエラーが発生します。

67.1.1. 追加の CSimple 関数

csimple 言語には、CollectionMap、または配列型を操作する一般的なユースケースをサポートするための追加関数がいくつか含まれています。次の関数 bodyAsIndexheaderAsIndex、および exchangePropertyAsIndex は、これらのユースケースに入力されたとおりに使用されます。

機能タイプ説明

bodyAsIndex(type, index)

タイプ

既存の CollectionMap または配列から本体を収集し (インデックスによるルックアップ)、その本体をそのクラス名によって決定される特定の型に変換するために使用されます。変換された本文は null にすることができます。

mandatoryBodyAsIndex(type, index)

タイプ

既存の CollectionMap または配列から本体を収集し (インデックスによるルックアップ)、その本体をそのクラス名によって決定される特定の型に変換するために使用されます。本文は null は指定できません。

headerAsIndex(key, type, index)

タイプ

既存の CollectionMap または配列からヘッダーを収集し (インデックスによるルックアップ)、ヘッダー値をクラス名によって決定される特定の型に変換するために使用します。変換されたヘッダーでは null を指定できます。

mandatoryHeaderAsIndex(key, type, index)

タイプ

既存の CollectionMap または配列からヘッダーを収集し (インデックスによるルックアップ)、ヘッダー値をクラス名によって決定される特定の型に変換するために使用します。ヘッダーには null を指定できません。

exchangePropertyAsIndex(key, type, index)

タイプ

既存の CollectionMap または配列から交換プロパティーを収集し (インデックスによるルックアップ)、その交換プロパティーをそのクラス名によって決定される特定の型に変換するために使用します。変換された exchange プロパティーには null を指定できます。

mandatoryExchangePropertyAsIndex(key, type, index)

タイプ

既存の CollectionMap または配列から交換プロパティーを収集し (インデックスによるルックアップ)、その交換プロパティーをそのクラス名によって決定される特定の型に変換するために使用します。exchange プロパティーが null でないことが期待されます。

たとえば、次の Simple 式があるとします。

Hello $\{body[0].name}

このスクリプトには型情報がありません。Simple 言語は、メッセージボディーをイントロスペクトし、コレクションベースの場合は最初の要素を検索し、reflection を介して getName という名前のメソッドを呼び出すことにより、実行時にこの名前を解決します。

csimple (コンパイル済み) では、これをプリコンパイルする必要があるため、エンドユーザーは bodyAsIndex 関数で型情報を提供する必要があります。

Hello $\{bodyAsIndex(com.foo.MyUser, 0).name}

67.2. コンパイル

csimple 言語は、通常の Java ソースコードに解析され、他のすべてのソースコードと一緒にコンパイルされるか、camel-csimple-joor モジュールを介してブートストラップ中に 1 回コンパイルすることもできます。

csimple をコンパイルするには 2 つの方法があります

  • ビルド時に camel-csimple-maven-plugin 生成ソースコードを使用します。
  • Camel のブートストラップ中にランタイムインメモリーコンパイルを行う camel-csimple-joor を使用します。

67.2.1. camel-csimple-maven-plugin の使用

camel-csimple-maven-plugin Maven プラグインは、ソースコードからすべての csimple スクリプトを検出するために使用され、src/generated/java フォルダーにソースコードが自動生成され、他のすべてのソースと共にコンパイルされます。

Maven プラグインは、.java および .xml ファイル (Java および XML DSL) のソースコードスキャンを実行します。スキャナーは特定のコードパターンの検出に制限をかけており、csimple スクリプトが異常または、まれな方法で使用されている場合に、csimple スクリプトの一部を検出できない可能性があります。

camel-csimple-joor を使用したランタイムコンパイルには、この制限はありません。

利点として、すべての csimple スクリプトが通常の Java コンパイラーを使用してコンパイルされるため、すべてがアプリケーションの JAR ファイルに .class ファイルとしてそのまま含まれており、実行時に追加の依存関係が必要ないことが挙げられます。

camel-csimple-maven-plugin を使用するには、次のように pom.xml ファイルに追加する必要があります。

<plugins>
    <!-- generate source code for csimple languages -->
    <plugin>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-csimple-maven-plugin</artifactId>
        <version>${camel.version}</version>
        <executions>
            <execution>
                <id>generate</id>
                <goals>
                    <goal>generate</goal>
                </goals>
            </execution>
        </executions>
    </plugin>
    <!-- include source code generated to maven sources paths -->
    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <version>3.1.0</version>
        <executions>
            <execution>
                <phase>generate-sources</phase>
                <goals>
                    <goal>add-source</goal>
                    <goal>add-resource</goal>
                </goals>
                <configuration>
                    <sources>
                        <source>src/generated/java</source>
                    </sources>
                    <resources>
                        <resource>
                            <directory>src/generated/resources</directory>
                        </resource>
                    </resources>
                </configuration>
            </execution>
        </executions>
    </plugin>
</plugins>

そして、build-helper-maven-plugin Maven プラグインを追加して、src/generated を Java コンパイラーのソースフォルダーのリストに追加して、生成されたソースコードがコンパイルされ、アプリケーション JAR ファイルに含まれるようにする必要があります。

Maven プラグインを使用する Camel Examplescamel-example-csimple の 例を参照してください。

67.2.2. camel-csimple-joor の使用

jOOR ライブラリーは Java コンパイラーと統合され、Java コードのランタイムコンパイルを実行します。

camel-simple-joor を使用するときにサポートされるランタイムは、Java スタンドアロン、Spring Boot、Camel Quarkus、およびその他のマイクロサービスランタイムを対象としています。OSGi、Camel Karaf、またはあらゆる種類の Java Application Server ランタイムではサポートされていません。

jOOR は、ファット jar パッケージ (https://github.com/jOOQ/jOOR/issues/69) を使用した Spring Boot でのランタイムコンパイルをサポートしていません。展開形式のクラスパスで動作します。

camel-simple-joor を使用するには、依存関係としてクラスパスに追加するだけです。

<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-csimple-joor</artifactId>
  <version>{CamelSBProjectVersion}</version>
</dependency>

pom.xml ファイルに Maven プラグインを追加する必要はありません。

jOOR コンパイラーを使用する Camel Examplescamel-example-csimple-joor の例を参照してください。

67.3. CSimple 言語オプション

CSimple 言語は、次に示す 2 つのオプションをサポートしています。

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

resultType

 

String

結果の型 (出力からの型) のクラス名を設定します。

trim

 

ブール値

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

67.4. 制限事項

現在、csimple 言語は以下をサポート していません

  • ネストされた関数 (別名、関数内の関数)
  • null セーフな 演算子 (?)。

たとえば、次のスクリプトはコンパイルできません。

  Hello ${bean:greeter(${body}, ${header.counter})}
  ${bodyAs(MyUser)?.address?.zip} > 10000

67.5. 自動インポート

csimple 言語は、以下から自動的にインポートされます。

import java.util.*;
import java.util.concurrent.*;
import java.util.stream.*;
import org.apache.camel.*;
import org.apache.camel.util.*;

67.6. 設定ファイル

ルートクラスパスからロードされる camel-csimple.properties ファイルで csimple 言語を設定できます。

たとえば、camel-csimple.properties ファイルに追加のインポートを追加するには、次を追加します。

import com.foo.MyUser;
import com.bar.*;
import static com.foo.MyHelper.*;

また、コード内で省略形の置換として使用されるエイリアス (key=value) を追加することもできます。

echo()=${bodyAs(String)} ${bodyAs(String)}

次のような csimple 言語スクリプトで echo() を使用できます。

from("direct:hello")
    .transform(csimple("Hello echo()"))
    .log("You said ${body}");

echo() エイリアスはその値に置き換えられ、スクリプトは次のようになります。

    .transform(csimple("Hello ${bodyAs(String)} ${bodyAs(String)}"))

67.7. 関連項目

csimple には Simple 言語と同じ関数セットがあるため、Simple 言語を参照してください。

67.8. Spring Boot 自動設定

Spring Boot で csimple を使用する場合は、自動設定をサポートするために次の Maven 依存関係を使用してください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-core-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 147 のオプションをサポートします。

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

camel.cloud.consul.service-discovery.acl-token

Consul で使用する ACL トークンを設定します。

 

String

camel.cloud.consul.service-discovery.block-seconds

監視イベントを待機する秒数。デフォルトは 10 秒です。

10

Integer

camel.cloud.consul.service-discovery.configurations

追加の設定定義を定義します。

 

マップ

camel.cloud.consul.service-discovery.connect-timeout-millis

OkHttpClient の接続タイムアウト。

 

Long

camel.cloud.consul.service-discovery.datacenter

データセンター。

 

String

camel.cloud.consul.service-discovery.enabled

コンポーネントを有効にします。

true

ブール値

camel.cloud.consul.service-discovery.password

基本認証に使用するパスワードを設定します。

 

String

camel.cloud.consul.service-discovery.properties

使用するクライアントプロパティーを設定します。これらのプロパティーは、使用中のサービスコールの実装に固有です。たとえば、リボンを使用していると、クライアントプロパティーは com.netflix.client.config.CommonClientConfigKey で定義されます。

 

マップ

camel.cloud.consul.service-discovery.read-timeout-millis

OkHttpClient の読み取りタイムアウト。

 

Long

camel.cloud.consul.service-discovery.url

Consul エージェントの URL。

 

String

camel.cloud.consul.service-discovery.user-name

Basic 認証に使用するユーザー名を設定します。

 

String

camel.cloud.consul.service-discovery.write-timeout-millis

OkHttpClient の書き込みタイムアウト。

 

Long

camel.cloud.dns.service-discovery.configurations

追加の設定定義を定義します。

 

マップ

camel.cloud.dns.service-discovery.domain

ドメイン名;.

 

String

camel.cloud.dns.service-discovery.enabled

コンポーネントを有効にします。

true

ブール値

camel.cloud.dns.service-discovery.properties

使用するクライアントプロパティーを設定します。これらのプロパティーは、使用中のサービスコールの実装に固有です。たとえば、リボンを使用していると、クライアントプロパティーは com.netflix.client.config.CommonClientConfigKey で定義されます。

 

マップ

camel.cloud.dns.service-discovery.proto

目的のサービスのトランスポートプロトコル。

_tcp

String

camel.cloud.etcd.service-discovery.configurations

追加の設定定義を定義します。

 

マップ

camel.cloud.etcd.service-discovery.enabled

コンポーネントを有効にします。

true

ブール値

camel.cloud.etcd.service-discovery.password

基本認証に使用するパスワード。

 

String

camel.cloud.etcd.service-discovery.properties

使用するクライアントプロパティーを設定します。これらのプロパティーは、使用中のサービスコールの実装に固有です。たとえば、リボンを使用していると、クライアントプロパティーは com.netflix.client.config.CommonClientConfigKey で定義されます。

 

マップ

camel.cloud.etcd.service-discovery.service-path

サービス検出のために探すパス。

/services/

String

camel.cloud.etcd.service-discovery.timeout

アクションが完了するまでにかかる最大時間を設定します。

 

Long

camel.cloud.etcd.service-discovery.type

検出タイプを設定するには、有効な値はオンデマンドとウォッチです。

オンデマンド

String

camel.cloud.etcd.service-discovery.uris

クライアントが接続できる URI。

 

String

camel.cloud.etcd.service-discovery.user-name

基本認証に使用するユーザー名。

 

String

camel.cloud.kubernetes.service-discovery.api-version

クライアントルックアップを使用する場合の API バージョンを設定します。

 

String

camel.cloud.kubernetes.service-discovery.ca-cert-data

クライアントルックアップをする際に使用する認証局データを設定します。

 

String

camel.cloud.kubernetes.service-discovery.ca-cert-file

クライアントルックアップをする際にファイルからロードされる認証局データを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-cert-data

クライアントルックアップをする際に使用するクライアント証明書データを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-cert-file

クライアントルックアップをする際にファイルからロードされるクライアント証明書データを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-key-algo

クライアントルックアップをする際に使用する、RSA などのクライアントキーストアアルゴリズムを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-key-data

クライアントルックアップをする際に使用する、クライアントキーストアデータを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-key-file

クライアントルックアップをする際にファイルからロードされるクライアントキーストアデータを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-key-passphrase

クライアントルックアップをする際に使用する、クライアントキーストアパスフレーズを設定します。

 

String

camel.cloud.kubernetes.service-discovery.configurations

追加の設定定義を定義します。

 

マップ

camel.cloud.kubernetes.service-discovery.dns-domain

DNS ルックアップに使用する DNS ドメインを設定します。

 

String

camel.cloud.kubernetes.service-discovery.enabled

コンポーネントを有効にします。

true

ブール値

camel.cloud.kubernetes.service-discovery.lookup

サービスルックアップの実行方法。可能な値: client、dns、environment。クライアントを使用する場合、クライアントは kubernetes マスターにクエリーを実行して、サービスを提供するアクティブな Pod のリストを取得し、Pod をランダム (またはラウンドロビン) に選択します。DNS を使用する場合、サービス名は name.namespace.svc.dnsDomain として解決されます。dnssrv を使用する場合、サービス名は、.…svc…の SRV クエリーで解決されます。環境を使用する場合は、環境変数を使用してサービスを検索します。デフォルトの環境が使用されます。

environment

String

camel.cloud.kubernetes.service-discovery.master-url

クライアントルックアップを使用するときに URL をマスターに設定します。

 

String

camel.cloud.kubernetes.service-discovery.namespace

使用する名前空間を設定します。デフォルトでは、ENV 変数 KUBERNETES_MASTER の名前空間を使用します。

 

String

camel.cloud.kubernetes.service-discovery.oauth-token

クライアントルックアップを使用する際に (ユーザー名/パスワードの代わりに) 認証用の OAUTH トークンを設定します。

 

String

camel.cloud.kubernetes.service-discovery.password

クライアントルックアップを使用する際に使用する、認証パスワードを設定します。

 

String

camel.cloud.kubernetes.service-discovery.port-name

DNS/DNSSRV ルックアップに使用するポート名を設定します。

 

String

camel.cloud.kubernetes.service-discovery.port-protocol

DNS/DNSSRV ルックアップに使用するポートプロトコルを設定します。

 

String

camel.cloud.kubernetes.service-discovery.properties

使用するクライアントプロパティーを設定します。これらのプロパティーは、使用中のサービスコールの実装に固有です。たとえば、リボンを使用していると、クライアントプロパティーは com.netflix.client.config.CommonClientConfigKey で定義されます。

 

マップ

camel.cloud.kubernetes.service-discovery.trust-certs

クライアントルックアップを使用する際に使用する、トラスト証明書のチェックを有効にするかどうかを設定します。

false

ブール値

camel.cloud.kubernetes.service-discovery.username

クライアントルックアップを使用する際に使用する、認証ユーザー名を設定します。

 

String

camel.cloud.ribbon.load-balancer.client-name

リボンクライアント名を設定します。

 

String

camel.cloud.ribbon.load-balancer.configurations

追加の設定定義を定義します。

 

マップ

camel.cloud.ribbon.load-balancer.enabled

コンポーネントを有効にします。

true

ブール値

camel.cloud.ribbon.load-balancer.namespace

namespace。

 

String

camel.cloud.ribbon.load-balancer.password

パスワード。

 

String

camel.cloud.ribbon.load-balancer.properties

使用するクライアントプロパティーを設定します。これらのプロパティーは、使用中のサービスコールの実装に固有です。たとえば、リボンを使用していると、クライアントプロパティーは com.netflix.client.config.CommonClientConfigKey で定義されます。

 

マップ

camel.cloud.ribbon.load-balancer.username

ユーザー名

 

String

camel.hystrix.allow-maximum-size-to-diverge-from-core-size

maximumSize の設定を有効にします。その値は、coreSize 以上にすることができます。

false

ブール値

camel.hystrix.circuit-breaker-enabled

HystrixCircuitBreaker を使用するかどうか。false の場合、サーキットブレーカーロジックは使用されず、すべての要求が許可されます。これは実質的に circuitBreakerForceClosed() と似ていますが、メトリックの追跡を継続し、それを開閉する必要があるかどうかを認識しているため、このプロパティーによってサーキットブレーカーがインスタンス化されることもありません。

true

ブール値

camel.hystrix.circuit-breaker-error-threshold-percentage

サーキットブレーカーが開いて要求を拒否するエラー率のしきい値 (50 などの整数)。circuitBreakerSleepWindowInMilliseconds で定義された期間、トリップしたままになります。これが比較されるエラーのパーセンテージは、HystrixCommandMetrics.getHealthCounts() から取得されます。

50

Integer

camel.hystrix.circuit-breaker-force-closed

true の場合、HystrixCircuitBreaker#allowRequest() は常に true を返し、HystrixCommandMetrics.getHealthCounts() からのエラーパーセンテージに関係なくリクエストを許可します。circuitBreakerForceOpen() プロパティーが優先されるため、true に設定すると、このプロパティーは何もしません。

false

ブール値

camel.hystrix.circuit-breaker-force-open

true の場合、HystrixCircuitBreaker.allowRequest() は常に false を返します。これにより、回路が開かれ (トリップされ)、すべての要求が拒否されます。このプロパティーは circuitBreakerForceClosed() よりも優先されます。

false

ブール値

camel.hystrix.circuit-breaker-request-volume-threshold

HystrixCircuitBreaker が作動する前に存在しなければならない metricsRollingStatisticalWindowInMilliseconds() 内の要求の最小数。この数値を下回ると、エラーのパーセンテージに関係なく、回路はトリップしません。

20

Integer

camel.hystrix.circuit-breaker-sleep-window-in-milliseconds

HystrixCircuitBreaker がトリップして開いてから、要求を再試行するまで待機する時間 (ミリ秒単位)。

5000

Integer

camel.hystrix.configurations

追加の設定定義を定義します。

 

マップ

camel.hystrix.core-pool-size

java.util.concurrent.ThreadPoolExecutor#setCorePoolSize(int) に渡されるコアスレッドプールサイズ。

10

Integer

camel.hystrix.enabled

コンポーネントを有効にします。

true

ブール値

camel.hystrix.execution-isolation-semaphore-max-concurrent-requests

HystrixCommand.run() に許可された同時要求の数。同時制限を超えるリクエストは拒否されます。executionIsolationStrategy == SEMAPHORE の場合にのみ適用されます。

20

Integer

camel.hystrix.execution-isolation-strategy

HystrixCommand.run() を実行する分離戦略。THREAD の場合は、別のスレッドで実行し、同時要求はスレッドプール内のスレッド数によって制限されます。SEMAPHORE の場合、呼び出しスレッドで実行し、同時要求はセマフォ数によって制限されます。

スレッド

String

camel.hystrix.execution-isolation-thread-interrupt-on-timeout

スレッドがタイムアウトしたときに、実行スレッドが (Future#cancel を使用して) 割り込みを試みるかどうか。executionIsolationStrategy() == THREAD の場合にのみ適用されます。

true

ブール値

camel.hystrix.execution-timeout-enabled

このコマンドのタイムアウトメカニズムを有効にするかどうか。

true

ブール値

camel.hystrix.execution-timeout-in-milliseconds

コマンドがタイムアウトして実行を停止する時間 (ミリ秒単位)。executionIsolationThreadInterruptOnTimeout == true で、コマンドがスレッド分離されている場合、実行中のスレッドは中断されます。コマンドがセマフォ分離されており、HystrixObservableCommand である場合、そのコマンドはサブスクライブ解除されます。

1000

Integer

camel.hystrix.fallback-enabled

障害が発生したときに HystrixCommand.getFallback() を試行するかどうか。

true

ブール値

camel.hystrix.fallback-isolation-semaphore-max-concurrent-requests

HystrixCommand.getFallback() に許可された同時要求の数。同時制限を超えるリクエストはフェールファストになり、フォールバックの取得は試行されません。

10

Integer

camel.hystrix.group-key

使用するグループキーを設定します。デフォルト値は、CamelHystrix です。

CamelHystrix

String

camel.hystrix.keep-alive-time

ThreadPoolExecutor#setKeepAliveTime(long,TimeUnit) に渡されるキープアライブ時間 (分単位)。

1

Integer

camel.hystrix.max-queue-size

HystrixConcurrencyStrategy.getBlockingQueue(int) で BlockingQueue に渡される最大キューサイズ。これは、スレッドプールのインスタンス化にのみ影響します。その場でキューサイズを変更することはできません。そのためには、queueSizeRejectionThreshold() を使用します。

-1

Integer

camel.hystrix.maximum-size

ThreadPoolExecutor#setMaximumPoolSize(int) に渡されるスレッドプールの最大サイズ。これは、HystrixCommands を拒否し始めることなくサポートできる同時実行の最大量です。この設定は、allowMaximumSizeToDivergeFromCoreSize も設定した場合にのみ有効になることに注意してください。

10

Integer

camel.hystrix.metrics-health-snapshot-interval-in-milliseconds

成功率とエラー率を計算し、HystrixCircuitBreaker.isOpen() ステータスに影響を与えるヘルススナップショットの取得を許可するまでの待機時間 (ミリ秒単位)。大量の回路では、エラーパーセンテージの継続的な計算によって CPU が集中的に使用される可能性があるため、これが計算の頻度を制御します。

500

Integer

camel.hystrix.metrics-rolling-percentile-bucket-size

ローリングパーセンタイルの各バケットに格納される値の最大数。これは、HystrixCommandMetrics 内の HystrixRollingPercentile に渡されます。

10

Integer

camel.hystrix.metrics-rolling-percentile-enabled

HystrixCommandMetrics 内の HystrixRollingPercentile を使用してパーセンタイルメトリックをキャプチャする必要があるかどうか。

true

ブール値

camel.hystrix.metrics-rolling-percentile-window-buckets

ローリングパーセンテージウィンドウが分割されるバケットの数。これは、HystrixCommandMetrics 内の HystrixRollingPercentile に渡されます。

6

Integer

camel.hystrix.metrics-rolling-percentile-window-in-milliseconds

ミリ秒単位のパーセンタイルローリングウィンドウの期間。これは、HystrixCommandMetrics 内の HystrixRollingPercentile に渡されます。

10000

Integer

camel.hystrix.metrics-rolling-statistical-window-buckets

ローリング統計ウィンドウが分割されるバケットの数。これは、HystrixCommandMetrics 内の HystrixRollingNumber に渡されます。

10

Integer

camel.hystrix.metrics-rolling-statistical-window-in-milliseconds

このプロパティーは、統計ローリングウィンドウの期間をミリ秒単位で設定します。スレッドプール用にメトリクスが保持される期間です。ウィンドウは、それらの増分によってバケットとロールに分割されます。

10000

Integer

camel.hystrix.queue-size-rejection-threshold

キューサイズの拒否しきい値は、maxQueueSize に到達していない場合でも拒否できる人為的な最大キューサイズを設定します。これは、BlockingQueue の maxQueueSize を動的に変更することができず、拒否に影響するキューサイズの動的な変更をサポートするために行われます。これは、実行のためにスレッドをキューに入れるときに HystrixCommand によって使用されます。

5

Integer

camel.hystrix.request-log-enabled

HystrixCommand の実行およびイベントを HystrixRequestLog に記録するべきかどうかを示します。

true

ブール値

camel.hystrix.thread-pool-key

使用するスレッドプールキーを設定します。デフォルトでは、groupKey が使用するように設定されているのと同じ値を使用します。

CamelHystrix

String

camel.hystrix.thread-pool-rolling-number-statistical-window-buckets

ローリング統計ウィンドウが分割されるバケットの数。これは、各 HystrixThreadPoolMetrics インスタンス内の HystrixRollingNumber に渡されます。

10

Integer

camel.hystrix.thread-pool-rolling-number-statistical-window-in-milliseconds

統計ローリングウィンドウの期間をミリ秒単位で設定します。これは、各 HystrixThreadPoolMetrics インスタンス内の HystrixRollingNumber に渡されます。

10000

Integer

camel.language.constant.enabled

定数言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.constant.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.csimple.enabled

csimple 言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.csimple.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.exchangeproperty.enabled

exchangeProperty 言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.exchangeproperty.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.file.enabled

ファイル言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.file.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.header.enabled

ヘッダー言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.header.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.ref.enabled

ref 言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.ref.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.simple.enabled

簡易言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.simple.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.tokenize.enabled

tokenize 言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.tokenize.group-delimiter

グループ化時に使用する区切り文字を設定します。これが設定されていない場合は、トークンが区切り文字として使用されます。

 

String

camel.language.tokenize.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.resilience4j.automatic-transition-from-open-to-half-open-enabled

waitDurationInOpenState が経過すると、OPEN から HALF_OPEN 状態への自動移行を有効にします。

false

ブール値

camel.resilience4j.circuit-breaker-ref

レジストリーから検索して使用する既存の io.github.resilience4j.circuitbreaker.CircuitBreaker インスタンスを参照します。これを使用する場合、他のサーキットブレーカーオプションは使用されません。

 

String

camel.resilience4j.config-ref

レジストリーから検索して使用する既存の github.resilience4j.circuitbreaker.CircuitBreakerConfig インスタンスを参照します。

 

String

camel.resilience4j.configurations

追加の設定定義を定義します。

 

マップ

camel.resilience4j.enabled

コンポーネントを有効にします。

true

ブール値

camel.resilience4j.failure-rate-threshold

失敗率のしきい値をパーセンテージで設定します。失敗率がしきい値以上の場合、CircuitBreaker はオープンに移行し、コールのショートサーキットを開始します。しきい値は 0 より大きく 100 以下である必要があります。デフォルト値は 50% です。

 

Float

camel.resilience4j.minimum-number-of-calls

CircuitBreaker がエラー率を計算できるようになるまでに必要な (スライディングウィンドウ期間ごとの) 呼び出しの最小数を設定します。たとえば、minimumNumberOfCalls が 10 の場合、失敗率を計算するには、少なくとも 10 件の呼び出しが記録される必要があります。9 つのコールのみが記録されている場合、CircuitBreaker は 9 つのコールすべてが失敗した場合でもオープンに移行しません。デフォルトの minimumNumberOfCalls は 100 です。

100

Integer

camel.resilience4j.permitted-number-of-calls-in-half-open-state

CircuitBreaker が半分開いているときに許可される呼び出しの数を設定します。サイズは 0 より大きくなければなりませんデフォルトのサイズは 10 です。

10

Integer

camel.resilience4j.sliding-window-size

CircuitBreaker が閉じられたときに呼び出しの結果を記録するために使用されるスライディングウィンドウのサイズを設定します。slideWindowSize は、スライディングウィンドウのサイズを設定します。スライディングウィンドウは、カウントベースまたは時間ベースのいずれかです。slidingWindowType が COUNT_BASED の場合、最後の slideWindowSize 呼び出しが記録され、集計されます。SlidingWindowType が TIME_BASED の場合は、最後の slideWindowSize 秒の呼び出しが記録され、集計されます。slidingWindowSize は 0 より大きくなければなりません。minimumNumberOfCalls は 0 より大きくする必要があります。SlidingWindowType が COUNT_BASED の場合、minimumNumberOfCalls を slideWindowSize より大きくすることはできません。slidingWindowType が TIME_BASED の場合は、好きなものを選択できます。デフォルトの slidingWindowType は 100 です。

100

Integer

camel.resilience4j.sliding-window-type

CircuitBreaker が閉じられたときに呼び出しの結果を記録するために使用されるスライディングウィンドウのサイズを設定します。スライディングウィンドウは、カウントベースまたは時間ベースのいずれかです。slidingWindowType が COUNT_BASED の場合、最後の slideWindowSize 呼び出しが記録され、集計されます。SlidingWindowType が TIME_BASED の場合は、最後の slideWindowSize 秒の呼び出しが記録され、集計されます。デフォルトの slidingWindowType は COUNT_BASED です。

COUNT_BASED

String

camel.resilience4j.slow-call-duration-threshold

それを超えると呼び出しが低速と見なされ、低速呼び出しのパーセンテージが増加する期間のしきい値 (秒) を設定します。デフォルト値は 60 秒です。

60

Integer

camel.resilience4j.slow-call-rate-threshold

パーセンテージでしきい値を設定します。CircuitBreaker は、呼び出し時間が slowCallDurationThreshold Duration よりも長い場合、呼び出しが遅いと見なします。失敗率がしきい値以上の場合、CircuitBreaker はオープンに移行し、ショートサーキット呼び出しを開始します。しきい値は 0 より大きく 100 以下である必要があります。デフォルト値は 100 パーセントです。これは、記録されたすべてのコールが slowCallDurationThreshold より遅くなければならないことを意味します。

 

Float

camel.resilience4j.wait-duration-in-open-state

ハーフオープンに切り替わる前に CircuitBreaker が開いたままになる時間を指定する待機期間 (秒単位) を設定します。デフォルト値は 60 秒です。

60

Integer

camel.resilience4j.writable-stack-trace-enabled

書き込み可能なスタックトレースを有効にします。false に設定すると、Exception.getStackTrace は長さゼロの配列を返します。これは、例外の原因が既にわかっている (サーキットブレーカーが呼び出しを短絡している) ため、サーキットブレーカーが開いているときにログスパムを減らすために使用できます。

true

ブール値

camel.rest.api-component

REST API として使用する Camel コンポーネントの名前 (swagger など)。API コンポーネントが明示的に設定されていない場合は、REST API ドキュメントのサービスおよび生成を担当する Camel コンポーネントがある場合、または org.apache.camel.spi.RestApiProcessorFactory がレジストリーに登録されているかどうかを調べます。いずれかが見つかった場合は、それが使用されています。

 

String

camel.rest.api-context-path

REST API サービスが使用する主要な API コンテキストパスを設定します。これは、デプロイされた Web アプリケーションがコンテキストパスを使用してデプロイされる camel-servlet などのコンポーネントを使用する場合に使用できます。

 

String

camel.rest.api-context-route-id

REST API にサービスを提供するルートに使用するルート ID を設定します。デフォルトでは、ルートは自動割り当てのルート ID を使用します。

 

String

camel.rest.api-host

API ドキュメント (swagger など) に特定のホスト名を使用するには、これを使用して、生成されたホストをこの設定済みホスト名でオーバーライドできます。

 

String

camel.rest.api-property

API ドキュメント (swagger) の追加プロパティーをできるだけ多く設定できます。たとえば、プロパティー api.title をクールスタッフに設定します。

 

マップ

camel.rest.api-vendor-extension

Rest API でベンダー拡張機能が有効になっているかどうか。有効にすると、Camel はルート ID、クラス名などの追加情報をベンダー拡張 (x- で始まるキーなど) として含めます。API ドキュメントをインポートするときに、すべてのサードパーティー API ゲートウェイおよびツールがベンダー拡張をサポートしているわけではありません。

false

ブール値

camel.rest.binding-mode

使用するバインドモードを設定します。デフォルト値は off です。

 

RestBindingMode

camel.rest.client-request-validation

クライアント要求の検証を有効にして、クライアントからの Content-Type および Accept ヘッダーがその消費/生成設定の Rest-DSL 設定によってサポートされているかどうかを確認するかどうか。これをオンにして、このチェックを有効にすることができます。検証エラーの場合は、HTTP ステータスコード 415 または 406 が返されます。デフォルト値は false です。

false

ブール値

camel.rest.component

netty-http、jetty、servlet、undertow などの REST トランスポート (consumer) に使用する Camel Rest コンポーネント。コンポーネントが明示的に設定されていない場合、Rest DSL と統合する Camel コンポーネントがある場合、または org.apache.camel.spi.RestConsumerFactory がレジストリーに登録されている場合、Camel はルックアップします。いずれかが見つかった場合は、それが使用されています。

 

String

camel.rest.component-property

使用中の残りのコンポーネントの追加プロパティーをできるだけ多く設定できます。

 

マップ

camel.rest.consumer-property

使用中の残りの consumer の追加プロパティーをできるだけ多く設定できます。

 

マップ

camel.rest.context-path

REST サービスが使用する主要なコンテキストパスを設定します。これは、デプロイされた Web アプリケーションがコンテキストパスを使用してデプロイされる camel-servlet などのコンポーネントを使用する場合に使用できます。または、HTTP サーバーを含む camel -jetty や camel-netty-http などのコンポーネントの場合。

 

String

camel.rest.cors-headers

カスタム CORS ヘッダーを設定できます。

 

マップ

camel.rest.data-format-property

使用中のデータ形式の追加プロパティーをできるだけ多く設定できます。たとえば、プロパティー prettyPrint を true に設定すると、json がプリティモードで出力されます。オプションが JSON または XML のいずれか、および IN または OUT のいずれか専用であることを示すために、プロパティーに接頭辞を付けることができます。接頭辞は、json.in.、json.out.、xml.in.、xml.outです。たとえば、値が xml.out.mustBeJAXBElement のキーは、送信用の XML データ形式専用です。接頭辞のないキーは、すべての状況で共通のキーです。

 

マップ

camel.rest.enable-cors

HTTP 応答で CORS ヘッダーを有効にするかどうか。デフォルト値は false です。

false

ブール値

camel.rest.endpoint-property

使用中の残りのエンドポイントの追加プロパティーをできるだけ多く設定できます。

 

マップ

camel.rest.host

REST サービスの公開に使用するホスト名。

 

String

camel.rest.host-name-resolver

ホスト名が明示的に設定されていない場合、このリゾルバーは、REST サービスが使用するホスト名を計算するために使用されます。

 

RestHostNameResolver

camel.rest.json-data-format

使用する特定の json データ形式の名前。デフォルトでは json-jackson が使用されます。重要: このオプションは、データ形式のカスタム名を設定するためのものであり、既存のデータ形式インスタンスを参照するためのものではありません。

 

String

camel.rest.port

REST サービスの公開に使用するポート番号。サーブレットコンポーネントを使用する場合は、ここで設定したポート番号は適用されないことに注意してください。使用中のポート番号は、サーブレットコンポーネントが使用している実際のポート番号であるためです。たとえば、Apache Tomcat を使用する場合は Tomcat http ポート、Apache Karaf を使用する場合はデフォルトでポート 8181 を使用する Karaf の HTTP サービスなどです。このような状況では、ここでポート番号を設定すると、ツールと JMX がポート番号を認識できるようになるため、ポート番号をサーブレットエンジンが使用する番号に設定することをお勧めします。

 

String

camel.rest.producer-api-doc

REST producer が REST uri を検証するために使用する API ドキュメント (swagger api) の場所を設定し、API ドキュメントに応じてクエリーパラメーターが有効です。これには、クラスパスに camel-swagger-java を追加する必要があり、設定に誤りがあると、Camel が起動時に失敗し、エラーが報告されます。API ドキュメントの場所はデフォルトでクラスパスから読み込まれますが、file: または http: を使用してリソースを参照し、ファイルまたは http url から読み込むことができます。

 

String

camel.rest.producer-component

REST producer として使用する Camel コンポーネントの名前を設定します。

 

String

camel.rest.scheme

REST サービスの公開に使用するスキーム。通常、http または https がサポートされます。デフォルト値は http です。

 

String

camel.rest.skip-binding-on-error-code

カスタム HTTP エラーコードヘッダーがある場合は、出力でバインディングをスキップするかどうか。これにより、json/xml などにバインドしないカスタムエラーメッセージを作成できます。それ以外の場合は成功メッセージが作成されます。

false

ブール値

camel.rest.use-x-forward-headers

ホストおよび関連する設定に X-Forward ヘッダーを使用するかどうか。デフォルト値は true です。

true

ブール値

camel.rest.xml-data-format

使用する特定の XML データ形式の名前。デフォルトでは jaxb が使用されます。重要: このオプションは、データ形式のカスタム名を設定するためのものであり、既存のデータ形式インスタンスを参照するためのものではありません。

 

String

camel.rest.api-context-id-pattern

非推奨 CamelContext ID パターンを設定して、名前がパターンに一致する CamelContext 内の REST サービスからの Rest API のみを許可します。パターン は CamelContext 名を参照し、現在の CamelContext のみに一致します。その他の値の場合、パターンは PatternHelper#matchPattern (String,String) のルールを使用します。

 

String

camel.rest.api-context-listing

非推奨 JVM で REST サービスを使用して使用可能なすべての CamelContext のリストを有効にするかどうかを設定します。有効にすると、これらのコンテキストを検出できます。false の場合、現在の CamelContext のみが使用されます。

false

ブール値

第68章 ExchangeProperty

ExchangeProperty 式言語を使用すると、名前付きエクスチェンジプロパティーの値を抽出できます。

68.1. Exchange Property のオプション

ExchangeProperty 言語は、以下にリストされている 1 つのオプションをサポートしています。

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

trim

 

ブール値

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

68.2. 例

recipientList EIP は、次のような exchangeProperty を利用できます。

<route>
  <from uri="direct:a" />
  <recipientList>
    <exchangeProperty>myProperty</exchangeProperty>
  </recipientList>
</route>

この場合、受信者のリストはプロパティ (myProperty) に含まれています。

Java DSL での同じ例:

from("direct:a").recipientList(exchangeProperty("myProperty"));

68.3. 依存関係

ExchangeProperty 言語は camel-core の一部です。

68.4. Spring Boot 自動設定

Spring Boot で exchangeProperty を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-core-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 147 のオプションをサポートします。

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

camel.cloud.consul.service-discovery.acl-token

Consul で使用する ACL トークンを設定します。

 

String

camel.cloud.consul.service-discovery.block-seconds

監視イベントを待機する秒数。デフォルトは 10 秒です。

10

Integer

camel.cloud.consul.service-discovery.configurations

追加の設定定義を定義します。

 

マップ

camel.cloud.consul.service-discovery.connect-timeout-millis

OkHttpClient の接続タイムアウト。

 

Long

camel.cloud.consul.service-discovery.datacenter

データセンター。

 

String

camel.cloud.consul.service-discovery.enabled

コンポーネントを有効にします。

true

ブール値

camel.cloud.consul.service-discovery.password

基本認証に使用するパスワードを設定します。

 

String

camel.cloud.consul.service-discovery.properties

使用するクライアントプロパティーを設定します。これらのプロパティーは、使用中のサービスコールの実装に固有です。たとえば、リボンを使用していると、クライアントプロパティーは com.netflix.client.config.CommonClientConfigKey で定義されます。

 

マップ

camel.cloud.consul.service-discovery.read-timeout-millis

OkHttpClient の読み取りタイムアウト。

 

Long

camel.cloud.consul.service-discovery.url

Consul エージェントの URL。

 

String

camel.cloud.consul.service-discovery.user-name

Basic 認証に使用するユーザー名を設定します。

 

String

camel.cloud.consul.service-discovery.write-timeout-millis

OkHttpClient の書き込みタイムアウト。

 

Long

camel.cloud.dns.service-discovery.configurations

追加の設定定義を定義します。

 

マップ

camel.cloud.dns.service-discovery.domain

ドメイン名;.

 

String

camel.cloud.dns.service-discovery.enabled

コンポーネントを有効にします。

true

ブール値

camel.cloud.dns.service-discovery.properties

使用するクライアントプロパティーを設定します。これらのプロパティーは、使用中のサービスコールの実装に固有です。たとえば、リボンを使用していると、クライアントプロパティーは com.netflix.client.config.CommonClientConfigKey で定義されます。

 

マップ

camel.cloud.dns.service-discovery.proto

目的のサービスのトランスポートプロトコル。

_tcp

String

camel.cloud.etcd.service-discovery.configurations

追加の設定定義を定義します。

 

マップ

camel.cloud.etcd.service-discovery.enabled

コンポーネントを有効にします。

true

ブール値

camel.cloud.etcd.service-discovery.password

基本認証に使用するパスワード。

 

String

camel.cloud.etcd.service-discovery.properties

使用するクライアントプロパティーを設定します。これらのプロパティーは、使用中のサービスコールの実装に固有です。たとえば、リボンを使用していると、クライアントプロパティーは com.netflix.client.config.CommonClientConfigKey で定義されます。

 

マップ

camel.cloud.etcd.service-discovery.service-path

サービス検出のために探すパス。

/services/

String

camel.cloud.etcd.service-discovery.timeout

アクションが完了するまでにかかる最大時間を設定します。

 

Long

camel.cloud.etcd.service-discovery.type

検出タイプを設定するには、有効な値はオンデマンドとウォッチです。

オンデマンド

String

camel.cloud.etcd.service-discovery.uris

クライアントが接続できる URI。

 

String

camel.cloud.etcd.service-discovery.user-name

基本認証に使用するユーザー名。

 

String

camel.cloud.kubernetes.service-discovery.api-version

クライアントルックアップを使用する場合の API バージョンを設定します。

 

String

camel.cloud.kubernetes.service-discovery.ca-cert-data

クライアントルックアップをする際に使用する認証局データを設定します。

 

String

camel.cloud.kubernetes.service-discovery.ca-cert-file

クライアントルックアップをする際にファイルからロードされる認証局データを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-cert-data

クライアントルックアップをする際に使用するクライアント証明書データを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-cert-file

クライアントルックアップをする際にファイルからロードされるクライアント証明書データを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-key-algo

クライアントルックアップをする際に使用する、RSA などのクライアントキーストアアルゴリズムを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-key-data

クライアントルックアップをする際に使用する、クライアントキーストアデータを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-key-file

クライアントルックアップをする際にファイルからロードされるクライアントキーストアデータを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-key-passphrase

クライアントルックアップをする際に使用する、クライアントキーストアパスフレーズを設定します。

 

String

camel.cloud.kubernetes.service-discovery.configurations

追加の設定定義を定義します。

 

マップ

camel.cloud.kubernetes.service-discovery.dns-domain

DNS ルックアップに使用する DNS ドメインを設定します。

 

String

camel.cloud.kubernetes.service-discovery.enabled

コンポーネントを有効にします。

true

ブール値

camel.cloud.kubernetes.service-discovery.lookup

サービスルックアップの実行方法。可能な値: client、dns、environment。クライアントを使用する場合、クライアントは kubernetes マスターにクエリーを実行して、サービスを提供するアクティブな Pod のリストを取得し、Pod をランダム (またはラウンドロビン) に選択します。DNS を使用する場合、サービス名は name.namespace.svc.dnsDomain として解決されます。dnssrv を使用する場合、サービス名は、.…svc…の SRV クエリーで解決されます。環境を使用する場合は、環境変数を使用してサービスを検索します。デフォルトの環境が使用されます。

environment

String

camel.cloud.kubernetes.service-discovery.master-url

クライアントルックアップを使用するときに URL をマスターに設定します。

 

String

camel.cloud.kubernetes.service-discovery.namespace

使用する名前空間を設定します。デフォルトでは、ENV 変数 KUBERNETES_MASTER の名前空間を使用します。

 

String

camel.cloud.kubernetes.service-discovery.oauth-token

クライアントルックアップを使用する際に (ユーザー名/パスワードの代わりに) 認証用の OAUTH トークンを設定します。

 

String

camel.cloud.kubernetes.service-discovery.password

クライアントルックアップを使用する際に使用する、認証パスワードを設定します。

 

String

camel.cloud.kubernetes.service-discovery.port-name

DNS/DNSSRV ルックアップに使用するポート名を設定します。

 

String

camel.cloud.kubernetes.service-discovery.port-protocol

DNS/DNSSRV ルックアップに使用するポートプロトコルを設定します。

 

String

camel.cloud.kubernetes.service-discovery.properties

使用するクライアントプロパティーを設定します。これらのプロパティーは、使用中のサービスコールの実装に固有です。たとえば、リボンを使用していると、クライアントプロパティーは com.netflix.client.config.CommonClientConfigKey で定義されます。

 

マップ

camel.cloud.kubernetes.service-discovery.trust-certs

クライアントルックアップを使用する際に使用する、トラスト証明書のチェックを有効にするかどうかを設定します。

false

ブール値

camel.cloud.kubernetes.service-discovery.username

クライアントルックアップを使用する際に使用する、認証ユーザー名を設定します。

 

String

camel.cloud.ribbon.load-balancer.client-name

リボンクライアント名を設定します。

 

String

camel.cloud.ribbon.load-balancer.configurations

追加の設定定義を定義します。

 

マップ

camel.cloud.ribbon.load-balancer.enabled

コンポーネントを有効にします。

true

ブール値

camel.cloud.ribbon.load-balancer.namespace

namespace。

 

String

camel.cloud.ribbon.load-balancer.password

パスワード。

 

String

camel.cloud.ribbon.load-balancer.properties

使用するクライアントプロパティーを設定します。これらのプロパティーは、使用中のサービスコールの実装に固有です。たとえば、リボンを使用していると、クライアントプロパティーは com.netflix.client.config.CommonClientConfigKey で定義されます。

 

マップ

camel.cloud.ribbon.load-balancer.username

ユーザー名

 

String

camel.hystrix.allow-maximum-size-to-diverge-from-core-size

maximumSize の設定を有効にします。その値は、coreSize 以上にすることができます。

false

ブール値

camel.hystrix.circuit-breaker-enabled

HystrixCircuitBreaker を使用するかどうか。false の場合、サーキットブレーカーロジックは使用されず、すべての要求が許可されます。これは実質的に circuitBreakerForceClosed() と似ていますが、メトリックの追跡を継続し、それを開閉する必要があるかどうかを認識しているため、このプロパティーによってサーキットブレーカーがインスタンス化されることもありません。

true

ブール値

camel.hystrix.circuit-breaker-error-threshold-percentage

サーキットブレーカーが開いて要求を拒否するエラー率のしきい値 (50 などの整数)。circuitBreakerSleepWindowInMilliseconds で定義された期間、トリップしたままになります。これが比較されるエラーのパーセンテージは、HystrixCommandMetrics.getHealthCounts() から取得されます。

50

Integer

camel.hystrix.circuit-breaker-force-closed

true の場合、HystrixCircuitBreaker#allowRequest() は常に true を返し、HystrixCommandMetrics.getHealthCounts() からのエラーパーセンテージに関係なくリクエストを許可します。circuitBreakerForceOpen() プロパティーが優先されるため、true に設定すると、このプロパティーは何もしません。

false

ブール値

camel.hystrix.circuit-breaker-force-open

true の場合、HystrixCircuitBreaker.allowRequest() は常に false を返します。これにより、回路が開かれ (トリップされ)、すべての要求が拒否されます。このプロパティーは circuitBreakerForceClosed() よりも優先されます。

false

ブール値

camel.hystrix.circuit-breaker-request-volume-threshold

HystrixCircuitBreaker が作動する前に存在しなければならない metricsRollingStatisticalWindowInMilliseconds() 内の要求の最小数。この数値を下回ると、エラーのパーセンテージに関係なく、回路はトリップしません。

20

Integer

camel.hystrix.circuit-breaker-sleep-window-in-milliseconds

HystrixCircuitBreaker がトリップして開いてから、要求を再試行するまで待機する時間 (ミリ秒単位)。

5000

Integer

camel.hystrix.configurations

追加の設定定義を定義します。

 

マップ

camel.hystrix.core-pool-size

java.util.concurrent.ThreadPoolExecutor#setCorePoolSize(int) に渡されるコアスレッドプールサイズ。

10

Integer

camel.hystrix.enabled

コンポーネントを有効にします。

true

ブール値

camel.hystrix.execution-isolation-semaphore-max-concurrent-requests

HystrixCommand.run() に許可された同時要求の数。同時制限を超えるリクエストは拒否されます。executionIsolationStrategy == SEMAPHORE の場合にのみ適用されます。

20

Integer

camel.hystrix.execution-isolation-strategy

HystrixCommand.run() を実行する分離戦略。THREAD の場合は、別のスレッドで実行し、同時要求はスレッドプール内のスレッド数によって制限されます。SEMAPHORE の場合、呼び出しスレッドで実行し、同時要求はセマフォ数によって制限されます。

スレッド

String

camel.hystrix.execution-isolation-thread-interrupt-on-timeout

スレッドがタイムアウトしたときに、実行スレッドが (Future#cancel を使用して) 割り込みを試みるかどうか。executionIsolationStrategy() == THREAD の場合にのみ適用されます。

true

ブール値

camel.hystrix.execution-timeout-enabled

このコマンドのタイムアウトメカニズムを有効にするかどうか。

true

ブール値

camel.hystrix.execution-timeout-in-milliseconds

コマンドがタイムアウトして実行を停止する時間 (ミリ秒単位)。executionIsolationThreadInterruptOnTimeout == true で、コマンドがスレッド分離されている場合、実行中のスレッドは中断されます。コマンドがセマフォ分離されており、HystrixObservableCommand である場合、そのコマンドはサブスクライブ解除されます。

1000

Integer

camel.hystrix.fallback-enabled

障害が発生したときに HystrixCommand.getFallback() を試行するかどうか。

true

ブール値

camel.hystrix.fallback-isolation-semaphore-max-concurrent-requests

HystrixCommand.getFallback() に許可された同時要求の数。同時制限を超えるリクエストはフェールファストになり、フォールバックの取得は試行されません。

10

Integer

camel.hystrix.group-key

使用するグループキーを設定します。デフォルト値は、CamelHystrix です。

CamelHystrix

String

camel.hystrix.keep-alive-time

ThreadPoolExecutor#setKeepAliveTime(long,TimeUnit) に渡されるキープアライブ時間 (分単位)。

1

Integer

camel.hystrix.max-queue-size

HystrixConcurrencyStrategy.getBlockingQueue(int) で BlockingQueue に渡される最大キューサイズ。これは、スレッドプールのインスタンス化にのみ影響します。その場でキューサイズを変更することはできません。そのためには、queueSizeRejectionThreshold() を使用します。

-1

Integer

camel.hystrix.maximum-size

ThreadPoolExecutor#setMaximumPoolSize(int) に渡されるスレッドプールの最大サイズ。これは、HystrixCommands を拒否し始めることなくサポートできる同時実行の最大量です。この設定は、allowMaximumSizeToDivergeFromCoreSize も設定した場合にのみ有効になることに注意してください。

10

Integer

camel.hystrix.metrics-health-snapshot-interval-in-milliseconds

成功率とエラー率を計算し、HystrixCircuitBreaker.isOpen() ステータスに影響を与えるヘルススナップショットの取得を許可するまでの待機時間 (ミリ秒単位)。大量の回路では、エラーパーセンテージの継続的な計算によって CPU が集中的に使用される可能性があるため、これが計算の頻度を制御します。

500

Integer

camel.hystrix.metrics-rolling-percentile-bucket-size

ローリングパーセンタイルの各バケットに格納される値の最大数。これは、HystrixCommandMetrics 内の HystrixRollingPercentile に渡されます。

10

Integer

camel.hystrix.metrics-rolling-percentile-enabled

HystrixCommandMetrics 内の HystrixRollingPercentile を使用してパーセンタイルメトリックをキャプチャする必要があるかどうか。

true

ブール値

camel.hystrix.metrics-rolling-percentile-window-buckets

ローリングパーセンテージウィンドウが分割されるバケットの数。これは、HystrixCommandMetrics 内の HystrixRollingPercentile に渡されます。

6

Integer

camel.hystrix.metrics-rolling-percentile-window-in-milliseconds

ミリ秒単位のパーセンタイルローリングウィンドウの期間。これは、HystrixCommandMetrics 内の HystrixRollingPercentile に渡されます。

10000

Integer

camel.hystrix.metrics-rolling-statistical-window-buckets

ローリング統計ウィンドウが分割されるバケットの数。これは、HystrixCommandMetrics 内の HystrixRollingNumber に渡されます。

10

Integer

camel.hystrix.metrics-rolling-statistical-window-in-milliseconds

このプロパティーは、統計ローリングウィンドウの期間をミリ秒単位で設定します。スレッドプール用にメトリクスが保持される期間です。ウィンドウは、それらの増分によってバケットとロールに分割されます。

10000

Integer

camel.hystrix.queue-size-rejection-threshold

キューサイズの拒否しきい値は、maxQueueSize に到達していない場合でも拒否できる人為的な最大キューサイズを設定します。これは、BlockingQueue の maxQueueSize を動的に変更することができず、拒否に影響するキューサイズの動的な変更をサポートするために行われます。これは、実行のためにスレッドをキューに入れるときに HystrixCommand によって使用されます。

5

Integer

camel.hystrix.request-log-enabled

HystrixCommand の実行およびイベントを HystrixRequestLog に記録するべきかどうかを示します。

true

ブール値

camel.hystrix.thread-pool-key

使用するスレッドプールキーを設定します。デフォルトでは、groupKey が使用するように設定されているのと同じ値を使用します。

CamelHystrix

String

camel.hystrix.thread-pool-rolling-number-statistical-window-buckets

ローリング統計ウィンドウが分割されるバケットの数。これは、各 HystrixThreadPoolMetrics インスタンス内の HystrixRollingNumber に渡されます。

10

Integer

camel.hystrix.thread-pool-rolling-number-statistical-window-in-milliseconds

統計ローリングウィンドウの期間をミリ秒単位で設定します。これは、各 HystrixThreadPoolMetrics インスタンス内の HystrixRollingNumber に渡されます。

10000

Integer

camel.language.constant.enabled

定数言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.constant.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.csimple.enabled

csimple 言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.csimple.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.exchangeproperty.enabled

exchangeProperty 言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.exchangeproperty.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.file.enabled

ファイル言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.file.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.header.enabled

ヘッダー言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.header.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.ref.enabled

ref 言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.ref.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.simple.enabled

簡易言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.simple.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.tokenize.enabled

tokenize 言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.tokenize.group-delimiter

グループ化時に使用する区切り文字を設定します。これが設定されていない場合は、トークンが区切り文字として使用されます。

 

String

camel.language.tokenize.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.resilience4j.automatic-transition-from-open-to-half-open-enabled

waitDurationInOpenState が経過すると、OPEN から HALF_OPEN 状態への自動移行を有効にします。

false

ブール値

camel.resilience4j.circuit-breaker-ref

レジストリーから検索して使用する既存の io.github.resilience4j.circuitbreaker.CircuitBreaker インスタンスを参照します。これを使用する場合、他のサーキットブレーカーオプションは使用されません。

 

String

camel.resilience4j.config-ref

レジストリーから検索して使用する既存の github.resilience4j.circuitbreaker.CircuitBreakerConfig インスタンスを参照します。

 

String

camel.resilience4j.configurations

追加の設定定義を定義します。

 

マップ

camel.resilience4j.enabled

コンポーネントを有効にします。

true

ブール値

camel.resilience4j.failure-rate-threshold

失敗率のしきい値をパーセンテージで設定します。失敗率がしきい値以上の場合、CircuitBreaker はオープンに移行し、コールのショートサーキットを開始します。しきい値は 0 より大きく 100 以下である必要があります。デフォルト値は 50% です。

 

Float

camel.resilience4j.minimum-number-of-calls

CircuitBreaker がエラー率を計算できるようになるまでに必要な (スライディングウィンドウ期間ごとの) 呼び出しの最小数を設定します。たとえば、minimumNumberOfCalls が 10 の場合、失敗率を計算するには、少なくとも 10 件の呼び出しが記録される必要があります。9 つのコールのみが記録されている場合、CircuitBreaker は 9 つのコールすべてが失敗した場合でもオープンに移行しません。デフォルトの minimumNumberOfCalls は 100 です。

100

Integer

camel.resilience4j.permitted-number-of-calls-in-half-open-state

CircuitBreaker が半分開いているときに許可される呼び出しの数を設定します。サイズは 0 より大きくなければなりませんデフォルトのサイズは 10 です。

10

Integer

camel.resilience4j.sliding-window-size

CircuitBreaker が閉じられたときに呼び出しの結果を記録するために使用されるスライディングウィンドウのサイズを設定します。slideWindowSize は、スライディングウィンドウのサイズを設定します。スライディングウィンドウは、カウントベースまたは時間ベースのいずれかです。slidingWindowType が COUNT_BASED の場合、最後の slideWindowSize 呼び出しが記録され、集計されます。SlidingWindowType が TIME_BASED の場合は、最後の slideWindowSize 秒の呼び出しが記録され、集計されます。slidingWindowSize は 0 より大きくなければなりません。minimumNumberOfCalls は 0 より大きくする必要があります。SlidingWindowType が COUNT_BASED の場合、minimumNumberOfCalls を slideWindowSize より大きくすることはできません。slidingWindowType が TIME_BASED の場合は、好きなものを選択できます。デフォルトの slidingWindowType は 100 です。

100

Integer

camel.resilience4j.sliding-window-type

CircuitBreaker が閉じられたときに呼び出しの結果を記録するために使用されるスライディングウィンドウのサイズを設定します。スライディングウィンドウは、カウントベースまたは時間ベースのいずれかです。slidingWindowType が COUNT_BASED の場合、最後の slideWindowSize 呼び出しが記録され、集計されます。SlidingWindowType が TIME_BASED の場合は、最後の slideWindowSize 秒の呼び出しが記録され、集計されます。デフォルトの slidingWindowType は COUNT_BASED です。

COUNT_BASED

String

camel.resilience4j.slow-call-duration-threshold

それを超えると呼び出しが低速と見なされ、低速呼び出しのパーセンテージが増加する期間のしきい値 (秒) を設定します。デフォルト値は 60 秒です。

60

Integer

camel.resilience4j.slow-call-rate-threshold

パーセンテージでしきい値を設定します。CircuitBreaker は、呼び出し時間が slowCallDurationThreshold Duration よりも長い場合、呼び出しが遅いと見なします。失敗率がしきい値以上の場合、CircuitBreaker はオープンに移行し、ショートサーキット呼び出しを開始します。しきい値は 0 より大きく 100 以下である必要があります。デフォルト値は 100 パーセントです。これは、記録されたすべてのコールが slowCallDurationThreshold より遅くなければならないことを意味します。

 

Float

camel.resilience4j.wait-duration-in-open-state

ハーフオープンに切り替わる前に CircuitBreaker が開いたままになる時間を指定する待機期間 (秒単位) を設定します。デフォルト値は 60 秒です。

60

Integer

camel.resilience4j.writable-stack-trace-enabled

書き込み可能なスタックトレースを有効にします。false に設定すると、Exception.getStackTrace は長さゼロの配列を返します。これは、例外の原因が既にわかっている (サーキットブレーカーが呼び出しを短絡している) ため、サーキットブレーカーが開いているときにログスパムを減らすために使用できます。

true

ブール値

camel.rest.api-component

REST API として使用する Camel コンポーネントの名前 (swagger など)。API コンポーネントが明示的に設定されていない場合は、REST API ドキュメントのサービスおよび生成を担当する Camel コンポーネントがある場合、または org.apache.camel.spi.RestApiProcessorFactory がレジストリーに登録されているかどうかを調べます。いずれかが見つかった場合は、それが使用されています。

 

String

camel.rest.api-context-path

REST API サービスが使用する主要な API コンテキストパスを設定します。これは、デプロイされた Web アプリケーションがコンテキストパスを使用してデプロイされる camel-servlet などのコンポーネントを使用する場合に使用できます。

 

String

camel.rest.api-context-route-id

REST API にサービスを提供するルートに使用するルート ID を設定します。デフォルトでは、ルートは自動割り当てのルート ID を使用します。

 

String

camel.rest.api-host

API ドキュメント (swagger など) に特定のホスト名を使用するには、これを使用して、生成されたホストをこの設定済みホスト名でオーバーライドできます。

 

String

camel.rest.api-property

API ドキュメント (swagger) の追加プロパティーをできるだけ多く設定できます。たとえば、プロパティー api.title をクールスタッフに設定します。

 

マップ

camel.rest.api-vendor-extension

Rest API でベンダー拡張機能が有効になっているかどうか。有効にすると、Camel はルート ID、クラス名などの追加情報をベンダー拡張 (x- で始まるキーなど) として含めます。API ドキュメントをインポートするときに、すべてのサードパーティー API ゲートウェイおよびツールがベンダー拡張をサポートしているわけではありません。

false

ブール値

camel.rest.binding-mode

使用するバインドモードを設定します。デフォルト値は off です。

 

RestBindingMode

camel.rest.client-request-validation

クライアント要求の検証を有効にして、クライアントからの Content-Type および Accept ヘッダーがその消費/生成設定の Rest-DSL 設定によってサポートされているかどうかを確認するかどうか。これをオンにして、このチェックを有効にすることができます。検証エラーの場合は、HTTP ステータスコード 415 または 406 が返されます。デフォルト値は false です。

false

ブール値

camel.rest.component

netty-http、jetty、servlet、undertow などの REST トランスポート (consumer) に使用する Camel Rest コンポーネント。コンポーネントが明示的に設定されていない場合、Rest DSL と統合する Camel コンポーネントがある場合、または org.apache.camel.spi.RestConsumerFactory がレジストリーに登録されている場合、Camel はルックアップします。いずれかが見つかった場合は、それが使用されています。

 

String

camel.rest.component-property

使用中の残りのコンポーネントの追加プロパティーをできるだけ多く設定できます。

 

マップ

camel.rest.consumer-property

使用中の残りの consumer の追加プロパティーをできるだけ多く設定できます。

 

マップ

camel.rest.context-path

REST サービスが使用する主要なコンテキストパスを設定します。これは、デプロイされた Web アプリケーションがコンテキストパスを使用してデプロイされる camel-servlet などのコンポーネントを使用する場合に使用できます。または、HTTP サーバーを含む camel -jetty や camel-netty-http などのコンポーネントの場合。

 

String

camel.rest.cors-headers

カスタム CORS ヘッダーを設定できます。

 

マップ

camel.rest.data-format-property

使用中のデータ形式の追加プロパティーをできるだけ多く設定できます。たとえば、プロパティー prettyPrint を true に設定すると、json がプリティモードで出力されます。オプションが JSON または XML のいずれか、および IN または OUT のいずれか専用であることを示すために、プロパティーに接頭辞を付けることができます。接頭辞は、json.in.、json.out.、xml.in.、xml.outです。たとえば、値が xml.out.mustBeJAXBElement のキーは、送信用の XML データ形式専用です。接頭辞のないキーは、すべての状況で共通のキーです。

 

マップ

camel.rest.enable-cors

HTTP 応答で CORS ヘッダーを有効にするかどうか。デフォルト値は false です。

false

ブール値

camel.rest.endpoint-property

使用中の残りのエンドポイントの追加プロパティーをできるだけ多く設定できます。

 

マップ

camel.rest.host

REST サービスの公開に使用するホスト名。

 

String

camel.rest.host-name-resolver

ホスト名が明示的に設定されていない場合、このリゾルバーは、REST サービスが使用するホスト名を計算するために使用されます。

 

RestHostNameResolver

camel.rest.json-data-format

使用する特定の json データ形式の名前。デフォルトでは json-jackson が使用されます。重要: このオプションは、データ形式のカスタム名を設定するためのものであり、既存のデータ形式インスタンスを参照するためのものではありません。

 

String

camel.rest.port

REST サービスの公開に使用するポート番号。サーブレットコンポーネントを使用する場合は、ここで設定したポート番号は適用されないことに注意してください。使用中のポート番号は、サーブレットコンポーネントが使用している実際のポート番号であるためです。たとえば、Apache Tomcat を使用する場合は Tomcat http ポート、Apache Karaf を使用する場合はデフォルトでポート 8181 を使用する Karaf の HTTP サービスなどです。このような状況では、ここでポート番号を設定すると、ツールと JMX がポート番号を認識できるようになるため、ポート番号をサーブレットエンジンが使用する番号に設定することをお勧めします。

 

String

camel.rest.producer-api-doc

REST producer が REST uri を検証するために使用する API ドキュメント (swagger api) の場所を設定し、API ドキュメントに応じてクエリーパラメーターが有効です。これには、クラスパスに camel-swagger-java を追加する必要があり、設定に誤りがあると、Camel が起動時に失敗し、エラーが報告されます。API ドキュメントの場所はデフォルトでクラスパスから読み込まれますが、file: または http: を使用してリソースを参照し、ファイルまたは http url から読み込むことができます。

 

String

camel.rest.producer-component

REST producer として使用する Camel コンポーネントの名前を設定します。

 

String

camel.rest.scheme

REST サービスの公開に使用するスキーム。通常、http または https がサポートされます。デフォルト値は http です。

 

String

camel.rest.skip-binding-on-error-code

カスタム HTTP エラーコードヘッダーがある場合は、出力でバインディングをスキップするかどうか。これにより、json/xml などにバインドしないカスタムエラーメッセージを作成できます。それ以外の場合は成功メッセージが作成されます。

false

ブール値

camel.rest.use-x-forward-headers

ホストおよび関連する設定に X-Forward ヘッダーを使用するかどうか。デフォルト値は true です。

true

ブール値

camel.rest.xml-data-format

使用する特定の XML データ形式の名前。デフォルトでは jaxb が使用されます。重要: このオプションは、データ形式のカスタム名を設定するためのものであり、既存のデータ形式インスタンスを参照するためのものではありません。

 

String

camel.rest.api-context-id-pattern

非推奨 CamelContext ID パターンを設定して、名前がパターンに一致する CamelContext 内の REST サービスからの Rest API のみを許可します。パターン は CamelContext 名を参照し、現在の CamelContext のみに一致します。その他の値の場合、パターンは PatternHelper#matchPattern (String,String) のルールを使用します。

 

String

camel.rest.api-context-listing

非推奨 JVM で REST サービスを使用して使用可能なすべての CamelContext のリストを有効にするかどうかを設定します。有効にすると、これらのコンテキストを検出できます。false の場合、現在の CamelContext のみが使用されます。

false

ブール値

第69章 File

File Expression Language はこの言語の拡張機能であり、File 関連の機能が追加されています。これらの機能は、ファイルパスと名前を操作する一般的なユースケースに関連しています。目標は、式を consumer と producer の両方に

動的ファイルパターンを設定するためのコンポーネントと合わせて使用することです。

注記

File 言語は言語に統合されているので、Simple 言語内ですべてのファイル構文を直接使用できます。

69.1. File 言語オプション

File 言語は、以下に示す 2 つのオプションをサポートしています。

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

resultType

 

String

結果の型 (出力からの型) のクラス名を設定します。

trim

 

ブール値

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

69.2. 構文

この言語は、言語の 拡張 であるため、構文も適用されます。したがって、以下の表には、追加のファイル関連機能のみがリストされています。

すべての File トークンは、java.io.File オブジェクトのメソッドと同じ式名を使用します。たとえば、file:absolutejava.io.File.getAbsolute () メソッドを参照します。すべての式が現在の Exchange でサポートされているわけではないことに注意してください。たとえば、コンポーネントは一部のオプションをサポートしますが、File コンポーネントはすべてのオプションをサポートします。

タイプFile Consumerファイル producerFTP consumerFTP producer説明

file:name

String

はい

いいえ

はい

いいえ

ファイル名を指します (開始ディレクトリーを起点にした相対パスにあります。以下の注記を参照してください)。

file:name.ext

String

はい

いいえ

はい

いいえ

ファイル拡張子のみを指します

file:name.ext.single

String

はい

いいえ

はい

いいえ

ファイル拡張子を指します。ファイル拡張子に複数のドットがある場合には、この式は削除され、最後の部分のみが返されます。

file:name.noext

String

はい

いいえ

はい

いいえ

拡張子のないファイル名を指します (開始ディレクトリーを起点にした相対パスにあります。以下の注を参照してください)

file:name.noext.single

String

はい

いいえ

はい

いいえ

拡張子のないファイル名を指します (開始ディレクトリーを起点にした相対パスにあります。以下の注を参照してください)ファイル拡張子に複数のドットがある場合、この変数は最後の部分のみを取り除き、他の部分を返します。

file:onlyname

String

はい

いいえ

はい

いいえ

先行パスなしでファイル名のみを指します。

file:onlyname.noext

String

はい

いいえ

はい

いいえ

拡張子や先行パスのないファイル名のみを指します。

file:onlyname.noext.single

String

はい

いいえ

はい

いいえ

拡張子や先行パスのないファイル名のみを指します。ファイル拡張子に複数のドットがある場合、この変数は最後の部分のみを取り除き、他の部分を返します。

file:ext

String

はい

いいえ

はい

いいえ

ファイル拡張子のみを指します

file:parent

String

はい

いいえ

はい

いいえ

ファイルの親を参照します

file:path

String

はい

いいえ

はい

いいえ

ファイルパスを参照します

file:absolute

Boolean

はい

いいえ

いいえ

いいえ

ファイルが絶対パスまたは相対パスと見なされるかどうかを示します。

file:absolute.path

String

はい

いいえ

いいえ

いいえ

絶対ファイルパスを指します。

file:length

Long

はい

いいえ

はい

いいえ

Long 型として返されるファイルの長さを参照します

file:size

Long

はい

いいえ

はい

いいえ

Long 型として返されるファイルの長さを参照します

file:modified

日付

はい

いいえ

はい

いいえ

日付型として返された最終変更ファイルを指します。

date:_command:pattern_

String

はい

はい

はい

はい

java.text.SimpleDateFormat パターンを使用した日付フォーマット用。言語の 拡張 です。追加のコマンドは、ファイルの最終変更タイムスタンプ向けの file (consumer のみ) です。注意: この言語から全コマンドも使用できます。

69.3. File トークンの例

69.3.1. 相対パス

相対 ディレクトリー (.\filelanguage\test) にファイル hello.txtjava.io.File ハンドルがあります。そして、この開始ディレクトリー .\filelanguage を使用するようにエンドポイントを設定します。File トークンは次のように返されます。

戻り値

file:name

test\hello.txt

file:name.ext

txt

file:name.noext

test\hello

file:onlyname

hello.txt

file:onlyname.noext

hello

file:ext

txt

file:parent

filelanguage\test

file:path

filelanguage\test\hello.txt

file:absolute

false

file:absolute.path

\workspace\camel\camel-core\target\filelanguage\test\hello.txt

69.3.2. 絶対パス

絶対 ディレクトリー (\workspace\camel\camel-core\target\filelanguage\test) にファイル hello.txtjava.io.File ハンドルがあります。そして、絶対開始ディレクトリー \workspace\camel\camel-core\target\filelanguage を使用するように out エンドポイントを設定します。File トークンは次のように返されます。

戻り値

file:name

test\hello.txt

file:name.ext

txt

file:name.noext

test\hello

file:onlyname

hello.txt

file:onlyname.noext

hello

file:ext

txt

file:parent

\workspace\camel\camel-core\target\filelanguage\test

file:path

\workspace\camel\camel-core\target\filelanguage\test\hello.txt

file:absolute

true

file:absolute.path

\workspace\camel\camel-core\target\filelanguage\test\hello.txt

69.4. サンプル

myfile.txt などの固定ファイル名を入力できます。

fileName="myfile.txt"

File consumerを使用してファイルを読み取り、読み取ったファイルを移動して、現在の日付をサブフォルダーとして持つバックアップフォルダーに移動するとします。これは、次のような式を使用して実行できます。

fileName="backup/${date:now:yyyyMMdd}/${file:name.noext}.bak"

相対フォルダー名もサポートされているため、バックアップフォルダーが兄弟フォルダーであると仮定すると、次のように .. を追加できます。

fileName="../backup/${date:now:yyyyMMdd}/${file:name.noext}.bak"

これは言語の拡張であるため、この言語の利点をすべて活用できるので、このユースケースでは、in.header.type を動的式のパラメーターとして使用します。

fileName="../backup/${date:now:yyyyMMdd}/type-${in.header.type}/backup-of-${file:name.noext}.bak"

式で使用するカスタムの日付がある場合、Camel はメッセージヘッダーからの日付の取得をサポートします。

fileName="orders/order-${in.header.customerId}-${date:in.header.orderDate:yyyyMMdd}.xml"

最後に、Bean 式を使用して、使用する文字列出力 (または文字列に変換可能) を生成する POJO クラスを呼び出すこともできます。

fileName="uniquefile-${bean:myguidgenerator.generateid}.txt"

当然、これはすべて 1 つの式に統合でき、1 つに組み合わせられた式でこの言語を使用できます。これは、これらの一般的なファイルパスパターンに対して非常に強力です。

69.5. 依存関係

File 言語は camel-core の一部です。

69.6. Spring Boot 自動設定

Spring Boot でファイルを使用する場合は、自動設定をサポートするために次の Maven 依存関係を使用してください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-core-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 147 のオプションをサポートします。

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

camel.cloud.consul.service-discovery.acl-token

Consul で使用する ACL トークンを設定します。

 

String

camel.cloud.consul.service-discovery.block-seconds

監視イベントを待機する秒数。デフォルトは 10 秒です。

10

Integer

camel.cloud.consul.service-discovery.configurations

追加の設定定義を定義します。

 

マップ

camel.cloud.consul.service-discovery.connect-timeout-millis

OkHttpClient の接続タイムアウト。

 

Long

camel.cloud.consul.service-discovery.datacenter

データセンター。

 

String

camel.cloud.consul.service-discovery.enabled

コンポーネントを有効にします。

true

ブール値

camel.cloud.consul.service-discovery.password

基本認証に使用するパスワードを設定します。

 

String

camel.cloud.consul.service-discovery.properties

使用するクライアントプロパティーを設定します。これらのプロパティーは、使用中のサービスコールの実装に固有です。たとえば、リボンを使用していると、クライアントプロパティーは com.netflix.client.config.CommonClientConfigKey で定義されます。

 

マップ

camel.cloud.consul.service-discovery.read-timeout-millis

OkHttpClient の読み取りタイムアウト。

 

Long

camel.cloud.consul.service-discovery.url

Consul エージェントの URL。

 

String

camel.cloud.consul.service-discovery.user-name

Basic 認証に使用するユーザー名を設定します。

 

String

camel.cloud.consul.service-discovery.write-timeout-millis

OkHttpClient の書き込みタイムアウト。

 

Long

camel.cloud.dns.service-discovery.configurations

追加の設定定義を定義します。

 

マップ

camel.cloud.dns.service-discovery.domain

ドメイン名;.

 

String

camel.cloud.dns.service-discovery.enabled

コンポーネントを有効にします。

true

ブール値

camel.cloud.dns.service-discovery.properties

使用するクライアントプロパティーを設定します。これらのプロパティーは、使用中のサービスコールの実装に固有です。たとえば、リボンを使用していると、クライアントプロパティーは com.netflix.client.config.CommonClientConfigKey で定義されます。

 

マップ

camel.cloud.dns.service-discovery.proto

目的のサービスのトランスポートプロトコル。

_tcp

String

camel.cloud.etcd.service-discovery.configurations

追加の設定定義を定義します。

 

マップ

camel.cloud.etcd.service-discovery.enabled

コンポーネントを有効にします。

true

ブール値

camel.cloud.etcd.service-discovery.password

基本認証に使用するパスワード。

 

String

camel.cloud.etcd.service-discovery.properties

使用するクライアントプロパティーを設定します。これらのプロパティーは、使用中のサービスコールの実装に固有です。たとえば、リボンを使用していると、クライアントプロパティーは com.netflix.client.config.CommonClientConfigKey で定義されます。

 

マップ

camel.cloud.etcd.service-discovery.service-path

サービス検出のために探すパス。

/services/

String

camel.cloud.etcd.service-discovery.timeout

アクションが完了するまでにかかる最大時間を設定します。

 

Long

camel.cloud.etcd.service-discovery.type

検出タイプを設定するには、有効な値はオンデマンドとウォッチです。

オンデマンド

String

camel.cloud.etcd.service-discovery.uris

クライアントが接続できる URI。

 

String

camel.cloud.etcd.service-discovery.user-name

基本認証に使用するユーザー名。

 

String

camel.cloud.kubernetes.service-discovery.api-version

クライアントルックアップを使用する場合の API バージョンを設定します。

 

String

camel.cloud.kubernetes.service-discovery.ca-cert-data

クライアントルックアップをする際に使用する認証局データを設定します。

 

String

camel.cloud.kubernetes.service-discovery.ca-cert-file

クライアントルックアップをする際にファイルからロードされる認証局データを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-cert-data

クライアントルックアップをする際に使用するクライアント証明書データを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-cert-file

クライアントルックアップをする際にファイルからロードされるクライアント証明書データを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-key-algo

クライアントルックアップをする際に使用する、RSA などのクライアントキーストアアルゴリズムを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-key-data

クライアントルックアップをする際に使用する、クライアントキーストアデータを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-key-file

クライアントルックアップをする際にファイルからロードされるクライアントキーストアデータを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-key-passphrase

クライアントルックアップをする際に使用する、クライアントキーストアパスフレーズを設定します。

 

String

camel.cloud.kubernetes.service-discovery.configurations

追加の設定定義を定義します。

 

マップ

camel.cloud.kubernetes.service-discovery.dns-domain

DNS ルックアップに使用する DNS ドメインを設定します。

 

String

camel.cloud.kubernetes.service-discovery.enabled

コンポーネントを有効にします。

true

ブール値

camel.cloud.kubernetes.service-discovery.lookup

サービスルックアップの実行方法。可能な値: client、dns、environment。クライアントを使用する場合、クライアントは kubernetes マスターにクエリーを実行して、サービスを提供するアクティブな Pod のリストを取得し、Pod をランダム (またはラウンドロビン) に選択します。DNS を使用する場合、サービス名は name.namespace.svc.dnsDomain として解決されます。dnssrv を使用する場合、サービス名は、.…svc…の SRV クエリーで解決されます。環境を使用する場合は、環境変数を使用してサービスを検索します。デフォルトの環境が使用されます。

environment

String

camel.cloud.kubernetes.service-discovery.master-url

クライアントルックアップを使用するときに URL をマスターに設定します。

 

String

camel.cloud.kubernetes.service-discovery.namespace

使用する名前空間を設定します。デフォルトでは、ENV 変数 KUBERNETES_MASTER の名前空間を使用します。

 

String

camel.cloud.kubernetes.service-discovery.oauth-token

クライアントルックアップを使用する際に (ユーザー名/パスワードの代わりに) 認証用の OAUTH トークンを設定します。

 

String

camel.cloud.kubernetes.service-discovery.password

クライアントルックアップを使用する際に使用する、認証パスワードを設定します。

 

String

camel.cloud.kubernetes.service-discovery.port-name

DNS/DNSSRV ルックアップに使用するポート名を設定します。

 

String

camel.cloud.kubernetes.service-discovery.port-protocol

DNS/DNSSRV ルックアップに使用するポートプロトコルを設定します。

 

String

camel.cloud.kubernetes.service-discovery.properties

使用するクライアントプロパティーを設定します。これらのプロパティーは、使用中のサービスコールの実装に固有です。たとえば、リボンを使用していると、クライアントプロパティーは com.netflix.client.config.CommonClientConfigKey で定義されます。

 

マップ

camel.cloud.kubernetes.service-discovery.trust-certs

クライアントルックアップを使用する際に使用する、トラスト証明書のチェックを有効にするかどうかを設定します。

false

ブール値

camel.cloud.kubernetes.service-discovery.username

クライアントルックアップを使用する際に使用する、認証ユーザー名を設定します。

 

String

camel.cloud.ribbon.load-balancer.client-name

リボンクライアント名を設定します。

 

String

camel.cloud.ribbon.load-balancer.configurations

追加の設定定義を定義します。

 

マップ

camel.cloud.ribbon.load-balancer.enabled

コンポーネントを有効にします。

true

ブール値

camel.cloud.ribbon.load-balancer.namespace

namespace。

 

String

camel.cloud.ribbon.load-balancer.password

パスワード。

 

String

camel.cloud.ribbon.load-balancer.properties

使用するクライアントプロパティーを設定します。これらのプロパティーは、使用中のサービスコールの実装に固有です。たとえば、リボンを使用していると、クライアントプロパティーは com.netflix.client.config.CommonClientConfigKey で定義されます。

 

マップ

camel.cloud.ribbon.load-balancer.username

ユーザー名

 

String

camel.hystrix.allow-maximum-size-to-diverge-from-core-size

maximumSize の設定を有効にします。その値は、coreSize 以上にすることができます。

false

ブール値

camel.hystrix.circuit-breaker-enabled

HystrixCircuitBreaker を使用するかどうか。false の場合、サーキットブレーカーロジックは使用されず、すべての要求が許可されます。これは実質的に circuitBreakerForceClosed() と似ていますが、メトリックの追跡を継続し、それを開閉する必要があるかどうかを認識しているため、このプロパティーによってサーキットブレーカーがインスタンス化されることもありません。

true

ブール値

camel.hystrix.circuit-breaker-error-threshold-percentage

サーキットブレーカーが開いて要求を拒否するエラー率のしきい値 (50 などの整数)。circuitBreakerSleepWindowInMilliseconds で定義された期間、トリップしたままになります。これが比較されるエラーのパーセンテージは、HystrixCommandMetrics.getHealthCounts() から取得されます。

50

Integer

camel.hystrix.circuit-breaker-force-closed

true の場合、HystrixCircuitBreaker#allowRequest() は常に true を返し、HystrixCommandMetrics.getHealthCounts() からのエラーパーセンテージに関係なくリクエストを許可します。circuitBreakerForceOpen() プロパティーが優先されるため、true に設定すると、このプロパティーは何もしません。

false

ブール値

camel.hystrix.circuit-breaker-force-open

true の場合、HystrixCircuitBreaker.allowRequest() は常に false を返します。これにより、回路が開かれ (トリップされ)、すべての要求が拒否されます。このプロパティーは circuitBreakerForceClosed() よりも優先されます。

false

ブール値

camel.hystrix.circuit-breaker-request-volume-threshold

HystrixCircuitBreaker が作動する前に存在しなければならない metricsRollingStatisticalWindowInMilliseconds() 内の要求の最小数。この数値を下回ると、エラーのパーセンテージに関係なく、回路はトリップしません。

20

Integer

camel.hystrix.circuit-breaker-sleep-window-in-milliseconds

HystrixCircuitBreaker がトリップして開いてから、要求を再試行するまで待機する時間 (ミリ秒単位)。

5000

Integer

camel.hystrix.configurations

追加の設定定義を定義します。

 

マップ

camel.hystrix.core-pool-size

java.util.concurrent.ThreadPoolExecutor#setCorePoolSize(int) に渡されるコアスレッドプールサイズ。

10

Integer

camel.hystrix.enabled

コンポーネントを有効にします。

true

ブール値

camel.hystrix.execution-isolation-semaphore-max-concurrent-requests

HystrixCommand.run() に許可された同時要求の数。同時制限を超えるリクエストは拒否されます。executionIsolationStrategy == SEMAPHORE の場合にのみ適用されます。

20

Integer

camel.hystrix.execution-isolation-strategy

HystrixCommand.run() を実行する分離戦略。THREAD の場合は、別のスレッドで実行し、同時要求はスレッドプール内のスレッド数によって制限されます。SEMAPHORE の場合、呼び出しスレッドで実行し、同時要求はセマフォ数によって制限されます。

スレッド

String

camel.hystrix.execution-isolation-thread-interrupt-on-timeout

スレッドがタイムアウトしたときに、実行スレッドが (Future#cancel を使用して) 割り込みを試みるかどうか。executionIsolationStrategy() == THREAD の場合にのみ適用されます。

true

ブール値

camel.hystrix.execution-timeout-enabled

このコマンドのタイムアウトメカニズムを有効にするかどうか。

true

ブール値

camel.hystrix.execution-timeout-in-milliseconds

コマンドがタイムアウトして実行を停止する時間 (ミリ秒単位)。executionIsolationThreadInterruptOnTimeout == true で、コマンドがスレッド分離されている場合、実行中のスレッドは中断されます。コマンドがセマフォ分離されており、HystrixObservableCommand である場合、そのコマンドはサブスクライブ解除されます。

1000

Integer

camel.hystrix.fallback-enabled

障害が発生したときに HystrixCommand.getFallback() を試行するかどうか。

true

ブール値

camel.hystrix.fallback-isolation-semaphore-max-concurrent-requests

HystrixCommand.getFallback() に許可された同時要求の数。同時制限を超えるリクエストはフェールファストになり、フォールバックの取得は試行されません。

10

Integer

camel.hystrix.group-key

使用するグループキーを設定します。デフォルト値は、CamelHystrix です。

CamelHystrix

String

camel.hystrix.keep-alive-time

ThreadPoolExecutor#setKeepAliveTime(long,TimeUnit) に渡されるキープアライブ時間 (分単位)。

1

Integer

camel.hystrix.max-queue-size

HystrixConcurrencyStrategy.getBlockingQueue(int) で BlockingQueue に渡される最大キューサイズ。これは、スレッドプールのインスタンス化にのみ影響します。その場でキューサイズを変更することはできません。そのためには、queueSizeRejectionThreshold() を使用します。

-1

Integer

camel.hystrix.maximum-size

ThreadPoolExecutor#setMaximumPoolSize(int) に渡されるスレッドプールの最大サイズ。これは、HystrixCommands を拒否し始めることなくサポートできる同時実行の最大量です。この設定は、allowMaximumSizeToDivergeFromCoreSize も設定した場合にのみ有効になることに注意してください。

10

Integer

camel.hystrix.metrics-health-snapshot-interval-in-milliseconds

成功率とエラー率を計算し、HystrixCircuitBreaker.isOpen() ステータスに影響を与えるヘルススナップショットの取得を許可するまでの待機時間 (ミリ秒単位)。大量の回路では、エラーパーセンテージの継続的な計算によって CPU が集中的に使用される可能性があるため、これが計算の頻度を制御します。

500

Integer

camel.hystrix.metrics-rolling-percentile-bucket-size

ローリングパーセンタイルの各バケットに格納される値の最大数。これは、HystrixCommandMetrics 内の HystrixRollingPercentile に渡されます。

10

Integer

camel.hystrix.metrics-rolling-percentile-enabled

HystrixCommandMetrics 内の HystrixRollingPercentile を使用してパーセンタイルメトリックをキャプチャする必要があるかどうか。

true

ブール値

camel.hystrix.metrics-rolling-percentile-window-buckets

ローリングパーセンテージウィンドウが分割されるバケットの数。これは、HystrixCommandMetrics 内の HystrixRollingPercentile に渡されます。

6

Integer

camel.hystrix.metrics-rolling-percentile-window-in-milliseconds

ミリ秒単位のパーセンタイルローリングウィンドウの期間。これは、HystrixCommandMetrics 内の HystrixRollingPercentile に渡されます。

10000

Integer

camel.hystrix.metrics-rolling-statistical-window-buckets

ローリング統計ウィンドウが分割されるバケットの数。これは、HystrixCommandMetrics 内の HystrixRollingNumber に渡されます。

10

Integer

camel.hystrix.metrics-rolling-statistical-window-in-milliseconds

このプロパティーは、統計ローリングウィンドウの期間をミリ秒単位で設定します。スレッドプール用にメトリクスが保持される期間です。ウィンドウは、それらの増分によってバケットとロールに分割されます。

10000

Integer

camel.hystrix.queue-size-rejection-threshold

キューサイズの拒否しきい値は、maxQueueSize に到達していない場合でも拒否できる人為的な最大キューサイズを設定します。これは、BlockingQueue の maxQueueSize を動的に変更することができず、拒否に影響するキューサイズの動的な変更をサポートするために行われます。これは、実行のためにスレッドをキューに入れるときに HystrixCommand によって使用されます。

5

Integer

camel.hystrix.request-log-enabled

HystrixCommand の実行およびイベントを HystrixRequestLog に記録するべきかどうかを示します。

true

ブール値

camel.hystrix.thread-pool-key

使用するスレッドプールキーを設定します。デフォルトでは、groupKey が使用するように設定されているのと同じ値を使用します。

CamelHystrix

String

camel.hystrix.thread-pool-rolling-number-statistical-window-buckets

ローリング統計ウィンドウが分割されるバケットの数。これは、各 HystrixThreadPoolMetrics インスタンス内の HystrixRollingNumber に渡されます。

10

Integer

camel.hystrix.thread-pool-rolling-number-statistical-window-in-milliseconds

統計ローリングウィンドウの期間をミリ秒単位で設定します。これは、各 HystrixThreadPoolMetrics インスタンス内の HystrixRollingNumber に渡されます。

10000

Integer

camel.language.constant.enabled

定数言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.constant.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.csimple.enabled

csimple 言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.csimple.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.exchangeproperty.enabled

exchangeProperty 言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.exchangeproperty.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.file.enabled

ファイル言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.file.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.header.enabled

ヘッダー言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.header.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.ref.enabled

ref 言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.ref.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.simple.enabled

簡易言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.simple.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.tokenize.enabled

tokenize 言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.tokenize.group-delimiter

グループ化時に使用する区切り文字を設定します。これが設定されていない場合は、トークンが区切り文字として使用されます。

 

String

camel.language.tokenize.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.resilience4j.automatic-transition-from-open-to-half-open-enabled

waitDurationInOpenState が経過すると、OPEN から HALF_OPEN 状態への自動移行を有効にします。

false

ブール値

camel.resilience4j.circuit-breaker-ref

レジストリーから検索して使用する既存の io.github.resilience4j.circuitbreaker.CircuitBreaker インスタンスを参照します。これを使用する場合、他のサーキットブレーカーオプションは使用されません。

 

String

camel.resilience4j.config-ref

レジストリーから検索して使用する既存の github.resilience4j.circuitbreaker.CircuitBreakerConfig インスタンスを参照します。

 

String

camel.resilience4j.configurations

追加の設定定義を定義します。

 

マップ

camel.resilience4j.enabled

コンポーネントを有効にします。

true

ブール値

camel.resilience4j.failure-rate-threshold

失敗率のしきい値をパーセンテージで設定します。失敗率がしきい値以上の場合、CircuitBreaker はオープンに移行し、コールのショートサーキットを開始します。しきい値は 0 より大きく 100 以下である必要があります。デフォルト値は 50% です。

 

Float

camel.resilience4j.minimum-number-of-calls

CircuitBreaker がエラー率を計算できるようになるまでに必要な (スライディングウィンドウ期間ごとの) 呼び出しの最小数を設定します。たとえば、minimumNumberOfCalls が 10 の場合、失敗率を計算するには、少なくとも 10 件の呼び出しが記録される必要があります。9 つのコールのみが記録されている場合、CircuitBreaker は 9 つのコールすべてが失敗した場合でもオープンに移行しません。デフォルトの minimumNumberOfCalls は 100 です。

100

Integer

camel.resilience4j.permitted-number-of-calls-in-half-open-state

CircuitBreaker が半分開いているときに許可される呼び出しの数を設定します。サイズは 0 より大きくなければなりませんデフォルトのサイズは 10 です。

10

Integer

camel.resilience4j.sliding-window-size

CircuitBreaker が閉じられたときに呼び出しの結果を記録するために使用されるスライディングウィンドウのサイズを設定します。slideWindowSize は、スライディングウィンドウのサイズを設定します。スライディングウィンドウは、カウントベースまたは時間ベースのいずれかです。slidingWindowType が COUNT_BASED の場合、最後の slideWindowSize 呼び出しが記録され、集計されます。SlidingWindowType が TIME_BASED の場合は、最後の slideWindowSize 秒の呼び出しが記録され、集計されます。slidingWindowSize は 0 より大きくなければなりません。minimumNumberOfCalls は 0 より大きくする必要があります。SlidingWindowType が COUNT_BASED の場合、minimumNumberOfCalls を slideWindowSize より大きくすることはできません。slidingWindowType が TIME_BASED の場合は、好きなものを選択できます。デフォルトの slidingWindowType は 100 です。

100

Integer

camel.resilience4j.sliding-window-type

CircuitBreaker が閉じられたときに呼び出しの結果を記録するために使用されるスライディングウィンドウのサイズを設定します。スライディングウィンドウは、カウントベースまたは時間ベースのいずれかです。slidingWindowType が COUNT_BASED の場合、最後の slideWindowSize 呼び出しが記録され、集計されます。SlidingWindowType が TIME_BASED の場合は、最後の slideWindowSize 秒の呼び出しが記録され、集計されます。デフォルトの slidingWindowType は COUNT_BASED です。

COUNT_BASED

String

camel.resilience4j.slow-call-duration-threshold

それを超えると呼び出しが低速と見なされ、低速呼び出しのパーセンテージが増加する期間のしきい値 (秒) を設定します。デフォルト値は 60 秒です。

60

Integer

camel.resilience4j.slow-call-rate-threshold

パーセンテージでしきい値を設定します。CircuitBreaker は、呼び出し時間が slowCallDurationThreshold Duration よりも長い場合、呼び出しが遅いと見なします。失敗率がしきい値以上の場合、CircuitBreaker はオープンに移行し、ショートサーキット呼び出しを開始します。しきい値は 0 より大きく 100 以下である必要があります。デフォルト値は 100 パーセントです。これは、記録されたすべてのコールが slowCallDurationThreshold より遅くなければならないことを意味します。

 

Float

camel.resilience4j.wait-duration-in-open-state

ハーフオープンに切り替わる前に CircuitBreaker が開いたままになる時間を指定する待機期間 (秒単位) を設定します。デフォルト値は 60 秒です。

60

Integer

camel.resilience4j.writable-stack-trace-enabled

書き込み可能なスタックトレースを有効にします。false に設定すると、Exception.getStackTrace は長さゼロの配列を返します。これは、例外の原因が既にわかっている (サーキットブレーカーが呼び出しを短絡している) ため、サーキットブレーカーが開いているときにログスパムを減らすために使用できます。

true

ブール値

camel.rest.api-component

REST API として使用する Camel コンポーネントの名前 (swagger など)。API コンポーネントが明示的に設定されていない場合は、REST API ドキュメントのサービスおよび生成を担当する Camel コンポーネントがある場合、または org.apache.camel.spi.RestApiProcessorFactory がレジストリーに登録されているかどうかを調べます。いずれかが見つかった場合は、それが使用されています。

 

String

camel.rest.api-context-path

REST API サービスが使用する主要な API コンテキストパスを設定します。これは、デプロイされた Web アプリケーションがコンテキストパスを使用してデプロイされる camel-servlet などのコンポーネントを使用する場合に使用できます。

 

String

camel.rest.api-context-route-id

REST API にサービスを提供するルートに使用するルート ID を設定します。デフォルトでは、ルートは自動割り当てのルート ID を使用します。

 

String

camel.rest.api-host

API ドキュメント (swagger など) に特定のホスト名を使用するには、これを使用して、生成されたホストをこの設定済みホスト名でオーバーライドできます。

 

String

camel.rest.api-property

API ドキュメント (swagger) の追加プロパティーをできるだけ多く設定できます。たとえば、プロパティー api.title をクールスタッフに設定します。

 

マップ

camel.rest.api-vendor-extension

Rest API でベンダー拡張機能が有効になっているかどうか。有効にすると、Camel はルート ID、クラス名などの追加情報をベンダー拡張 (x- で始まるキーなど) として含めます。API ドキュメントをインポートするときに、すべてのサードパーティー API ゲートウェイおよびツールがベンダー拡張をサポートしているわけではありません。

false

ブール値

camel.rest.binding-mode

使用するバインドモードを設定します。デフォルト値は off です。

 

RestBindingMode

camel.rest.client-request-validation

クライアント要求の検証を有効にして、クライアントからの Content-Type および Accept ヘッダーがその消費/生成設定の Rest-DSL 設定によってサポートされているかどうかを確認するかどうか。これをオンにして、このチェックを有効にすることができます。検証エラーの場合は、HTTP ステータスコード 415 または 406 が返されます。デフォルト値は false です。

false

ブール値

camel.rest.component

netty-http、jetty、servlet、undertow などの REST トランスポート (consumer) に使用する Camel Rest コンポーネント。コンポーネントが明示的に設定されていない場合、Rest DSL と統合する Camel コンポーネントがある場合、または org.apache.camel.spi.RestConsumerFactory がレジストリーに登録されている場合、Camel はルックアップします。いずれかが見つかった場合は、それが使用されています。

 

String

camel.rest.component-property

使用中の残りのコンポーネントの追加プロパティーをできるだけ多く設定できます。

 

マップ

camel.rest.consumer-property

使用中の残りの consumer の追加プロパティーをできるだけ多く設定できます。

 

マップ

camel.rest.context-path

REST サービスが使用する主要なコンテキストパスを設定します。これは、デプロイされた Web アプリケーションがコンテキストパスを使用してデプロイされる camel-servlet などのコンポーネントを使用する場合に使用できます。または、HTTP サーバーを含む camel -jetty や camel-netty-http などのコンポーネントの場合。

 

String

camel.rest.cors-headers

カスタム CORS ヘッダーを設定できます。

 

マップ

camel.rest.data-format-property

使用中のデータ形式の追加プロパティーをできるだけ多く設定できます。たとえば、プロパティー prettyPrint を true に設定すると、json がプリティモードで出力されます。オプションが JSON または XML のいずれか、および IN または OUT のいずれか専用であることを示すために、プロパティーに接頭辞を付けることができます。接頭辞は、json.in.、json.out.、xml.in.、xml.outです。たとえば、値が xml.out.mustBeJAXBElement のキーは、送信用の XML データ形式専用です。接頭辞のないキーは、すべての状況で共通のキーです。

 

マップ

camel.rest.enable-cors

HTTP 応答で CORS ヘッダーを有効にするかどうか。デフォルト値は false です。

false

ブール値

camel.rest.endpoint-property

使用中の残りのエンドポイントの追加プロパティーをできるだけ多く設定できます。

 

マップ

camel.rest.host

REST サービスの公開に使用するホスト名。

 

String

camel.rest.host-name-resolver

ホスト名が明示的に設定されていない場合、このリゾルバーは、REST サービスが使用するホスト名を計算するために使用されます。

 

RestHostNameResolver

camel.rest.json-data-format

使用する特定の json データ形式の名前。デフォルトでは json-jackson が使用されます。重要: このオプションは、データ形式のカスタム名を設定するためのものであり、既存のデータ形式インスタンスを参照するためのものではありません。

 

String

camel.rest.port

REST サービスの公開に使用するポート番号。サーブレットコンポーネントを使用する場合は、ここで設定したポート番号は適用されないことに注意してください。使用中のポート番号は、サーブレットコンポーネントが使用している実際のポート番号であるためです。たとえば、Apache Tomcat を使用する場合は Tomcat http ポート、Apache Karaf を使用する場合はデフォルトでポート 8181 を使用する Karaf の HTTP サービスなどです。このような状況では、ここでポート番号を設定すると、ツールと JMX がポート番号を認識できるようになるため、ポート番号をサーブレットエンジンが使用する番号に設定することをお勧めします。

 

String

camel.rest.producer-api-doc

REST producer が REST uri を検証するために使用する API ドキュメント (swagger api) の場所を設定し、API ドキュメントに応じてクエリーパラメーターが有効です。これには、クラスパスに camel-swagger-java を追加する必要があり、設定に誤りがあると、Camel が起動時に失敗し、エラーが報告されます。API ドキュメントの場所はデフォルトでクラスパスから読み込まれますが、file: または http: を使用してリソースを参照し、ファイルまたは http url から読み込むことができます。

 

String

camel.rest.producer-component

REST producer として使用する Camel コンポーネントの名前を設定します。

 

String

camel.rest.scheme

REST サービスの公開に使用するスキーム。通常、http または https がサポートされます。デフォルト値は http です。

 

String

camel.rest.skip-binding-on-error-code

カスタム HTTP エラーコードヘッダーがある場合は、出力でバインディングをスキップするかどうか。これにより、json/xml などにバインドしないカスタムエラーメッセージを作成できます。それ以外の場合は成功メッセージが作成されます。

false

ブール値

camel.rest.use-x-forward-headers

ホストおよび関連する設定に X-Forward ヘッダーを使用するかどうか。デフォルト値は true です。

true

ブール値

camel.rest.xml-data-format

使用する特定の XML データ形式の名前。デフォルトでは jaxb が使用されます。重要: このオプションは、データ形式のカスタム名を設定するためのものであり、既存のデータ形式インスタンスを参照するためのものではありません。

 

String

camel.rest.api-context-id-pattern

非推奨 CamelContext ID パターンを設定して、名前がパターンに一致する CamelContext 内の REST サービスからの Rest API のみを許可します。パターン は CamelContext 名を参照し、現在の CamelContext のみに一致します。その他の値の場合、パターンは PatternHelper#matchPattern (String,String) のルールを使用します。

 

String

camel.rest.api-context-listing

非推奨 JVM で REST サービスを使用して使用可能なすべての CamelContext のリストを有効にするかどうかを設定します。有効にすると、これらのコンテキストを検出できます。false の場合、現在の CamelContext のみが使用されます。

false

ブール値

第70章 Header

ヘッダー式言語 (Header Expression Language) を使用すると、名前付きヘッダーの値を抽出できます。

70.1. Header オプション

Header 言語は、以下にリストされている 1 つのオプションをサポートしています。

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

trim

 

ブール値

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

70.2. 使用例

recipientList EIP はヘッダーを利用できます。

<route>
  <from uri="direct:a" />
  <recipientList>
    <header>myHeader</header>
  </recipientList>
</route>

この場合、受信者のリストはヘッダー myHeader に含まれています。

Java DSL での同じ例:

from("direct:a").recipientList(header("myHeader"));

70.3. 依存関係

Header 言語は camel-core の一部です。

70.4. Spring Boot 自動設定

Spring Boot で header を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-core-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 147 のオプションをサポートします。

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

camel.cloud.consul.service-discovery.acl-token

Consul で使用する ACL トークンを設定します。

 

String

camel.cloud.consul.service-discovery.block-seconds

監視イベントを待機する秒数。デフォルトは 10 秒です。

10

Integer

camel.cloud.consul.service-discovery.configurations

追加の設定定義を定義します。

 

マップ

camel.cloud.consul.service-discovery.connect-timeout-millis

OkHttpClient の接続タイムアウト。

 

Long

camel.cloud.consul.service-discovery.datacenter

データセンター。

 

String

camel.cloud.consul.service-discovery.enabled

コンポーネントを有効にします。

true

ブール値

camel.cloud.consul.service-discovery.password

基本認証に使用するパスワードを設定します。

 

String

camel.cloud.consul.service-discovery.properties

使用するクライアントプロパティーを設定します。これらのプロパティーは、使用中のサービスコールの実装に固有です。たとえば、リボンを使用していると、クライアントプロパティーは com.netflix.client.config.CommonClientConfigKey で定義されます。

 

マップ

camel.cloud.consul.service-discovery.read-timeout-millis

OkHttpClient の読み取りタイムアウト。

 

Long

camel.cloud.consul.service-discovery.url

Consul エージェントの URL。

 

String

camel.cloud.consul.service-discovery.user-name

Basic 認証に使用するユーザー名を設定します。

 

String

camel.cloud.consul.service-discovery.write-timeout-millis

OkHttpClient の書き込みタイムアウト。

 

Long

camel.cloud.dns.service-discovery.configurations

追加の設定定義を定義します。

 

マップ

camel.cloud.dns.service-discovery.domain

ドメイン名;.

 

String

camel.cloud.dns.service-discovery.enabled

コンポーネントを有効にします。

true

ブール値

camel.cloud.dns.service-discovery.properties

使用するクライアントプロパティーを設定します。これらのプロパティーは、使用中のサービスコールの実装に固有です。たとえば、リボンを使用していると、クライアントプロパティーは com.netflix.client.config.CommonClientConfigKey で定義されます。

 

マップ

camel.cloud.dns.service-discovery.proto

目的のサービスのトランスポートプロトコル。

_tcp

String

camel.cloud.etcd.service-discovery.configurations

追加の設定定義を定義します。

 

マップ

camel.cloud.etcd.service-discovery.enabled

コンポーネントを有効にします。

true

ブール値

camel.cloud.etcd.service-discovery.password

基本認証に使用するパスワード。

 

String

camel.cloud.etcd.service-discovery.properties

使用するクライアントプロパティーを設定します。これらのプロパティーは、使用中のサービスコールの実装に固有です。たとえば、リボンを使用していると、クライアントプロパティーは com.netflix.client.config.CommonClientConfigKey で定義されます。

 

マップ

camel.cloud.etcd.service-discovery.service-path

サービス検出のために探すパス。

/services/

String

camel.cloud.etcd.service-discovery.timeout

アクションが完了するまでにかかる最大時間を設定します。

 

Long

camel.cloud.etcd.service-discovery.type

検出タイプを設定するには、有効な値はオンデマンドとウォッチです。

オンデマンド

String

camel.cloud.etcd.service-discovery.uris

クライアントが接続できる URI。

 

String

camel.cloud.etcd.service-discovery.user-name

基本認証に使用するユーザー名。

 

String

camel.cloud.kubernetes.service-discovery.api-version

クライアントルックアップを使用する場合の API バージョンを設定します。

 

String

camel.cloud.kubernetes.service-discovery.ca-cert-data

クライアントルックアップをする際に使用する認証局データを設定します。

 

String

camel.cloud.kubernetes.service-discovery.ca-cert-file

クライアントルックアップをする際にファイルからロードされる認証局データを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-cert-data

クライアントルックアップをする際に使用するクライアント証明書データを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-cert-file

クライアントルックアップをする際にファイルからロードされるクライアント証明書データを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-key-algo

クライアントルックアップをする際に使用する、RSA などのクライアントキーストアアルゴリズムを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-key-data

クライアントルックアップをする際に使用する、クライアントキーストアデータを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-key-file

クライアントルックアップをする際にファイルからロードされるクライアントキーストアデータを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-key-passphrase

クライアントルックアップをする際に使用する、クライアントキーストアパスフレーズを設定します。

 

String

camel.cloud.kubernetes.service-discovery.configurations

追加の設定定義を定義します。

 

マップ

camel.cloud.kubernetes.service-discovery.dns-domain

DNS ルックアップに使用する DNS ドメインを設定します。

 

String

camel.cloud.kubernetes.service-discovery.enabled

コンポーネントを有効にします。

true

ブール値

camel.cloud.kubernetes.service-discovery.lookup

サービスルックアップの実行方法。可能な値: client、dns、environment。クライアントを使用する場合、クライアントは kubernetes マスターにクエリーを実行して、サービスを提供するアクティブな Pod のリストを取得し、Pod をランダム (またはラウンドロビン) に選択します。DNS を使用する場合、サービス名は name.namespace.svc.dnsDomain として解決されます。dnssrv を使用する場合、サービス名は、.…svc…の SRV クエリーで解決されます。環境を使用する場合は、環境変数を使用してサービスを検索します。デフォルトの環境が使用されます。

environment

String

camel.cloud.kubernetes.service-discovery.master-url

クライアントルックアップを使用するときに URL をマスターに設定します。

 

String

camel.cloud.kubernetes.service-discovery.namespace

使用する名前空間を設定します。デフォルトでは、ENV 変数 KUBERNETES_MASTER の名前空間を使用します。

 

String

camel.cloud.kubernetes.service-discovery.oauth-token

クライアントルックアップを使用する際に (ユーザー名/パスワードの代わりに) 認証用の OAUTH トークンを設定します。

 

String

camel.cloud.kubernetes.service-discovery.password

クライアントルックアップを使用する際に使用する、認証パスワードを設定します。

 

String

camel.cloud.kubernetes.service-discovery.port-name

DNS/DNSSRV ルックアップに使用するポート名を設定します。

 

String

camel.cloud.kubernetes.service-discovery.port-protocol

DNS/DNSSRV ルックアップに使用するポートプロトコルを設定します。

 

String

camel.cloud.kubernetes.service-discovery.properties

使用するクライアントプロパティーを設定します。これらのプロパティーは、使用中のサービスコールの実装に固有です。たとえば、リボンを使用していると、クライアントプロパティーは com.netflix.client.config.CommonClientConfigKey で定義されます。

 

マップ

camel.cloud.kubernetes.service-discovery.trust-certs

クライアントルックアップを使用する際に使用する、トラスト証明書のチェックを有効にするかどうかを設定します。

false

ブール値

camel.cloud.kubernetes.service-discovery.username

クライアントルックアップを使用する際に使用する、認証ユーザー名を設定します。

 

String

camel.cloud.ribbon.load-balancer.client-name

リボンクライアント名を設定します。

 

String

camel.cloud.ribbon.load-balancer.configurations

追加の設定定義を定義します。

 

マップ

camel.cloud.ribbon.load-balancer.enabled

コンポーネントを有効にします。

true

ブール値

camel.cloud.ribbon.load-balancer.namespace

namespace。

 

String

camel.cloud.ribbon.load-balancer.password

パスワード。

 

String

camel.cloud.ribbon.load-balancer.properties

使用するクライアントプロパティーを設定します。これらのプロパティーは、使用中のサービスコールの実装に固有です。たとえば、リボンを使用していると、クライアントプロパティーは com.netflix.client.config.CommonClientConfigKey で定義されます。

 

マップ

camel.cloud.ribbon.load-balancer.username

ユーザー名

 

String

camel.hystrix.allow-maximum-size-to-diverge-from-core-size

maximumSize の設定を有効にします。その値は、coreSize 以上にすることができます。

false

ブール値

camel.hystrix.circuit-breaker-enabled

HystrixCircuitBreaker を使用するかどうか。false の場合、サーキットブレーカーロジックは使用されず、すべての要求が許可されます。これは実質的に circuitBreakerForceClosed() と似ていますが、メトリックの追跡を継続し、それを開閉する必要があるかどうかを認識しているため、このプロパティーによってサーキットブレーカーがインスタンス化されることもありません。

true

ブール値

camel.hystrix.circuit-breaker-error-threshold-percentage

サーキットブレーカーが開いて要求を拒否するエラー率のしきい値 (50 などの整数)。circuitBreakerSleepWindowInMilliseconds で定義された期間、トリップしたままになります。これが比較されるエラーのパーセンテージは、HystrixCommandMetrics.getHealthCounts() から取得されます。

50

Integer

camel.hystrix.circuit-breaker-force-closed

true の場合、HystrixCircuitBreaker#allowRequest() は常に true を返し、HystrixCommandMetrics.getHealthCounts() からのエラーパーセンテージに関係なくリクエストを許可します。circuitBreakerForceOpen() プロパティーが優先されるため、true に設定すると、このプロパティーは何もしません。

false

ブール値

camel.hystrix.circuit-breaker-force-open

true の場合、HystrixCircuitBreaker.allowRequest() は常に false を返します。これにより、回路が開かれ (トリップされ)、すべての要求が拒否されます。このプロパティーは circuitBreakerForceClosed() よりも優先されます。

false

ブール値

camel.hystrix.circuit-breaker-request-volume-threshold

HystrixCircuitBreaker が作動する前に存在しなければならない metricsRollingStatisticalWindowInMilliseconds() 内の要求の最小数。この数値を下回ると、エラーのパーセンテージに関係なく、回路はトリップしません。

20

Integer

camel.hystrix.circuit-breaker-sleep-window-in-milliseconds

HystrixCircuitBreaker がトリップして開いてから、要求を再試行するまで待機する時間 (ミリ秒単位)。

5000

Integer

camel.hystrix.configurations

追加の設定定義を定義します。

 

マップ

camel.hystrix.core-pool-size

java.util.concurrent.ThreadPoolExecutor#setCorePoolSize(int) に渡されるコアスレッドプールサイズ。

10

Integer

camel.hystrix.enabled

コンポーネントを有効にします。

true

ブール値

camel.hystrix.execution-isolation-semaphore-max-concurrent-requests

HystrixCommand.run() に許可された同時要求の数。同時制限を超えるリクエストは拒否されます。executionIsolationStrategy == SEMAPHORE の場合にのみ適用されます。

20

Integer

camel.hystrix.execution-isolation-strategy

HystrixCommand.run() を実行する分離戦略。THREAD の場合は、別のスレッドで実行し、同時要求はスレッドプール内のスレッド数によって制限されます。SEMAPHORE の場合、呼び出しスレッドで実行し、同時要求はセマフォ数によって制限されます。

スレッド

String

camel.hystrix.execution-isolation-thread-interrupt-on-timeout

スレッドがタイムアウトしたときに、実行スレッドが (Future#cancel を使用して) 割り込みを試みるかどうか。executionIsolationStrategy() == THREAD の場合にのみ適用されます。

true

ブール値

camel.hystrix.execution-timeout-enabled

このコマンドのタイムアウトメカニズムを有効にするかどうか。

true

ブール値

camel.hystrix.execution-timeout-in-milliseconds

コマンドがタイムアウトして実行を停止する時間 (ミリ秒単位)。executionIsolationThreadInterruptOnTimeout == true で、コマンドがスレッド分離されている場合、実行中のスレッドは中断されます。コマンドがセマフォ分離されており、HystrixObservableCommand である場合、そのコマンドはサブスクライブ解除されます。

1000

Integer

camel.hystrix.fallback-enabled

障害が発生したときに HystrixCommand.getFallback() を試行するかどうか。

true

ブール値

camel.hystrix.fallback-isolation-semaphore-max-concurrent-requests

HystrixCommand.getFallback() に許可された同時要求の数。同時制限を超えるリクエストはフェールファストになり、フォールバックの取得は試行されません。

10

Integer

camel.hystrix.group-key

使用するグループキーを設定します。デフォルト値は、CamelHystrix です。

CamelHystrix

String

camel.hystrix.keep-alive-time

ThreadPoolExecutor#setKeepAliveTime(long,TimeUnit) に渡されるキープアライブ時間 (分単位)。

1

Integer

camel.hystrix.max-queue-size

HystrixConcurrencyStrategy.getBlockingQueue(int) で BlockingQueue に渡される最大キューサイズ。これは、スレッドプールのインスタンス化にのみ影響します。その場でキューサイズを変更することはできません。そのためには、queueSizeRejectionThreshold() を使用します。

-1

Integer

camel.hystrix.maximum-size

ThreadPoolExecutor#setMaximumPoolSize(int) に渡されるスレッドプールの最大サイズ。これは、HystrixCommands を拒否し始めることなくサポートできる同時実行の最大量です。この設定は、allowMaximumSizeToDivergeFromCoreSize も設定した場合にのみ有効になることに注意してください。

10

Integer

camel.hystrix.metrics-health-snapshot-interval-in-milliseconds

成功率とエラー率を計算し、HystrixCircuitBreaker.isOpen() ステータスに影響を与えるヘルススナップショットの取得を許可するまでの待機時間 (ミリ秒単位)。大量の回路では、エラーパーセンテージの継続的な計算によって CPU が集中的に使用される可能性があるため、これが計算の頻度を制御します。

500

Integer

camel.hystrix.metrics-rolling-percentile-bucket-size

ローリングパーセンタイルの各バケットに格納される値の最大数。これは、HystrixCommandMetrics 内の HystrixRollingPercentile に渡されます。

10

Integer

camel.hystrix.metrics-rolling-percentile-enabled

HystrixCommandMetrics 内の HystrixRollingPercentile を使用してパーセンタイルメトリックをキャプチャする必要があるかどうか。

true

ブール値

camel.hystrix.metrics-rolling-percentile-window-buckets

ローリングパーセンテージウィンドウが分割されるバケットの数。これは、HystrixCommandMetrics 内の HystrixRollingPercentile に渡されます。

6

Integer

camel.hystrix.metrics-rolling-percentile-window-in-milliseconds

ミリ秒単位のパーセンタイルローリングウィンドウの期間。これは、HystrixCommandMetrics 内の HystrixRollingPercentile に渡されます。

10000

Integer

camel.hystrix.metrics-rolling-statistical-window-buckets

ローリング統計ウィンドウが分割されるバケットの数。これは、HystrixCommandMetrics 内の HystrixRollingNumber に渡されます。

10

Integer

camel.hystrix.metrics-rolling-statistical-window-in-milliseconds

このプロパティーは、統計ローリングウィンドウの期間をミリ秒単位で設定します。スレッドプール用にメトリクスが保持される期間です。ウィンドウは、それらの増分によってバケットとロールに分割されます。

10000

Integer

camel.hystrix.queue-size-rejection-threshold

キューサイズの拒否しきい値は、maxQueueSize に到達していない場合でも拒否できる人為的な最大キューサイズを設定します。これは、BlockingQueue の maxQueueSize を動的に変更することができず、拒否に影響するキューサイズの動的な変更をサポートするために行われます。これは、実行のためにスレッドをキューに入れるときに HystrixCommand によって使用されます。

5

Integer

camel.hystrix.request-log-enabled

HystrixCommand の実行およびイベントを HystrixRequestLog に記録するべきかどうかを示します。

true

ブール値

camel.hystrix.thread-pool-key

使用するスレッドプールキーを設定します。デフォルトでは、groupKey が使用するように設定されているのと同じ値を使用します。

CamelHystrix

String

camel.hystrix.thread-pool-rolling-number-statistical-window-buckets

ローリング統計ウィンドウが分割されるバケットの数。これは、各 HystrixThreadPoolMetrics インスタンス内の HystrixRollingNumber に渡されます。

10

Integer

camel.hystrix.thread-pool-rolling-number-statistical-window-in-milliseconds

統計ローリングウィンドウの期間をミリ秒単位で設定します。これは、各 HystrixThreadPoolMetrics インスタンス内の HystrixRollingNumber に渡されます。

10000

Integer

camel.language.constant.enabled

定数言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.constant.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.csimple.enabled

csimple 言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.csimple.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.exchangeproperty.enabled

exchangeProperty 言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.exchangeproperty.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.file.enabled

ファイル言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.file.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.header.enabled

ヘッダー言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.header.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.ref.enabled

ref 言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.ref.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.simple.enabled

簡易言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.simple.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.tokenize.enabled

tokenize 言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.tokenize.group-delimiter

グループ化時に使用する区切り文字を設定します。これが設定されていない場合は、トークンが区切り文字として使用されます。

 

String

camel.language.tokenize.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.resilience4j.automatic-transition-from-open-to-half-open-enabled

waitDurationInOpenState が経過すると、OPEN から HALF_OPEN 状態への自動移行を有効にします。

false

ブール値

camel.resilience4j.circuit-breaker-ref

レジストリーから検索して使用する既存の io.github.resilience4j.circuitbreaker.CircuitBreaker インスタンスを参照します。これを使用する場合、他のサーキットブレーカーオプションは使用されません。

 

String

camel.resilience4j.config-ref

レジストリーから検索して使用する既存の github.resilience4j.circuitbreaker.CircuitBreakerConfig インスタンスを参照します。

 

String

camel.resilience4j.configurations

追加の設定定義を定義します。

 

マップ

camel.resilience4j.enabled

コンポーネントを有効にします。

true

ブール値

camel.resilience4j.failure-rate-threshold

失敗率のしきい値をパーセンテージで設定します。失敗率がしきい値以上の場合、CircuitBreaker はオープンに移行し、コールのショートサーキットを開始します。しきい値は 0 より大きく 100 以下である必要があります。デフォルト値は 50% です。

 

Float

camel.resilience4j.minimum-number-of-calls

CircuitBreaker がエラー率を計算できるようになるまでに必要な (スライディングウィンドウ期間ごとの) 呼び出しの最小数を設定します。たとえば、minimumNumberOfCalls が 10 の場合、失敗率を計算するには、少なくとも 10 件の呼び出しが記録される必要があります。9 つのコールのみが記録されている場合、CircuitBreaker は 9 つのコールすべてが失敗した場合でもオープンに移行しません。デフォルトの minimumNumberOfCalls は 100 です。

100

Integer

camel.resilience4j.permitted-number-of-calls-in-half-open-state

CircuitBreaker が半分開いているときに許可される呼び出しの数を設定します。サイズは 0 より大きくなければなりませんデフォルトのサイズは 10 です。

10

Integer

camel.resilience4j.sliding-window-size

CircuitBreaker が閉じられたときに呼び出しの結果を記録するために使用されるスライディングウィンドウのサイズを設定します。slideWindowSize は、スライディングウィンドウのサイズを設定します。スライディングウィンドウは、カウントベースまたは時間ベースのいずれかです。slidingWindowType が COUNT_BASED の場合、最後の slideWindowSize 呼び出しが記録され、集計されます。SlidingWindowType が TIME_BASED の場合は、最後の slideWindowSize 秒の呼び出しが記録され、集計されます。slidingWindowSize は 0 より大きくなければなりません。minimumNumberOfCalls は 0 より大きくする必要があります。SlidingWindowType が COUNT_BASED の場合、minimumNumberOfCalls を slideWindowSize より大きくすることはできません。slidingWindowType が TIME_BASED の場合は、好きなものを選択できます。デフォルトの slidingWindowType は 100 です。

100

Integer

camel.resilience4j.sliding-window-type

CircuitBreaker が閉じられたときに呼び出しの結果を記録するために使用されるスライディングウィンドウのサイズを設定します。スライディングウィンドウは、カウントベースまたは時間ベースのいずれかです。slidingWindowType が COUNT_BASED の場合、最後の slideWindowSize 呼び出しが記録され、集計されます。SlidingWindowType が TIME_BASED の場合は、最後の slideWindowSize 秒の呼び出しが記録され、集計されます。デフォルトの slidingWindowType は COUNT_BASED です。

COUNT_BASED

String

camel.resilience4j.slow-call-duration-threshold

それを超えると呼び出しが低速と見なされ、低速呼び出しのパーセンテージが増加する期間のしきい値 (秒) を設定します。デフォルト値は 60 秒です。

60

Integer

camel.resilience4j.slow-call-rate-threshold

パーセンテージでしきい値を設定します。CircuitBreaker は、呼び出し時間が slowCallDurationThreshold Duration よりも長い場合、呼び出しが遅いと見なします。失敗率がしきい値以上の場合、CircuitBreaker はオープンに移行し、ショートサーキット呼び出しを開始します。しきい値は 0 より大きく 100 以下である必要があります。デフォルト値は 100 パーセントです。これは、記録されたすべてのコールが slowCallDurationThreshold より遅くなければならないことを意味します。

 

Float

camel.resilience4j.wait-duration-in-open-state

ハーフオープンに切り替わる前に CircuitBreaker が開いたままになる時間を指定する待機期間 (秒単位) を設定します。デフォルト値は 60 秒です。

60

Integer

camel.resilience4j.writable-stack-trace-enabled

書き込み可能なスタックトレースを有効にします。false に設定すると、Exception.getStackTrace は長さゼロの配列を返します。これは、例外の原因が既にわかっている (サーキットブレーカーが呼び出しを短絡している) ため、サーキットブレーカーが開いているときにログスパムを減らすために使用できます。

true

ブール値

camel.rest.api-component

REST API として使用する Camel コンポーネントの名前 (swagger など)。API コンポーネントが明示的に設定されていない場合は、REST API ドキュメントのサービスおよび生成を担当する Camel コンポーネントがある場合、または org.apache.camel.spi.RestApiProcessorFactory がレジストリーに登録されているかどうかを調べます。いずれかが見つかった場合は、それが使用されています。

 

String

camel.rest.api-context-path

REST API サービスが使用する主要な API コンテキストパスを設定します。これは、デプロイされた Web アプリケーションがコンテキストパスを使用してデプロイされる camel-servlet などのコンポーネントを使用する場合に使用できます。

 

String

camel.rest.api-context-route-id

REST API にサービスを提供するルートに使用するルート ID を設定します。デフォルトでは、ルートは自動割り当てのルート ID を使用します。

 

String

camel.rest.api-host

API ドキュメント (swagger など) に特定のホスト名を使用するには、これを使用して、生成されたホストをこの設定済みホスト名でオーバーライドできます。

 

String

camel.rest.api-property

API ドキュメント (swagger) の追加プロパティーをできるだけ多く設定できます。たとえば、プロパティー api.title をクールスタッフに設定します。

 

マップ

camel.rest.api-vendor-extension

Rest API でベンダー拡張機能が有効になっているかどうか。有効にすると、Camel はルート ID、クラス名などの追加情報をベンダー拡張 (x- で始まるキーなど) として含めます。API ドキュメントをインポートするときに、すべてのサードパーティー API ゲートウェイおよびツールがベンダー拡張をサポートしているわけではありません。

false

ブール値

camel.rest.binding-mode

使用するバインドモードを設定します。デフォルト値は off です。

 

RestBindingMode

camel.rest.client-request-validation

クライアント要求の検証を有効にして、クライアントからの Content-Type および Accept ヘッダーがその消費/生成設定の Rest-DSL 設定によってサポートされているかどうかを確認するかどうか。これをオンにして、このチェックを有効にすることができます。検証エラーの場合は、HTTP ステータスコード 415 または 406 が返されます。デフォルト値は false です。

false

ブール値

camel.rest.component

netty-http、jetty、servlet、undertow などの REST トランスポート (consumer) に使用する Camel Rest コンポーネント。コンポーネントが明示的に設定されていない場合、Rest DSL と統合する Camel コンポーネントがある場合、または org.apache.camel.spi.RestConsumerFactory がレジストリーに登録されている場合、Camel はルックアップします。いずれかが見つかった場合は、それが使用されています。

 

String

camel.rest.component-property

使用中の残りのコンポーネントの追加プロパティーをできるだけ多く設定できます。

 

マップ

camel.rest.consumer-property

使用中の残りの consumer の追加プロパティーをできるだけ多く設定できます。

 

マップ

camel.rest.context-path

REST サービスが使用する主要なコンテキストパスを設定します。これは、デプロイされた Web アプリケーションがコンテキストパスを使用してデプロイされる camel-servlet などのコンポーネントを使用する場合に使用できます。または、HTTP サーバーを含む camel -jetty や camel-netty-http などのコンポーネントの場合。

 

String

camel.rest.cors-headers

カスタム CORS ヘッダーを設定できます。

 

マップ

camel.rest.data-format-property

使用中のデータ形式の追加プロパティーをできるだけ多く設定できます。たとえば、プロパティー prettyPrint を true に設定すると、json がプリティモードで出力されます。オプションが JSON または XML のいずれか、および IN または OUT のいずれか専用であることを示すために、プロパティーに接頭辞を付けることができます。接頭辞は、json.in.、json.out.、xml.in.、xml.outです。たとえば、値が xml.out.mustBeJAXBElement のキーは、送信用の XML データ形式専用です。接頭辞のないキーは、すべての状況で共通のキーです。

 

マップ

camel.rest.enable-cors

HTTP 応答で CORS ヘッダーを有効にするかどうか。デフォルト値は false です。

false

ブール値

camel.rest.endpoint-property

使用中の残りのエンドポイントの追加プロパティーをできるだけ多く設定できます。

 

マップ

camel.rest.host

REST サービスの公開に使用するホスト名。

 

String

camel.rest.host-name-resolver

ホスト名が明示的に設定されていない場合、このリゾルバーは、REST サービスが使用するホスト名を計算するために使用されます。

 

RestHostNameResolver

camel.rest.json-data-format

使用する特定の json データ形式の名前。デフォルトでは json-jackson が使用されます。重要: このオプションは、データ形式のカスタム名を設定するためのものであり、既存のデータ形式インスタンスを参照するためのものではありません。

 

String

camel.rest.port

REST サービスの公開に使用するポート番号。サーブレットコンポーネントを使用する場合は、ここで設定したポート番号は適用されないことに注意してください。使用中のポート番号は、サーブレットコンポーネントが使用している実際のポート番号であるためです。たとえば、Apache Tomcat を使用する場合は Tomcat http ポート、Apache Karaf を使用する場合はデフォルトでポート 8181 を使用する Karaf の HTTP サービスなどです。このような状況では、ここでポート番号を設定すると、ツールと JMX がポート番号を認識できるようになるため、ポート番号をサーブレットエンジンが使用する番号に設定することをお勧めします。

 

String

camel.rest.producer-api-doc

REST producer が REST uri を検証するために使用する API ドキュメント (swagger api) の場所を設定し、API ドキュメントに応じてクエリーパラメーターが有効です。これには、クラスパスに camel-swagger-java を追加する必要があり、設定に誤りがあると、Camel が起動時に失敗し、エラーが報告されます。API ドキュメントの場所はデフォルトでクラスパスから読み込まれますが、file: または http: を使用してリソースを参照し、ファイルまたは http url から読み込むことができます。

 

String

camel.rest.producer-component

REST producer として使用する Camel コンポーネントの名前を設定します。

 

String

camel.rest.scheme

REST サービスの公開に使用するスキーム。通常、http または https がサポートされます。デフォルト値は http です。

 

String

camel.rest.skip-binding-on-error-code

カスタム HTTP エラーコードヘッダーがある場合は、出力でバインディングをスキップするかどうか。これにより、json/xml などにバインドしないカスタムエラーメッセージを作成できます。それ以外の場合は成功メッセージが作成されます。

false

ブール値

camel.rest.use-x-forward-headers

ホストおよび関連する設定に X-Forward ヘッダーを使用するかどうか。デフォルト値は true です。

true

ブール値

camel.rest.xml-data-format

使用する特定の XML データ形式の名前。デフォルトでは jaxb が使用されます。重要: このオプションは、データ形式のカスタム名を設定するためのものであり、既存のデータ形式インスタンスを参照するためのものではありません。

 

String

camel.rest.api-context-id-pattern

非推奨 CamelContext ID パターンを設定して、名前がパターンに一致する CamelContext 内の REST サービスからの Rest API のみを許可します。パターン は CamelContext 名を参照し、現在の CamelContext のみに一致します。その他の値の場合、パターンは PatternHelper#matchPattern (String,String) のルールを使用します。

 

String

camel.rest.api-context-listing

非推奨 JVM で REST サービスを使用して使用可能なすべての CamelContext のリストを有効にするかどうかを設定します。有効にすると、これらのコンテキストを検出できます。false の場合、現在の CamelContext のみが使用されます。

false

ブール値

第71章 JSONPath

Camel は JSONPath をサポートし、JSON メッセージで Expression または Predicate を使用できるようにします。

71.1. JSONPath オプション

JSONPath 言語は、以下にリストされている 8 つのオプションをサポートしています。

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

resultType

 

String

結果の型 (出力からの型) のクラス名を設定します。

suppressExceptions

 

ブール値

PathNotFoundException などの例外を抑制するかどうか。

allowSimple

 

ブール値

JSONPath 式でインライン化された Simple 例外を許可するかどうか。

allowEasyPredicate

 

ブール値

簡単な述語パーサーを使用して述語を事前解析できるようにするかどうか。

writeAsString

 

ブール値

各行/要素の出力をマップ/POJO 値ではなく JSON 文字列値として書き込むかどうか。

headerName

 

String

メッセージボディーの代わりに入力として使用するヘッダーの名前。

option

 

Enum

JSONPath で追加のオプションを設定するします。複数の値はコンマで区切ることができます。

列挙値:

  • DEFAULT_PATH_LEAF_TO_NULL
  • ALWAYS_RETURN_LIST
  • AS_PATH_LIST
  • SUPPRESS_EXCEPTIONS
  • REQUIRE_PROPERTIES

trim

 

ブール値

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

71.2. 例

たとえば、Content Based Router EIP を使用して Predicate で JSONPath を使用できます。

from("queue:books.new")
  .choice()
    .when().jsonpath("$.store.book[?(@.price < 10)]")
      .to("jms:queue:book.cheap")
    .when().jsonpath("$.store.book[?(@.price < 30)]")
      .to("jms:queue:book.average")
    .otherwise()
      .to("jms:queue:book.expensive");

そして XML DSL では:

<route>
  <from uri="direct:start"/>
  <choice>
    <when>
      <jsonpath>$.store.book[?(@.price &lt; 10)]</jsonpath>
      <to uri="mock:cheap"/>
    </when>
    <when>
      <jsonpath>$.store.book[?(@.price &lt; 30)]</jsonpath>
      <to uri="mock:average"/>
    </when>
    <otherwise>
      <to uri="mock:expensive"/>
    </otherwise>
  </choice>
</route>

71.3. JSONPath 構文

JSONPath 構文を使用すると、基本的な述語であっても習得に時間がかかります。たとえば、安価な書籍 (20 未満) をすべて検索する場合は、以下を行う必要があります。

$.store.book[?(@.price < 20)]

71.3.1. 簡単な JSONPath 構文

しかし、以下のように簡略化した記述もできます。

store.book.price < 20

また、価格キーを持つノードを確認する場合は、パスを省略することもできます。

price < 20

これをサポートするために、基本的なスタイルを使用して述語を定義した場合に起動する EasyPredicateParser があります。つまり、述語は $ 記号で開始してはならず、演算子を 1 つだけ含める必要があります。

簡単な構文は次のとおりです。

left OP right

適切な演算子で Camel Simple 言語を使用できます。たとえば、次のようになります。

store.book.price < ${header.limit}

その他の構文例については、JSONPath プロジェクトページを参照してください。

71.4. サポートされるメッセージボディーのタイプ

Camel JSonPath は、以下のタイプのメッセージボディーをサポートしています。

タイプComment

File

ファイルからの読み込み

String

プレーンテキスト

Map

java.util.Map 型としてのメッセージボディー

リスト

java.util.List 型としてのメッセージボディー

POJO

任意 Jackson がクラスパス上にある場合、camel-jsonpath は Jackson を使用してメッセージボディーを POJO から java.util.Map (JSonPath でサポートされる) に変換の上、JSonPath で処理することができます。たとえば、依存関係として camel-jackson を追加して、Jackson を含めることができます。

InputStream

上記のタイプがどれも一致しない場合、Camel はメッセージボディーを java.io.InputStream 型で読み込みます。

メッセージボディーがサポートされないタイプの場合は、デフォルトでは例外が出力されますが、JSonPath の設定で例外を抑止できます (以下を参照)。

71.5. 例外の抑制

デフォルトでは、設定された jsonpath 式に従って json ペイロードに有効なパスがない場合には、jsonpath は例外を出力します。ユースケースによっては、json ペイロードにオプションのデータが含まれている時にはこれを無視する場合があります。したがって、以下に示すように、オプション suppressExceptionstrue に設定して、これを無視できます。

from("direct:start")
    .choice()
        // use true to suppress exceptions
        .when().jsonpath("person.middlename", true)
            .to("mock:middle")
        .otherwise()
            .to("mock:other");

そして XML DSL では:

<route>
  <from uri="direct:start"/>
  <choice>
    <when>
      <jsonpath suppressExceptions="true">person.middlename</jsonpath>
      <to uri="mock:middle"/>
    </when>
    <otherwise>
      <to uri="mock:other"/>
    </otherwise>
  </choice>
</route>

このオプションは、@JsonPath アノテーションでも使用できます。

71.6. インライン Simple 式

Simple 構文 ${xxx} を使用して、JSONPath 式で Simple 言語をインライン化することができます。

以下に例を示します。

from("direct:start")
  .choice()
    .when().jsonpath("$.store.book[?(@.price < ${header.cheap})]")
      .to("mock:cheap")
    .when().jsonpath("$.store.book[?(@.price < ${header.average})]")
      .to("mock:average")
    .otherwise()
      .to("mock:expensive");

そして XML DSL では:

<route>
  <from uri="direct:start"/>
  <choice>
    <when>
      <jsonpath>$.store.book[?(@.price &lt; ${header.cheap})]</jsonpath>
      <to uri="mock:cheap"/>
    </when>
    <when>
      <jsonpath>$.store.book[?(@.price &lt; ${header.average})]</jsonpath>
      <to uri="mock:average"/>
    </when>
    <otherwise>
      <to uri="mock:expensive"/>
    </otherwise>
  </choice>
</route>

次のように、オプション allowSimplefalse に設定して、インライン化された Simple 式のサポートを無効にすることができます。

.when().jsonpath("$.store.book[?(@.price < 10)]", false, false)

そして XML DSL では:

<jsonpath allowSimple="false">$.store.book[?(@.price &lt; 10)]</jsonpath>

71.7. JSonPath injection

以下に示すように、Bean 統合 を使用して Bean でメソッドを呼び出し、JSONPath (@JsonPath アノテーションを介して) などのさまざまな言語を使用して、メッセージから値を抽出し、メソッドパラメーターにバインドできます。

public class Foo {

    @Consume("activemq:queue:books.new")
    public void doSomething(@JsonPath("$.store.book[*].author") String author, @Body String json) {
      // process the inbound message here
    }
}

71.8. エンコーディング検出

ドキュメントが RFC-4627 で指定されているように Unicode (UTF-8、UTF-16LE、UTF-16BE、UTF-32LE、UTF-32BE) でエンコードされている場合に、JSON ドキュメントのエンコードは自動的に検出されます。エンコードが Unicode 以外のエンコーディングの場合は、ドキュメントを文字列形式で JSONPath に入力するか、または JsonpathConstants.HEADER_JSON_ENCODING で定数として定義されているヘッダー CamelJsonPathJsonEncoding でエンコーディングを指定できます。

71.9. JSON データを JSON としてサブ行に分割する

JSONPath を使用して、次のような JSON ドキュメントを分割できます。

from("direct:start")
    .split().jsonpath("$.store.book[*]")
    .to("log:book");

次に、各書籍がログに記録されますが、メッセージボディーは Map インスタンスです。場合によっては、これをプレーンな String JSON 値として出力する場合があります。これは、次のように writeAsString オプションで実行できます。

from("direct:start")
    .split().jsonpathWriteAsString("$.store.book[*]")
    .to("log:book");

次に、各書籍が String JSON 値としてログに記録されます。

71.10. ヘッダーの入力としての使用

デフォルトでは、JSONPath はメッセージボディーを入力ソースとして使用します。ただし、headerName オプションを指定して、ヘッダーを入力として使用することもできます。

たとえば、books という名前のヘッダーに保存された JSON ドキュメントから書籍数をカウントするには、次のようにします。

from("direct:start")
    .setHeader("numberOfBooks")
        .jsonpath("$..store.book.length()", false, int.class, "books")
    .to("mock:result");

上記の jsonpath 式では、ヘッダーの名前を books として指定し、結果を int.class で整数として変換することも指示しました。

XML DSL での同じ例は次のようになります。

<route>
  <from uri="direct:start"/>
  <setHeader name="numberOfBooks">
    <jsonpath headerName="books" resultType="int">$..store.book.length()</jsonpath>
  </setHeader>
  <to uri="mock:result"/>
</route>

71.11. Spring Boot 自動設定

Spring Boot で jsonpath を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-jsonpath-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 8 個のオプションをサポートします。

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

camel.language.jsonpath.allow-easy-predicate

簡単な述語パーサーを使用して述語を事前解析できるようにするかどうか。

true

Boolean

camel.language.jsonpath.allow-simple

JSONPath 式でインライン化された Simple 例外を許可するかどうか。

true

Boolean

camel.language.jsonpath.enabled

jsonpath 言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.jsonpath.header-name

メッセージボディーの代わりに入力として使用するヘッダーの名前。

 

String

camel.language.jsonpath.option

JSONPath で追加のオプションを設定するします。複数の値はコンマで区切ることができます。

 

String

camel.language.jsonpath.suppress-exceptions

PathNotFoundException などの例外を抑制するかどうか。

false

Boolean

camel.language.jsonpath.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

Boolean

camel.language.jsonpath.write-as-string

各行/要素の出力をマップ/POJO 値ではなく JSON 文字列値として書き込むかどうか。

false

ブール値

第72章 Ref

Ref Expression Language (Ref 式言語) は、実際には、カスタムの Expression または PredicateRegistry から検索する方法です。

これは特に XML DSL で使用できます。

72.1. Ref Language オプション

Ref 言語は、以下にリストされている 1 つのオプションをサポートしています。

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

trim

 

ブール値

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

72.2. 使用例

XML DSL のスプリッター EIP は、次のように <ref> を使用してカスタム式を利用できます。

<bean id="myExpression" class="com.mycompany.MyCustomExpression"/>

<route>
  <from uri="seda:a"/>
  <split>
    <ref>myExpression</ref>
    <to uri="mock:b"/>
  </split>
</route>

この場合には、seda:a エンドポイントからのメッセージは、Registry に ID myExpression を持つカスタム Expression を使用して分割されます。

Java DSL を使用した同じ例:

from("seda:a").split().ref("myExpression").to("seda:b");

72.3. 依存関係

Ref 言語は camel-core の一部です。

72.4. Spring Boot 自動設定

Spring Boot で ref を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-core-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 147 のオプションをサポートします。

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

camel.cloud.consul.service-discovery.acl-token

Consul で使用する ACL トークンを設定します。

 

String

camel.cloud.consul.service-discovery.block-seconds

監視イベントを待機する秒数。デフォルトは 10 秒です。

10

Integer

camel.cloud.consul.service-discovery.configurations

追加の設定定義を定義します。

 

マップ

camel.cloud.consul.service-discovery.connect-timeout-millis

OkHttpClient の接続タイムアウト。

 

Long

camel.cloud.consul.service-discovery.datacenter

データセンター。

 

String

camel.cloud.consul.service-discovery.enabled

コンポーネントを有効にします。

true

ブール値

camel.cloud.consul.service-discovery.password

基本認証に使用するパスワードを設定します。

 

String

camel.cloud.consul.service-discovery.properties

使用するクライアントプロパティーを設定します。これらのプロパティーは、使用中のサービスコールの実装に固有です。たとえば、リボンを使用していると、クライアントプロパティーは com.netflix.client.config.CommonClientConfigKey で定義されます。

 

マップ

camel.cloud.consul.service-discovery.read-timeout-millis

OkHttpClient の読み取りタイムアウト。

 

Long

camel.cloud.consul.service-discovery.url

Consul エージェントの URL。

 

String

camel.cloud.consul.service-discovery.user-name

Basic 認証に使用するユーザー名を設定します。

 

String

camel.cloud.consul.service-discovery.write-timeout-millis

OkHttpClient の書き込みタイムアウト。

 

Long

camel.cloud.dns.service-discovery.configurations

追加の設定定義を定義します。

 

マップ

camel.cloud.dns.service-discovery.domain

ドメイン名;.

 

String

camel.cloud.dns.service-discovery.enabled

コンポーネントを有効にします。

true

ブール値

camel.cloud.dns.service-discovery.properties

使用するクライアントプロパティーを設定します。これらのプロパティーは、使用中のサービスコールの実装に固有です。たとえば、リボンを使用していると、クライアントプロパティーは com.netflix.client.config.CommonClientConfigKey で定義されます。

 

マップ

camel.cloud.dns.service-discovery.proto

目的のサービスのトランスポートプロトコル。

_tcp

String

camel.cloud.etcd.service-discovery.configurations

追加の設定定義を定義します。

 

マップ

camel.cloud.etcd.service-discovery.enabled

コンポーネントを有効にします。

true

ブール値

camel.cloud.etcd.service-discovery.password

基本認証に使用するパスワード。

 

String

camel.cloud.etcd.service-discovery.properties

使用するクライアントプロパティーを設定します。これらのプロパティーは、使用中のサービスコールの実装に固有です。たとえば、リボンを使用していると、クライアントプロパティーは com.netflix.client.config.CommonClientConfigKey で定義されます。

 

マップ

camel.cloud.etcd.service-discovery.service-path

サービス検出のために探すパス。

/services/

String

camel.cloud.etcd.service-discovery.timeout

アクションが完了するまでにかかる最大時間を設定します。

 

Long

camel.cloud.etcd.service-discovery.type

検出タイプを設定するには、有効な値はオンデマンドとウォッチです。

オンデマンド

String

camel.cloud.etcd.service-discovery.uris

クライアントが接続できる URI。

 

String

camel.cloud.etcd.service-discovery.user-name

基本認証に使用するユーザー名。

 

String

camel.cloud.kubernetes.service-discovery.api-version

クライアントルックアップを使用する場合の API バージョンを設定します。

 

String

camel.cloud.kubernetes.service-discovery.ca-cert-data

クライアントルックアップをする際に使用する認証局データを設定します。

 

String

camel.cloud.kubernetes.service-discovery.ca-cert-file

クライアントルックアップをする際にファイルからロードされる認証局データを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-cert-data

クライアントルックアップをする際に使用するクライアント証明書データを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-cert-file

クライアントルックアップをする際にファイルからロードされるクライアント証明書データを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-key-algo

クライアントルックアップをする際に使用する、RSA などのクライアントキーストアアルゴリズムを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-key-data

クライアントルックアップをする際に使用する、クライアントキーストアデータを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-key-file

クライアントルックアップをする際にファイルからロードされるクライアントキーストアデータを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-key-passphrase

クライアントルックアップをする際に使用する、クライアントキーストアパスフレーズを設定します。

 

String

camel.cloud.kubernetes.service-discovery.configurations

追加の設定定義を定義します。

 

マップ

camel.cloud.kubernetes.service-discovery.dns-domain

DNS ルックアップに使用する DNS ドメインを設定します。

 

String

camel.cloud.kubernetes.service-discovery.enabled

コンポーネントを有効にします。

true

ブール値

camel.cloud.kubernetes.service-discovery.lookup

サービスルックアップの実行方法。可能な値: client、dns、environment。クライアントを使用する場合、クライアントは kubernetes マスターにクエリーを実行して、サービスを提供するアクティブな Pod のリストを取得し、Pod をランダム (またはラウンドロビン) に選択します。DNS を使用する場合、サービス名は name.namespace.svc.dnsDomain として解決されます。dnssrv を使用する場合、サービス名は、.…svc…の SRV クエリーで解決されます。環境を使用する場合は、環境変数を使用してサービスを検索します。デフォルトの環境が使用されます。

environment

String

camel.cloud.kubernetes.service-discovery.master-url

クライアントルックアップを使用するときに URL をマスターに設定します。

 

String

camel.cloud.kubernetes.service-discovery.namespace

使用する名前空間を設定します。デフォルトでは、ENV 変数 KUBERNETES_MASTER の名前空間を使用します。

 

String

camel.cloud.kubernetes.service-discovery.oauth-token

クライアントルックアップを使用する際に (ユーザー名/パスワードの代わりに) 認証用の OAUTH トークンを設定します。

 

String

camel.cloud.kubernetes.service-discovery.password

クライアントルックアップを使用する際に使用する、認証パスワードを設定します。

 

String

camel.cloud.kubernetes.service-discovery.port-name

DNS/DNSSRV ルックアップに使用するポート名を設定します。

 

String

camel.cloud.kubernetes.service-discovery.port-protocol

DNS/DNSSRV ルックアップに使用するポートプロトコルを設定します。

 

String

camel.cloud.kubernetes.service-discovery.properties

使用するクライアントプロパティーを設定します。これらのプロパティーは、使用中のサービスコールの実装に固有です。たとえば、リボンを使用していると、クライアントプロパティーは com.netflix.client.config.CommonClientConfigKey で定義されます。

 

マップ

camel.cloud.kubernetes.service-discovery.trust-certs

クライアントルックアップを使用する際に使用する、トラスト証明書のチェックを有効にするかどうかを設定します。

false

ブール値

camel.cloud.kubernetes.service-discovery.username

クライアントルックアップを使用する際に使用する、認証ユーザー名を設定します。

 

String

camel.cloud.ribbon.load-balancer.client-name

リボンクライアント名を設定します。

 

String

camel.cloud.ribbon.load-balancer.configurations

追加の設定定義を定義します。

 

マップ

camel.cloud.ribbon.load-balancer.enabled

コンポーネントを有効にします。

true

ブール値

camel.cloud.ribbon.load-balancer.namespace

namespace。

 

String

camel.cloud.ribbon.load-balancer.password

パスワード。

 

String

camel.cloud.ribbon.load-balancer.properties

使用するクライアントプロパティーを設定します。これらのプロパティーは、使用中のサービスコールの実装に固有です。たとえば、リボンを使用していると、クライアントプロパティーは com.netflix.client.config.CommonClientConfigKey で定義されます。

 

マップ

camel.cloud.ribbon.load-balancer.username

ユーザー名

 

String

camel.hystrix.allow-maximum-size-to-diverge-from-core-size

maximumSize の設定を有効にします。その値は、coreSize 以上にすることができます。

false

ブール値

camel.hystrix.circuit-breaker-enabled

HystrixCircuitBreaker を使用するかどうか。false の場合、サーキットブレーカーロジックは使用されず、すべての要求が許可されます。これは実質的に circuitBreakerForceClosed() と似ていますが、メトリックの追跡を継続し、それを開閉する必要があるかどうかを認識しているため、このプロパティーによってサーキットブレーカーがインスタンス化されることもありません。

true

ブール値

camel.hystrix.circuit-breaker-error-threshold-percentage

サーキットブレーカーが開いて要求を拒否するエラー率のしきい値 (50 などの整数)。circuitBreakerSleepWindowInMilliseconds で定義された期間、トリップしたままになります。これが比較されるエラーのパーセンテージは、HystrixCommandMetrics.getHealthCounts() から取得されます。

50

Integer

camel.hystrix.circuit-breaker-force-closed

true の場合、HystrixCircuitBreaker#allowRequest() は常に true を返し、HystrixCommandMetrics.getHealthCounts() からのエラーパーセンテージに関係なくリクエストを許可します。circuitBreakerForceOpen() プロパティーが優先されるため、true に設定すると、このプロパティーは何もしません。

false

ブール値

camel.hystrix.circuit-breaker-force-open

true の場合、HystrixCircuitBreaker.allowRequest() は常に false を返します。これにより、回路が開かれ (トリップされ)、すべての要求が拒否されます。このプロパティーは circuitBreakerForceClosed() よりも優先されます。

false

ブール値

camel.hystrix.circuit-breaker-request-volume-threshold

HystrixCircuitBreaker が作動する前に存在しなければならない metricsRollingStatisticalWindowInMilliseconds() 内の要求の最小数。この数値を下回ると、エラーのパーセンテージに関係なく、回路はトリップしません。

20

Integer

camel.hystrix.circuit-breaker-sleep-window-in-milliseconds

HystrixCircuitBreaker がトリップして開いてから、要求を再試行するまで待機する時間 (ミリ秒単位)。

5000

Integer

camel.hystrix.configurations

追加の設定定義を定義します。

 

マップ

camel.hystrix.core-pool-size

java.util.concurrent.ThreadPoolExecutor#setCorePoolSize(int) に渡されるコアスレッドプールサイズ。

10

Integer

camel.hystrix.enabled

コンポーネントを有効にします。

true

ブール値

camel.hystrix.execution-isolation-semaphore-max-concurrent-requests

HystrixCommand.run() に許可された同時要求の数。同時制限を超えるリクエストは拒否されます。executionIsolationStrategy == SEMAPHORE の場合にのみ適用されます。

20

Integer

camel.hystrix.execution-isolation-strategy

HystrixCommand.run() を実行する分離戦略。THREAD の場合は、別のスレッドで実行し、同時要求はスレッドプール内のスレッド数によって制限されます。SEMAPHORE の場合、呼び出しスレッドで実行し、同時要求はセマフォ数によって制限されます。

スレッド

String

camel.hystrix.execution-isolation-thread-interrupt-on-timeout

スレッドがタイムアウトしたときに、実行スレッドが (Future#cancel を使用して) 割り込みを試みるかどうか。executionIsolationStrategy() == THREAD の場合にのみ適用されます。

true

ブール値

camel.hystrix.execution-timeout-enabled

このコマンドのタイムアウトメカニズムを有効にするかどうか。

true

ブール値

camel.hystrix.execution-timeout-in-milliseconds

コマンドがタイムアウトして実行を停止する時間 (ミリ秒単位)。executionIsolationThreadInterruptOnTimeout == true で、コマンドがスレッド分離されている場合、実行中のスレッドは中断されます。コマンドがセマフォ分離されており、HystrixObservableCommand である場合、そのコマンドはサブスクライブ解除されます。

1000

Integer

camel.hystrix.fallback-enabled

障害が発生したときに HystrixCommand.getFallback() を試行するかどうか。

true

ブール値

camel.hystrix.fallback-isolation-semaphore-max-concurrent-requests

HystrixCommand.getFallback() に許可された同時要求の数。同時制限を超えるリクエストはフェールファストになり、フォールバックの取得は試行されません。

10

Integer

camel.hystrix.group-key

使用するグループキーを設定します。デフォルト値は、CamelHystrix です。

CamelHystrix

String

camel.hystrix.keep-alive-time

ThreadPoolExecutor#setKeepAliveTime(long,TimeUnit) に渡されるキープアライブ時間 (分単位)。

1

Integer

camel.hystrix.max-queue-size

HystrixConcurrencyStrategy.getBlockingQueue(int) で BlockingQueue に渡される最大キューサイズ。これは、スレッドプールのインスタンス化にのみ影響します。その場でキューサイズを変更することはできません。そのためには、queueSizeRejectionThreshold() を使用します。

-1

Integer

camel.hystrix.maximum-size

ThreadPoolExecutor#setMaximumPoolSize(int) に渡されるスレッドプールの最大サイズ。これは、HystrixCommands を拒否し始めることなくサポートできる同時実行の最大量です。この設定は、allowMaximumSizeToDivergeFromCoreSize も設定した場合にのみ有効になることに注意してください。

10

Integer

camel.hystrix.metrics-health-snapshot-interval-in-milliseconds

成功率とエラー率を計算し、HystrixCircuitBreaker.isOpen() ステータスに影響を与えるヘルススナップショットの取得を許可するまでの待機時間 (ミリ秒単位)。大量の回路では、エラーパーセンテージの継続的な計算によって CPU が集中的に使用される可能性があるため、これが計算の頻度を制御します。

500

Integer

camel.hystrix.metrics-rolling-percentile-bucket-size

ローリングパーセンタイルの各バケットに格納される値の最大数。これは、HystrixCommandMetrics 内の HystrixRollingPercentile に渡されます。

10

Integer

camel.hystrix.metrics-rolling-percentile-enabled

HystrixCommandMetrics 内の HystrixRollingPercentile を使用してパーセンタイルメトリックをキャプチャする必要があるかどうか。

true

ブール値

camel.hystrix.metrics-rolling-percentile-window-buckets

ローリングパーセンテージウィンドウが分割されるバケットの数。これは、HystrixCommandMetrics 内の HystrixRollingPercentile に渡されます。

6

Integer

camel.hystrix.metrics-rolling-percentile-window-in-milliseconds

ミリ秒単位のパーセンタイルローリングウィンドウの期間。これは、HystrixCommandMetrics 内の HystrixRollingPercentile に渡されます。

10000

Integer

camel.hystrix.metrics-rolling-statistical-window-buckets

ローリング統計ウィンドウが分割されるバケットの数。これは、HystrixCommandMetrics 内の HystrixRollingNumber に渡されます。

10

Integer

camel.hystrix.metrics-rolling-statistical-window-in-milliseconds

このプロパティーは、統計ローリングウィンドウの期間をミリ秒単位で設定します。スレッドプール用にメトリクスが保持される期間です。ウィンドウは、それらの増分によってバケットとロールに分割されます。

10000

Integer

camel.hystrix.queue-size-rejection-threshold

キューサイズの拒否しきい値は、maxQueueSize に到達していない場合でも拒否できる人為的な最大キューサイズを設定します。これは、BlockingQueue の maxQueueSize を動的に変更することができず、拒否に影響するキューサイズの動的な変更をサポートするために行われます。これは、実行のためにスレッドをキューに入れるときに HystrixCommand によって使用されます。

5

Integer

camel.hystrix.request-log-enabled

HystrixCommand の実行およびイベントを HystrixRequestLog に記録するべきかどうかを示します。

true

ブール値

camel.hystrix.thread-pool-key

使用するスレッドプールキーを設定します。デフォルトでは、groupKey が使用するように設定されているのと同じ値を使用します。

CamelHystrix

String

camel.hystrix.thread-pool-rolling-number-statistical-window-buckets

ローリング統計ウィンドウが分割されるバケットの数。これは、各 HystrixThreadPoolMetrics インスタンス内の HystrixRollingNumber に渡されます。

10

Integer

camel.hystrix.thread-pool-rolling-number-statistical-window-in-milliseconds

統計ローリングウィンドウの期間をミリ秒単位で設定します。これは、各 HystrixThreadPoolMetrics インスタンス内の HystrixRollingNumber に渡されます。

10000

Integer

camel.language.constant.enabled

定数言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.constant.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.csimple.enabled

csimple 言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.csimple.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.exchangeproperty.enabled

exchangeProperty 言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.exchangeproperty.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.file.enabled

ファイル言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.file.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.header.enabled

ヘッダー言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.header.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.ref.enabled

ref 言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.ref.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.simple.enabled

簡易言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.simple.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.tokenize.enabled

tokenize 言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.tokenize.group-delimiter

グループ化時に使用する区切り文字を設定します。これが設定されていない場合は、トークンが区切り文字として使用されます。

 

String

camel.language.tokenize.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.resilience4j.automatic-transition-from-open-to-half-open-enabled

waitDurationInOpenState が経過すると、OPEN から HALF_OPEN 状態への自動移行を有効にします。

false

ブール値

camel.resilience4j.circuit-breaker-ref

レジストリーから検索して使用する既存の io.github.resilience4j.circuitbreaker.CircuitBreaker インスタンスを参照します。これを使用する場合、他のサーキットブレーカーオプションは使用されません。

 

String

camel.resilience4j.config-ref

レジストリーから検索して使用する既存の github.resilience4j.circuitbreaker.CircuitBreakerConfig インスタンスを参照します。

 

String

camel.resilience4j.configurations

追加の設定定義を定義します。

 

マップ

camel.resilience4j.enabled

コンポーネントを有効にします。

true

ブール値

camel.resilience4j.failure-rate-threshold

失敗率のしきい値をパーセンテージで設定します。失敗率がしきい値以上の場合、CircuitBreaker はオープンに移行し、コールのショートサーキットを開始します。しきい値は 0 より大きく 100 以下である必要があります。デフォルト値は 50% です。

 

Float

camel.resilience4j.minimum-number-of-calls

CircuitBreaker がエラー率を計算できるようになるまでに必要な (スライディングウィンドウ期間ごとの) 呼び出しの最小数を設定します。たとえば、minimumNumberOfCalls が 10 の場合、失敗率を計算するには、少なくとも 10 件の呼び出しが記録される必要があります。9 つのコールのみが記録されている場合、CircuitBreaker は 9 つのコールすべてが失敗した場合でもオープンに移行しません。デフォルトの minimumNumberOfCalls は 100 です。

100

Integer

camel.resilience4j.permitted-number-of-calls-in-half-open-state

CircuitBreaker が半分開いているときに許可される呼び出しの数を設定します。サイズは 0 より大きくなければなりませんデフォルトのサイズは 10 です。

10

Integer

camel.resilience4j.sliding-window-size

CircuitBreaker が閉じられたときに呼び出しの結果を記録するために使用されるスライディングウィンドウのサイズを設定します。slideWindowSize は、スライディングウィンドウのサイズを設定します。スライディングウィンドウは、カウントベースまたは時間ベースのいずれかです。slidingWindowType が COUNT_BASED の場合、最後の slideWindowSize 呼び出しが記録され、集計されます。SlidingWindowType が TIME_BASED の場合は、最後の slideWindowSize 秒の呼び出しが記録され、集計されます。slidingWindowSize は 0 より大きくなければなりません。minimumNumberOfCalls は 0 より大きくする必要があります。SlidingWindowType が COUNT_BASED の場合、minimumNumberOfCalls を slideWindowSize より大きくすることはできません。slidingWindowType が TIME_BASED の場合は、好きなものを選択できます。デフォルトの slidingWindowType は 100 です。

100

Integer

camel.resilience4j.sliding-window-type

CircuitBreaker が閉じられたときに呼び出しの結果を記録するために使用されるスライディングウィンドウのサイズを設定します。スライディングウィンドウは、カウントベースまたは時間ベースのいずれかです。slidingWindowType が COUNT_BASED の場合、最後の slideWindowSize 呼び出しが記録され、集計されます。SlidingWindowType が TIME_BASED の場合は、最後の slideWindowSize 秒の呼び出しが記録され、集計されます。デフォルトの slidingWindowType は COUNT_BASED です。

COUNT_BASED

String

camel.resilience4j.slow-call-duration-threshold

それを超えると呼び出しが低速と見なされ、低速呼び出しのパーセンテージが増加する期間のしきい値 (秒) を設定します。デフォルト値は 60 秒です。

60

Integer

camel.resilience4j.slow-call-rate-threshold

パーセンテージでしきい値を設定します。CircuitBreaker は、呼び出し時間が slowCallDurationThreshold Duration よりも長い場合、呼び出しが遅いと見なします。失敗率がしきい値以上の場合、CircuitBreaker はオープンに移行し、ショートサーキット呼び出しを開始します。しきい値は 0 より大きく 100 以下である必要があります。デフォルト値は 100 パーセントです。これは、記録されたすべてのコールが slowCallDurationThreshold より遅くなければならないことを意味します。

 

Float

camel.resilience4j.wait-duration-in-open-state

ハーフオープンに切り替わる前に CircuitBreaker が開いたままになる時間を指定する待機期間 (秒単位) を設定します。デフォルト値は 60 秒です。

60

Integer

camel.resilience4j.writable-stack-trace-enabled

書き込み可能なスタックトレースを有効にします。false に設定すると、Exception.getStackTrace は長さゼロの配列を返します。これは、例外の原因が既にわかっている (サーキットブレーカーが呼び出しを短絡している) ため、サーキットブレーカーが開いているときにログスパムを減らすために使用できます。

true

ブール値

camel.rest.api-component

REST API として使用する Camel コンポーネントの名前 (swagger など)。API コンポーネントが明示的に設定されていない場合は、REST API ドキュメントのサービスおよび生成を担当する Camel コンポーネントがある場合、または org.apache.camel.spi.RestApiProcessorFactory がレジストリーに登録されているかどうかを調べます。いずれかが見つかった場合は、それが使用されています。

 

String

camel.rest.api-context-path

REST API サービスが使用する主要な API コンテキストパスを設定します。これは、デプロイされた Web アプリケーションがコンテキストパスを使用してデプロイされる camel-servlet などのコンポーネントを使用する場合に使用できます。

 

String

camel.rest.api-context-route-id

REST API にサービスを提供するルートに使用するルート ID を設定します。デフォルトでは、ルートは自動割り当てのルート ID を使用します。

 

String

camel.rest.api-host

API ドキュメント (swagger など) に特定のホスト名を使用するには、これを使用して、生成されたホストをこの設定済みホスト名でオーバーライドできます。

 

String

camel.rest.api-property

API ドキュメント (swagger) の追加プロパティーをできるだけ多く設定できます。たとえば、プロパティー api.title をクールスタッフに設定します。

 

マップ

camel.rest.api-vendor-extension

Rest API でベンダー拡張機能が有効になっているかどうか。有効にすると、Camel はルート ID、クラス名などの追加情報をベンダー拡張 (x- で始まるキーなど) として含めます。API ドキュメントをインポートするときに、すべてのサードパーティー API ゲートウェイおよびツールがベンダー拡張をサポートしているわけではありません。

false

ブール値

camel.rest.binding-mode

使用するバインドモードを設定します。デフォルト値は off です。

 

RestBindingMode

camel.rest.client-request-validation

クライアント要求の検証を有効にして、クライアントからの Content-Type および Accept ヘッダーがその消費/生成設定の Rest-DSL 設定によってサポートされているかどうかを確認するかどうか。これをオンにして、このチェックを有効にすることができます。検証エラーの場合は、HTTP ステータスコード 415 または 406 が返されます。デフォルト値は false です。

false

ブール値

camel.rest.component

netty-http、jetty、servlet、undertow などの REST トランスポート (consumer) に使用する Camel Rest コンポーネント。コンポーネントが明示的に設定されていない場合、Rest DSL と統合する Camel コンポーネントがある場合、または org.apache.camel.spi.RestConsumerFactory がレジストリーに登録されている場合、Camel はルックアップします。いずれかが見つかった場合は、それが使用されています。

 

String

camel.rest.component-property

使用中の残りのコンポーネントの追加プロパティーをできるだけ多く設定できます。

 

マップ

camel.rest.consumer-property

使用中の残りの consumer の追加プロパティーをできるだけ多く設定できます。

 

マップ

camel.rest.context-path

REST サービスが使用する主要なコンテキストパスを設定します。これは、デプロイされた Web アプリケーションがコンテキストパスを使用してデプロイされる camel-servlet などのコンポーネントを使用する場合に使用できます。または、HTTP サーバーを含む camel -jetty や camel-netty-http などのコンポーネントの場合。

 

String

camel.rest.cors-headers

カスタム CORS ヘッダーを設定できます。

 

マップ

camel.rest.data-format-property

使用中のデータ形式の追加プロパティーをできるだけ多く設定できます。たとえば、プロパティー prettyPrint を true に設定すると、json がプリティモードで出力されます。オプションが JSON または XML のいずれか、および IN または OUT のいずれか専用であることを示すために、プロパティーに接頭辞を付けることができます。接頭辞は、json.in.、json.out.、xml.in.、xml.outです。たとえば、値が xml.out.mustBeJAXBElement のキーは、送信用の XML データ形式専用です。接頭辞のないキーは、すべての状況で共通のキーです。

 

マップ

camel.rest.enable-cors

HTTP 応答で CORS ヘッダーを有効にするかどうか。デフォルト値は false です。

false

ブール値

camel.rest.endpoint-property

使用中の残りのエンドポイントの追加プロパティーをできるだけ多く設定できます。

 

マップ

camel.rest.host

REST サービスの公開に使用するホスト名。

 

String

camel.rest.host-name-resolver

ホスト名が明示的に設定されていない場合、このリゾルバーは、REST サービスが使用するホスト名を計算するために使用されます。

 

RestHostNameResolver

camel.rest.json-data-format

使用する特定の json データ形式の名前。デフォルトでは json-jackson が使用されます。重要: このオプションは、データ形式のカスタム名を設定するためのものであり、既存のデータ形式インスタンスを参照するためのものではありません。

 

String

camel.rest.port

REST サービスの公開に使用するポート番号。サーブレットコンポーネントを使用する場合は、ここで設定したポート番号は適用されないことに注意してください。使用中のポート番号は、サーブレットコンポーネントが使用している実際のポート番号であるためです。たとえば、Apache Tomcat を使用する場合は Tomcat http ポート、Apache Karaf を使用する場合はデフォルトでポート 8181 を使用する Karaf の HTTP サービスなどです。このような状況では、ここでポート番号を設定すると、ツールと JMX がポート番号を認識できるようになるため、ポート番号をサーブレットエンジンが使用する番号に設定することをお勧めします。

 

String

camel.rest.producer-api-doc

REST producer が REST uri を検証するために使用する API ドキュメント (swagger api) の場所を設定し、API ドキュメントに応じてクエリーパラメーターが有効です。これには、クラスパスに camel-swagger-java を追加する必要があり、設定に誤りがあると、Camel が起動時に失敗し、エラーが報告されます。API ドキュメントの場所はデフォルトでクラスパスから読み込まれますが、file: または http: を使用してリソースを参照し、ファイルまたは http url から読み込むことができます。

 

String

camel.rest.producer-component

REST producer として使用する Camel コンポーネントの名前を設定します。

 

String

camel.rest.scheme

REST サービスの公開に使用するスキーム。通常、http または https がサポートされます。デフォルト値は http です。

 

String

camel.rest.skip-binding-on-error-code

カスタム HTTP エラーコードヘッダーがある場合は、出力でバインディングをスキップするかどうか。これにより、json/xml などにバインドしないカスタムエラーメッセージを作成できます。それ以外の場合は成功メッセージが作成されます。

false

ブール値

camel.rest.use-x-forward-headers

ホストおよび関連する設定に X-Forward ヘッダーを使用するかどうか。デフォルト値は true です。

true

ブール値

camel.rest.xml-data-format

使用する特定の XML データ形式の名前。デフォルトでは jaxb が使用されます。重要: このオプションは、データ形式のカスタム名を設定するためのものであり、既存のデータ形式インスタンスを参照するためのものではありません。

 

String

camel.rest.api-context-id-pattern

非推奨 CamelContext ID パターンを設定して、名前がパターンに一致する CamelContext 内の REST サービスからの Rest API のみを許可します。パターン は CamelContext 名を参照し、現在の CamelContext のみに一致します。その他の値の場合、パターンは PatternHelper#matchPattern (String,String) のルールを使用します。

 

String

camel.rest.api-context-listing

非推奨 JVM で REST サービスを使用して使用可能なすべての CamelContext のリストを有効にするかどうかを設定します。有効にすると、これらのコンテキストを検出できます。false の場合、現在の CamelContext のみが使用されます。

false

ブール値

第73章 XQuery

Camel は XQuery をサポートして、 または 述語DSL で使用できるようにします。

たとえば、XQuery を使用して メッセージフィルター の述語を作成したり、受信者リスト の式として使用したりできます。

73.1. XQuery 言語オプション

XQuery 言語は、以下に示す 4 つのオプションをサポートしています。

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

type

 

String

結果タイプ (出力からのタイプ) のクラス名を設定します。デフォルトの結果タイプは NodeSet です。

headerName

 

String

メッセージボディーの代わりに入力として使用するヘッダーの名前。

configurationRef

 

String

xquery に使用するレジストリー内の saxon 設定インスタンスへの参照 (camel-saxon が必要)。これは、カスタム関数を saxon 設定に追加する時に必要になる場合があるため、これらのカスタム関数を xquery 式で使用できます。

trim

 

ブール値

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

73.2. 変数

メッセージボディーは contextItem として設定されます。また、次の変数も使用できます。

変数タイプ説明

exchange

Exchange

現在のエクスチェンジ

in.body

オブジェクト

メッセージボディー

out.body

オブジェクト

非推奨 OUT メッセージボディー (存在する場合)

in.headers.*

Object

名前が in.headers.foo の変数を使用して、キー foo で exchange.in.headers の値を使用できます。

out.headers.*

オブジェクト

deprecated 名前が out.headers.foo 変数である変数を使用して、キー foo で exchange.out.headers の値を使用できます。

キー名

Object

exchange.properties と exchange.in.headers および setParameters (Map) を使用して設定された追加のパラメーター。これらのパラメーターは、独自のキー名で追加されます。たとえば、キー名が foo の IN ヘッダーがある場合、foo として追加されます。

73.3. 例

from("queue:foo")
  .filter().xquery("//foo")
  .to("queue:bar")

クエリー内で関数を使用することもできます。その場合、明示的な型変換が必要です。明示的な型変換を行わないと、org.w3c.dom.DOMException: HIERARCHY_REQUEST_ERR が発生します。関数で必要とされる出力タイプを渡す必要があります。たとえば、concat 関数は 文字列 を返します。これは以下のように行われます。

from("direct:start")
  .recipientList().xquery("concat('mock:foo.', /person/@city)", String.class);

そして XML DSL では:

<route>
  <from uri="direct:start"/>
  <recipientList>
    <xquery type="java.lang.String">concat('mock:foo.', /person/@city</xquery>
  </recipientList>
</route>

73.3.1. 名前空間の使用

使用する名前空間の標準セットがあり、それらを多くの XQuery 式で共有する場合は、次のように Java DSL を使用するときに org.apache.camel.support.builder.Namespaces を使用できます。

Namespaces ns = new Namespaces("c", "http://acme.com/cheese");

from("direct:start")
  .filter().xquery("/c:person[@name='James']", ns)
  .to("mock:result");

2 番目のパラメーターとして渡される ns 変数を使用して、名前空間が xquery にどのように提供されるかに注意してください。

各名前空間はキー=値のペアで、この場合に接頭辞がキーです。XQuery 式では、名前空間はその接頭辞によって使用されます。たとえば、次のようになります。

/c:person[@name='James']

名前空間ビルダーは、次のように複数の名前空間の追加をサポートしています。

Namespaces ns = new Namespaces("c", "http://acme.com/cheese")
                     .add("w", "http://acme.com/wine")
                     .add("b", "http://acme.com/beer");

XML DSL で名前空間を使用する場合は、XML ルートタグ (または camelContextroutesroute タグの 1 つ) で名前空間を設定するため、異なります。

以下の XML の例では、Spring XML を使用します。この名前空間は、ルートタグ beansxmlns:foo="http://example.com/person" の行で宣言されています。

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:foo="http://example.com/person"
       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://activemq.apache.org/camel/schema/spring">
    <route>
      <from uri="activemq:MyQueue"/>
      <filter>
        <xquery>/foo:person[@name='James']</xquery>
        <to uri="mqseries:SomeOtherQueue"/>
      </filter>
    </route>
  </camelContext>
</beans>

この名前空間は接頭辞として foo を使用するため、<xquery> 式は /foo: を使用してこの名前空間を使用します。

73.4. XQuery の変換としての使用

以下に示すように、ルートで transform または setBody を使用してメッセージの変換を行うことができます。

from("direct:start").
   transform().xquery("/people/person");

xquery はデフォルトで DOMResult を使用することに注意してください。したがって、person ノードの値を取得する場合は、text () を使用して、次のように結果の型として String を使用するよう XQuery に指示する必要があります。

from("direct:start").
   transform().xquery("/people/person/text()", String.class);

ヘッダーなどの Camel 変数を使用する場合は、XQuery 式で明示的に宣言する必要があります。

<transform>
    <xquery>
        declare variable $in.headers.foo external;
        element item {$in.headers.foo}
    </xquery>
</transform>

73.5. 外部リソースからスクリプトを読み込み

スクリプトを外部化して、"classpath:""file:"、または "http:" などのリソースから Camel に読み込むことができます。これは、"resource:scheme:location" の構文を使用して行われます。たとえば、クラスパス上のファイルを参照するには、以下を実行します。

.setHeader("myHeader").xquery("resource:classpath:myxquery.txt", String.class)

73.6. XQuery の学習

XQuery は非常に強力な言語で、XML の照会、検索、ソート、および結果としての出力が可能です。XQuery については、以下のチュートリアルを試してください。

73.7. 依存関係

camel ルートで XQuery を使用するには、XQuery 言語を実装する camel-saxon に依存関係を追加する必要があります。

Maven を使用する場合は、pom.xml に以下を追加するだけで、バージョン番号を最新かつ最高のリリースに置き換えます (最新バージョンのダウンロードページを参照してください)。

<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-saxon</artifactId>
  <version>{CamelSBVersion}</version>
</dependency>

73.8. Spring Boot 自動設定

Spring Boot で xquery を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-saxon-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 11 のオプションをサポートします。

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

camel.component.xquery.autowired-enabled

自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。

true

ブール値

camel.component.xquery.bridge-error-handler

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

false

ブール値

camel.component.xquery.configuration

カスタム Saxon 設定を使用します。オプションは net.sf.saxon.Configuration タイプです。

 

設定

camel.component.xquery.configuration-properties

カスタムの Saxon 設定プロパティーを設定します。

 

マップ

camel.component.xquery.enabled

xquery コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.component.xquery.lazy-start-producer

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

false

ブール値

camel.component.xquery.module-u-r-i-resolver

カスタム ModuleURIResolver を使用します。オプションは net.sf.saxon.lib.ModuleURIResolver タイプです。

 

ModuleURIResolver

camel.language.xquery.configuration-ref

xquery に使用するレジストリー内の saxon 設定インスタンスへの参照 (camel-saxon が必要)。これは、カスタム関数を saxon 設定に追加する時に必要になる場合があるため、これらのカスタム関数を xquery 式で使用できます。

 

String

camel.language.xquery.enabled

xquery 言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.xquery.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

Boolean

camel.language.xquery.type

結果タイプ (出力からのタイプ) のクラス名を設定します。デフォルトの結果タイプは NodeSet です。

 

String

第74章 Simple (単純)

Simple Expression Language は、作成されたときは非常に単純な言語でしたが、その後、より強力になりました。これは主に、新しい依存関係や Groovy などの他のスクリプト言語の知識を必要とせずに、 または 述語 を評価するための非常に小さくて単純な言語であることを目的としています。

シンプルな言語は、Camel ルートでスクリプトを作成する必要がほぼない場合に、ほとんどすべての一般的なユースケースに対応するように設計されています。

ただし、より複雑な使用例では、次のようなより強力な言語が推奨されます。

注記

メッセージボディー (${body.myMethod ()})で myMethod という名前のメソッドを呼び出すなど、Simple 言語が OGNL 式を使用する場合、Simple 言語はクラスパスの依存関係として camel-bean JAR を必要とします。実行時に、Simple 言語は、camel-bean コンポーネントを必要とする組み込みの OGNL サポートを使用します。

シンプルな言語は、複雑な式や関数に ${body} プレースホルダーを使用します。

注記

コンパイルされた CSimple 言語も参照してください。

注記

代替構文
$simple{ } をプレースホルダーとして使用する代替構文を使用することもできます。これは、たとえば Spring プロパティーのプレースホルダーを Camel と一緒に使用する場合の競合を回避するために使用できます。

74.1. Simple 言語オプション

Simple 言語は、以下に示す 2 つのオプションをサポートしています。

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

resultType

 

String

結果の型 (出力からの型) のクラス名を設定します。

trim

 

ブール値

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

74.2. 変数

変数タイプ説明

camelId

String

CamelContext 名

camelContext.OGNL

オブジェクト

Camel OGNL 式を使用して呼び出された CamelContext。

exchange

Exchange

Exchange

exchange.OGNL

オブジェクト

Camel OGNL 式を使用して呼び出された Exchange。

exchangeId

String

エクスチェンジ ID

id

String

メッセージ ID

messageTimestamp

String

このメッセージの発信元のメッセージタイムスタンプ (Epoc からのミリ秒)。JMS、Kafka、AWS などの一部のシステムでは、Camel が受信したイベント/メッセージにタイムスタンプがあります。タイムスタンプが存在する場合、このメソッドはタイムスタンプを返します。メッセージのタイムスタンプと作成されたエクスチェンジは同じではありません。エクスチェンジには必ず、作成されたタイムスタンプがあります。これは、Camel がエクスチェンジを作成したときのローカルタイムスタンプです。メッセージのタイムスタンプは、consumer がソースイベントからタイムスタンプを抽出できる場合にのみ、一部の Camel コンポーネントで利用できます。メッセージにタイムスタンプがない場合は、0 が返されます。

body

オブジェクト

ボディー

body.OGNL

オブジェクト

Camel OGNL 式を使用して呼び出されたボディー。

bodyAs(type)

タイプ

クラス名で決定される特定の型にボディーを変換します。変換された本文は null にすることができます。

bodyAs(type).OGNL

オブジェクト

クラス名によって決定される特定のタイプにボディーを変換し、Camel OGNL 式を使用してメソッドを呼び出します。変換された本文は null にすることができます。

bodyOneLine

String

本文を文字列に変換し、文字列が 1 行になるようにすべての改行を削除します。

mandatoryBodyAs(type)

タイプ

クラス名によって決定される特定の型にボディーを変換し、ボディーには null を指定できません。

mandatoryBodyAs(type).OGNL

オブジェクト

クラス名によって決定される特定のタイプにボディーを変換し、Camel OGNL 式を使用してメソッドを呼び出します。

header.foo

オブジェクト

foo ヘッダーを参照

header[foo]

オブジェクト

foo ヘッダーを参照

headers.foo

オブジェクト

foo ヘッダーを参照

headers:foo

オブジェクト

foo ヘッダーを参照

headers[foo]

オブジェクト

foo ヘッダーを参照

header.foo[bar]

オブジェクト

foo ヘッダーをマップと見なし、bar をキーとしてマップ上でルックアップを実行します

header.foo. OGNL

オブジェクト

foo ヘッダーを参照し、Camel OGNL 式を使用してその値を呼び出します。

headerAs(key,type)

タイプ

クラス名によって決定される、指定のタイプにヘッダーを変換します

ヘッダー

マップ

ヘッダーを指します。

exchangeProperty.foo

オブジェクト

エクスチェンジの foo プロパティーを参照します。

exchangeProperty[foo]

オブジェクト

エクスチェンジの foo プロパティーを参照します。

exchangeProperty.foo.OGNL

オブジェクト

エクスチェンジの foo プロパティーを参照し、Camel OGNL 式を使用してその値を呼び出します。

sys.foo

String

JVM システムプロパティーを参照してください

sysenv.foo

String

システム環境変数を参照してください

env.foo

String

システム環境変数を参照してください

exception

オブジェクト

エクスチェンジの例外オブジェクトを参照します。クスチェンジに例外が設定されていない場合は null です。Exchange に例外がある場合は、フォールバックしてキャッチされた例外 (Exchange.EXCEPTION_CAUGHT) を取得します。

exception.OGNL

オブジェクト

Camel OGNL 式オブジェクトを使用して呼び出された exchange 例外を参照します。

exception.message

String

エクスチェンジの exception.message を参照してください。エクスチェンジに例外が設定されていない場合は null です。Exchange に例外がある場合は、フォールバックしてキャッチされた例外 (Exchange.EXCEPTION_CAUGHT) を取得します。

exception.stacktrace

String

エクスチェンジの exception.stracktrace を参照してください。エクスチェンジに例外が設定されていない場合は null です。Exchange に例外がある場合は、フォールバックしてキャッチされた例外 (Exchange.EXCEPTION_CAUGHT) を取得します。

date:_command_

日付

Date オブジェクトに対して評価されます。サポートされているコマンドは次のとおりです。現在のタイムスタンプの now、現在のエクスチェンジが作成されたときのタイムスタンプの exchangeCreated、キーが xxx の Long/Date オブジェクトヘッダーを使用する header.xxxexchangeProperty.xxx を使用して、キーが xxx の exchange プロパティーで Long/Date オブジェクトを使用します。ファイルの最終変更タイムスタンプの file (File consumer で利用可能)。コマンドは、now-24h または header.xxx+1h または now+1h30m-100 などを使用できます。

date:_command:pattern_

String

java.text.SimpleDateFormat パターンを使用した日付の書式設定。

date-with-timezone:_command:timezone:pattern_

String

java.text.SimpleDateFormat タイムゾーンとパターンを使用した日付の書式設定。

bean:_bean expression_

オブジェクト

言語を使用して Bean 式を呼び出します。メソッド名を指定するには、区切り文字としてドットを使用する必要があります。コンポーネントで使用される ?method=methodname 構文もサポートしています。Camel はデフォルトで、指定された名前で Bean を検索します。ただし、Bean クラスを参照する必要がある場合 (静的メソッドの呼び出しなど) は、bean:type:fqnClassName のようにタイプの接頭辞を付けることができます。

properties:key:default

String

指定されたキーでプロパティーを検索します。キーが存在しないか値がない場合は、オプションのデフォルト値を指定できます。

routeId

String

Exchange がルーティングされている現在のルートの ID を返します。

stepId

String

Exchange がルーティングされている現在のステップの ID を返します。

threadName

String

現在のスレッドの名前を返します。ロギング目的で使用できます。

hostname

String

ローカルホスト名を返します (解決できない場合は空である可能性があります)。

ref:xxx

オブジェクト

指定された ID でレジストリーから Bean を検索します。

type:name.field

オブジェクト

タイプまたはフィールドをその FQN 名で参照します。フィールドを参照するには、.FIELD_NAME を追加できます。たとえば、Exchange の定数フィールドを org.apache.camel.Exchange.FILE_NAME として参照できます。

null

null

null を表します。

random(value)

Integer

0 (含まれる) から (含まれない) までの間のランダムな整数を返します

random(min,max)

Integer

min (含まれる) から max (含まれない) までの間のランダムな整数を返します

collate(group)

リスト

collate 関数は、メッセージボディーを反復し、データを指定されたサイズのサブリストにグループ化します。これをスプリッター EIP と共に使用して、メッセージボディーを分割し、分割されたサブメッセージを N 個のサブリストのグループにグループ化/バッチ化できます。このメソッドは、Groovy の collate メソッドと同様に機能します。

skip(number)

Iterator

skip 関数はメッセージのボディーをイテレートし、最初の項目数をスキップします。Splitter EIP と併用することで、メッセージボディーを分割し、最初の N 項目数をスキップすることができます。

messageHistory

String

ルーティングされた現在の交換のメッセージ履歴。これは、未処理の例外が発生した場合にエラーハンドラーがログに記録するルートスタックトレースメッセージの履歴に似ています。

messageHistory(false)

String

messageHistory と同じですが、エクスチェンジの詳細はありません (ルートスタックトレースのみが含まれます)。これは、メッセージ自体から機密データをログに記録しない場合に使用できます。

74.3. OGNL 式のサポート

OGNL を使用する場合、camel-bean JAR がクラスパスに存在する必要があります。

Camel の OGNL サポートは、メソッドの呼び出しのみを対象としています。フィールドにアクセスできません。Java 配列の長さフィールドにアクセスする Camel サポート。

Simple および Bean 言語は、チェーンのような方法で Bean を呼び出すための Camel OGNL 表記をサポートするようになりました。Message IN ボディに getAddress () メソッドがある POJO が含まれているとします。

次に、Camel OGNL 表記を使用してアドレスオブジェクトにアクセスできます。

simple("${body.address}")
simple("${body.address.street}")
simple("${body.address.zip}")

Camel は getter の短縮名を理解しますが、任意のメソッドを呼び出すか、次のような実際の名前を使用できます。

simple("${body.address}")
simple("${body.getAddress.getStreet}")
simple("${body.address.getZip}")
simple("${body.doSomething}")

たとえば、本文にアドレスがない場合は、Null セーフ演算子 (?.) を使用して NPE を回避することもできます。

simple("${body?.address?.street}")

Map または List タイプでインデックスを作成することもできるため、次のことができます。

simple("${body[foo].name}")

本文が Map ベースであると想定し、foo をキーとして値を検索し、その値に対して getName メソッドを呼び出します。

キーにスペースがある場合は、'foo bar' のようにキーを引用符で囲む 必要 があります。

simple("${body['foo bar'].name}")

キー名 (ドットありまたはドットなし) を使用して、Map オブジェクトまたは List オブジェクトに直接アクセスできます。

simple("${body[foo]}")
simple("${body[this.is.foo]}")

キー foo に値がないと仮定すると、null セーフ演算子を使用して、次のように NPE を回避できます。

simple("${body[foo]?.name}")

リスト 型にアクセスすることもできます。たとえば、次のようにしてアドレスから行を取得できます。

simple("${body.address.lines[0]}")
simple("${body.address.lines[1]}")
simple("${body.address.lines[2]}")

リストから最後の値を取得するために使用できる特別な last キーワードがあります。

simple("${body.address.lines[last]}")

最後から 2 番目の値を取得するには、数値を除算できるので、last-1 を使用してこれを指定できます。

simple("${body.address.lines[last-1]}")

また、最後の 3 番目も当然、以下のようになります。

simple("${body.address.lines[last-2]}")

そして、リストの size メソッドを呼び出すことができます

simple("${body.address.lines.size}")

Camel は、Java 配列の長さフィールドもサポートしています。例:

String[] lines = new String[]{"foo", "bar", "cat"};
exchange.getIn().setBody(lines);

simple("There are ${body.length} lines")

はい、以下に示すように、これを演算子サポートと組み合わせることができます。

simple("${body.address.zip} > 1000")

74.4. 演算子サポート

パーサーは、単一の演算子のみをサポートするように制限されています。

有効にするには、左の値を $\\{ } で囲む必要があります。構文は以下のようになります。

${leftValue} OP rightValue

rightValue は、' ' で囲まれた文字列リテラル、null、定数値、または $\{ } で囲まれた別の式に指定できます。

注記

演算子の前後にはスペースが 必要 です。

Camel は rightValue 型を leftValue 型に自動的に型変換します。文字列を数値に変換して、数値に対して > 比較を使用できるようにします。

次の演算子がサポートされています。

Operator説明

==

等しい

=~

equals は大文字と小文字を区別しません (文字列値を比較するときは大文字と小文字を区別しません)

>

は次の値よりも大きい:

>=

より大きいか等しい

<

は次の値よりも小さい:

より小さいか等しい

!=

等しくない

!=~

等しくない場合は大文字と小文字を区別しません (文字列値を比較するときに大文字と小文字を区別しません)

contains

文字列ベースの値に含まれているかどうかをテストします

!contains

文字列ベースの値に含まれていないかどうかをテストします

~~

文字列ベースの値で大文字と小文字の区別を無視して含まれているかどうかをテストします

!~~

文字列ベースの値で大文字と小文字の区別を無視して含まれていないかどうかをテストします

regex

文字列値として定義された特定の正規表現パターンと照合するため

!regex

文字列値として定義された特定の正規表現パターンと一致しない場合

in

一連の値があり、各要素をコンマで区切る必要がある場合に照合するため空の値を含める場合は 2 つのコンマを使用して定義する必要があります。たとえば、',,bronze,silver,gold' のように、空の値と 3 つのメダルを含めた 4 つの値のセットです。

!in

値がセットでなく、各要素をコンマで区切る必要がある場合に照合するため。空の値を含める場合は 2 つのコンマを使用して定義する必要があります。たとえば、',,bronze,silver,gold' のように、空の値と 3 つのメダルを含めた 4 つの値のセットです。

is

左側の型が値のインスタンスである場合に照合するため。

!is

左側の型が値のインスタンスでない場合に照合するため。

range

左辺が数値として定義された値の範囲内にある場合に照合するため (from..to ..)。

!range

左辺が数値として定義された値の範囲内にない場合に照合するため (from..to ..)。

startsWith

左辺の文字列が右辺の文字列で開始するかどうかをテストします

starts with

startsWith 演算子と同じです。

endsWith

左辺の文字列が右辺の文字列で終了するかどうかをテストします

ends with

endWith 演算子と同じです。

また、次の単項演算子を使用できます。

演算子説明

++

数値を 1 ずつ増やします。左辺は関数でなければならず、それ以外の場合はリテラルとして解析されます。

 — 

数値を 1 つ減らします。左辺は関数でなければならず、それ以外の場合はリテラルとして解析されます。

\n

改行文字を使用します。

\t

タブ文字を使用します。

\r

キャリッジリターン文字を使用します。

\}

} 文字をテキストとして使用します。これは、Simple 言語で JSON 構造を構築するときに必要になる場合があります。

また、次の論理演算子を使用して式をグループ化できます。

演算子説明

&&

and 論理演算子は、2 つの式のグループ化に使用されます。

  
 

or 論理演算子は、2 つの式のグループ化に使用されます。

AND の構文は次のとおりです。

${leftValue} OP rightValue && ${leftValue} OP rightValue

OR の構文は次のとおりです。

${leftValue} OP rightValue || ${leftValue} OP rightValue

例:

// exact equals match
simple("${header.foo} == 'foo'")

// ignore case when comparing, so if the header has value FOO this will match
simple("${header.foo} =~ 'foo'")

// here Camel will type convert '100' into the type of header.bar and if it is an Integer '100' will also be converter to an Integer
simple("${header.bar} == '100'")

simple("${header.bar} == 100")

// 100 will be converter to the type of header.bar so we can do > comparison
simple("${header.bar} > 100")

74.4.1. さまざまなタイプとの比較

String や int などの異なる型と比較する場合は、少し注意が必要です。Camel は左辺のタイプを優先して使用します。右辺の型に基づいて両方の値を比較できなかった場合は、右辺の型にフォールバックします。
これは、値を反転して特定のタイプを適用できることを意味します。上記のバーの値が文字列であるとします。次に、方程式を反転できます。

simple("100 < ${header.bar}")

これにより、int 型が最優先で使用されます。

これは、Camel チームがバイナリー比較演算を改善して、文字列ベースよりも数値型を優先する場合に、今後変更される可能性があります。数値と比較するときに問題を引き起こすのは、ほとんどの場合 String 型です。

// testing for null
simple("${header.baz} == null")

// testing for not null
simple("${header.baz} != null")

また、正しい値が別の式である場合の、もう少し高度な例

simple("${header.date} == ${date:now:yyyyMMdd}")

simple("${header.type} == ${bean:orderService?method=getOrderType}")

contains が含まれる例。タイトルに Camel という用語が含まれるかをテストします。

simple("${header.title} contains 'Camel'")

正規表現が含まれる例。数のヘッダーが 4 桁の値かどうかをテストします。

simple("${header.number} regex '\\d{4}'")

最後に、ヘッダーがリスト内のいずれかの値と等しい場合の例を示します。各要素はコンマで区切る必要があり、前後にスペースを入れないでください。
Camel は各要素を左辺の型に変換するため、これは数値などにも機能します。

simple("${header.type} in 'gold,silver'")

また、最後の 3 つについては、not を使用した否定テストもサポートしています。

simple("${header.type} !in 'gold,silver'")

そして、文字列など、タイプが特定のインスタンスであるかどうかをテストできます。

simple("${header.type} is 'java.lang.String'")

次のように記述できるように、すべての java.lang タイプの短縮形を追加しました。

simple("${header.type} is 'String'")

範囲もサポートされています。範囲間隔には数字が必要で、最初と最後の両方の値が含まれます。たとえば、値が 100 から 199 の間であるかどうかをテストするには、次のようにします。

simple("${header.number} range 100..199")

スペースなしの範囲で .. を使用していることに注意してください。Groovy と同じ構文に基づいています。

simple("${header.number} range '100..199'")

XML DSL は、さまざまなビルダーメソッドをすべて備えた Java DSL ほど強力ではないため、単純な演算子でテストするには、他の言語を使用する必要があります。これで、Simple 言語でこれを行うことができます。以下のサンプルでは、ヘッダーがウィジェットの注文かどうかをテストします。

<from uri="seda:orders">
   <filter>
       <simple>${header.type} == 'widget'</simple>
       <to uri="bean:orderService?method=handleWidget"/>
   </filter>
</from>

74.4.2. And/Or の使用

式が 2 つある場合は、&& または || 演算子で結合できます。

たとえば、以下のようになります。

simple("${header.title} contains 'Camel' && ${header.type'} == 'gold'")

そしてもちろん || もサポートされています。サンプルは次のようになります。

simple("${header.title} contains 'Camel' || ${header.type'} == 'gold'")

74.5. 例

以下の XML DSL サンプルでは、ヘッダー値に基づいてフィルタリングします。

<from uri="seda:orders">
   <filter>
       <simple>${header.foo}</simple>
       <to uri="mock:fooOrders"/>
   </filter>
</from>

Simple 言語は、上記のメッセージフィルターパターンの述語テストに使用できます。ここでは、メッセージに foo ヘッダーがあるかどうかをテストします (キーが foo のヘッダーが存在します)。式が true と評価された場合に、メッセージは mock:fooOrders エンドポイントにルーティングされます。それ以外の場合、メッセージは破棄されます。

Java DSL での同じ例:

from("seda:orders")
    .filter().simple("${header.foo}")
        .to("seda:fooOrders");

Simple 言語は、次のような単純なテキスト連結にも使用できます。

from("direct:hello")
    .transform().simple("Hello ${header.user} how are you?")
    .to("mock:reply");

Camel が正しく解析できるように、式で $\\{ } プレースホルダーを使用する必要があることに注意してください。

このサンプルでは、date コマンドを使用して現在の日付を出力しています。

from("direct:hello")
    .transform().simple("The today is ${date:now:yyyyMMdd} and it is a great day.")
    .to("mock:reply");

以下のサンプルでは、Bean 言語を呼び出して、返される文字列に含まれる Bean のメソッドを呼び出します。

from("direct:order")
    .transform().simple("OrderId: ${bean:orderIdGenerator}")
    .to("mock:reply");

orderIdGenerator は、レジストリーに登録されている Bean の ID です。Spring を使用している場合は、Spring Bean ID です。

注文 ID ジェネレーター Bean で呼び出すメソッドを宣言する場合は、generateId メソッドを呼び出す場所に、以下のように .method name を追加する必要があります。

from("direct:order")
    .transform().simple("OrderId: ${bean:orderIdGenerator.generateId}")
    .to("mock:reply");

Bean コンポーネント自体に慣れている場合に ?method=methodname オプションを使用できます。

from("direct:order")
    .transform().simple("OrderId: ${bean:orderIdGenerator?method=generateId}")
    .to("mock:reply");

ボディーを特定の型に変換することもできます。たとえば、ボディが String であるように指定するには、次のようにします。

<transform>
  <simple>Hello ${bodyAs(String)} how are you?</simple>
</transform>

簡略表記を含む型がいくつかあるため、java.lang.String の代わりに String を使用できます。これらは byte[], String, Integer, Long です。他のすべてのタイプは、org.w3c.dom.Document などの FQN 名を使用する必要があります。

ヘッダー Map から値を検索することもできます。

<transform>
  <simple>The gold value is ${header.type[gold]}</simple>
</transform>

上記のコードでは、名前 type でヘッダーを検索してして、その内容を java.util.Map と見なし、その後にキー gold で検索して値を返します。ヘッダーが Map に変換できない場合、例外が出力されます。name のヘッダーが存在しない場合は null が返されます。

以下に示すように、関数をネストできます。

<setHeader name="myHeader">
  <simple>${properties:${header.someKey}}</simple>
</setHeader>

74.6. 結果タイプの設定

Simple 式に結果の型を指定できるようになりました。これは、評価の結果が目的の型に変換されることを意味します。これは、ブール値、整数などの型を定義するのに最も便利です。

たとえば、ヘッダーをブール型として設定するには、次のようにします。

.setHeader("cool", simple("true", Boolean.class))

そして XML DSL では

<setHeader name="cool">
  <!-- use resultType to indicate that the type should be a java.lang.Boolean -->
  <simple resultType="java.lang.Boolean">true</simple>
</setHeader>

74.7. XML DSL での改行またはタブの使用

値をエスケープできるようになったため、XML DSL で新しい行またはタブを指定するのが簡単になりました。

<transform>
  <simple>The following text\nis on a new line</simple>
</transform>

74.8. 先頭と末尾の空白の処理

式のトリム属性を使用して、先頭と末尾の空白文字を削除するか保持するかを制御できます。デフォルト値は true で、空白文字が削除されます。

<setBody>
  <simple trim="false">You get some trailing whitespace characters.     </simple>
</setBody>

74.9. 外部リソースからスクリプトを読み込み

スクリプトを外部化して、"classpath:""file:"、または "http:" などのリソースから Camel に読み込むことができます。これは、"resource:scheme:location" の構文を使用して行われます。たとえば、クラスパス上のファイルを参照するには、以下を実行します。

.setHeader("myHeader").simple("resource:classpath:mysimple.txt")

74.10. Spring Boot 自動設定

Spring Boot で simple を使用する場合は、自動設定をサポートするために次の Maven 依存関係を使用してください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-core-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 147 のオプションをサポートします。

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

camel.cloud.consul.service-discovery.acl-token

Consul で使用する ACL トークンを設定します。

 

String

camel.cloud.consul.service-discovery.block-seconds

監視イベントを待機する秒数。デフォルトは 10 秒です。

10

Integer

camel.cloud.consul.service-discovery.configurations

追加の設定定義を定義します。

 

マップ

camel.cloud.consul.service-discovery.connect-timeout-millis

OkHttpClient の接続タイムアウト。

 

Long

camel.cloud.consul.service-discovery.datacenter

データセンター。

 

String

camel.cloud.consul.service-discovery.enabled

コンポーネントを有効にします。

true

ブール値

camel.cloud.consul.service-discovery.password

基本認証に使用するパスワードを設定します。

 

String

camel.cloud.consul.service-discovery.properties

使用するクライアントプロパティーを設定します。これらのプロパティーは、使用中のサービスコールの実装に固有です。たとえば、リボンを使用していると、クライアントプロパティーは com.netflix.client.config.CommonClientConfigKey で定義されます。

 

マップ

camel.cloud.consul.service-discovery.read-timeout-millis

OkHttpClient の読み取りタイムアウト。

 

Long

camel.cloud.consul.service-discovery.url

Consul エージェントの URL。

 

String

camel.cloud.consul.service-discovery.user-name

Basic 認証に使用するユーザー名を設定します。

 

String

camel.cloud.consul.service-discovery.write-timeout-millis

OkHttpClient の書き込みタイムアウト。

 

Long

camel.cloud.dns.service-discovery.configurations

追加の設定定義を定義します。

 

マップ

camel.cloud.dns.service-discovery.domain

ドメイン名;.

 

String

camel.cloud.dns.service-discovery.enabled

コンポーネントを有効にします。

true

ブール値

camel.cloud.dns.service-discovery.properties

使用するクライアントプロパティーを設定します。これらのプロパティーは、使用中のサービスコールの実装に固有です。たとえば、リボンを使用していると、クライアントプロパティーは com.netflix.client.config.CommonClientConfigKey で定義されます。

 

マップ

camel.cloud.dns.service-discovery.proto

目的のサービスのトランスポートプロトコル。

_tcp

String

camel.cloud.etcd.service-discovery.configurations

追加の設定定義を定義します。

 

マップ

camel.cloud.etcd.service-discovery.enabled

コンポーネントを有効にします。

true

ブール値

camel.cloud.etcd.service-discovery.password

基本認証に使用するパスワード。

 

String

camel.cloud.etcd.service-discovery.properties

使用するクライアントプロパティーを設定します。これらのプロパティーは、使用中のサービスコールの実装に固有です。たとえば、リボンを使用していると、クライアントプロパティーは com.netflix.client.config.CommonClientConfigKey で定義されます。

 

マップ

camel.cloud.etcd.service-discovery.service-path

サービス検出のために探すパス。

/services/

String

camel.cloud.etcd.service-discovery.timeout

アクションが完了するまでにかかる最大時間を設定します。

 

Long

camel.cloud.etcd.service-discovery.type

検出タイプを設定するには、有効な値はオンデマンドとウォッチです。

オンデマンド

String

camel.cloud.etcd.service-discovery.uris

クライアントが接続できる URI。

 

String

camel.cloud.etcd.service-discovery.user-name

基本認証に使用するユーザー名。

 

String

camel.cloud.kubernetes.service-discovery.api-version

クライアントルックアップを使用する場合の API バージョンを設定します。

 

String

camel.cloud.kubernetes.service-discovery.ca-cert-data

クライアントルックアップをする際に使用する認証局データを設定します。

 

String

camel.cloud.kubernetes.service-discovery.ca-cert-file

クライアントルックアップをする際にファイルからロードされる認証局データを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-cert-data

クライアントルックアップをする際に使用するクライアント証明書データを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-cert-file

クライアントルックアップをする際にファイルからロードされるクライアント証明書データを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-key-algo

クライアントルックアップをする際に使用する、RSA などのクライアントキーストアアルゴリズムを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-key-data

クライアントルックアップをする際に使用する、クライアントキーストアデータを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-key-file

クライアントルックアップをする際にファイルからロードされるクライアントキーストアデータを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-key-passphrase

クライアントルックアップをする際に使用する、クライアントキーストアパスフレーズを設定します。

 

String

camel.cloud.kubernetes.service-discovery.configurations

追加の設定定義を定義します。

 

マップ

camel.cloud.kubernetes.service-discovery.dns-domain

DNS ルックアップに使用する DNS ドメインを設定します。

 

String

camel.cloud.kubernetes.service-discovery.enabled

コンポーネントを有効にします。

true

ブール値

camel.cloud.kubernetes.service-discovery.lookup

サービスルックアップの実行方法。可能な値: client、dns、environment。クライアントを使用する場合、クライアントは kubernetes マスターにクエリーを実行して、サービスを提供するアクティブな Pod のリストを取得し、Pod をランダム (またはラウンドロビン) に選択します。DNS を使用する場合、サービス名は name.namespace.svc.dnsDomain として解決されます。dnssrv を使用する場合、サービス名は、.…svc…の SRV クエリーで解決されます。環境を使用する場合は、環境変数を使用してサービスを検索します。デフォルトの環境が使用されます。

environment

String

camel.cloud.kubernetes.service-discovery.master-url

クライアントルックアップを使用するときに URL をマスターに設定します。

 

String

camel.cloud.kubernetes.service-discovery.namespace

使用する名前空間を設定します。デフォルトでは、ENV 変数 KUBERNETES_MASTER の名前空間を使用します。

 

String

camel.cloud.kubernetes.service-discovery.oauth-token

クライアントルックアップを使用する際に (ユーザー名/パスワードの代わりに) 認証用の OAUTH トークンを設定します。

 

String

camel.cloud.kubernetes.service-discovery.password

クライアントルックアップを使用する際に使用する、認証パスワードを設定します。

 

String

camel.cloud.kubernetes.service-discovery.port-name

DNS/DNSSRV ルックアップに使用するポート名を設定します。

 

String

camel.cloud.kubernetes.service-discovery.port-protocol

DNS/DNSSRV ルックアップに使用するポートプロトコルを設定します。

 

String

camel.cloud.kubernetes.service-discovery.properties

使用するクライアントプロパティーを設定します。これらのプロパティーは、使用中のサービスコールの実装に固有です。たとえば、リボンを使用していると、クライアントプロパティーは com.netflix.client.config.CommonClientConfigKey で定義されます。

 

マップ

camel.cloud.kubernetes.service-discovery.trust-certs

クライアントルックアップを使用する際に使用する、トラスト証明書のチェックを有効にするかどうかを設定します。

false

ブール値

camel.cloud.kubernetes.service-discovery.username

クライアントルックアップを使用する際に使用する、認証ユーザー名を設定します。

 

String

camel.cloud.ribbon.load-balancer.client-name

リボンクライアント名を設定します。

 

String

camel.cloud.ribbon.load-balancer.configurations

追加の設定定義を定義します。

 

マップ

camel.cloud.ribbon.load-balancer.enabled

コンポーネントを有効にします。

true

ブール値

camel.cloud.ribbon.load-balancer.namespace

namespace。

 

String

camel.cloud.ribbon.load-balancer.password

パスワード。

 

String

camel.cloud.ribbon.load-balancer.properties

使用するクライアントプロパティーを設定します。これらのプロパティーは、使用中のサービスコールの実装に固有です。たとえば、リボンを使用していると、クライアントプロパティーは com.netflix.client.config.CommonClientConfigKey で定義されます。

 

マップ

camel.cloud.ribbon.load-balancer.username

ユーザー名

 

String

camel.hystrix.allow-maximum-size-to-diverge-from-core-size

maximumSize の設定を有効にします。その値は、coreSize 以上にすることができます。

false

ブール値

camel.hystrix.circuit-breaker-enabled

HystrixCircuitBreaker を使用するかどうか。false の場合、サーキットブレーカーロジックは使用されず、すべての要求が許可されます。これは実質的に circuitBreakerForceClosed() と似ていますが、メトリックの追跡を継続し、それを開閉する必要があるかどうかを認識しているため、このプロパティーによってサーキットブレーカーがインスタンス化されることもありません。

true

ブール値

camel.hystrix.circuit-breaker-error-threshold-percentage

サーキットブレーカーが開いて要求を拒否するエラー率のしきい値 (50 などの整数)。circuitBreakerSleepWindowInMilliseconds で定義された期間、トリップしたままになります。これが比較されるエラーのパーセンテージは、HystrixCommandMetrics.getHealthCounts() から取得されます。

50

Integer

camel.hystrix.circuit-breaker-force-closed

true の場合、HystrixCircuitBreaker#allowRequest() は常に true を返し、HystrixCommandMetrics.getHealthCounts() からのエラーパーセンテージに関係なくリクエストを許可します。circuitBreakerForceOpen() プロパティーが優先されるため、true に設定すると、このプロパティーは何もしません。

false

ブール値

camel.hystrix.circuit-breaker-force-open

true の場合、HystrixCircuitBreaker.allowRequest() は常に false を返します。これにより、回路が開かれ (トリップされ)、すべての要求が拒否されます。このプロパティーは circuitBreakerForceClosed() よりも優先されます。

false

ブール値

camel.hystrix.circuit-breaker-request-volume-threshold

HystrixCircuitBreaker が作動する前に存在しなければならない metricsRollingStatisticalWindowInMilliseconds() 内の要求の最小数。この数値を下回ると、エラーのパーセンテージに関係なく、回路はトリップしません。

20

Integer

camel.hystrix.circuit-breaker-sleep-window-in-milliseconds

HystrixCircuitBreaker がトリップして開いてから、要求を再試行するまで待機する時間 (ミリ秒単位)。

5000

Integer

camel.hystrix.configurations

追加の設定定義を定義します。

 

マップ

camel.hystrix.core-pool-size

java.util.concurrent.ThreadPoolExecutor#setCorePoolSize(int) に渡されるコアスレッドプールサイズ。

10

Integer

camel.hystrix.enabled

コンポーネントを有効にします。

true

ブール値

camel.hystrix.execution-isolation-semaphore-max-concurrent-requests

HystrixCommand.run() に許可された同時要求の数。同時制限を超えるリクエストは拒否されます。executionIsolationStrategy == SEMAPHORE の場合にのみ適用されます。

20

Integer

camel.hystrix.execution-isolation-strategy

HystrixCommand.run() を実行する分離戦略。THREAD の場合は、別のスレッドで実行し、同時要求はスレッドプール内のスレッド数によって制限されます。SEMAPHORE の場合、呼び出しスレッドで実行し、同時要求はセマフォ数によって制限されます。

スレッド

String

camel.hystrix.execution-isolation-thread-interrupt-on-timeout

スレッドがタイムアウトしたときに、実行スレッドが (Future#cancel を使用して) 割り込みを試みるかどうか。executionIsolationStrategy() == THREAD の場合にのみ適用されます。

true

ブール値

camel.hystrix.execution-timeout-enabled

このコマンドのタイムアウトメカニズムを有効にするかどうか。

true

ブール値

camel.hystrix.execution-timeout-in-milliseconds

コマンドがタイムアウトして実行を停止する時間 (ミリ秒単位)。executionIsolationThreadInterruptOnTimeout == true で、コマンドがスレッド分離されている場合、実行中のスレッドは中断されます。コマンドがセマフォ分離されており、HystrixObservableCommand である場合、そのコマンドはサブスクライブ解除されます。

1000

Integer

camel.hystrix.fallback-enabled

障害が発生したときに HystrixCommand.getFallback() を試行するかどうか。

true

ブール値

camel.hystrix.fallback-isolation-semaphore-max-concurrent-requests

HystrixCommand.getFallback() に許可された同時要求の数。同時制限を超えるリクエストはフェールファストになり、フォールバックの取得は試行されません。

10

Integer

camel.hystrix.group-key

使用するグループキーを設定します。デフォルト値は、CamelHystrix です。

CamelHystrix

String

camel.hystrix.keep-alive-time

ThreadPoolExecutor#setKeepAliveTime(long,TimeUnit) に渡されるキープアライブ時間 (分単位)。

1

Integer

camel.hystrix.max-queue-size

HystrixConcurrencyStrategy.getBlockingQueue(int) で BlockingQueue に渡される最大キューサイズ。これは、スレッドプールのインスタンス化にのみ影響します。その場でキューサイズを変更することはできません。そのためには、queueSizeRejectionThreshold() を使用します。

-1

Integer

camel.hystrix.maximum-size

ThreadPoolExecutor#setMaximumPoolSize(int) に渡されるスレッドプールの最大サイズ。これは、HystrixCommands を拒否し始めることなくサポートできる同時実行の最大量です。この設定は、allowMaximumSizeToDivergeFromCoreSize も設定した場合にのみ有効になることに注意してください。

10

Integer

camel.hystrix.metrics-health-snapshot-interval-in-milliseconds

成功率とエラー率を計算し、HystrixCircuitBreaker.isOpen() ステータスに影響を与えるヘルススナップショットの取得を許可するまでの待機時間 (ミリ秒単位)。大量の回路では、エラーパーセンテージの継続的な計算によって CPU が集中的に使用される可能性があるため、これが計算の頻度を制御します。

500

Integer

camel.hystrix.metrics-rolling-percentile-bucket-size

ローリングパーセンタイルの各バケットに格納される値の最大数。これは、HystrixCommandMetrics 内の HystrixRollingPercentile に渡されます。

10

Integer

camel.hystrix.metrics-rolling-percentile-enabled

HystrixCommandMetrics 内の HystrixRollingPercentile を使用してパーセンタイルメトリックをキャプチャする必要があるかどうか。

true

ブール値

camel.hystrix.metrics-rolling-percentile-window-buckets

ローリングパーセンテージウィンドウが分割されるバケットの数。これは、HystrixCommandMetrics 内の HystrixRollingPercentile に渡されます。

6

Integer

camel.hystrix.metrics-rolling-percentile-window-in-milliseconds

ミリ秒単位のパーセンタイルローリングウィンドウの期間。これは、HystrixCommandMetrics 内の HystrixRollingPercentile に渡されます。

10000

Integer

camel.hystrix.metrics-rolling-statistical-window-buckets

ローリング統計ウィンドウが分割されるバケットの数。これは、HystrixCommandMetrics 内の HystrixRollingNumber に渡されます。

10

Integer

camel.hystrix.metrics-rolling-statistical-window-in-milliseconds

このプロパティーは、統計ローリングウィンドウの期間をミリ秒単位で設定します。スレッドプール用にメトリクスが保持される期間です。ウィンドウは、それらの増分によってバケットとロールに分割されます。

10000

Integer

camel.hystrix.queue-size-rejection-threshold

キューサイズの拒否しきい値は、maxQueueSize に到達していない場合でも拒否できる人為的な最大キューサイズを設定します。これは、BlockingQueue の maxQueueSize を動的に変更することができず、拒否に影響するキューサイズの動的な変更をサポートするために行われます。これは、実行のためにスレッドをキューに入れるときに HystrixCommand によって使用されます。

5

Integer

camel.hystrix.request-log-enabled

HystrixCommand の実行およびイベントを HystrixRequestLog に記録するべきかどうかを示します。

true

ブール値

camel.hystrix.thread-pool-key

使用するスレッドプールキーを設定します。デフォルトでは、groupKey が使用するように設定されているのと同じ値を使用します。

CamelHystrix

String

camel.hystrix.thread-pool-rolling-number-statistical-window-buckets

ローリング統計ウィンドウが分割されるバケットの数。これは、各 HystrixThreadPoolMetrics インスタンス内の HystrixRollingNumber に渡されます。

10

Integer

camel.hystrix.thread-pool-rolling-number-statistical-window-in-milliseconds

統計ローリングウィンドウの期間をミリ秒単位で設定します。これは、各 HystrixThreadPoolMetrics インスタンス内の HystrixRollingNumber に渡されます。

10000

Integer

camel.language.constant.enabled

定数言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.constant.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.csimple.enabled

csimple 言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.csimple.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.exchangeproperty.enabled

exchangeProperty 言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.exchangeproperty.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.file.enabled

ファイル言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.file.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.header.enabled

ヘッダー言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.header.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.ref.enabled

ref 言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.ref.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.simple.enabled

簡易言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.simple.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.tokenize.enabled

tokenize 言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.tokenize.group-delimiter

グループ化時に使用する区切り文字を設定します。これが設定されていない場合は、トークンが区切り文字として使用されます。

 

String

camel.language.tokenize.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.resilience4j.automatic-transition-from-open-to-half-open-enabled

waitDurationInOpenState が経過すると、OPEN から HALF_OPEN 状態への自動移行を有効にします。

false

ブール値

camel.resilience4j.circuit-breaker-ref

レジストリーから検索して使用する既存の io.github.resilience4j.circuitbreaker.CircuitBreaker インスタンスを参照します。これを使用する場合、他のサーキットブレーカーオプションは使用されません。

 

String

camel.resilience4j.config-ref

レジストリーから検索して使用する既存の github.resilience4j.circuitbreaker.CircuitBreakerConfig インスタンスを参照します。

 

String

camel.resilience4j.configurations

追加の設定定義を定義します。

 

マップ

camel.resilience4j.enabled

コンポーネントを有効にします。

true

ブール値

camel.resilience4j.failure-rate-threshold

失敗率のしきい値をパーセンテージで設定します。失敗率がしきい値以上の場合、CircuitBreaker はオープンに移行し、コールのショートサーキットを開始します。しきい値は 0 より大きく 100 以下である必要があります。デフォルト値は 50% です。

 

Float

camel.resilience4j.minimum-number-of-calls

CircuitBreaker がエラー率を計算できるようになるまでに必要な (スライディングウィンドウ期間ごとの) 呼び出しの最小数を設定します。たとえば、minimumNumberOfCalls が 10 の場合、失敗率を計算するには、少なくとも 10 件の呼び出しが記録される必要があります。9 つのコールのみが記録されている場合、CircuitBreaker は 9 つのコールすべてが失敗した場合でもオープンに移行しません。デフォルトの minimumNumberOfCalls は 100 です。

100

Integer

camel.resilience4j.permitted-number-of-calls-in-half-open-state

CircuitBreaker が半分開いているときに許可される呼び出しの数を設定します。サイズは 0 より大きくなければなりませんデフォルトのサイズは 10 です。

10

Integer

camel.resilience4j.sliding-window-size

CircuitBreaker が閉じられたときに呼び出しの結果を記録するために使用されるスライディングウィンドウのサイズを設定します。slideWindowSize は、スライディングウィンドウのサイズを設定します。スライディングウィンドウは、カウントベースまたは時間ベースのいずれかです。slidingWindowType が COUNT_BASED の場合、最後の slideWindowSize 呼び出しが記録され、集計されます。SlidingWindowType が TIME_BASED の場合は、最後の slideWindowSize 秒の呼び出しが記録され、集計されます。slidingWindowSize は 0 より大きくなければなりません。minimumNumberOfCalls は 0 より大きくする必要があります。SlidingWindowType が COUNT_BASED の場合、minimumNumberOfCalls を slideWindowSize より大きくすることはできません。slidingWindowType が TIME_BASED の場合は、好きなものを選択できます。デフォルトの slidingWindowType は 100 です。

100

Integer

camel.resilience4j.sliding-window-type

CircuitBreaker が閉じられたときに呼び出しの結果を記録するために使用されるスライディングウィンドウのサイズを設定します。スライディングウィンドウは、カウントベースまたは時間ベースのいずれかです。slidingWindowType が COUNT_BASED の場合、最後の slideWindowSize 呼び出しが記録され、集計されます。SlidingWindowType が TIME_BASED の場合は、最後の slideWindowSize 秒の呼び出しが記録され、集計されます。デフォルトの slidingWindowType は COUNT_BASED です。

COUNT_BASED

String

camel.resilience4j.slow-call-duration-threshold

それを超えると呼び出しが低速と見なされ、低速呼び出しのパーセンテージが増加する期間のしきい値 (秒) を設定します。デフォルト値は 60 秒です。

60

Integer

camel.resilience4j.slow-call-rate-threshold

パーセンテージでしきい値を設定します。CircuitBreaker は、呼び出し時間が slowCallDurationThreshold Duration よりも長い場合、呼び出しが遅いと見なします。失敗率がしきい値以上の場合、CircuitBreaker はオープンに移行し、ショートサーキット呼び出しを開始します。しきい値は 0 より大きく 100 以下である必要があります。デフォルト値は 100 パーセントです。これは、記録されたすべてのコールが slowCallDurationThreshold より遅くなければならないことを意味します。

 

Float

camel.resilience4j.wait-duration-in-open-state

ハーフオープンに切り替わる前に CircuitBreaker が開いたままになる時間を指定する待機期間 (秒単位) を設定します。デフォルト値は 60 秒です。

60

Integer

camel.resilience4j.writable-stack-trace-enabled

書き込み可能なスタックトレースを有効にします。false に設定すると、Exception.getStackTrace は長さゼロの配列を返します。これは、例外の原因が既にわかっている (サーキットブレーカーが呼び出しを短絡している) ため、サーキットブレーカーが開いているときにログスパムを減らすために使用できます。

true

ブール値

camel.rest.api-component

REST API として使用する Camel コンポーネントの名前 (swagger など)。API コンポーネントが明示的に設定されていない場合は、REST API ドキュメントのサービスおよび生成を担当する Camel コンポーネントがある場合、または org.apache.camel.spi.RestApiProcessorFactory がレジストリーに登録されているかどうかを調べます。いずれかが見つかった場合は、それが使用されています。

 

String

camel.rest.api-context-path

REST API サービスが使用する主要な API コンテキストパスを設定します。これは、デプロイされた Web アプリケーションがコンテキストパスを使用してデプロイされる camel-servlet などのコンポーネントを使用する場合に使用できます。

 

String

camel.rest.api-context-route-id

REST API にサービスを提供するルートに使用するルート ID を設定します。デフォルトでは、ルートは自動割り当てのルート ID を使用します。

 

String

camel.rest.api-host

API ドキュメント (swagger など) に特定のホスト名を使用するには、これを使用して、生成されたホストをこの設定済みホスト名でオーバーライドできます。

 

String

camel.rest.api-property

API ドキュメント (swagger) の追加プロパティーをできるだけ多く設定できます。たとえば、プロパティー api.title をクールスタッフに設定します。

 

マップ

camel.rest.api-vendor-extension

Rest API でベンダー拡張機能が有効になっているかどうか。有効にすると、Camel はルート ID、クラス名などの追加情報をベンダー拡張 (x- で始まるキーなど) として含めます。API ドキュメントをインポートするときに、すべてのサードパーティー API ゲートウェイおよびツールがベンダー拡張をサポートしているわけではありません。

false

ブール値

camel.rest.binding-mode

使用するバインドモードを設定します。デフォルト値は off です。

 

RestBindingMode

camel.rest.client-request-validation

クライアント要求の検証を有効にして、クライアントからの Content-Type および Accept ヘッダーがその消費/生成設定の Rest-DSL 設定によってサポートされているかどうかを確認するかどうか。これをオンにして、このチェックを有効にすることができます。検証エラーの場合は、HTTP ステータスコード 415 または 406 が返されます。デフォルト値は false です。

false

ブール値

camel.rest.component

netty-http、jetty、servlet、undertow などの REST トランスポート (consumer) に使用する Camel Rest コンポーネント。コンポーネントが明示的に設定されていない場合、Rest DSL と統合する Camel コンポーネントがある場合、または org.apache.camel.spi.RestConsumerFactory がレジストリーに登録されている場合、Camel はルックアップします。いずれかが見つかった場合は、それが使用されています。

 

String

camel.rest.component-property

使用中の残りのコンポーネントの追加プロパティーをできるだけ多く設定できます。

 

マップ

camel.rest.consumer-property

使用中の残りの consumer の追加プロパティーをできるだけ多く設定できます。

 

マップ

camel.rest.context-path

REST サービスが使用する主要なコンテキストパスを設定します。これは、デプロイされた Web アプリケーションがコンテキストパスを使用してデプロイされる camel-servlet などのコンポーネントを使用する場合に使用できます。または、HTTP サーバーを含む camel -jetty や camel-netty-http などのコンポーネントの場合。

 

String

camel.rest.cors-headers

カスタム CORS ヘッダーを設定できます。

 

マップ

camel.rest.data-format-property

使用中のデータ形式の追加プロパティーをできるだけ多く設定できます。たとえば、プロパティー prettyPrint を true に設定すると、json がプリティモードで出力されます。オプションが JSON または XML のいずれか、および IN または OUT のいずれか専用であることを示すために、プロパティーに接頭辞を付けることができます。接頭辞は、json.in.、json.out.、xml.in.、xml.outです。たとえば、値が xml.out.mustBeJAXBElement のキーは、送信用の XML データ形式専用です。接頭辞のないキーは、すべての状況で共通のキーです。

 

マップ

camel.rest.enable-cors

HTTP 応答で CORS ヘッダーを有効にするかどうか。デフォルト値は false です。

false

ブール値

camel.rest.endpoint-property

使用中の残りのエンドポイントの追加プロパティーをできるだけ多く設定できます。

 

マップ

camel.rest.host

REST サービスの公開に使用するホスト名。

 

String

camel.rest.host-name-resolver

ホスト名が明示的に設定されていない場合、このリゾルバーは、REST サービスが使用するホスト名を計算するために使用されます。

 

RestHostNameResolver

camel.rest.json-data-format

使用する特定の json データ形式の名前。デフォルトでは json-jackson が使用されます。重要: このオプションは、データ形式のカスタム名を設定するためのものであり、既存のデータ形式インスタンスを参照するためのものではありません。

 

String

camel.rest.port

REST サービスの公開に使用するポート番号。サーブレットコンポーネントを使用する場合は、ここで設定したポート番号は適用されないことに注意してください。使用中のポート番号は、サーブレットコンポーネントが使用している実際のポート番号であるためです。たとえば、Apache Tomcat を使用する場合は Tomcat http ポート、Apache Karaf を使用する場合はデフォルトでポート 8181 を使用する Karaf の HTTP サービスなどです。このような状況では、ここでポート番号を設定すると、ツールと JMX がポート番号を認識できるようになるため、ポート番号をサーブレットエンジンが使用する番号に設定することをお勧めします。

 

String

camel.rest.producer-api-doc

REST producer が REST uri を検証するために使用する API ドキュメント (swagger api) の場所を設定し、API ドキュメントに応じてクエリーパラメーターが有効です。これには、クラスパスに camel-swagger-java を追加する必要があり、設定に誤りがあると、Camel が起動時に失敗し、エラーが報告されます。API ドキュメントの場所はデフォルトでクラスパスから読み込まれますが、file: または http: を使用してリソースを参照し、ファイルまたは http url から読み込むことができます。

 

String

camel.rest.producer-component

REST producer として使用する Camel コンポーネントの名前を設定します。

 

String

camel.rest.scheme

REST サービスの公開に使用するスキーム。通常、http または https がサポートされます。デフォルト値は http です。

 

String

camel.rest.skip-binding-on-error-code

カスタム HTTP エラーコードヘッダーがある場合は、出力でバインディングをスキップするかどうか。これにより、json/xml などにバインドしないカスタムエラーメッセージを作成できます。それ以外の場合は成功メッセージが作成されます。

false

ブール値

camel.rest.use-x-forward-headers

ホストおよび関連する設定に X-Forward ヘッダーを使用するかどうか。デフォルト値は true です。

true

ブール値

camel.rest.xml-data-format

使用する特定の XML データ形式の名前。デフォルトでは jaxb が使用されます。重要: このオプションは、データ形式のカスタム名を設定するためのものであり、既存のデータ形式インスタンスを参照するためのものではありません。

 

String

camel.rest.api-context-id-pattern

非推奨 CamelContext ID パターンを設定して、名前がパターンに一致する CamelContext 内の REST サービスからの Rest API のみを許可します。パターン は CamelContext 名を参照し、現在の CamelContext のみに一致します。その他の値の場合、パターンは PatternHelper#matchPattern (String,String) のルールを使用します。

 

String

camel.rest.api-context-listing

非推奨 JVM で REST サービスを使用して使用可能なすべての CamelContext のリストを有効にするかどうかを設定します。有効にすると、これらのコンテキストを検出できます。false の場合、現在の CamelContext のみが使用されます。

false

ブール値

第75章 Tokenize

Tokenizer 言語は camel-core の組み込み言語であり、トークンベースの戦略を使用してメッセージを分割するために Split EIP で最もよく使用されます。

Tokenizer 言語は、指定された区切りパターンを使用してテキストドキュメントをトークン化することを目的としています。また、一部の機能が制限された XML ドキュメントをトークン化するために使用することもできます。真に XML に対応したトークン化を行うには、特に XML ドキュメントに対してより高速で効率的なトークン化を提供するため、XML Tokenize 言語を使用することをお勧めします。

75.1. Tokenize オプション

Tokenize 言語は、以下に示す 11 のオプションをサポートしています。

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

token

 

String

必須 Tokenizer として使用する (開始) トークン。たとえば、改行トークンを使用できます。Simple 言語をトークンとして使用して、動的トークンをサポートできます。

endToken

 

String

開始/終了トークンのペアを使用する場合に Tokenizer として使用する終了トークン。Simple 言語をトークンとして使用して、動的トークンをサポートできます。

inheritNamespaceTagName

 

String

XML の使用時にルート/親タグ名から名前空間を継承するにはタグ名として Simple 言語を使用して、動的な名前をサポートできます。

headerName

 

String

メッセージボディーを使用する代わりにトークン化するヘッダーの名前。

regex

 

ブール値

トークンが正規表現パターンの場合。デフォルト値は false です。

xml

 

ブール値

入力が XML メッセージかどうか。XML ペイロードを使用する場合は、このオプションを true に設定する必要があります。

includeTokens

 

ブール値

ペアを使用するときにトークンをパーツに含めるかどうか。デフォルト値は false です。

group

 

String

たとえば、大きなファイルを 1000 行のチャンクに分割するなど、N 個のパーツをグループ化します。グループとして Simple 言語を使用して、動的なグループサイズをサポートできます。

groupDelimiter

 

String

グループ化時に使用する区切り文字を設定します。これが設定されていない場合は、トークンが区切り文字として使用されます。

skipFirst

 

ブール値

最初の要素をスキップします。

trim

 

ブール値

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

75.2. 例

次の例は、direct:a エンドポイントからリクエストを取得し、それを Expression を使用して断片に分割し、各断片を direct:b に転送する方法を示しています。

<route>
  <from uri="direct:a"/>
  <split>
    <tokenize token="\n"/>
    <to uri="direct:b"/>
  </split>
</route>

そして Java DSL の場合:

from("direct:a")
    .split(body().tokenize("\n"))
        .to("direct:b");

75.3. 関連項目

その他の例については、Split EIP を参照してください。

75.4. Spring Boot 自動設定

Spring Boot で tokenize を使用する場合は、自動設定をサポートするために次の Maven 依存関係を使用してください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-core-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 147 のオプションをサポートします。

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

camel.cloud.consul.service-discovery.acl-token

Consul で使用する ACL トークンを設定します。

 

String

camel.cloud.consul.service-discovery.block-seconds

監視イベントを待機する秒数。デフォルトは 10 秒です。

10

Integer

camel.cloud.consul.service-discovery.configurations

追加の設定定義を定義します。

 

マップ

camel.cloud.consul.service-discovery.connect-timeout-millis

OkHttpClient の接続タイムアウト。

 

Long

camel.cloud.consul.service-discovery.datacenter

データセンター。

 

String

camel.cloud.consul.service-discovery.enabled

コンポーネントを有効にします。

true

ブール値

camel.cloud.consul.service-discovery.password

基本認証に使用するパスワードを設定します。

 

String

camel.cloud.consul.service-discovery.properties

使用するクライアントプロパティーを設定します。これらのプロパティーは、使用中のサービスコールの実装に固有です。たとえば、リボンを使用していると、クライアントプロパティーは com.netflix.client.config.CommonClientConfigKey で定義されます。

 

マップ

camel.cloud.consul.service-discovery.read-timeout-millis

OkHttpClient の読み取りタイムアウト。

 

Long

camel.cloud.consul.service-discovery.url

Consul エージェントの URL。

 

String

camel.cloud.consul.service-discovery.user-name

Basic 認証に使用するユーザー名を設定します。

 

String

camel.cloud.consul.service-discovery.write-timeout-millis

OkHttpClient の書き込みタイムアウト。

 

Long

camel.cloud.dns.service-discovery.configurations

追加の設定定義を定義します。

 

マップ

camel.cloud.dns.service-discovery.domain

ドメイン名;.

 

String

camel.cloud.dns.service-discovery.enabled

コンポーネントを有効にします。

true

ブール値

camel.cloud.dns.service-discovery.properties

使用するクライアントプロパティーを設定します。これらのプロパティーは、使用中のサービスコールの実装に固有です。たとえば、リボンを使用していると、クライアントプロパティーは com.netflix.client.config.CommonClientConfigKey で定義されます。

 

マップ

camel.cloud.dns.service-discovery.proto

目的のサービスのトランスポートプロトコル。

_tcp

String

camel.cloud.etcd.service-discovery.configurations

追加の設定定義を定義します。

 

マップ

camel.cloud.etcd.service-discovery.enabled

コンポーネントを有効にします。

true

ブール値

camel.cloud.etcd.service-discovery.password

基本認証に使用するパスワード。

 

String

camel.cloud.etcd.service-discovery.properties

使用するクライアントプロパティーを設定します。これらのプロパティーは、使用中のサービスコールの実装に固有です。たとえば、リボンを使用していると、クライアントプロパティーは com.netflix.client.config.CommonClientConfigKey で定義されます。

 

マップ

camel.cloud.etcd.service-discovery.service-path

サービス検出のために探すパス。

/services/

String

camel.cloud.etcd.service-discovery.timeout

アクションが完了するまでにかかる最大時間を設定します。

 

Long

camel.cloud.etcd.service-discovery.type

検出タイプを設定するには、有効な値はオンデマンドとウォッチです。

オンデマンド

String

camel.cloud.etcd.service-discovery.uris

クライアントが接続できる URI。

 

String

camel.cloud.etcd.service-discovery.user-name

基本認証に使用するユーザー名。

 

String

camel.cloud.kubernetes.service-discovery.api-version

クライアントルックアップを使用する場合の API バージョンを設定します。

 

String

camel.cloud.kubernetes.service-discovery.ca-cert-data

クライアントルックアップをする際に使用する認証局データを設定します。

 

String

camel.cloud.kubernetes.service-discovery.ca-cert-file

クライアントルックアップをする際にファイルからロードされる認証局データを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-cert-data

クライアントルックアップをする際に使用するクライアント証明書データを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-cert-file

クライアントルックアップをする際にファイルからロードされるクライアント証明書データを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-key-algo

クライアントルックアップをする際に使用する、RSA などのクライアントキーストアアルゴリズムを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-key-data

クライアントルックアップをする際に使用する、クライアントキーストアデータを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-key-file

クライアントルックアップをする際にファイルからロードされるクライアントキーストアデータを設定します。

 

String

camel.cloud.kubernetes.service-discovery.client-key-passphrase

クライアントルックアップをする際に使用する、クライアントキーストアパスフレーズを設定します。

 

String

camel.cloud.kubernetes.service-discovery.configurations

追加の設定定義を定義します。

 

マップ

camel.cloud.kubernetes.service-discovery.dns-domain

DNS ルックアップに使用する DNS ドメインを設定します。

 

String

camel.cloud.kubernetes.service-discovery.enabled

コンポーネントを有効にします。

true

ブール値

camel.cloud.kubernetes.service-discovery.lookup

サービスルックアップの実行方法。可能な値: client、dns、environment。クライアントを使用する場合、クライアントは kubernetes マスターにクエリーを実行して、サービスを提供するアクティブな Pod のリストを取得し、Pod をランダム (またはラウンドロビン) に選択します。DNS を使用する場合、サービス名は name.namespace.svc.dnsDomain として解決されます。dnssrv を使用する場合、サービス名は、.…svc…の SRV クエリーで解決されます。環境を使用する場合は、環境変数を使用してサービスを検索します。デフォルトの環境が使用されます。

environment

String

camel.cloud.kubernetes.service-discovery.master-url

クライアントルックアップを使用するときに URL をマスターに設定します。

 

String

camel.cloud.kubernetes.service-discovery.namespace

使用する名前空間を設定します。デフォルトでは、ENV 変数 KUBERNETES_MASTER の名前空間を使用します。

 

String

camel.cloud.kubernetes.service-discovery.oauth-token

クライアントルックアップを使用する際に (ユーザー名/パスワードの代わりに) 認証用の OAUTH トークンを設定します。

 

String

camel.cloud.kubernetes.service-discovery.password

クライアントルックアップを使用する際に使用する、認証パスワードを設定します。

 

String

camel.cloud.kubernetes.service-discovery.port-name

DNS/DNSSRV ルックアップに使用するポート名を設定します。

 

String

camel.cloud.kubernetes.service-discovery.port-protocol

DNS/DNSSRV ルックアップに使用するポートプロトコルを設定します。

 

String

camel.cloud.kubernetes.service-discovery.properties

使用するクライアントプロパティーを設定します。これらのプロパティーは、使用中のサービスコールの実装に固有です。たとえば、リボンを使用していると、クライアントプロパティーは com.netflix.client.config.CommonClientConfigKey で定義されます。

 

マップ

camel.cloud.kubernetes.service-discovery.trust-certs

クライアントルックアップを使用する際に使用する、トラスト証明書のチェックを有効にするかどうかを設定します。

false

ブール値

camel.cloud.kubernetes.service-discovery.username

クライアントルックアップを使用する際に使用する、認証ユーザー名を設定します。

 

String

camel.cloud.ribbon.load-balancer.client-name

リボンクライアント名を設定します。

 

String

camel.cloud.ribbon.load-balancer.configurations

追加の設定定義を定義します。

 

マップ

camel.cloud.ribbon.load-balancer.enabled

コンポーネントを有効にします。

true

ブール値

camel.cloud.ribbon.load-balancer.namespace

namespace。

 

String

camel.cloud.ribbon.load-balancer.password

パスワード。

 

String

camel.cloud.ribbon.load-balancer.properties

使用するクライアントプロパティーを設定します。これらのプロパティーは、使用中のサービスコールの実装に固有です。たとえば、リボンを使用していると、クライアントプロパティーは com.netflix.client.config.CommonClientConfigKey で定義されます。

 

マップ

camel.cloud.ribbon.load-balancer.username

ユーザー名

 

String

camel.hystrix.allow-maximum-size-to-diverge-from-core-size

maximumSize の設定を有効にします。その値は、coreSize 以上にすることができます。

false

ブール値

camel.hystrix.circuit-breaker-enabled

HystrixCircuitBreaker を使用するかどうか。false の場合、サーキットブレーカーロジックは使用されず、すべての要求が許可されます。これは実質的に circuitBreakerForceClosed() と似ていますが、メトリックの追跡を継続し、それを開閉する必要があるかどうかを認識しているため、このプロパティーによってサーキットブレーカーがインスタンス化されることもありません。

true

ブール値

camel.hystrix.circuit-breaker-error-threshold-percentage

サーキットブレーカーが開いて要求を拒否するエラー率のしきい値 (50 などの整数)。circuitBreakerSleepWindowInMilliseconds で定義された期間、トリップしたままになります。これが比較されるエラーのパーセンテージは、HystrixCommandMetrics.getHealthCounts() から取得されます。

50

Integer

camel.hystrix.circuit-breaker-force-closed

true の場合、HystrixCircuitBreaker#allowRequest() は常に true を返し、HystrixCommandMetrics.getHealthCounts() からのエラーパーセンテージに関係なくリクエストを許可します。circuitBreakerForceOpen() プロパティーが優先されるため、true に設定すると、このプロパティーは何もしません。

false

ブール値

camel.hystrix.circuit-breaker-force-open

true の場合、HystrixCircuitBreaker.allowRequest() は常に false を返します。これにより、回路が開かれ (トリップされ)、すべての要求が拒否されます。このプロパティーは circuitBreakerForceClosed() よりも優先されます。

false

ブール値

camel.hystrix.circuit-breaker-request-volume-threshold

HystrixCircuitBreaker が作動する前に存在しなければならない metricsRollingStatisticalWindowInMilliseconds() 内の要求の最小数。この数値を下回ると、エラーのパーセンテージに関係なく、回路はトリップしません。

20

Integer

camel.hystrix.circuit-breaker-sleep-window-in-milliseconds

HystrixCircuitBreaker がトリップして開いてから、要求を再試行するまで待機する時間 (ミリ秒単位)。

5000

Integer

camel.hystrix.configurations

追加の設定定義を定義します。

 

マップ

camel.hystrix.core-pool-size

java.util.concurrent.ThreadPoolExecutor#setCorePoolSize(int) に渡されるコアスレッドプールサイズ。

10

Integer

camel.hystrix.enabled

コンポーネントを有効にします。

true

ブール値

camel.hystrix.execution-isolation-semaphore-max-concurrent-requests

HystrixCommand.run() に許可された同時要求の数。同時制限を超えるリクエストは拒否されます。executionIsolationStrategy == SEMAPHORE の場合にのみ適用されます。

20

Integer

camel.hystrix.execution-isolation-strategy

HystrixCommand.run() を実行する分離戦略。THREAD の場合は、別のスレッドで実行し、同時要求はスレッドプール内のスレッド数によって制限されます。SEMAPHORE の場合、呼び出しスレッドで実行し、同時要求はセマフォ数によって制限されます。

スレッド

String

camel.hystrix.execution-isolation-thread-interrupt-on-timeout

スレッドがタイムアウトしたときに、実行スレッドが (Future#cancel を使用して) 割り込みを試みるかどうか。executionIsolationStrategy() == THREAD の場合にのみ適用されます。

true

ブール値

camel.hystrix.execution-timeout-enabled

このコマンドのタイムアウトメカニズムを有効にするかどうか。

true

ブール値

camel.hystrix.execution-timeout-in-milliseconds

コマンドがタイムアウトして実行を停止する時間 (ミリ秒単位)。executionIsolationThreadInterruptOnTimeout == true で、コマンドがスレッド分離されている場合、実行中のスレッドは中断されます。コマンドがセマフォ分離されており、HystrixObservableCommand である場合、そのコマンドはサブスクライブ解除されます。

1000

Integer

camel.hystrix.fallback-enabled

障害が発生したときに HystrixCommand.getFallback() を試行するかどうか。

true

ブール値

camel.hystrix.fallback-isolation-semaphore-max-concurrent-requests

HystrixCommand.getFallback() に許可された同時要求の数。同時制限を超えるリクエストはフェールファストになり、フォールバックの取得は試行されません。

10

Integer

camel.hystrix.group-key

使用するグループキーを設定します。デフォルト値は、CamelHystrix です。

CamelHystrix

String

camel.hystrix.keep-alive-time

ThreadPoolExecutor#setKeepAliveTime(long,TimeUnit) に渡されるキープアライブ時間 (分単位)。

1

Integer

camel.hystrix.max-queue-size

HystrixConcurrencyStrategy.getBlockingQueue(int) で BlockingQueue に渡される最大キューサイズ。これは、スレッドプールのインスタンス化にのみ影響します。その場でキューサイズを変更することはできません。そのためには、queueSizeRejectionThreshold() を使用します。

-1

Integer

camel.hystrix.maximum-size

ThreadPoolExecutor#setMaximumPoolSize(int) に渡されるスレッドプールの最大サイズ。これは、HystrixCommands を拒否し始めることなくサポートできる同時実行の最大量です。この設定は、allowMaximumSizeToDivergeFromCoreSize も設定した場合にのみ有効になることに注意してください。

10

Integer

camel.hystrix.metrics-health-snapshot-interval-in-milliseconds

成功率とエラー率を計算し、HystrixCircuitBreaker.isOpen() ステータスに影響を与えるヘルススナップショットの取得を許可するまでの待機時間 (ミリ秒単位)。大量の回路では、エラーパーセンテージの継続的な計算によって CPU が集中的に使用される可能性があるため、これが計算の頻度を制御します。

500

Integer

camel.hystrix.metrics-rolling-percentile-bucket-size

ローリングパーセンタイルの各バケットに格納される値の最大数。これは、HystrixCommandMetrics 内の HystrixRollingPercentile に渡されます。

10

Integer

camel.hystrix.metrics-rolling-percentile-enabled

HystrixCommandMetrics 内の HystrixRollingPercentile を使用してパーセンタイルメトリックをキャプチャする必要があるかどうか。

true

ブール値

camel.hystrix.metrics-rolling-percentile-window-buckets

ローリングパーセンテージウィンドウが分割されるバケットの数。これは、HystrixCommandMetrics 内の HystrixRollingPercentile に渡されます。

6

Integer

camel.hystrix.metrics-rolling-percentile-window-in-milliseconds

ミリ秒単位のパーセンタイルローリングウィンドウの期間。これは、HystrixCommandMetrics 内の HystrixRollingPercentile に渡されます。

10000

Integer

camel.hystrix.metrics-rolling-statistical-window-buckets

ローリング統計ウィンドウが分割されるバケットの数。これは、HystrixCommandMetrics 内の HystrixRollingNumber に渡されます。

10

Integer

camel.hystrix.metrics-rolling-statistical-window-in-milliseconds

このプロパティーは、統計ローリングウィンドウの期間をミリ秒単位で設定します。スレッドプール用にメトリクスが保持される期間です。ウィンドウは、それらの増分によってバケットとロールに分割されます。

10000

Integer

camel.hystrix.queue-size-rejection-threshold

キューサイズの拒否しきい値は、maxQueueSize に到達していない場合でも拒否できる人為的な最大キューサイズを設定します。これは、BlockingQueue の maxQueueSize を動的に変更することができず、拒否に影響するキューサイズの動的な変更をサポートするために行われます。これは、実行のためにスレッドをキューに入れるときに HystrixCommand によって使用されます。

5

Integer

camel.hystrix.request-log-enabled

HystrixCommand の実行およびイベントを HystrixRequestLog に記録するべきかどうかを示します。

true

ブール値

camel.hystrix.thread-pool-key

使用するスレッドプールキーを設定します。デフォルトでは、groupKey が使用するように設定されているのと同じ値を使用します。

CamelHystrix

String

camel.hystrix.thread-pool-rolling-number-statistical-window-buckets

ローリング統計ウィンドウが分割されるバケットの数。これは、各 HystrixThreadPoolMetrics インスタンス内の HystrixRollingNumber に渡されます。

10

Integer

camel.hystrix.thread-pool-rolling-number-statistical-window-in-milliseconds

統計ローリングウィンドウの期間をミリ秒単位で設定します。これは、各 HystrixThreadPoolMetrics インスタンス内の HystrixRollingNumber に渡されます。

10000

Integer

camel.language.constant.enabled

定数言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.constant.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.csimple.enabled

csimple 言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.csimple.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.exchangeproperty.enabled

exchangeProperty 言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.exchangeproperty.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.file.enabled

ファイル言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.file.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.header.enabled

ヘッダー言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.header.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.ref.enabled

ref 言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.ref.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.simple.enabled

簡易言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.simple.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.language.tokenize.enabled

tokenize 言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.tokenize.group-delimiter

グループ化時に使用する区切り文字を設定します。これが設定されていない場合は、トークンが区切り文字として使用されます。

 

String

camel.language.tokenize.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

camel.resilience4j.automatic-transition-from-open-to-half-open-enabled

waitDurationInOpenState が経過すると、OPEN から HALF_OPEN 状態への自動移行を有効にします。

false

ブール値

camel.resilience4j.circuit-breaker-ref

レジストリーから検索して使用する既存の io.github.resilience4j.circuitbreaker.CircuitBreaker インスタンスを参照します。これを使用する場合、他のサーキットブレーカーオプションは使用されません。

 

String

camel.resilience4j.config-ref

レジストリーから検索して使用する既存の github.resilience4j.circuitbreaker.CircuitBreakerConfig インスタンスを参照します。

 

String

camel.resilience4j.configurations

追加の設定定義を定義します。

 

マップ

camel.resilience4j.enabled

コンポーネントを有効にします。

true

ブール値

camel.resilience4j.failure-rate-threshold

失敗率のしきい値をパーセンテージで設定します。失敗率がしきい値以上の場合、CircuitBreaker はオープンに移行し、コールのショートサーキットを開始します。しきい値は 0 より大きく 100 以下である必要があります。デフォルト値は 50% です。

 

Float

camel.resilience4j.minimum-number-of-calls

CircuitBreaker がエラー率を計算できるようになるまでに必要な (スライディングウィンドウ期間ごとの) 呼び出しの最小数を設定します。たとえば、minimumNumberOfCalls が 10 の場合、失敗率を計算するには、少なくとも 10 件の呼び出しが記録される必要があります。9 つのコールのみが記録されている場合、CircuitBreaker は 9 つのコールすべてが失敗した場合でもオープンに移行しません。デフォルトの minimumNumberOfCalls は 100 です。

100

Integer

camel.resilience4j.permitted-number-of-calls-in-half-open-state

CircuitBreaker が半分開いているときに許可される呼び出しの数を設定します。サイズは 0 より大きくなければなりませんデフォルトのサイズは 10 です。

10

Integer

camel.resilience4j.sliding-window-size

CircuitBreaker が閉じられたときに呼び出しの結果を記録するために使用されるスライディングウィンドウのサイズを設定します。slideWindowSize は、スライディングウィンドウのサイズを設定します。スライディングウィンドウは、カウントベースまたは時間ベースのいずれかです。slidingWindowType が COUNT_BASED の場合、最後の slideWindowSize 呼び出しが記録され、集計されます。SlidingWindowType が TIME_BASED の場合は、最後の slideWindowSize 秒の呼び出しが記録され、集計されます。slidingWindowSize は 0 より大きくなければなりません。minimumNumberOfCalls は 0 より大きくする必要があります。SlidingWindowType が COUNT_BASED の場合、minimumNumberOfCalls を slideWindowSize より大きくすることはできません。slidingWindowType が TIME_BASED の場合は、好きなものを選択できます。デフォルトの slidingWindowType は 100 です。

100

Integer

camel.resilience4j.sliding-window-type

CircuitBreaker が閉じられたときに呼び出しの結果を記録するために使用されるスライディングウィンドウのサイズを設定します。スライディングウィンドウは、カウントベースまたは時間ベースのいずれかです。slidingWindowType が COUNT_BASED の場合、最後の slideWindowSize 呼び出しが記録され、集計されます。SlidingWindowType が TIME_BASED の場合は、最後の slideWindowSize 秒の呼び出しが記録され、集計されます。デフォルトの slidingWindowType は COUNT_BASED です。

COUNT_BASED

String

camel.resilience4j.slow-call-duration-threshold

それを超えると呼び出しが低速と見なされ、低速呼び出しのパーセンテージが増加する期間のしきい値 (秒) を設定します。デフォルト値は 60 秒です。

60

Integer

camel.resilience4j.slow-call-rate-threshold

パーセンテージでしきい値を設定します。CircuitBreaker は、呼び出し時間が slowCallDurationThreshold Duration よりも長い場合、呼び出しが遅いと見なします。失敗率がしきい値以上の場合、CircuitBreaker はオープンに移行し、ショートサーキット呼び出しを開始します。しきい値は 0 より大きく 100 以下である必要があります。デフォルト値は 100 パーセントです。これは、記録されたすべてのコールが slowCallDurationThreshold より遅くなければならないことを意味します。

 

Float

camel.resilience4j.wait-duration-in-open-state

ハーフオープンに切り替わる前に CircuitBreaker が開いたままになる時間を指定する待機期間 (秒単位) を設定します。デフォルト値は 60 秒です。

60

Integer

camel.resilience4j.writable-stack-trace-enabled

書き込み可能なスタックトレースを有効にします。false に設定すると、Exception.getStackTrace は長さゼロの配列を返します。これは、例外の原因が既にわかっている (サーキットブレーカーが呼び出しを短絡している) ため、サーキットブレーカーが開いているときにログスパムを減らすために使用できます。

true

ブール値

camel.rest.api-component

REST API として使用する Camel コンポーネントの名前 (swagger など)。API コンポーネントが明示的に設定されていない場合は、REST API ドキュメントのサービスおよび生成を担当する Camel コンポーネントがある場合、または org.apache.camel.spi.RestApiProcessorFactory がレジストリーに登録されているかどうかを調べます。いずれかが見つかった場合は、それが使用されています。

 

String

camel.rest.api-context-path

REST API サービスが使用する主要な API コンテキストパスを設定します。これは、デプロイされた Web アプリケーションがコンテキストパスを使用してデプロイされる camel-servlet などのコンポーネントを使用する場合に使用できます。

 

String

camel.rest.api-context-route-id

REST API にサービスを提供するルートに使用するルート ID を設定します。デフォルトでは、ルートは自動割り当てのルート ID を使用します。

 

String

camel.rest.api-host

API ドキュメント (swagger など) に特定のホスト名を使用するには、これを使用して、生成されたホストをこの設定済みホスト名でオーバーライドできます。

 

String

camel.rest.api-property

API ドキュメント (swagger) の追加プロパティーをできるだけ多く設定できます。たとえば、プロパティー api.title をクールスタッフに設定します。

 

マップ

camel.rest.api-vendor-extension

Rest API でベンダー拡張機能が有効になっているかどうか。有効にすると、Camel はルート ID、クラス名などの追加情報をベンダー拡張 (x- で始まるキーなど) として含めます。API ドキュメントをインポートするときに、すべてのサードパーティー API ゲートウェイおよびツールがベンダー拡張をサポートしているわけではありません。

false

ブール値

camel.rest.binding-mode

使用するバインドモードを設定します。デフォルト値は off です。

 

RestBindingMode

camel.rest.client-request-validation

クライアント要求の検証を有効にして、クライアントからの Content-Type および Accept ヘッダーがその消費/生成設定の Rest-DSL 設定によってサポートされているかどうかを確認するかどうか。これをオンにして、このチェックを有効にすることができます。検証エラーの場合は、HTTP ステータスコード 415 または 406 が返されます。デフォルト値は false です。

false

ブール値

camel.rest.component

netty-http、jetty、servlet、undertow などの REST トランスポート (consumer) に使用する Camel Rest コンポーネント。コンポーネントが明示的に設定されていない場合、Rest DSL と統合する Camel コンポーネントがある場合、または org.apache.camel.spi.RestConsumerFactory がレジストリーに登録されている場合、Camel はルックアップします。いずれかが見つかった場合は、それが使用されています。

 

String

camel.rest.component-property

使用中の残りのコンポーネントの追加プロパティーをできるだけ多く設定できます。

 

マップ

camel.rest.consumer-property

使用中の残りの consumer の追加プロパティーをできるだけ多く設定できます。

 

マップ

camel.rest.context-path

REST サービスが使用する主要なコンテキストパスを設定します。これは、デプロイされた Web アプリケーションがコンテキストパスを使用してデプロイされる camel-servlet などのコンポーネントを使用する場合に使用できます。または、HTTP サーバーを含む camel -jetty や camel-netty-http などのコンポーネントの場合。

 

String

camel.rest.cors-headers

カスタム CORS ヘッダーを設定できます。

 

マップ

camel.rest.data-format-property

使用中のデータ形式の追加プロパティーをできるだけ多く設定できます。たとえば、プロパティー prettyPrint を true に設定すると、json がプリティモードで出力されます。オプションが JSON または XML のいずれか、および IN または OUT のいずれか専用であることを示すために、プロパティーに接頭辞を付けることができます。接頭辞は、json.in.、json.out.、xml.in.、xml.outです。たとえば、値が xml.out.mustBeJAXBElement のキーは、送信用の XML データ形式専用です。接頭辞のないキーは、すべての状況で共通のキーです。

 

マップ

camel.rest.enable-cors

HTTP 応答で CORS ヘッダーを有効にするかどうか。デフォルト値は false です。

false

ブール値

camel.rest.endpoint-property

使用中の残りのエンドポイントの追加プロパティーをできるだけ多く設定できます。

 

マップ

camel.rest.host

REST サービスの公開に使用するホスト名。

 

String

camel.rest.host-name-resolver

ホスト名が明示的に設定されていない場合、このリゾルバーは、REST サービスが使用するホスト名を計算するために使用されます。

 

RestHostNameResolver

camel.rest.json-data-format

使用する特定の json データ形式の名前。デフォルトでは json-jackson が使用されます。重要: このオプションは、データ形式のカスタム名を設定するためのものであり、既存のデータ形式インスタンスを参照するためのものではありません。

 

String

camel.rest.port

REST サービスの公開に使用するポート番号。サーブレットコンポーネントを使用する場合は、ここで設定したポート番号は適用されないことに注意してください。使用中のポート番号は、サーブレットコンポーネントが使用している実際のポート番号であるためです。たとえば、Apache Tomcat を使用する場合は Tomcat http ポート、Apache Karaf を使用する場合はデフォルトでポート 8181 を使用する Karaf の HTTP サービスなどです。このような状況では、ここでポート番号を設定すると、ツールと JMX がポート番号を認識できるようになるため、ポート番号をサーブレットエンジンが使用する番号に設定することをお勧めします。

 

String

camel.rest.producer-api-doc

REST producer が REST uri を検証するために使用する API ドキュメント (swagger api) の場所を設定し、API ドキュメントに応じてクエリーパラメーターが有効です。これには、クラスパスに camel-swagger-java を追加する必要があり、設定に誤りがあると、Camel が起動時に失敗し、エラーが報告されます。API ドキュメントの場所はデフォルトでクラスパスから読み込まれますが、file: または http: を使用してリソースを参照し、ファイルまたは http url から読み込むことができます。

 

String

camel.rest.producer-component

REST producer として使用する Camel コンポーネントの名前を設定します。

 

String

camel.rest.scheme

REST サービスの公開に使用するスキーム。通常、http または https がサポートされます。デフォルト値は http です。

 

String

camel.rest.skip-binding-on-error-code

カスタム HTTP エラーコードヘッダーがある場合は、出力でバインディングをスキップするかどうか。これにより、json/xml などにバインドしないカスタムエラーメッセージを作成できます。それ以外の場合は成功メッセージが作成されます。

false

ブール値

camel.rest.use-x-forward-headers

ホストおよび関連する設定に X-Forward ヘッダーを使用するかどうか。デフォルト値は true です。

true

ブール値

camel.rest.xml-data-format

使用する特定の XML データ形式の名前。デフォルトでは jaxb が使用されます。重要: このオプションは、データ形式のカスタム名を設定するためのものであり、既存のデータ形式インスタンスを参照するためのものではありません。

 

String

camel.rest.api-context-id-pattern

非推奨 CamelContext ID パターンを設定して、名前がパターンに一致する CamelContext 内の REST サービスからの Rest API のみを許可します。パターン は CamelContext 名を参照し、現在の CamelContext のみに一致します。その他の値の場合、パターンは PatternHelper#matchPattern (String,String) のルールを使用します。

 

String

camel.rest.api-context-listing

非推奨 JVM で REST サービスを使用して使用可能なすべての CamelContext のリストを有効にするかどうかを設定します。有効にすると、これらのコンテキストを検出できます。false の場合、現在の CamelContext のみが使用されます。

false

ブール値

第76章 XML トークン化

XML Tokenize 言語は camel-xml-jaxp に組み込まれている言語であり、XML ドキュメントを効率的かつ効果的にトークン化するための従来の Tokenize として Split EIP と併用できる、XML を確実に認識する Tokenizer です。

XML Tokenize は、XML 名前空間とドキュメントの階層構造を認識するだけでなく、従来の Tokenize 言語よりも効率的に XML ドキュメントをトークン化することができます。

追加の依存関係

このコンポーネントを使用するには、次のような追加の依存関係が必要です。

<dependency>
    <groupId>org.codehaus.woodstox</groupId>
    <artifactId>woodstox-core-asl</artifactId>
    <version>4.4.1</version>
</dependency>

または

    <dependency>
      <groupId>org.apache.camel.springboot</groupId>
      <artifactId>camel-stax-starter</artifactId>
    </dependency>

76.1. XML Tokenizer のオプション

XML Tokenize 言語は、以下に示す 4 つのオプションをサポートしています。

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

headerName

 

String

メッセージボディーを使用する代わりにトークン化するヘッダーの名前。

mode

 

Enum

抽出モード。使用可能な抽出モードは次のとおりです。i は、抽出されたトークンにコンテキスト名前空間バインディングを注入します (デフォルト)。w は抽出されたトークンをその祖先コンテキストにラップします。u は抽出されたトークンをその子コンテンツにラップ解除します。t は指定された要素のテキストコンテンツを抽出します。

列挙値:

  • i
  • w
  • u
  • t

group

 

Integer

N 個のパーツをグループ化します。

trim

 

ブール値

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

76.2. 例

XML Tokenize 言語を使用した例がある Split EIP を参照してください。

76.3. Spring Boot 自動設定

Spring Boot で xtokenize を使用する場合は、自動設定をサポートするために次の Maven 依存関係を使用してください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-xml-jaxp-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 3 つのオプションをサポートします。

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

camel.language.xtokenize.enabled

xtokenize 言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.xtokenize.mode

抽出モード。使用可能な抽出モードは次のとおりです。i は、抽出されたトークンにコンテキスト名前空間バインディングを注入します (デフォルト)。w は抽出されたトークンをその祖先コンテキストにラップします。u は抽出されたトークンをその子コンテンツにラップ解除します。t は指定された要素のテキストコンテンツを抽出します。

 

String

camel.language.xtokenize.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

第77章 XPath

Camel は XPath をサポートして、 または 述語DSL で使用できるようにします。

たとえば、XPath を使用して、メッセージフィルター で述語を作成したり、受信者リスト の式として使用したりできます。

77.1. XPath 言語オプション

XPath 言語は、以下に示す 10 個のオプションをサポートしています。

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

documentType

 

String

ドキュメントタイプのクラスの名前。デフォルト値は org.w3c.dom.Document です。

resultType

 

Enum

結果タイプ (出力からのタイプ) のクラス名を設定します。デフォルトの結果タイプは NodeSet です。

列挙値:

  • 数値
  • STRING
  • BOOLEAN
  • NODESET
  • NODE

saxon

 

ブール値

Saxon を使用するかどうか。

factoryRef

 

String

レジストリーを検索するためのカスタム XPathFactory を参照します。

objectModel

 

String

使用する XPath オブジェクトモデル。

logNamespaces

 

ブール値

トラブルシューティング時に役立つ名前空間をログに記録するかどうか。

headerName

 

String

メッセージボディーの代わりに入力として使用するヘッダーの名前。

threadSafety

 

ブール値

xpath 式の返された結果に対してスレッドセーフを有効にするかどうか。これは、NODESET を結果の型として使用し、返されたセットに複数の要素がある場合に適用されます。この状況で、並列処理モードの Camel Splitter EIP などから NODESET を同時に処理すると、スレッドセーフの問題が発生する可能性があります。このオプションは、ノードの防衛的コピーを実行して、同時実行の問題を防ぎます。アプリケーションで camel-saxon または Saxon を使用している場合は、このオプションをオンにすることをお勧めします。Saxon には、このオプションをオンにすることで防止できるスレッドセーフの問題があります。

preCompile

 

ブール値

初期化フェーズ中に xpath 式のプリコンパイルを有効にするかどうか。プリコンパイルはデフォルトで有効になっています。これは、たとえば、アプリケーションが事前にコンパイルされている場合 (たとえば camel-quarkus を使用) など、開始フェーズでコンパイルフェーズが必要な場合にオフにするために使用できるので、JVM ランタイムではなくビルドされたオペレーティングシステムの xpath ファクトリーがロードされます。

trim

 

ブール値

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

77.2. Namespaces

Namespaces ヘルパークラスを使用すると、XPath 式で名前空間を簡単に使用できます。

77.3. 変数

XPath の変数は、異なる名前空間で定義されています。デフォルトの名前空間は http://camel.apache.org/schema/spring です。

名前空間 URIローカルの部分タイプ説明

http://camel.apache.org/xml/in/

in

メッセージ

メッセージ

http://camel.apache.org/xml/out/

out

メッセージ

廃止: 出力メッセージは廃止されたため使用しないでください。

http://camel.apache.org/xml/function/

関数

オブジェクト

追加機能

http://camel.apache.org/xml/variables/environment-variables

env

Object

OS 環境変数

http://camel.apache.org/xml/variables/system-properties

system

Object

Java System プロパティー

http://camel.apache.org/xml/variables/exchange-property

 

Object

Exchange プロパティー

Camel は次のいずれかに従って変数を解決します。

  • 名前空間が指定されている場合
  • 名前空間が指定されていない場合

77.3.1. 名前空間が指定されている場合

名前空間が指定されている場合には、Camel には返す内容が正確に指示されます。ただし、解決するとき、Camel は最初に指定されたローカル部分でヘッダーを解決して返そうとします。ローカル部分の値が body の場合には、代わりに body が返されます。

77.3.2. 名前空間が指定されていない場合

名前空間が指定されていない場合、Camel はローカル部分のみに基づいて解決します。Camel は、次の手順で変数を解決しようとします。

  • variable(name, value) Fulent Builder を使用して設定された 変数 から
  • キーが指定されたヘッダーがある場合の message.in.header から
  • キーが指定されたプロパティーがある場合の exchange.properties から

77.4. 関数

Camel は、交換へのアクセスに使用できる次の XPath 関数を追加します。

機能引数タイプ説明

in:body

none

オブジェクト

メッセージボディーを返します。

in:header

ヘッダー名

オブジェクト

メッセージヘッダーを返します。

out:body

none

オブジェクト

deprecated は、OUT メッセージボディーを返します。

out:header

ヘッダー名

オブジェクト

deprecated は、out メッセージヘッダーを返します。

function:properties

プロパティーの鍵

String

. を使用します。

function:simple

Simple 式

オブジェクト

言語を評価します。

注記

function:properties および function:simple は、Split EIP で使用する場合など、戻り値の型が NodeSet の場合はサポートされません。

これらの関数の使用例を次に示します。

77.4.1. 関数の例

Spring XML ファイルでルートを設定する場合は、次のように XPath 式を使用できます。

<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://activemq.apache.org/camel/schema/spring"
                xmlns:foo="http://example.com/person">
    <route>
      <from uri="activemq:MyQueue"/>
      <filter>
        <xpath>/foo:person[@name='James']</xpath>
        <to uri="mqseries:SomeOtherQueue"/>
      </filter>
    </route>
  </camelContext>
</beans>

名前空間接頭辞 (この場合は foo) を XPath 式で再利用して、名前空間ベースの XPath 式をより簡単にする方法に注目してください。

77.5. ストリームベースのメッセージボディー

メッセージボディーがストリームベースの場合、受信した入力はストリームとして Camel に送信されます。つまり、ストリームのコンテンツを 一度 だけ読み取ることができます。そのため、XPath をメッセージフィルターまたはコンテンツベースのルーターとして使用する場合に、データに複数回アクセスする必要があることが頻繁にあります。そのため、ストリームキャッシングを使用するかメッセージボディーを安全に複数回再読み取りできる 文字列 に変換する必要があります。

from("queue:foo").
  filter().xpath("//foo")).
  to("queue:bar")
from("queue:foo").
  choice().xpath("//foo")).to("queue:bar").
  otherwise().to("queue:others");

77.6. 結果タイプの設定

XPath 式は、org.w3c.dom.NodeList などのネイティブ XML オブジェクトを使用して結果の型を返します。ただし、多くの場合、結果の型を String にすることがあります。これを行うには、使用する結果の型を XPath に指示する必要があります。

Java DSL で:

xpath("/foo:person/@id", String.class)

XML DSL では、resultType 属性を使用して完全修飾クラス名を提供します。

<xpath resultType="java.lang.String">/foo:person/@id</xpath>
注記

java.lang のクラスは FQN 名を省略できるため、resultType="String" を使用できます。

@XPath アノテーションの使用:

@XPath(value = "concat('foo-',//order/name/)", resultType = String.class) String name)

xpath 関数 concat を使用して、注文名の前に foo- を付けます。この場合、結果の型として String が必要であることを指定する必要があるため、concat 関数が機能します。

77.7. ヘッダーでの XPath の使用

一部のユーザーは、XML をヘッダーに格納している場合があります。XPath をヘッダーの値に適用するには、'headerName' 属性を定義することで対応できます。

<xpath headerName="invoiceDetails">/invoice/@orderType = 'premium'</xpath>

また、Java DSL では、次に示すように、headerName を 2 番目のパラメーターとして指定します。

xpath("/invoice/@orderType = 'premium'", "invoiceDetails")

77.8. 例

Message Filter で XPath 式を述語として使用する簡単な例を次に示します。

from("direct:start")
    .filter().xpath("/person[@name='James']")
        .to("mock:result");

XML では次のようになります

<route>
  <from uri="direct:start"/>
  <filter>
    <xpath>/person[@name='James']</xpath>
    <to uri="mock:result"/>
  </filter>
</route>

77.9. 名前空間の使用

使用する名前空間の標準セットがあり、それらを多くの XPath 式で共有する場合は、次のように Java DSL を使用するときに org.apache.camel.support.builder.Namespaces を使用できます。

Namespaces ns = new Namespaces("c", "http://acme.com/cheese");

from("direct:start")
    .filter(xpath("/c:person[@name='James']", ns))
        .to("mock:result");

2 番目のパラメーターとして渡される ns 変数を使用して、名前空間が xpath にどのように提供されるかに注意してください。

各名前空間はキー=値のペアで、この場合に接頭辞がキーです。XPath 式では、名前空間はその接頭辞によって使用されます。たとえば、次のようになります。

/c:person[@name='James']

名前空間ビルダーは、次のように複数の名前空間の追加をサポートしています。

Namespaces ns = new Namespaces("c", "http://acme.com/cheese")
                     .add("w", "http://acme.com/wine")
                     .add("b", "http://acme.com/beer");

XML DSL で名前空間を使用する場合は、XML ルートタグ (または camelContextroutesroute タグの 1 つ) で名前空間を設定するため、異なります。

以下の XML の例では、Spring XML を使用します。この名前空間は、ルートタグ beansxmlns:foo="http://example.com/person" の行で宣言されています。

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:foo="http://example.com/person"
       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 xmlns="http://camel.apache.org/schema/spring">
    <route>
      <from uri="direct:start"/>
      <filter>
        <xpath logNamespaces="true">/foo:person[@name='James']</xpath>
        <to uri="mock:result"/>
      </filter>
    </route>
  </camelContext>

</beans>

この名前空間は接頭辞として foo を使用するため、<xpath> 式は /foo: を使用してこの名前空間を使用します。

77.10. Bean 統合のための @XPath アノテーションの使用

Bean インテグレーション を使用して Bean のメソッドを呼び出す場合、@XPath (他の 言語も使用可) を使用してメッセージから値を抽出し、メソッドパラメーターにバインドすることができます。

注記

デフォルトの @XPath アノテーションには、SOAP および XML 名前空間が使用可能です。

public class Foo {

    @Consume(uri = "activemq:my.queue")
    public void doSomething(@XPath("/person/@name") String name, String xml) {
        // process the inbound message here
    }
}

77.11. Exchange なしで XPathBuilder を使用する

Exchange を必要とせずに org.apache.camel.language.xpath.XPathBuilder を使用できるようになりました。これは、カスタム XPath 評価を行うためのヘルパーとして使用する場合に便利です。

XPathBuilder 内の可動部分の多くは Camel Type Converter へのアクセスを必要とするため、CamelContext を渡す必要があり、これが CamelContext が必要となる理由です。

たとえば、次のようなことができます。

boolean matches = XPathBuilder.xpath("/foo/bar/@xyz").matches(context, "<foo><bar xyz='cheese'/></foo>"));

これは、指定された述語に一致します。

次の 3 つの例に示すように評価することもできます。

String name = XPathBuilder.xpath("foo/bar").evaluate(context, "<foo><bar>cheese</bar></foo>", String.class);
Integer number = XPathBuilder.xpath("foo/bar").evaluate(context, "<foo><bar>123</bar></foo>", Integer.class);
Boolean bool = XPathBuilder.xpath("foo/bar").evaluate(context, "<foo><bar>true</bar></foo>", Boolean.class);

文字列 の結果で評価することは一般的な要件で、さらに簡素化します。

String name = XPathBuilder.xpath("foo/bar").evaluate(context, "<foo><bar>cheese</bar></foo>");

77.12. XPathBuilder での Saxon の使用

プロジェクトへの依存関係として camel-saxon を追加する必要があります。

XPathBuilder で Saxon を使用する方が簡単になりました。以下に示すように、いくつかの方法で実行できます。

  • カスタム XPathFactory の使用
  • ObjectModel の使用

77.12.1. システムプロパティーを使用したカスタム XPathFactory の設定

Camel は、使用するカスタム XPathFactory を設定するために使用できる JVM システムプロパティー javax.xml.xpath.XPathFactory の読み取りをサポートするようになりました。

この単体テストは、代わりに Saxon を使用するために実行する内容を説明しています。

次のようなデフォルト以外の XPathFactory を使用する場合、Camel は INFO レベルでログを記録します。

XPathBuilder  INFO  Using system property javax.xml.xpath.XPathFactory:http://saxon.sf.net/jaxp/xpath/om with value:
                    net.sf.saxon.xpath.XPathFactoryImpl when creating XPathFactory

Apache Xerces を使用するには、システムプロパティーを設定できます。

-Djavax.xml.xpath.XPathFactory=org.apache.xpath.jaxp.XPathFactoryImpl

77.12.2. XML DSL からの Saxon の有効化

Java DSL と同様に、XML DSL から Saxon を有効にするには、次の 3 つのオプションがあります。

カスタムファクトリーを参照する場合:

<xpath factoryRef="saxonFactory" resultType="java.lang.String">current-dateTime()</xpath>

そして、ファクトリーで Bean を宣言します。

<bean id="saxonFactory" class="net.sf.saxon.xpath.XPathFactoryImpl"/>

オブジェクトモデルの指定:

<xpath objectModel="http://saxon.sf.net/jaxp/xpath/om" resultType="java.lang.String">current-dateTime()</xpath>

推奨されるアプローチは、次のように saxon=true を設定することです。

<xpath saxon="true" resultType="java.lang.String">current-dateTime()</xpath>

77.13. デバッグを支援する名前空間の監査

ユーザーが頻繁に直面するXPath 関連の問題の多くは、名前空間の使用に関連しまs.メッセージに存在する名前空間と、XPath 式が認識または参照している名前空間との間に、多少のずれがある場合があります。XPath の述語または式において、名前空間の問題が原因で XML 要素と属性を見つけることができない場合は、実際には名前空間の定義が不足しているだけにも関わらず、機能していない ように見える場合があります。

XML の名前空間は必ず必要で、ある操作を実装して名前空間を自動的に接続することで使用方法を簡素化することができるといいのですが、実際は、このような道筋をたどったアクションは、標準に反してしまい、相互運用性が確保しにくくなります。

したがって、XPath 式言語に 2 つの新機能を追加して、述語と式の両方からアクセスできるようして、このような問題のデバッグを支援することがこちらで最大限提供できる内容です。

77.13.1. XPath 式/述語の名前空間コンテキストのログ記録

内部プールで新しい XPath 式が作成されるたびに、Camel は式の名前空間コンテキストを org.apache.camel.language.xpath.XPathBuilder ロガーに記録します。Camel は Namespace Context を階層的な方法 (親子関係) で表すため、ツリー全体が次の形式で再帰的に出力されます。

[me: {prefix -> namespace}, {prefix -> namespace}], [parent: [me: {prefix -> namespace}, {prefix -> namespace}], [parent: [me: {prefix -> namespace}]]]

これらのオプションのいずれかを使用して、このログを有効にできます。

  • org.apache.camel.language.xpath.XPathBuilder ロガー、または org.apache.camel やルートロガーなどの親ロガーで TRACE ロギングを有効にします。
  • 次のセクションで示すように、logNamespaces オプションを有効にします。この場合、ログは INFO レベルで行われます。

77.13.2. 名前空間の監査

Camel は、XPath 式を評価する前に、すべての受信メッセージに存在する全名前空間を検出してダンプすることができ、可能性のある名前空間の問題を分析して特定するために必要な豊富な情報をすべて提供します。

これを実現するために、別の特別に調整された XPath 式を内部的に使用して、メッセージに表示されるすべての名前空間マッピングを抽出し、個々のマッピングごとに接頭辞と完全な名前空間 URI を表示します。

考慮すべき点:

  • 暗黙的な XML 名前空間 (xmlns:xml="http://www.w3.org/XML/1998/namespace") は値を追加しないため、出力から除外されます。
  • デフォルトの名前空間は、出力の DEFAULT キーワードの下に一覧表示されます
  • 名前空間は異なるスコープで再マッピングできることに注意してください。最上位の a 接頭辞を考えてみてください。これは、内部要素で別の名前空間または内部スコープで変わるデフォルトの名前空間を割り当てることができます。検出された接頭辞ごとに、関連付けられているすべての URI が一覧表示されます。

このオプションは、Java DSL および XML DSL で有効にできます。

Java DSL の場合

XPathBuilder.xpath("/foo:person/@id", String.class).logNamespaces()

XML DSL の場合

<xpath logNamespaces="true" resultType="String">/foo:person/@id</xpath>

監査の結果は、org.apache.camel.language.xpath.XPathBuilder ロガーの下の INFO レベルに表示され、次のようになります。

2012-01-16 13:23:45,878 [stSaxonWithFlag] INFO  XPathBuilder  - Namespaces discovered in message:
{xmlns:a=[http://apache.org/camel], DEFAULT=[http://apache.org/default],
xmlns:b=[http://apache.org/camelA, http://apache.org/camelB]}

77.14. 外部リソースからスクリプトを読み込み

スクリプトを外部化して、"classpath:""file:"、または "http:" などのリソースから Camel に読み込むことができます。これは、"resource:scheme:location" の構文を使用して行われます。たとえば、クラスパス上のファイルを参照するには、以下を実行します。

.setHeader("myHeader").xpath("resource:classpath:myxpath.txt", String.class)

77.15. 依存関係

camel ルートで XPath を使用するには、XPath 言語を実装する camel-xpath に依存関係を追加する必要があります。

Maven を使用する場合は、pom.xml に以下を追加するだけで、バージョン番号を最新かつ最高のリリースに置き換えます (最新バージョンのダウンロードページを参照してください)。

<dependency>
  <groupId>org.apache.camel</groupId>
  <artifactId>camel-xpath</artifactId>
  <version>{CamelSBProjectVersion}</version>
</dependency>

77.16. Spring Boot 自動設定

Spring Boot で xpath を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-xpath-starter</artifactId>
  <version>{CamelSBVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

このコンポーネントは、以下に示す 9 のオプションをサポートします。

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

camel.language.xpath.document-type

ドキュメントタイプのクラスの名前。デフォルト値は org.w3c.dom.Document です。

 

String

camel.language.xpath.enabled

xpath 言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。

 

ブール値

camel.language.xpath.factory-ref

レジストリーを検索するためのカスタム XPathFactory を参照します。

 

String

camel.language.xpath.log-namespaces

トラブルシューティング時に役立つ名前空間をログに記録するかどうか。

false

ブール値

camel.language.xpath.object-model

使用する XPath オブジェクトモデル。

 

String

camel.language.xpath.pre-compile

初期化フェーズ中に xpath 式のプリコンパイルを有効にするかどうか。プリコンパイルはデフォルトで有効になっています。これは、たとえば、アプリケーションが事前にコンパイルされている場合 (たとえば camel-quarkus を使用) など、開始フェーズでコンパイルフェーズが必要な場合にオフにするために使用できるので、JVM ランタイムではなくビルドされたオペレーティングシステムの xpath ファクトリーがロードされます。

true

ブール値

camel.language.xpath.saxon

Saxon を使用するかどうか。

false

ブール値

camel.language.xpath.thread-safety

xpath 式の返された結果に対してスレッドセーフを有効にするかどうか。これは、NODESET を結果の型として使用し、返されたセットに複数の要素がある場合に適用されます。この状況で、並列処理モードの Camel Splitter EIP などから NODESET を同時に処理すると、スレッドセーフの問題が発生する可能性があります。このオプションは、ノードの防衛的コピーを実行して、同時実行の問題を防ぎます。アプリケーションで camel-saxon または Saxon を使用している場合は、このオプションをオンにすることをお勧めします。Saxon には、このオプションをオンにすることで防止できるスレッドセーフの問題があります。

false

ブール値

camel.language.xpath.trim

値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。

true

ブール値

第78章 Openapi Java

Rest DSL は、OpenApi を使用して REST サービスとその API を公開するために使用される camel-openapi-java モジュールと統合できます。

Maven ユーザーは、このコンポーネントの pom.xml に以下の依存関係を追加する必要があります。

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-openapi-java</artifactId>
    <version>{CamelSBProjectVersion}</version>
    <!-- use the same version as your Camel core version -->
</dependency>

camel-openapi-java モジュールは、REST コンポーネントから使用できます (サーブレットは必要ありません)。

78.1. rest-dsl での OpenApi の使用

以下に示すように、apiContextPath dsl を設定して、rest-dsl から OpenApi API を有効にすることができます。

public class UserRouteBuilder extends RouteBuilder {
    @Override
    public void configure() throws Exception {
        // configure we want to use servlet as the component for the rest DSL
        // and we enable json binding mode
        restConfiguration().component("netty-http").bindingMode(RestBindingMode.json)
            // and output using pretty print
            .dataFormatProperty("prettyPrint", "true")
            // setup context path and port number that netty will use
            .contextPath("/").port(8080)
            // add OpenApi api-doc out of the box
            .apiContextPath("/api-doc")
                .apiProperty("api.title", "User API").apiProperty("api.version", "1.2.3")
                // and enable CORS
                .apiProperty("cors", "true");

        // this user REST service is json only
        rest("/user").description("User rest service")
            .consumes("application/json").produces("application/json")
            .get("/{id}").description("Find user by id").outType(User.class)
                .param().name("id").type(path).description("The id of the user to get").dataType("int").endParam()
                .to("bean:userService?method=getUser(${header.id})")
            .put().description("Updates or create a user").type(User.class)
                .param().name("body").type(body).description("The user to update or create").endParam()
                .to("bean:userService?method=updateUser")
            .get("/findAll").description("Find all users").outType(User[].class)
                .to("bean:userService?method=listUsers");
    }
}

78.2. オプション

OpenApi モジュールは、次のオプションを使用して設定できます。サーブレットを使用して設定するには、上記のように init-param を使用します。rest-dsl で直接設定する場合は、enableCORShost,contextPath、dsl などの適切なメソッドを使用します。api.xxx のオプションは、apiProperty dsl を使用して設定されます。

オプションタイプ説明

cors

Boolean

CORS を有効にするかどうか。これにより、REST サービスへの実際のアクセスではなく、API ブラウザーの CORS のみが有効になることに注意してください。デフォルトは false です。

openapi.version

String

OpenApi 仕様バージョン。デフォルトは 3.0 です。

host

String

ホスト名を設定します。設定されていない場合には、camel-openapi-java は名前を localhost ベースとして計算します。

schemes

String

使用するプロトコルスキーム。複数の値は、"http,https" のようにコンマで区切ることができます。デフォルト値は「http」です。

base.path

String

必須: REST サービスを利用できるベースパスを設定します。パスは相対パス (例: http/https で始まらない) であり、camel-openapi-java は実行時に絶対ベースパスを計算します (protocol://host:port/context-path/base.path)。

api.path

String

API が利用可能なパスを設定します (例:/api-docs)。パスは相対パス (例: http/https で始まらない) であり、camel-openapi-java は実行時に絶対ベースパスを計算します。このパスは protocol://host:port/context-path/api.path で、相対パスを使用するほうがはるかに簡単です。例については、上記を参照してください。

api.version

String

API のバージョン。デフォルトは 0.0.0 です。

api.title

String

アプリケーションの名前。

api.description

String

アプリケーションの簡単な説明。

api.termsOfService

String

API の利用規約への URL。

api.contact.name

String

連絡先に使用する個人または組織の名前

api.contact.email

String

API 関連の連絡に使用するメール。

api.contact.url

String

API 関連の問い合わせ先の Web サイトへの URL。

api.license.name

String

API に適用されるライセンス名。

api.license.url

String

API に使用されるライセンスへの URL。

78.3. API ドキュメントにセキュリティー定義を追加する

Rest DSL は、生成された API ドキュメントでの OpenApi securityDefinitions の宣言をサポートするようになりました。たとえば、次のようになります。

rest("/user").tag("dude").description("User rest service")
    // setup security definitions
    .securityDefinitions()
        .oauth2("petstore_auth").authorizationUrl("http://petstore.swagger.io/oauth/dialog").end()
        .apiKey("api_key").withHeader("myHeader").end()
    .end()
    .consumes("application/json").produces("application/json")

ここでは、2 つのセキュリティー定義を設定しています。

  • OAuth2 - 提供された URL による暗黙の承認
  • API キー - myHeader という名前の HTTP ヘッダーに由来する API キーを使用

次に、キー (petstore_auth または api_key) を参照して、使用するセキュリティーを残りの操作で指定する必要があります。

.get("/{id}/{date}").description("Find user by id and date").outType(User.class)
    .security("api_key")

...

.put().description("Updates or create a user").type(User.class)
    .security("petstore_auth", "write:pets,read:pets")

ここで、get 操作は Api Key セキュリティーを使用しており、put 操作は読み取りおよび書き込み PET の許可範囲で OAuth セキュリティーを使用しています。

78.4. JSON または Yaml

camel-openapi-java モジュールは、そのままで JSON と Yaml の両方をサポートします。/openapi.json または/openapi.yaml のいずれかを使用して、返されるものを要求 URL で指定できます。何も指定されていない場合は、HTTP Accept ヘッダーを使用して、json または yaml を受け入れることができるかどうかを検出します。両方が受け入れられるか、いずれも受け入れられるように設定されていない場合、json がデフォルト形式として返されます。

78.5. useXForwardHeaders と API URL 解決

OpenApi 仕様では、API を提供するホスト、ポート、およびパスを指定できます。OpenApi V2 ではこれは host フィールドを介して行われ、OpenAPI V3 では servers フィールドの一部です。

デフォルトでは、これらのフィールドの値は X-Forwarded ヘッダー、X-Forwarded-Host および X-Forwarded-Proto によって決定されます。

これは、X-Forwarded ヘッダーの検索を無効にし、REST 設定で独自のホスト、ポート、スキームを指定することでオーバーライドできます。

restConfiguration().component("netty-http")
    .useXForwardHeaders(false)
    .apiProperty("schemes", "https");
    .host("localhost")
    .port(8080);

78.6. 例

Apache Camel ディストリビューションでは、この OpenApi コンポーネントの使用方法を示す camel-example-openapi-cdicamel-example-spring-boot-rest-openapi-simple を同梱しています。

78.7. Spring Boot 自動設定

Spring Boot で openapi-java を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。

<dependency>
  <groupId>org.apache.camel.springboot</groupId>
  <artifactId>camel-openapi-java-starter</artifactId>
  <version>{CamelSBProjectVersion}</version>
  <!-- Use your Camel Spring Boot version -->
</dependency>

コンポーネントは、以下に記載される 1 のオプションをサポートします。

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

camel.openapi.enabled

Camel Rest DSL がその OpenAPI (例: swagger doc) を Spring Boot に自動的に登録できるようにすることで、SpringDoc などのツールを Camel と統合できます。

true

ブール値

法律上の通知

Copyright © 2023 Red Hat, Inc.
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, the Red Hat logo, JBoss, OpenShift, Fedora, the Infinity logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
Node.js® is an official trademark of Joyent. Red Hat is not formally related to or endorsed by the official Joyent Node.js open source or commercial project.
The OpenStack® Word Mark and OpenStack logo are either registered trademarks/service marks or trademarks/service marks of the OpenStack Foundation, in the United States and other countries and are used with the OpenStack Foundation's permission. We are not affiliated with, endorsed or sponsored by the OpenStack Foundation, or the OpenStack community.
All other trademarks are the property of their respective owners.