Camel Spring Boot リファレンス 3.14
Camel Spring Boot リファレンス
fuse-docs-support@redhat.com
Integration Support Team
http://access.redhat.com/support 概要
はじめに
多様性を受け入れるオープンソースの強化
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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
1.3. コンポーネントオプション
AWS CloudWatch コンポーネントは、以下に示す 18 のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| amazonCwClient (プロデューサー) | Autowired: AmazonCloudWatch をクライアントとして使用します。 | CloudWatchClient | |
| configuration (producer) | コンポーネントの設定。 | Cw2Configuration | |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| name (producer) | メトリクス名。 | String | |
| overrideEndpoint (プロデューサー) | エンドポイントをオーバーライドする必要性を設定します。このオプションは uriEndpointOverride オプションと併用する必要があります。 | false | boolean |
| proxyHost (プロデューサー) | CW クライアントをインスタンス化する際にプロキシーホストを定義します。 | String | |
| proxyPort (プロデューサー) | CW クライアントをインスタンス化する際にプロキシーポートを定義します。 | Integer | |
| proxyProtocol (producer) | CW クライアントをインスタンス化する際にプロキシープロトコルを定義します。 列挙値:
| HTTPS | Protocol |
| region (producer) | CW クライアントが機能する必要があるリージョン。このパラメーターを使用する場合、設定には小文字のリージョン名を指定します (例 ap-east-1)。名前 Region.EU_WEST_1.id() を使用する必要があります。 | String | |
| timestamp (プロデューサー) | メトリクスのタイムスタンプ。 | Instant | |
| trustAllCertificates (プロデューサー) | エンドポイントをオーバーライドするときにすべての証明書を信頼する場合。 | false | boolean |
| unit (producer) | メトリクスユニット。 | String | |
| uriEndpointOverride (プロデューサー) | オーバーライドする 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 (セキュリティー) | 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 (プロデューサー) | Autowired: AmazonCloudWatch をクライアントとして使用します。 | CloudWatchClient | |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| name (producer) | メトリクス名。 | String | |
| overrideEndpoint (プロデューサー) | エンドポイントをオーバーライドする必要性を設定します。このオプションは uriEndpointOverride オプションと併用する必要があります。 | false | boolean |
| proxyHost (プロデューサー) | CW クライアントをインスタンス化する際にプロキシーホストを定義します。 | String | |
| proxyPort (プロデューサー) | CW クライアントをインスタンス化する際にプロキシーポートを定義します。 | Integer | |
| proxyProtocol (producer) | CW クライアントをインスタンス化する際にプロキシープロトコルを定義します。 列挙値:
| HTTPS | Protocol |
| region (producer) | CW クライアントが機能する必要があるリージョン。このパラメーターを使用する場合、設定には小文字のリージョン名を指定します (例 ap-east-1)。名前 Region.EU_WEST_1.id() を使用する必要があります。 | String | |
| timestamp (プロデューサー) | メトリクスのタイムスタンプ。 | Instant | |
| trustAllCertificates (プロデューサー) | エンドポイントをオーバーライドするときにすべての証明書を信頼する場合。 | false | boolean |
| unit (producer) | メトリクスユニット。 | String | |
| uriEndpointOverride (プロデューサー) | オーバーライドする URI エンドポイントを設定します。このオプションは overrideEndpoint オプションと組み合わせて使用する必要があります。 | String | |
| useDefaultCredentialsProvider (producer) | デフォルトのクレデンシャルプロバイダー経由でクレデンシャルをロードすること、または静的クレデンシャルが渡されることを S3 クライアントは想定すべきかどうかを設定します。 | false | boolean |
| value (producer) | メトリクス値。 | double | |
| accessKey (security) | Amazon AWS Access Key。 | String | |
| secretKey (セキュリティー) | 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 プロデューサーによって評価されるメッセージヘッダー
| ヘッダー | タイプ | 説明 |
|---|---|---|
|
|
| Amazon CW メトリクス名。 |
|
|
| Amazon CW メトリクス値。 |
|
|
| Amazon CW メトリクスユニット。 |
|
|
| Amazon CW メトリクス namespace。 |
|
|
| Amazon CW メトリクスのタイムスタンプ。 |
|
|
| Amazon CW メトリクスディメンション名。 |
|
|
| Amazon CW メトリクスディメンション値。 |
|
|
| ディメンション名とディメンション値のマップ。 |
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. プロデューサーの例
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>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に記載される 19 のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| 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 | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
2.3. コンポーネントオプション
AWS DynamoDB コンポーネントは 22 のオプションをサポートします。これは以下に記載されています。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| amazonDDBClient (producer) | Autowired: AmazonDynamoDB をクライアントとして使用します。 | DynamoDbClient | |
| configuration (producer) | コンポーネントの設定。 | Ddb2Configuration | |
| consistentRead (プロデューサー) | データの読み取り時に強力な整合性を適用するべきかどうかを決定します。 | false | boolean |
| enabledInitialDescribeTable (プロデューサー) | DDB エンドポイントの最初の Describe テーブル操作を行うべきかどうかを設定します。 | true | boolean |
| keyAttributeName (producer) | テーブルの作成時の属性名。 | String | |
| keyAttributeType (producer) | テーブル作成時の属性タイプ。 | String | |
| keyScalarType (プロデューサー) | キースケーラータイプ。S (String)、N (Number)、および B (Bytes) にすることができます。 | String | |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| operation (producer) | 実行する操作。 列挙値:
| PutItem | Ddb2Operations |
| overrideEndpoint (プロデューサー) | エンドポイントをオーバーライドする必要性を設定します。このオプションは uriEndpointOverride オプションと併用する必要があります。 | false | boolean |
| proxyHost (プロデューサー) | DDB クライアントをインスタンス化する際にプロキシーホストを定義します。 | String | |
| proxyPort (プロデューサー) | DynamoDB クライアントが機能する必要があるリージョン。このパラメーターを使用する場合、設定には小文字のリージョン名を指定します (例 ap-east-1)。名前 Region.EU_WEST_1.id() を使用する必要があります。 | Integer | |
| proxyProtocol (producer) | DDB クライアントをインスタンス化する際にプロキシープロトコルを定義します。 列挙値:
| HTTPS | Protocol |
| readCapacity (プロデューサー) | テーブルからリソースを読み取るために予約するプロビジョニングされたスループット。 | Long | |
| region (producer) | DDB クライアントが機能する必要があるリージョン。 | String | |
| trustAllCertificates (プロデューサー) | エンドポイントをオーバーライドするときにすべての証明書を信頼する場合。 | false | boolean |
| uriEndpointOverride (プロデューサー) | オーバーライドする URI エンドポイントを設定します。このオプションは overrideEndpoint オプションと組み合わせて使用する必要があります。 | String | |
| useDefaultCredentialsProvider (producer) | デフォルトのクレデンシャルプロバイダー経由でクレデンシャルをロードすること、または静的クレデンシャルが渡されることを S3 クライアントは想定すべきかどうかを設定します。 | false | boolean |
| writeCapacity (プロデューサー) | テーブルにリソースを書き込むために予約するプロビジョニングされたスループット。 | Long | |
| autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
| accessKey (security) | Amazon AWS Access Key。 | String | |
| secretKey (セキュリティー) | Amazon AWS Secret Key。 | String |
2.4. エンドポイントオプション
AWS DynamoDB エンドポイントは、URI 構文を使用して設定します。
aws2-ddb:tableName
パスおよびクエリーパラメーターを使用します。
2.4.1. パスパラメーター(1 パラメーター)
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| tableName (プロデューサー) | 必須。現在作業中のテーブルの名前。 | String |
2.4.2. クエリーパラメーター(20 パラメーター)
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| amazonDDBClient (producer) | Autowired: AmazonDynamoDB をクライアントとして使用します。 | DynamoDbClient | |
| consistentRead (プロデューサー) | データの読み取り時に強力な整合性を適用するべきかどうかを決定します。 | false | boolean |
| enabledInitialDescribeTable (プロデューサー) | DDB エンドポイントの最初の Describe テーブル操作を行うべきかどうかを設定します。 | true | boolean |
| keyAttributeName (producer) | テーブルの作成時の属性名。 | String | |
| keyAttributeType (producer) | テーブル作成時の属性タイプ。 | String | |
| keyScalarType (プロデューサー) | キースケーラータイプ。S (String)、N (Number)、および B (Bytes) にすることができます。 | String | |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| operation (producer) | 実行する操作。 列挙値:
| PutItem | Ddb2Operations |
| overrideEndpoint (プロデューサー) | エンドポイントをオーバーライドする必要性を設定します。このオプションは uriEndpointOverride オプションと併用する必要があります。 | false | boolean |
| proxyHost (プロデューサー) | DDB クライアントをインスタンス化する際にプロキシーホストを定義します。 | String | |
| proxyPort (プロデューサー) | DynamoDB クライアントが機能する必要があるリージョン。このパラメーターを使用する場合、設定には小文字のリージョン名を指定します (例 ap-east-1)。名前 Region.EU_WEST_1.id() を使用する必要があります。 | Integer | |
| proxyProtocol (producer) | DDB クライアントをインスタンス化する際にプロキシープロトコルを定義します。 列挙値:
| HTTPS | Protocol |
| readCapacity (プロデューサー) | テーブルからリソースを読み取るために予約するプロビジョニングされたスループット。 | Long | |
| region (producer) | DDB クライアントが機能する必要があるリージョン。 | String | |
| trustAllCertificates (プロデューサー) | エンドポイントをオーバーライドするときにすべての証明書を信頼する場合。 | false | boolean |
| uriEndpointOverride (プロデューサー) | オーバーライドする URI エンドポイントを設定します。このオプションは overrideEndpoint オプションと組み合わせて使用する必要があります。 | String | |
| useDefaultCredentialsProvider (producer) | デフォルトのクレデンシャルプロバイダー経由でクレデンシャルをロードすること、または静的クレデンシャルが渡されることを S3 クライアントは想定すべきかどうかを設定します。 | false | boolean |
| writeCapacity (プロデューサー) | テーブルにリソースを書き込むために予約するプロビジョニングされたスループット。 | Long | |
| accessKey (security) | Amazon AWS Access Key。 | String | |
| secretKey (セキュリティー) | 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 プロデューサーによって評価されるメッセージヘッダー
| ヘッダー | タイプ | 説明 |
|---|---|---|
|
|
| プライマリーキーによって取得するテーブル名と対応する項目のマップ。 |
|
|
| この操作のテーブル名。 |
|
|
| テーブル内の各項目を一意に識別するプライマリーキー。 |
|
|
| 変更前または変更後の属性の名前および値のペアを取得する場合は、このパラメーターを使用します (NONE、ALL_OLD、UPDATED_OLD、ALL_NEW、UPDATED_NEW)。 |
|
|
| 条件変更の属性を指定します。 |
|
|
| 属性名が指定されていない場合、すべての属性が返されます。 |
|
|
| true に設定すると、一貫性のある読み取りが発行されます。それ以外の場合は、最終的に一貫性が使用されます。 |
|
|
| 設定されている場合、クエリー操作のセカンダリーインデックスとして使用されます。 |
|
|
| アイテムの属性のマップ。アイテムを定義するプライマリーキー値を含める必要があります。 |
|
|
| true に設定すると、Amazon DynamoDB は、一致する項目とその属性のリストではなく、クエリーパラメーターに一致する項目の総数を返します。 |
|
|
| このヘッダーはクエリーの選択基準を指定し、2 つの古いヘッダー CamelAwsDdbHashKeyValue および CamelAwsDdbScanRangeKeyCondition をマージします。 |
|
|
| 以前のクエリーを続行するアイテムのプライマリーキー。 |
|
|
| 複合プライマリーキーのハッシュコンポーネントの値。 |
|
|
| 返すアイテムの最大数。 |
|
|
| クエリーに使用する属性値および比較 Operator のコンテナー。 |
|
|
| インデックスの順方向または逆方向のトラバーサルを指定します。 |
|
|
| スキャン結果を評価し、目的の値のみを返します。 |
|
|
| 更新の新しい値とアクションへの属性名のマップ。 |
2.5.3. BatchGetItems 操作中に設定されたメッセージヘッダー
| ヘッダー | タイプ | 説明 |
|---|---|---|
|
|
| テーブル名およびテーブルの各項目属性。 |
|
|
| テーブルのマップと、現在の応答で処理されなかった対応するキーが含まれます。 |
2.5.4. DeleteItem 操作時に設定されたメッセージヘッダー
| ヘッダー | タイプ | 説明 |
|---|---|---|
|
|
| 操作によって返される属性の一覧。 |
2.5.5. DeleteTable 操作時に設定されたメッセージヘッダー
| ヘッダー | タイプ | 説明 |
|---|---|---|
|
| ||
|
| このテーブルの ProvisionedThroughput プロパティーの値 | |
|
|
| このテーブルの DateTime の作成。 |
|
|
| このテーブルのアイテム数。 |
|
|
| このテーブルのプライマリーキーを識別する KeySchema。Camel 2.16.0 以降、このヘッダーのタイプは List<KeySchemaElement> であり、KeySchema ではありません。 |
|
|
| テーブル名。 |
|
|
| テーブルサイズ(バイト単位)。 |
|
|
| テーブルのステータス: CREATING、UPDATING、DELETING、ACTIVE |
2.5.6. DescribeTable 操作中に設定されたメッセージヘッダー
| ヘッダー | タイプ | 説明 |
|---|---|---|
|
| \{{ProvisionedThroughputDescription}} | このテーブルの ProvisionedThroughput プロパティーの値 |
|
|
| このテーブルの DateTime の作成。 |
|
|
| このテーブルのアイテム数。 |
|
| \{{KeySchema}} | このテーブルのプライマリーキーを識別する KeySchema。 |
|
|
| テーブル名。 |
|
|
| テーブルサイズ(バイト単位)。 |
|
|
| テーブルのステータス: CREATING、UPDATING、DELETING、ACTIVE |
|
|
| このテーブルの ReadCapacityUnits プロパティー。 |
|
|
| このテーブルの WriteCapacityUnits プロパティー。 |
2.5.7. GetItem 操作時に設定されたメッセージヘッダー
| ヘッダー | タイプ | 説明 |
|---|---|---|
|
|
| 操作によって返される属性の一覧。 |
2.5.8. PutItem 操作中に設定されたメッセージヘッダー
| ヘッダー | タイプ | 説明 |
|---|---|---|
|
|
| 操作によって返される属性の一覧。 |
2.5.9. Query 操作時に設定されたメッセージヘッダー
| ヘッダー | タイプ | 説明 |
|---|---|---|
|
|
| 操作によって返される属性の一覧。 |
|
|
| 前の結果セットを含む、クエリー操作が停止した項目のプライマリーキー。 |
|
|
| 操作中に消費された、テーブルのプロビジョニングされたスループットのキャパシティーユニットの数。 |
|
|
| 応答のアイテム数。 |
2.5.10. Scan 操作時に設定されたメッセージヘッダー
| ヘッダー | タイプ | 説明 |
|---|---|---|
|
|
| 操作によって返される属性の一覧。 |
|
|
| 前の結果セットを含む、クエリー操作が停止した項目のプライマリーキー。 |
|
|
| 操作中に消費された、テーブルのプロビジョニングされたスループットのキャパシティーユニットの数。 |
|
|
| 応答のアイテム数。 |
|
|
| フィルターが適用される前の完全なスキャン内のアイテムの数。 |
2.5.11. UpdateItem 操作時に設定されたメッセージヘッダー
| ヘッダー | タイプ | 説明 |
|---|---|---|
|
|
| 操作によって返される属性の一覧。 |
2.5.12. 高度な AmazonDynamoDB 設定
AmazonDynamoDB インスタンス設定をさらに制御する必要がある場合は、独自のインスタンスを作成し、URI から参照できます。
from("direct:start")
.to("aws2-ddb://domainName?amazonDDBClient=#client");
#client は、レジストリー内の DynamoDbClient を参照します。
2.6. サポートされるプロデューサー操作
- BatchGetItems
- DeleteItem
- DeleteTable
- DescribeTable
- GetItem
- PutItem
- クエリー
- スキャン
- UpdateItem
- UpdateTable
2.7. 例
2.7.1. プロデューサーの例
- 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>3.14.5.redhat-00032</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 | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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 | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは 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 キネシス
プロデューサーとコンシューマーの両方がサポート対象
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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (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 クライアントをインスタンス化する際にプロキシープロトコルを定義します。 列挙値:
| 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 (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| iteratorType (コンシューマー) | Kinesis ストリーム内でレコードの取得を開始する場所を定義します。 列挙値:
| TRIM_HORIZON | ShardIteratorType |
| maxResultsPerRequest (コンシューマー) | 各ポーリングでフェッチされる最大レコード数。 | 1 | int |
| resumeStrategy (コンシューマー) | AWS Kinesis の再開戦略を定義します。デフォルトの戦略は、指定されている場合は、sequenceNumber を読み取ります。 | KinesisUserConfigurationResumeStrategy | KinesisResumeStrategy |
| sequenceNumber (コンシューマー) | ポーリングを開始するシーケンス番号。iteratorType が AFTER_SEQUENCE_NUMBER または AT_SEQUENCE_NUMBER に設定されている場合に必要です。 | String | |
| shardClosed (コンシューマー) | シャード (shard) が閉じられた場合の動作を定義します。使用できる値は ignore、silent、および fail です。ignore の場合、メッセージはログに記録され、コンシューマーは最初から再起動します。silent の場合は、ログには記録されず、コンシューマーは最初から起動します。fail の場合は、ReachedClosedStateException が発生します。 列挙値:
| ignore | Kinesis2ShardClosedStrategyEnum |
| shardId (コンシューマー) | Kinesis ストリームでどの shardId からレコードを取得するかを定義します。 | String | |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
| accessKey (security) | Amazon AWS Access Key。 | String | |
| secretKey (セキュリティー) | 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 クライアントをインスタンス化する際にプロキシープロトコルを定義します。 列挙値:
| 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 (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| iteratorType (コンシューマー) | Kinesis ストリーム内でレコードの取得を開始する場所を定義します。 列挙値:
| TRIM_HORIZON | ShardIteratorType |
| maxResultsPerRequest (コンシューマー) | 各ポーリングでフェッチされる最大レコード数。 | 1 | int |
| resumeStrategy (コンシューマー) | AWS Kinesis の再開戦略を定義します。デフォルトの戦略は、指定されている場合は、sequenceNumber を読み取ります。 | KinesisUserConfigurationResumeStrategy | KinesisResumeStrategy |
| sendEmptyMessageWhenIdle (consumer) | ポーリングコンシューマーがファイルをポーリングしなかった場合、このオプションを有効にして、代わりに空のメッセージ (ボディーなし) を送信できます。 | false | boolean |
| sequenceNumber (コンシューマー) | ポーリングを開始するシーケンス番号。iteratorType が AFTER_SEQUENCE_NUMBER または AT_SEQUENCE_NUMBER に設定されている場合に必要です。 | String | |
| shardClosed (コンシューマー) | シャード (shard) が閉じられた場合の動作を定義します。使用できる値は ignore、silent、および fail です。ignore の場合、メッセージはログに記録され、コンシューマーは最初から再起動します。silent の場合は、ログには記録されず、コンシューマーは最初から起動します。fail の場合は、ReachedClosedStateException が発生します。 列挙値:
| ignore | Kinesis2ShardClosedStrategyEnum |
| shardId (コンシューマー) | Kinesis ストリームでどの shardId からレコードを取得するかを定義します。 | String | |
| exceptionHandler (コンシューマー (上級)) | コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
| exchangePattern (コンシューマー (上級)) | コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
| pollStrategy (コンシューマー (上級)) | プラグ可能な org.apache.camel.PollingConsumerPollingStrategy を使用すると、エクスチェンジが作成され、Camel でルーティングされる前に、通常はポーリング操作中に発生するエラー処理を制御するカスタム実装が提供できます。 | PollingConsumerPollStrategy | |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| backoffErrorThreshold (スケジューラー) | backoffMultipler が開始する前に発生する必要がある後続のエラーポーリング (エラーによって失敗した) の数。 | int | |
| backoffIdleThreshold (スケジューラー) | backoffMultipler が開始する前に発生する必要がある後続のアイドルポーリングの数。 | int | |
| backoffMultiplier (スケジューラー) | 後続のアイドル状態/エラーが連続して発生した場合に、スケジュールされたポーリングコンシューマーのバックオフを許可します。乗数は、実際に次の試行が行われる前にスキップされるポーリングの数です。このオプションが使用されている場合は、backoffIdleThreshold や backoffErrorThreshold も設定する必要があります。 | int | |
| delay (スケジューラー) | 次のポーリングまでの時間 (ミリ秒単位)。 | 500 | long |
| greedy (スケジューラー) | greedy が有効で、以前の実行が 1 つ以上のメッセージをポーリングした場合、ScheduledPollConsumer は即座に再度実行されます。 | false | boolean |
| initialDelay (スケジューラー) | 最初のポーリングが開始されるまでの時間 (ミリ秒単位)。 | 1000 | long |
| repeatCount (スケジューラー) | 実行の最大数を指定します。そのため、これを 1 に設定するとスケジューラーは 1 度だけ実行されます。これを 5 に設定した場合、5 回だけ実行されます。0 または負の値を設定すると、無制限に実行されます。 | 0 | long |
| runLoggingLevel (scheduler) | コンシューマーはポーリング時に開始/完了のログ行を記録します。このオプションを使用すると、ログレベルを設定できます。 列挙値:
| TRACE | LoggingLevel |
| scheduledExecutorService (スケジューラー) | コンシューマーに使用するカスタム/共有スレッドプールを設定できます。デフォルトでは、各コンシューマーに独自の単一スレッドのスレッドプールがあります。 | ScheduledExecutorService | |
| scheduler (スケジューラー) | camel-spring または camel-quartz コンポーネントから cron スケジューラーを使用します。スケジューラーにビルドされた値 spring または quartz を使用。 | none | オブジェクト |
| schedulerProperties (スケジューラー) | カスタムスケジューラーまたは Quartz や Spring ベースのスケジューラーを使用する場合に、追加のプロパティーを設定します。 | マップ | |
| startScheduler (スケジューラー) | スケジューラーを自動起動するかどうか。 | true | boolean |
| timeUnit (スケジューラー) | initialDelay および delay オプションの時間単位。 列挙値:
| MILLISECONDS | TimeUnit |
| useFixedDelay (スケジューラー) | 固定遅延または固定レートを使用するかどうかを制御します。詳細は、JDK の ScheduledExecutorService を参照してください。 | true | boolean |
| accessKey (security) | Amazon AWS Access Key。 | String | |
| secretKey (セキュリティー) | Amazon AWS Secret Key。 | String |
必要な Kinesis コンポーネントオプション
プロキシーと関連するクレデンシャル情報が設定された状態で、レジストリーに KinesisClient を提供する必要があります。
3.5. バッチコンシューマー
このコンポーネントは、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 コンシューマーによって設定されるメッセージヘッダー
| ヘッダー | タイプ | 説明 |
|---|---|---|
|
|
| このレコードのシーケンス番号。これは、サイズが API によって定義されていないため、文字列として表されます。数値型として使用する場合は、次を使用します |
|
|
| AWS がレコードの到着時間として割り当てた時間。 |
|
|
| データレコードが割り当てられているストリーム内のシャードを識別します。 |
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 プロデューサーが Kinesis に書き込むために使用するメッセージヘッダー。プロデューサーは、メッセージ本文が byte[] であることを期待しています。
| ヘッダー | タイプ | 説明 |
|---|---|---|
|
|
| このレコードを保存するために Kinesis に渡す PartitionKey。 |
|
|
| このレコードのシーケンス番号を示すオプションのパラメーター。 |
3.6.6. レコードの保存が成功したときに Kinesis プロデューサーによって設定されるメッセージヘッダー
| ヘッダー | タイプ | 説明 |
|---|---|---|
|
|
| Response Syntax で定義されているレコードのシーケンス番号 |
|
|
| レコードが保存された場所のシャード ID |
3.7. Dependencies
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>3.14.5.redhat-00032</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 | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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 | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは 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 | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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 の場合、メッセージはログに記録され、コンシューマーは最初から再起動します。silent の場合は、ログには記録されず、コンシューマーは最初から起動します。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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
4.3. コンポーネントオプション
AWS Lambda コンポーネントは、以下に示す 16 のオプションをサポートしています。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| configuration (producer) | コンポーネントの設定。 | Lambda2 設定 | |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| operation (producer) | 実行する操作。listFunctions、getFunction、createFunction、deleteFunction、または invokeFunction のいずれかです。 列挙値:
| invokeFunction | Lambda2Operations |
| overrideEndpoint (プロデューサー) | エンドポイントをオーバーライドする必要性を設定します。このオプションは uriEndpointOverride オプションと併用する必要があります。 | false | boolean |
| pojoRequest (プロデューサー) | POJO リクエストをボディーとして使用するかどうか。 | false | boolean |
| region (producer) | Lambda クライアントが動作する必要があるリージョン。このパラメーターを使用する場合、設定には小文字のリージョン名を指定します (例 ap-east-1)。名前 Region.EU_WEST_1.id() を使用する必要があります。 | String | |
| trustAllCertificates (プロデューサー) | エンドポイントをオーバーライドするときにすべての証明書を信頼する場合。 | false | boolean |
| uriEndpointOverride (プロデューサー) | オーバーライドする URI エンドポイントを設定します。このオプションは overrideEndpoint オプションと組み合わせて使用する必要があります。 | String | |
| useDefaultCredentialsProvider (producer) | Lambda クライアントがデフォルトの認証情報プロバイダーを介して認証情報をロードすることを期待するか、静的認証情報が渡されることを期待するかを設定します。 | false | boolean |
| autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
| awsLambdaClient (上級) | Autowired 既存の設定済みの AwsLambdaClient をクライアントとして使用します。 | LambdaClient | |
| proxyHost (プロキシー) | Lambda クライアントをインスタンス化するときにプロキシーホストを定義します。 | String | |
| proxyPort (プロキシー) | Lambda クライアントをインスタンス化するときにプロキシーポートを定義します。 | Integer | |
| proxyProtocol (プロキシー) | Lambda クライアントをインスタンス化するときにプロキシープロトコルを定義します。 列挙値:
| HTTPS | Protocol |
| accessKey (security) | Amazon AWS Access Key。 | String | |
| secretKey (セキュリティー) | Amazon AWS Secret Key。 | String |
4.4. エンドポイントオプション
AWS Lambda エンドポイントは、URI 構文を使用して設定されます。
aws2-lambda:function
パスおよびクエリーパラメーターを使用します。
4.4.1. パスパラメーター(1 パラメーター)
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| function (プロデューサー) | 必須 Lambda 関数の名前。 | String |
4.4.2. クエリーパラメーター (14 パラメーター)
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| operation (producer) | 実行する操作。listFunctions、getFunction、createFunction、deleteFunction、または invokeFunction のいずれかです。 列挙値:
| invokeFunction | Lambda2Operations |
| overrideEndpoint (プロデューサー) | エンドポイントをオーバーライドする必要性を設定します。このオプションは uriEndpointOverride オプションと併用する必要があります。 | false | boolean |
| pojoRequest (プロデューサー) | POJO リクエストをボディーとして使用するかどうか。 | false | boolean |
| region (producer) | Lambda クライアントが動作する必要があるリージョン。このパラメーターを使用する場合、設定には小文字のリージョン名を指定します (例 ap-east-1)。名前 Region.EU_WEST_1.id() を使用する必要があります。 | String | |
| trustAllCertificates (プロデューサー) | エンドポイントをオーバーライドするときにすべての証明書を信頼する場合。 | false | boolean |
| uriEndpointOverride (プロデューサー) | オーバーライドする URI エンドポイントを設定します。このオプションは overrideEndpoint オプションと組み合わせて使用する必要があります。 | String | |
| useDefaultCredentialsProvider (producer) | Lambda クライアントがデフォルトの認証情報プロバイダーを介して認証情報をロードすることを期待するか、静的認証情報が渡されることを期待するかを設定します。 | false | boolean |
| awsLambdaClient (上級) | Autowired 既存の設定済みの AwsLambdaClient をクライアントとして使用します。 | LambdaClient | |
| proxyHost (プロキシー) | Lambda クライアントをインスタンス化するときにプロキシーホストを定義します。 | String | |
| proxyPort (プロキシー) | Lambda クライアントをインスタンス化するときにプロキシーポートを定義します。 | Integer | |
| proxyProtocol (プロキシー) | Lambda クライアントをインスタンス化するときにプロキシープロトコルを定義します。 列挙値:
| HTTPS | Protocol |
| accessKey (security) | Amazon AWS Access Key。 | String | |
| secretKey (セキュリティー) | 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 プロデューサーによって評価されるメッセージヘッダー
| 操作 | ヘッダー | タイプ | 説明 | 必須 |
|---|---|---|---|---|
| すべて |
|
| 実行する操作。クエリーパラメーターとして渡されたオーバーライド操作 | はい |
| createFunction |
|
| デプロイパッケージを含む .zip ファイルが保存される Amazon S3 バケット名。このバケットは、Lambda 関数を作成しているのと同じ AWS リージョンに存在する必要があります。 | いいえ |
| createFunction |
|
| アップロードする Amazon S3 オブジェクト (デプロイパッケージ) のキー名。 | いいえ |
| createFunction |
| String | アップロードする Amazon S3 オブジェクト (デプロイパッケージ) のバージョン。 | いいえ |
| createFunction |
|
| zip ファイル (デプロイメントパッケージ) のローカルパス。zip ファイルの内容をメッセージ本文に入れることもできます。 | いいえ |
| createFunction |
|
| Lambda が関数を実行して他のアマゾンウェブサービス (AWS) リソースにアクセスするときに引き受ける IAM ロールの Amazon リソースネーム (ARN)。 | はい |
| createFunction |
| String | アップロードする Lambda 関数のランタイム環境。(nodejs、nodejs4.3、nodejs6.10、java8、python2.7、python3.6、dotnetcore1.0、odejs4.3-edge) | はい |
| createFunction |
|
| 実行を開始するために Lambda が呼び出すコード内の関数。Node.js の場合は、関数の module-name.export 値です。Java の場合は、package.class-name::handler または package.class-name にすることができます。 | はい |
| createFunction |
|
| ユーザー提供の説明。 | いいえ |
| createFunction |
|
| Amazon SQS キューまたは Amazon SNS トピックのターゲット ARN (Amazon リソースネーム) を含む親オブジェクト。 | いいえ |
| createFunction |
|
| 関数用に設定したメモリーサイズ (MB 単位)。64 MB の倍数である必要があります。 | いいえ |
| createFunction |
|
| 関数の環境変数を暗号化するために使用される KMS キーの Amazon リソースネーム (ARN)。指定しない場合、AWS Lambda はデフォルトのサービスキーを使用します。 | いいえ |
| createFunction |
|
| このブール値パラメーターを使用して、AWS Lambda に Lambda 関数を作成し、バージョンをアトミック操作として発行するようにリクエストできます。 | いいえ |
| createFunction |
|
| Lambda が関数を終了する関数実行時間。デフォルトは 3 秒です。 | いいえ |
| createFunction |
|
| 関数のトレース設定 (Active または PassThrough)。 | いいえ |
| createFunction |
|
| 環境の設定設定を表すキーと値のペア。 | いいえ |
| createFunction |
|
| 新しい関数に割り当てられたタグ (キーと値のペア) のリスト。 | いいえ |
| createFunction |
|
| Lambda 関数が VPC 内のリソースにアクセスする場合、VPC 内の 1 つ以上のセキュリティーグループ ID のリスト。 | いいえ |
| createFunction |
|
| Lambda 関数が VPC 内のリソースにアクセスする場合、VPC 内の 1 つ以上のサブネット ID のリスト。 | いいえ |
| createAlias |
|
| エイリアスに設定する関数のバージョン | はい |
| createAlias |
|
| エイリアスに設定する関数名 | はい |
| createAlias |
|
| エイリアスに設定する関数の説明 | いいえ |
| deleteAlias |
|
| エイリアスの関数名 | はい |
| getAlias |
|
| エイリアスの関数名 | はい |
| listAliases |
|
| エイリアスに設定する関数のバージョン | いいえ |
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. プロデューサーの例
コンポーネントがどのように機能するかを完全に理解するには、これらの 統合テスト を参照してください。
4.7.2. プロデューサーの例
- 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>3.14.5.redhat-00032</version> <!-- use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に記載される 17 のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| 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 | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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 ストレージサービス
プロデューサーとコンシューマーの両方がサポート対象
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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
5.3. コンポーネントオプション
AWS S3 Storage Service コンポーネントは、以下に示す 50 のオプションをサポートしています。
| 名前 | 説明 | デフォルト | タイプ |
|---|---|---|---|
| amazonS3Client (共通) | Autowired レジストリーの com.amazonaws.services.s3.AmazonS3 への参照。 | S3Client | |
| amazonS3Presigner (共通) | Autowired リクエストの S3 Presigner。主に createDownloadLink 操作で使用されます。 | S3Presigner | |
| autoCreateBucket (共通) | S3 バケット bucketName の自動作成の設定。moveAfterRead オプションが有効になっている場合も適用され、destinationBucket が存在しない場合は作成されます。 | false | boolean |
| configuration (共通) | コンポーネントの設定。 | AWS2S3 設定 | |
| overrideEndpoint (共通) | エンドポイントをオーバーライドする必要性を設定します。このオプションは uriEndpointOverride オプションと併用する必要があります。 | false | boolean |
| pojoRequest (共通) | POJO リクエストをボディーとして使用するかどうか。 | false | boolean |
| policy (共通) | com.amazonaws.services.s3.AmazonS3#setBucketPolicy() メソッドに設定されるこのキューのポリシー。 | String | |
| proxyHost (共通) | SQS クライアントをインスタンス化するときにプロキシーホストを定義します。 | String | |
| proxyPort (共通) | クライアント定義内で使用されるプロキシーポートを指定します。 | Integer | |
| proxyProtocol (common) | S3 クライアントをインスタンス化するときにプロキシープロトコルを定義します。 列挙値:
| 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 (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは 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 (コンシューマー) | 対象のオブジェクトのみを消費するために com.amazonaws.services.s3.model.ListObjectsRequest で使用される区切り文字。 | String | |
| destinationBucket (コンシューマー) | moveAfterRead が true に設定されている場合にオブジェクトを移動する必要がある宛先バケットを定義します。 | String | |
| destinationBucketPrefix (コンシューマー) | オブジェクトを移動する必要があり、moveAfterRead が true に設定されている場合に使用する宛先バケット接頭辞を定義します。 | String | |
| destinationBucketSuffix (consumer) | オブジェクトを移動する必要があり、moveAfterRead が true に設定されている場合に使用する宛先バケット接尾辞を定義します。 | String | |
| doneFileName (consumer) | 指定すると、Camel は完了したファイルが存在する場合にのみファイルを消費します。 | String | |
| fileName (コンシューマー) | 指定のファイル名を持つバケットからオブジェクトを取得します。 | String | |
| ignoreBody (コンシューマー) | true の場合、S3 オブジェクトボディは完全に無視されます。false に設定されている場合、S3 オブジェクトはボディに配置されます。これを true に設定すると、includeBody オプションで定義された動作がオーバーライドされます。 | false | boolean |
| includeBody (コンシューマー) | true の場合、S3Object エクスチェンジが消費され、ボディーに配置され、閉じられます。false の場合、S3Object ストリームは raw でボディーに配置され、ヘッダーは S3 オブジェクトメタデータで設定されます。このオプションは、autocloseBody オプションと密接に関係します。S3Object ストリームが消費されるため includeBody を true に設定した場合、includeBody が false であっても閉じられるため、S3Object ストリームを閉じるのは呼び出し側が判断します。しかし、includeBody が false の場合に autocloseBody を true に設定すると、エクスチェンジの完了時に S3Object ストリームを自動的に閉じるようにスケジュールされます。 | true | boolean |
| includeFolders (コンシューマー) | true の場合、フォルダー/ディレクトリーが消費されます。false の場合は無視され、エクスチェンジは作成されません。 | true | boolean |
| moveAfterRead (コンシューマー) | オブジェクトの取得後に S3 バケットから別のバケットに移動します。操作を実行するには、destinationBucket オプションを設定する必要があります。copy bucket 操作は、エクスチェンジがコミットされた場合にのみ実行されます。ロールバックが発生した場合、オブジェクトは移動しません。 | false | boolean |
| prefix (コンシューマー) | 対象のオブジェクトのみを消費するために com.amazonaws.services.s3.model.ListObjectsRequest で使用される接頭辞。 | String | |
| autocloseBody (コンシューマー (上級)) | このオプションが true で、includeBody が false の場合、エクスチェンジの完了時に S3Object.close() メソッドが呼び出されます。このオプションは includeBody オプションと密接に関係しています。includeBody を false に設定し、autocloseBody を false に設定した場合、S3Object ストリームを閉じるのは呼び出し側が判断します。autocloseBody を true に設定すると、S3Object ストリームが自動的に閉じられます。 | true | boolean |
| batchMessageNumber (producer) | ストリーミングのアップロードモードでバッチを作成するメッセージの数 | 10 | int |
| batchSize (プロデューサー) | ストリーミングのアップロードモードのバッチサイズ (バイト単位) | 1000000 | int |
| deleteAfterWrite (プロデューサー) | S3 ファイルのアップロード後にファイルオブジェクトを削除します。 | false | boolean |
| keyName (プロデューサー) | endpoint パラメーター経由でバケットの要素のキー名を設定します。 | String | |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| multiPartUpload (プロデューサー) | true の場合、Camel はマルチパート形式のファイルをアップロードし、パートサイズは partSize のオプションによって決定されます。 | false | boolean |
| namingStrategy (プロデューサー) | ストリーミングのアップロードモードで使用する命名ストラテジー。 列挙値:
| progressive | AWSS3NamingStrategyEnum |
| operation (producer) | ユーザーがアップロードだけをしたくない場合に行う操作。 列挙値:
| AWS2S3Operations | |
| partSize (プロデューサー) | マルチパートのアップロードで使用される partSize を設定します。デフォルトのサイズは 25M です。 | 26214400 | long |
| restartingPolicy (producer) | ストリーミングのアップロードモードで使用する再起動ポリシー。 列挙値:
| override | AWSS3RestartingPolicyEnum |
| storageClass (プロデューサー) | 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 (プロデューサー (上級)) | カスタマーキーを使用する必要があるかどうかを定義します。 | false | boolean |
| autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
| accessKey (security) | Amazon AWS Access Key。 | String | |
| secretKey (セキュリティー) | 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 (共通) | com.amazonaws.services.s3.AmazonS3#setBucketPolicy() メソッドに設定されるこのキューのポリシー。 | String | |
| proxyHost (共通) | SQS クライアントをインスタンス化するときにプロキシーホストを定義します。 | String | |
| proxyPort (共通) | クライアント定義内で使用されるプロキシーポートを指定します。 | Integer | |
| proxyProtocol (common) | S3 クライアントをインスタンス化するときにプロキシープロトコルを定義します。 列挙値:
| 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 (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは 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 (コンシューマー) | 対象のオブジェクトのみを消費するために com.amazonaws.services.s3.model.ListObjectsRequest で使用される区切り文字。 | String | |
| destinationBucket (コンシューマー) | moveAfterRead が true に設定されている場合にオブジェクトを移動する必要がある宛先バケットを定義します。 | String | |
| destinationBucketPrefix (コンシューマー) | オブジェクトを移動する必要があり、moveAfterRead が true に設定されている場合に使用する宛先バケット接頭辞を定義します。 | String | |
| destinationBucketSuffix (consumer) | オブジェクトを移動する必要があり、moveAfterRead が true に設定されている場合に使用する宛先バケット接尾辞を定義します。 | String | |
| doneFileName (consumer) | 指定すると、Camel は完了したファイルが存在する場合にのみファイルを消費します。 | String | |
| fileName (コンシューマー) | 指定のファイル名を持つバケットからオブジェクトを取得します。 | String | |
| ignoreBody (コンシューマー) | true の場合、S3 オブジェクトボディは完全に無視されます。false に設定されている場合、S3 オブジェクトはボディに配置されます。これを true に設定すると、includeBody オプションで定義された動作がオーバーライドされます。 | false | boolean |
| includeBody (コンシューマー) | true の場合、S3Object エクスチェンジが消費され、ボディーに配置され、閉じられます。false の場合、S3Object ストリームは raw でボディーに配置され、ヘッダーは S3 オブジェクトメタデータで設定されます。このオプションは、autocloseBody オプションと密接に関係します。S3Object ストリームが消費されるため includeBody を true に設定した場合、includeBody が false であっても閉じられるため、S3Object ストリームを閉じるのは呼び出し側が判断します。しかし、includeBody が false の場合に autocloseBody を true に設定すると、エクスチェンジの完了時に S3Object ストリームを自動的に閉じるようにスケジュールされます。 | true | boolean |
| includeFolders (コンシューマー) | true の場合、フォルダー/ディレクトリーが消費されます。false の場合は無視され、エクスチェンジは作成されません。 | true | boolean |
| maxConnections (コンシューマー) | S3 クライアント設定の maxConnections パラメーターを設定します。 | 60 | int |
| maxMessagesPerPoll (コンシューマー) | 各ポーリングのポーリング制限としてメッセージの最大数を取得します。各ポーリングのポーリング制限としてメッセージの最大数を取得します。デフォルト値は 10 です。0 または負の値を使用すると、無制限として設定されます。 | 10 | int |
| moveAfterRead (コンシューマー) | オブジェクトの取得後に S3 バケットから別のバケットに移動します。操作を実行するには、destinationBucket オプションを設定する必要があります。copy bucket 操作は、エクスチェンジがコミットされた場合にのみ実行されます。ロールバックが発生した場合、オブジェクトは移動しません。 | false | boolean |
| prefix (コンシューマー) | 対象のオブジェクトのみを消費するために com.amazonaws.services.s3.model.ListObjectsRequest で使用される接頭辞。 | String | |
| sendEmptyMessageWhenIdle (consumer) | ポーリングコンシューマーがファイルをポーリングしなかった場合、このオプションを有効にして、代わりに空のメッセージ (ボディーなし) を送信できます。 | false | boolean |
| autocloseBody (コンシューマー (上級)) | このオプションが true で、includeBody が false の場合、エクスチェンジの完了時に S3Object.close() メソッドが呼び出されます。このオプションは includeBody オプションと密接に関係しています。includeBody を false に設定し、autocloseBody を false に設定した場合、S3Object ストリームを閉じるのは呼び出し側が判断します。autocloseBody を true に設定すると、S3Object ストリームが自動的に閉じられます。 | true | boolean |
| exceptionHandler (コンシューマー (上級)) | コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
| exchangePattern (コンシューマー (上級)) | コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
| pollStrategy (コンシューマー (上級)) | プラグ可能な org.apache.camel.PollingConsumerPollingStrategy を使用すると、エクスチェンジが作成され、Camel でルーティングされる前に、通常はポーリング操作中に発生するエラー処理を制御するカスタム実装が提供できます。 | PollingConsumerPollStrategy | |
| batchMessageNumber (producer) | ストリーミングのアップロードモードでバッチを作成するメッセージの数 | 10 | int |
| batchSize (プロデューサー) | ストリーミングのアップロードモードのバッチサイズ (バイト単位) | 1000000 | int |
| deleteAfterWrite (プロデューサー) | S3 ファイルのアップロード後にファイルオブジェクトを削除します。 | false | boolean |
| keyName (プロデューサー) | endpoint パラメーター経由でバケットの要素のキー名を設定します。 | String | |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| multiPartUpload (プロデューサー) | true の場合、Camel はマルチパート形式のファイルをアップロードし、パートサイズは partSize のオプションによって決定されます。 | false | boolean |
| namingStrategy (プロデューサー) | ストリーミングのアップロードモードで使用する命名ストラテジー。 列挙値:
| progressive | AWSS3NamingStrategyEnum |
| operation (producer) | ユーザーがアップロードだけをしたくない場合に行う操作。 列挙値:
| AWS2S3Operations | |
| partSize (プロデューサー) | マルチパートのアップロードで使用される partSize を設定します。デフォルトのサイズは 25M です。 | 26214400 | long |
| restartingPolicy (producer) | ストリーミングのアップロードモードで使用する再起動ポリシー。 列挙値:
| override | AWSS3RestartingPolicyEnum |
| storageClass (プロデューサー) | 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 (プロデューサー (上級)) | カスタマーキーを使用する必要があるかどうかを定義します。 | false | boolean |
| backoffErrorThreshold (スケジューラー) | backoffMultipler が開始する前に発生する必要がある後続のエラーポーリング (エラーによって失敗した) の数。 | int | |
| backoffIdleThreshold (スケジューラー) | backoffMultipler が開始する前に発生する必要がある後続のアイドルポーリングの数。 | int | |
| backoffMultiplier (スケジューラー) | 後続のアイドル状態/エラーが連続して発生した場合に、スケジュールされたポーリングコンシューマーのバックオフを許可します。乗数は、実際に次の試行が行われる前にスキップされるポーリングの数です。このオプションが使用されている場合は、backoffIdleThreshold や backoffErrorThreshold も設定する必要があります。 | int | |
| delay (スケジューラー) | 次のポーリングまでの時間 (ミリ秒単位)。 | 500 | long |
| greedy (スケジューラー) | greedy が有効で、以前の実行が 1 つ以上のメッセージをポーリングした場合、ScheduledPollConsumer は即座に再度実行されます。 | false | boolean |
| initialDelay (スケジューラー) | 最初のポーリングが開始されるまでの時間 (ミリ秒単位)。 | 1000 | long |
| repeatCount (スケジューラー) | 実行の最大数を指定します。そのため、これを 1 に設定するとスケジューラーは 1 度だけ実行されます。これを 5 に設定した場合、5 回だけ実行されます。0 または負の値を設定すると、無制限に実行されます。 | 0 | long |
| runLoggingLevel (scheduler) | コンシューマーはポーリング時に開始/完了のログ行を記録します。このオプションを使用すると、ログレベルを設定できます。 列挙値:
| TRACE | LoggingLevel |
| scheduledExecutorService (スケジューラー) | コンシューマーに使用するカスタム/共有スレッドプールを設定できます。デフォルトでは、各コンシューマーに独自の単一スレッドのスレッドプールがあります。 | ScheduledExecutorService | |
| scheduler (スケジューラー) | camel-spring または camel-quartz コンポーネントから cron スケジューラーを使用します。スケジューラーにビルドされた値 spring または quartz を使用。 | none | オブジェクト |
| schedulerProperties (スケジューラー) | カスタムスケジューラーまたは Quartz や Spring ベースのスケジューラーを使用する場合に、追加のプロパティーを設定します。 | マップ | |
| startScheduler (スケジューラー) | スケジューラーを自動起動するかどうか。 | true | boolean |
| timeUnit (スケジューラー) | initialDelay および delay オプションの時間単位。 列挙値:
| MILLISECONDS | TimeUnit |
| useFixedDelay (スケジューラー) | 固定遅延または固定レートを使用するかどうかを制御します。詳細は、JDK の ScheduledExecutorService を参照してください。 | true | boolean |
| accessKey (security) | Amazon AWS Access Key。 | String | |
| secretKey (セキュリティー) | Amazon AWS Secret Key。 | String |
必須の S3 コンポーネントオプション
Amazon の S3 にアクセスするには、レジストリーに amazonDDBClient を指定するか、accessKey と secretKey を指定する必要があります。
5.5. バッチコンシューマー
このコンポーネントは、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 プロデューサーによって評価されるメッセージヘッダー
| ヘッダー | タイプ | 説明 |
|---|---|---|
|
|
| このオブジェクトが保存されるバケット名、または現在の操作に使用されるバケット名 |
|
|
| 現在の操作に使用されるバケット宛先名 |
|
|
| このオブジェクトのコンテンツの長さ。 |
|
|
| このオブジェクトのコンテンツタイプ。 |
|
|
| このオブジェクトのコンテンツコントロール。 |
|
|
| このオブジェクトのコンテンツの配置。 |
|
|
| このオブジェクトのコンテンツエンコーディング。 |
|
|
| このオブジェクトの md5 チェックサム。 |
|
|
| 現在の操作に使用される宛先キー |
|
|
| このオブジェクトが格納されるキー、または現在の操作に使用されるキー |
|
|
| このオブジェクトの最終変更のタイムスタンプ。 |
|
|
| 実行する操作。許可されている値は、copyObject、deleteObject、listBuckets、deleteBucket、listObjects です。 |
|
|
| このオブジェクトのストレージクラス。 |
|
|
|
オブジェクトに適用される既定の ACL。許可されている値については、 |
|
|
|
適切に設定された Amazon S3 アクセスコントロールリストオブジェクト。詳細については、 |
|
| String | AWS が管理するキーを使用してオブジェクトを暗号化するときに、サーバー側の暗号化アルゴリズムを設定します。たとえば、AES256 を使用します。 |
|
|
| 現在の操作から格納または返されるオブジェクトのバージョン ID |
|
|
| S3 のオブジェクトと共に保存されるメタデータのマップ。メタデータの詳細。 |
5.6.2. S3 プロデューサーによって設定されたメッセージヘッダー
| ヘッダー | タイプ | 説明 |
|---|---|---|
|
|
| 新しくアップロードされたオブジェクトの ETag 値。 |
|
|
| 新しくアップロードされたオブジェクトの オプション のバージョン ID。 |
5.6.3. S3 コンシューマーによって設定されたメッセージヘッダー
| ヘッダー | タイプ | 説明 |
|---|---|---|
|
|
| このオブジェクトが格納されるキー。 |
|
|
| このオブジェクトが含まれるバケットの名前。 |
|
|
| RFC 1864 に従って、関連付けられたオブジェクトの 16 進数でエンコードされた 128 ビット MD5 ダイジェスト。このデータは、呼び出し元によって受信されたデータが Amazon S3 によって送信されたデータと同じであることを確認するための整合性チェックとして使用されます。 |
|
|
| Last-Modified ヘッダーの値。Amazon S3 が関連付けられたオブジェクトへの変更を最後に記録した日時を示します。 |
|
|
| 関連する Amazon S3 オブジェクトのバージョン ID (利用可能な場合)。バージョン ID は、オブジェクトのバージョニングが有効になっている Amazon S3 バケットにオブジェクトがアップロードされた場合にのみ、オブジェクトに割り当てられます。 |
|
|
| 関連付けられたオブジェクトに格納されているコンテンツのタイプを示す Content-Type HTTP ヘッダー。このヘッダーの値は、標準の MIME タイプです。 |
|
|
| RFC 1864 に従って、関連付けられたオブジェクト (ヘッダーを含まないコンテンツ) の base64 でエンコードされた 128 ビット MD5 ダイジェスト。このデータは、Amazon S3 が受信したデータが発信者が送信したデータと同じであることを確認するためのメッセージ整合性チェックとして使用されます。 |
|
|
| 関連付けられたオブジェクトのサイズをバイト単位で示す Content-Length HTTP ヘッダー。 |
|
|
| オブジェクトに適用されたコンテンツエンコーディングと、Content-Type フィールドによって参照されるメディアタイプを取得するために適用する必要があるデコードメカニズムを指定する、オプション の Content-Encoding HTTP ヘッダー。 |
|
|
| オプション の Content-Disposition HTTP ヘッダー。保存するオブジェクトの推奨ファイル名などの表示情報を指定します。 |
|
|
| ユーザーが HTTP 要求/応答チェーンに沿ってキャッシュ動作を指定できるようにする、オプション の Cache-Control HTTP ヘッダー。 |
|
| String | AWS が管理するキーを使用してオブジェクトを暗号化するときのサーバー側の暗号化アルゴリズム。 |
|
|
| S3 のオブジェクトとともに保存されたメタデータのマップ。メタデータの詳細。 |
5.6.4. S3 プロデューサーの操作
Camel-AWS2-S3 コンポーネントは、プロデューサー側で次の操作を提供します。
- copyObject
- deleteObject
- listBuckets
- deleteBucket
- listObjects
- getObject (これは S3Object インスタンスを返します)
- getObjectRange (これは S3Object インスタンスを返します)
- createDownloadLink
操作を明示的に指定しない場合、プロデューサーは次のことを行います。- 単一ファイルのアップロード - 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®ion=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 ですが、必要に応じて調整できます。
プロデューサールートを停止すると、プロデューサーはバッファーリングされた残りのメッセージをフラッシュし、アップロードを完了します。
ストリーミングアップロードでは、プロデューサーを離れたところから再開できます。この機能は、プログレッシブ命名戦略を使用する場合にのみ重要であることに注意してください。
restartingPolicy を lastPart に設定することで、ファイルとコンテンツのアップロードをプロデューサーが残した最後のパーツ番号から再開します。
例
- プログレッシブ命名戦略でルートを開始し、keyname は camel.txt に等しく、batchMessageNumber は 20 に等しく、restartingPolicy は lastPart に等しい - 70 個のメッセージを送信します。
- ルートを停止
S3 バケットには、次の 4 つのファイルが表示されます: * camel.txt
- camel-1.txt
- camel-2.txt
camel-3.txt
最初の 3 つには 20 件のメッセージが含まれますが、最後の 1 つには 10 件しかありません。
- ルートを再開します。
- メッセージを 25 回送信します。
- ルートを停止します。
- バケットには他に 2 つのファイルがあります。camel-5.txt と camel-6.txt です。最初のファイルには 20 件のメッセージがあり、2 つ目のファイルには 5 件のメッセージがあります。
- どうぞ
ランダムな命名戦略を使用する場合、これは必要ありません。
反対に、オーバーライドの restartingPolicy を指定できます。その場合、バケットで以前に書いたものを (その特定のキー名に対して) 上書きすることができます。
ストリーミングアップロードモードでは、考慮される唯一の keyName オプションは endpoint オプションです。ヘッダーを使用すると NPE が出力されますが、これは設計によるものです。ヘッダーを設定すると、各交換でファイル名が変更される可能性があり、これはストリーミングアップロードプロデューサーの目的に反します。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 機能を使用せずに、バケットからコンテンツを消費し、コンテンツを別のバケットに移動することを好みます。この場合、コンシューマーの受信交換から bucketName ヘッダーを削除することを忘れないでください。そうしないと、ファイルは常に同じ元のバケットで上書きされます。
5.10. MoveAfterRead コンシューマーオプション
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 自動設定
Spring Boot で aws2-s3 を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-aws2-s3-starter</artifactId> <version>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に記載される 51 のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| 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 | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは 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-cw コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | ブール値 | |
| 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 | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
6.3. コンポーネントオプション
AWS Simple Notification System (SNS) コンポーネントは、以下に示す 24 のオプションをサポートしています。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| amazonSNSClient (プロデューサー) | Autowired AmazonSNS をクライアントとして使用します。 | SnsClient | |
| autoCreateTopic (producer) | トピックの自動作成を設定します。 | false | boolean |
| configuration (producer) | コンポーネントの設定。 | Sns2Configuration | |
| kmsMasterKeyId (producer) | Amazon SNS の AWS 管理のカスタマーマスターキー (CMK) の ID またはカスタム CMK の ID。 | String | |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| messageDeduplicationIdStrategy (producer) | FIFO トピックのみ。メッセージに messageDeduplicationId を設定するストラテジー。useExchangeId または useContentBasedDeduplication のいずれかをオプションとして使用できます。useContentBasedDeduplication オプションでは、メッセージに messageDeduplicationId が設定されません。 列挙値:
| useExchangeId | String |
| messageGroupIdStrategy (producer) | FIFO トピックのみ。メッセージに messageGroupId を設定するストラテジー。useConstant、useExchangeId、usePropertyValue のいずれかをオプションとして使用できます。usePropertyValue オプションでは、CamelAwsMessageGroupId プロパティーの値が使用されます。 列挙値:
| String | |
| messageStructure (プロデューサー) | json などの使用するメッセージ構造。 | String | |
| overrideEndpoint (プロデューサー) | エンドポイントをオーバーライドする必要性を設定します。このオプションは uriEndpointOverride オプションと併用する必要があります。 | false | boolean |
| policy (プロデューサー) | このトピックのポリシー。デフォルトではクラスパスからロードされますが、classpath:、file:、または http: をプレフィックとして指定して、異なるシステムからリソースをロードすることもできます。 | String | |
| proxyHost (プロデューサー) | SNS クライアントをインスタンス化するときにプロキシーホストを定義します。 | String | |
| proxyPort (プロデューサー) | SNS クライアントをインスタンス化するときにプロキシーポートを定義します。 | Integer | |
| proxyProtocol (producer) | SNS クライアントをインスタンス化するときにプロキシープロトコルを定義します。 列挙値:
| HTTPS | Protocol |
| queueUrl (producer) | サブスクライブする queueUrl。 | String | |
| region (producer) | SNS クライアントが機能する必要があるリージョン。このパラメーターを使用する場合、設定には小文字のリージョン名を指定します (例 ap-east-1)。名前 Region.EU_WEST_1.id() を使用する必要があります。 | String | |
| serverSideEncryptionEnabled (producer) | サーバー側の暗号化がトピックで有効であるかどうかを定義します。 | false | boolean |
| subject (プロデューサー) | メッセージヘッダー 'CamelAwsSnsSubject' が存在しない場合に使用されるサブジェクト。 | String | |
| subscribeSNStoSQS (プロデューサー) | SNS トピックと SQS との間のサブスクリプションを完了する必要があるかどうかを定義します。 | false | boolean |
| trustAllCertificates (プロデューサー) | エンドポイントをオーバーライドするときにすべての証明書を信頼する場合。 | false | boolean |
| uriEndpointOverride (プロデューサー) | オーバーライドする 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 (セキュリティー) | Amazon AWS Secret Key。 | String |
6.4. エンドポイントオプション
AWS Simple Notification System (SNS) エンドポイントは、URI 構文を使用して設定されます。
aws2-sns:topicNameOrArn
パスおよびクエリーパラメーターを使用します。
6.4.1. パスパラメーター(1 パラメーター)
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| topicNameOrArn (プロデューサー) | 必須 のトピック名または ARN。 | String |
6.4.2. クエリーパラメーター (23 パラメーター)
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| amazonSNSClient (プロデューサー) | Autowired AmazonSNS をクライアントとして使用します。 | SnsClient | |
| autoCreateTopic (producer) | トピックの自動作成を設定します。 | false | boolean |
| headerFilterStrategy (プロデューサー) | カスタムの HeaderFilterStrategy を使用して、ヘッダーから Camel または Camel からヘッダーにマッピングします。 | HeaderFilterStrategy | |
| kmsMasterKeyId (producer) | Amazon SNS の AWS 管理のカスタマーマスターキー (CMK) の ID またはカスタム CMK の ID。 | String | |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| messageDeduplicationIdStrategy (producer) | FIFO トピックのみ。メッセージに messageDeduplicationId を設定するストラテジー。useExchangeId または useContentBasedDeduplication のいずれかをオプションとして使用できます。useContentBasedDeduplication オプションでは、メッセージに messageDeduplicationId が設定されません。 列挙値:
| useExchangeId | String |
| messageGroupIdStrategy (producer) | FIFO トピックのみ。メッセージに messageGroupId を設定するストラテジー。useConstant、useExchangeId、usePropertyValue のいずれかをオプションとして使用できます。usePropertyValue オプションでは、CamelAwsMessageGroupId プロパティーの値が使用されます。 列挙値:
| String | |
| messageStructure (プロデューサー) | json などの使用するメッセージ構造。 | String | |
| overrideEndpoint (プロデューサー) | エンドポイントをオーバーライドする必要性を設定します。このオプションは uriEndpointOverride オプションと併用する必要があります。 | false | boolean |
| policy (プロデューサー) | このトピックのポリシー。デフォルトではクラスパスからロードされますが、classpath:、file:、または http: をプレフィックとして指定して、異なるシステムからリソースをロードすることもできます。 | String | |
| proxyHost (プロデューサー) | SNS クライアントをインスタンス化するときにプロキシーホストを定義します。 | String | |
| proxyPort (プロデューサー) | SNS クライアントをインスタンス化するときにプロキシーポートを定義します。 | Integer | |
| proxyProtocol (producer) | SNS クライアントをインスタンス化するときにプロキシープロトコルを定義します。 列挙値:
| HTTPS | Protocol |
| queueUrl (producer) | サブスクライブする queueUrl。 | String | |
| region (producer) | SNS クライアントが機能する必要があるリージョン。このパラメーターを使用する場合、設定には小文字のリージョン名を指定します (例 ap-east-1)。名前 Region.EU_WEST_1.id() を使用する必要があります。 | String | |
| serverSideEncryptionEnabled (producer) | サーバー側の暗号化がトピックで有効であるかどうかを定義します。 | false | boolean |
| subject (プロデューサー) | メッセージヘッダー 'CamelAwsSnsSubject' が存在しない場合に使用されるサブジェクト。 | String | |
| subscribeSNStoSQS (プロデューサー) | SNS トピックと SQS との間のサブスクリプションを完了する必要があるかどうかを定義します。 | false | boolean |
| trustAllCertificates (プロデューサー) | エンドポイントをオーバーライドするときにすべての証明書を信頼する場合。 | false | boolean |
| uriEndpointOverride (プロデューサー) | オーバーライドする URI エンドポイントを設定します。このオプションは overrideEndpoint オプションと組み合わせて使用する必要があります。 | String | |
| useDefaultCredentialsProvider (producer) | SNS クライアントが AWS infra インスタンスでクレデンシャルのロードすること、または静的クレデンシャルが渡されることを SNS クライアントが想定すべきかどうかを設定します。 | false | boolean |
| accessKey (security) | Amazon AWS Access Key。 | String | |
| secretKey (セキュリティー) | 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 プロデューサーによって評価されるメッセージヘッダー
| ヘッダー | タイプ | 説明 |
|---|---|---|
|
|
|
Amazon SNS メッセージの件名。設定されていない場合は、 |
6.5.3. SNS プロデューサーによって設定されるメッセージヘッダー
| ヘッダー | タイプ | 説明 |
|---|---|---|
|
|
| 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. プロデューサーの例
トピックへの送信
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 自動設定
Spring Boot で aws2-ddb を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-aws2-sns-starter</artifactId> <version>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に記載される 25 のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| 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 | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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)
プロデューサーとコンシューマーの両方がサポート対象
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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
7.3. コンポーネントオプション
AWS Simple Queue Service (SQS) コンポーネントは、以下に示す 43 のオプションをサポートしています。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| amazonAWSHost (共通) | Amazon AWS クラウドのホスト名。 | amazonaws.com | String |
| amazonSQSClient (共通) | Autowired AmazonSQS をクライアントとして使用します。 | SqsClient | |
| autoCreateQueue (共通) | キューの自動作成の設定。 | false | boolean |
| configuration (共通) | AWS SQS のデフォルト設定。 | Sqs2Configuration | |
| overrideEndpoint (共通) | エンドポイントをオーバーライドする必要性を設定します。このオプションは uriEndpointOverride オプションと併用する必要があります。 | false | boolean |
| protocol (共通) | SQS との通信に使用される基礎となるプロトコル。 | https | String |
| proxyProtocol (common) | SQS クライアントをインスタンス化するときにプロキシープロトコルを定義します。 列挙値:
| 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 (コンシューマー) | 消費時に受け取る属性名のリスト。複数の値はコンマで区切ることができます。 | String | |
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| concurrentConsumers (コンシューマー) | 複数のスレッドを使用して sqs キューをポーリングし、スループットを向上させることができます。 | 1 | int |
| defaultVisibilityTimeout (コンシューマー) | デフォルトの表示タイムアウト (秒単位)。 | Integer | |
| deleteAfterRead (consumer) | メッセージが読まれた後、SQS からメッセージを削除します。 | true | boolean |
| deleteIfFiltered (コンシューマー) | キー Sqs2Constants#SQS_DELETE_FILTERED (CamelAwsSqsDeleteFiltered) が true に設定されたプロパティーが交換にある場合に、DeleteMessage を SQS キューに送信するかどうか。 | true | boolean |
| extendMessageVisibility (コンシューマー) | 有効にすると、スケジュールされたバックグラウンドタスクにより、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 (コンシューマー) | 消費時に受け取るメッセージ属性名のリスト。複数の値はコンマで区切ることができます。 | String | |
| serverSideEncryptionEnabled (consumer) | サーバー側の暗号化がキューで有効であるかどうかを定義します。 | false | boolean |
| visibilityTimeout (コンシューマー) | 受信したメッセージが、com.amazonaws.services.sqs.model.SetQueueAttributesRequest で設定する ReceiveMessage リクエストによって取得された後、後続の取得リクエストから非表示になる期間 (秒単位)。これは、defaultVisibilityTimeout とは異なる場合にのみ意味があります。キューの可視性タイムアウト属性を永続的に変更します。 | Integer | |
| waitTimeSeconds (コンシューマー) | メッセージがキューに入れられて応答に含まれるまで、ReceiveMessage アクション呼び出しが待機する時間 (0 から 20) です。 | Integer | |
| batchSeparator (プロデューサー) | 文字列を渡してバッチメッセージ操作を送信するときに、区切り記号を設定します。 | , | String |
| delaySeconds (プロデューサー) | 数秒間メッセージの送信を遅延します。 | Integer | |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| messageDeduplicationIdStrategy (producer) | FIFO キューの場合のみ。メッセージに messageDeduplicationId を設定するストラテジー。useExchangeId または useContentBasedDeduplication のいずれかをオプションとして使用できます。useContentBasedDeduplication オプションでは、メッセージに messageDeduplicationId が設定されません。 列挙値:
| useExchangeId | String |
| messageGroupIdStrategy (producer) | FIFO キューの場合のみ。メッセージに messageGroupId を設定するストラテジー。useConstant、useExchangeId、usePropertyValue のいずれかをオプションとして使用できます。usePropertyValue オプションでは、CamelAwsMessageGroupId プロパティーの値が使用されます。 列挙値:
| String | |
| operation (producer) | ユーザーがメッセージだけを送信したくない場合に行う操作。 列挙値:
| Sqs2Operations | |
| autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
| delayQueue (上級) | delaySeconds オプションをキューまたは単一のメッセージに適用するかどうかを定義します。 | false | boolean |
| queueUrl (上級) | queueUrl を明示的に定義します。queueUrl に影響を与えるその他のパラメーターはすべて無視されます。このパラメーターは、テストのために SQS の仮実装 (モック) に接続すること目的としています。 | String | |
| proxyHost (プロキシー) | SQS クライアントをインスタンス化するときにプロキシーホストを定義します。 | String | |
| proxyPort (プロキシー) | SQS クライアントをインスタンス化するときにプロキシーポートを定義します。 | Integer | |
| maximumMessageSize (キュー) | このキューの SQS メッセージに含めることができる maximumMessageSize (バイト単位)。 | Integer | |
| messageRetentionPeriod (queue) | このキューの SQS によってメッセージが保持される messageRetentionPeriod (秒単位)。 | Integer | |
| ポリシー (キュー) | このキューのポリシー。デフォルトではクラスパスからロードできますが、classpath:、file:、または http: の接頭辞を付けて、別のシステムからリソースをロードできます。 | String | |
| receiveMessageWaitTimeSeconds (queue) | 要求で WaitTimeSeconds を指定しない場合は、キュー属性 ReceiveMessageWaitTimeSeconds を使用して待機時間を決定します。 | Integer | |
| redrivePolicy (キュー) | DeadLetter キューにメッセージを送信するポリシーを指定します。Amazon ドキュメントで詳細を参照してください。 | String | |
| accessKey (security) | Amazon AWS Access Key。 | String | |
| secretKey (セキュリティー) | 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 (共通) | 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 クライアントをインスタンス化するときにプロキシープロトコルを定義します。 列挙値:
| 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 (コンシューマー) | 消費時に受け取る属性名のリスト。複数の値はコンマで区切ることができます。 | String | |
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| concurrentConsumers (コンシューマー) | 複数のスレッドを使用して sqs キューをポーリングし、スループットを向上させることができます。 | 1 | int |
| defaultVisibilityTimeout (コンシューマー) | デフォルトの表示タイムアウト (秒単位)。 | Integer | |
| deleteAfterRead (consumer) | メッセージが読まれた後、SQS からメッセージを削除します。 | true | boolean |
| deleteIfFiltered (コンシューマー) | キー Sqs2Constants#SQS_DELETE_FILTERED (CamelAwsSqsDeleteFiltered) が true に設定されたプロパティーが交換にある場合に、DeleteMessage を SQS キューに送信するかどうか。 | true | boolean |
| extendMessageVisibility (コンシューマー) | 有効にすると、スケジュールされたバックグラウンドタスクにより、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 (コンシューマー) | 各ポーリングのポーリング制限としてメッセージの最大数を取得します。デフォルトは無制限ですが、0 または負の数を使用して無制限として無効にします。 | int | |
| messageAttributeNames (コンシューマー) | 消費時に受け取るメッセージ属性名のリスト。複数の値はコンマで区切ることができます。 | String | |
| sendEmptyMessageWhenIdle (consumer) | ポーリングコンシューマーがファイルをポーリングしなかった場合、このオプションを有効にして、代わりに空のメッセージ (ボディーなし) を送信できます。 | false | boolean |
| serverSideEncryptionEnabled (consumer) | サーバー側の暗号化がキューで有効であるかどうかを定義します。 | false | boolean |
| visibilityTimeout (コンシューマー) | 受信したメッセージが、com.amazonaws.services.sqs.model.SetQueueAttributesRequest で設定する ReceiveMessage リクエストによって取得された後、後続の取得リクエストから非表示になる期間 (秒単位)。これは、defaultVisibilityTimeout とは異なる場合にのみ意味があります。キューの可視性タイムアウト属性を永続的に変更します。 | Integer | |
| waitTimeSeconds (コンシューマー) | メッセージがキューに入れられて応答に含まれるまで、ReceiveMessage アクション呼び出しが待機する時間 (0 から 20) です。 | Integer | |
| exceptionHandler (コンシューマー (上級)) | コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
| exchangePattern (コンシューマー (上級)) | コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
| pollStrategy (コンシューマー (上級)) | プラグ可能な org.apache.camel.PollingConsumerPollingStrategy を使用すると、エクスチェンジが作成され、Camel でルーティングされる前に、通常はポーリング操作中に発生するエラー処理を制御するカスタム実装が提供できます。 | PollingConsumerPollStrategy | |
| batchSeparator (プロデューサー) | 文字列を渡してバッチメッセージ操作を送信するときに、区切り記号を設定します。 | , | String |
| delaySeconds (プロデューサー) | 数秒間メッセージの送信を遅延します。 | Integer | |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| messageDeduplicationIdStrategy (producer) | FIFO キューの場合のみ。メッセージに messageDeduplicationId を設定するストラテジー。useExchangeId または useContentBasedDeduplication のいずれかをオプションとして使用できます。useContentBasedDeduplication オプションでは、メッセージに messageDeduplicationId が設定されません。 列挙値:
| useExchangeId | String |
| messageGroupIdStrategy (producer) | FIFO キューの場合のみ。メッセージに messageGroupId を設定するストラテジー。useConstant、useExchangeId、usePropertyValue のいずれかをオプションとして使用できます。usePropertyValue オプションでは、CamelAwsMessageGroupId プロパティーの値が使用されます。 列挙値:
| String | |
| operation (producer) | ユーザーがメッセージだけを送信したくない場合に行う操作。 列挙値:
| Sqs2Operations | |
| delayQueue (上級) | delaySeconds オプションをキューまたは単一のメッセージに適用するかどうかを定義します。 | false | boolean |
| queueUrl (上級) | queueUrl を明示的に定義します。queueUrl に影響を与えるその他のパラメーターはすべて無視されます。このパラメーターは、テストのために SQS の仮実装 (モック) に接続すること目的としています。 | String | |
| proxyHost (プロキシー) | SQS クライアントをインスタンス化するときにプロキシーホストを定義します。 | String | |
| proxyPort (プロキシー) | SQS クライアントをインスタンス化するときにプロキシーポートを定義します。 | Integer | |
| maximumMessageSize (キュー) | このキューの SQS メッセージに含めることができる maximumMessageSize (バイト単位)。 | Integer | |
| messageRetentionPeriod (queue) | このキューの SQS によってメッセージが保持される messageRetentionPeriod (秒単位)。 | Integer | |
| ポリシー (キュー) | このキューのポリシー。デフォルトではクラスパスからロードできますが、classpath:、file:、または http: の接頭辞を付けて、別のシステムからリソースをロードできます。 | String | |
| receiveMessageWaitTimeSeconds (queue) | 要求で WaitTimeSeconds を指定しない場合は、キュー属性 ReceiveMessageWaitTimeSeconds を使用して待機時間を決定します。 | Integer | |
| redrivePolicy (キュー) | DeadLetter キューにメッセージを送信するポリシーを指定します。Amazon ドキュメントで詳細を参照してください。 | String | |
| backoffErrorThreshold (スケジューラー) | backoffMultipler が開始する前に発生する必要がある後続のエラーポーリング (エラーによって失敗した) の数。 | int | |
| backoffIdleThreshold (スケジューラー) | backoffMultipler が開始する前に発生する必要がある後続のアイドルポーリングの数。 | int | |
| backoffMultiplier (スケジューラー) | 後続のアイドル状態/エラーが連続して発生した場合に、スケジュールされたポーリングコンシューマーのバックオフを許可します。乗数は、実際に次の試行が行われる前にスキップされるポーリングの数です。このオプションが使用されている場合は、backoffIdleThreshold や backoffErrorThreshold も設定する必要があります。 | int | |
| delay (スケジューラー) | 次のポーリングまでの時間 (ミリ秒単位)。 | 500 | long |
| greedy (スケジューラー) | greedy が有効で、以前の実行が 1 つ以上のメッセージをポーリングした場合、ScheduledPollConsumer は即座に再度実行されます。 | false | boolean |
| initialDelay (スケジューラー) | 最初のポーリングが開始されるまでの時間 (ミリ秒単位)。 | 1000 | long |
| repeatCount (スケジューラー) | 実行の最大数を指定します。そのため、これを 1 に設定するとスケジューラーは 1 度だけ実行されます。これを 5 に設定した場合、5 回だけ実行されます。0 または負の値を設定すると、無制限に実行されます。 | 0 | long |
| runLoggingLevel (scheduler) | コンシューマーはポーリング時に開始/完了のログ行を記録します。このオプションを使用すると、ログレベルを設定できます。 列挙値:
| TRACE | LoggingLevel |
| scheduledExecutorService (スケジューラー) | コンシューマーに使用するカスタム/共有スレッドプールを設定できます。デフォルトでは、各コンシューマーに独自の単一スレッドのスレッドプールがあります。 | ScheduledExecutorService | |
| scheduler (スケジューラー) | camel-spring または camel-quartz コンポーネントから cron スケジューラーを使用します。スケジューラーにビルドされた値 spring または quartz を使用。 | none | オブジェクト |
| schedulerProperties (スケジューラー) | カスタムスケジューラーまたは Quartz や Spring ベースのスケジューラーを使用する場合に、追加のプロパティーを設定します。 | マップ | |
| startScheduler (スケジューラー) | スケジューラーを自動起動するかどうか。 | true | boolean |
| timeUnit (スケジューラー) | initialDelay および delay オプションの時間単位。 列挙値:
| MILLISECONDS | TimeUnit |
| useFixedDelay (スケジューラー) | 固定遅延または固定レートを使用するかどうかを制御します。詳細は、JDK の ScheduledExecutorService を参照してください。 | true | boolean |
| accessKey (security) | Amazon AWS Access Key。 | String | |
| secretKey (セキュリティー) | Amazon AWS Secret Key。 | String |
必須の SQS コンポーネントオプション
Amazon の SQS にアクセスするには、レジストリーに amazonDDBClient を指定するか、accessKey と secretKey を指定する必要があります。
7.5. バッチコンシューマー
このコンポーネントは、Batch Consumer を実装します。
これにより、たとえば、このバッチに存在するメッセージの数を知ることができ、たとえば、Aggregator にこの数のメッセージを集約させることができます。
7.6. 用途
7.6.1. 静的認証情報とデフォルトの認証情報プロバイダーの比較
useDefaultCredentialsProvider オプションを指定し、これを true に設定することにより、明示的な静的認証情報の使用を回避することが可能です。
-
Java system properties -
aws.accessKeyIdandaws.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 プロデューサーによって設定されるメッセージヘッダー
| ヘッダー | タイプ | 説明 |
|---|---|---|
|
|
| Amazon SQS メッセージの MD5 チェックサム。 |
|
|
| Amazon SQS メッセージ ID。 |
|
|
| Amazon SQS メッセージが他のユーザーに表示される遅延秒数。 |
7.6.3. SQS コンシューマーによって設定されるメッセージヘッダー
| ヘッダー | タイプ | 説明 |
|---|---|---|
|
|
| Amazon SQS メッセージの MD5 チェックサム。 |
|
|
| Amazon SQS メッセージ ID。 |
|
|
| Amazon SQS メッセージ受信ハンドル。 |
|
|
| 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. サーバー側の暗号化
キューには一連のサーバー側暗号化属性があります。関連するオプションは、serverSideEncryptionEnabled、keyMasterKeyId、および kmsDataKeyReusePeriod です。SSE はデフォルトで無効になっています。オプションを明示的に true に設定し、関連するパラメーターをキュー属性として設定する必要があります。
7.7. JMS スタイルのセレクター
SQS ではセレクターを使用できませんが、キャメルフィルター EIP を使用して適切な visibilityTimeout を設定することで効果的にこれを実現できます。SQS がメッセージをディスパッチするとき、DeleteMessage が受信されない限り、可視性タイムアウトまで待機してから、別のコンシューマーにメッセージをディスパッチしようとします。デフォルトでは、ルートが失敗に終わっていない限り、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 ミリ秒後、メッセージは他のコンシューマーに表示されます。
フィルタリングされている場合、プロパティー Sqs2Constants.SQS_DELETE_FILTERED を true に設定して、Camel に DeleteMessage を送信するように指示する必要があることに注意してください。
7.8. 利用可能なプロデューサー操作
- 単一メッセージ (デフォルト)
- 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)®ion=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)®ion=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)®ion=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)®ion=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)®ion=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 自動設定
Spring Boot で aws2-ddb を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-aws2-sqs-starter</artifactId> <version>3.14.5.redhat-00032</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 | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは 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 | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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
プロデューサーとコンシューマーの両方がサポート対象
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>3.14.5.redhat-00018</version>
<!-- use the same version as your Camel core version -->
</dependency>8.1. URI 形式
azure-storage-blob://accountName[/containerName][?options]
コンシューマーの場合、accountName、containerName が必要です。プロデューサーの場合、要求される操作によって異なります。たとえば、操作がコンテナーレベルである場合、たとえば createContainer の場合、accountName と containerName のみが必要ですが、BLOB レベルで操作が要求される場合、たとえば、getBlob、accountName、containerName、および blobName は必須です。
BLOB がまだ存在しない場合は作成されます。URI には、次の形式でクエリーオプションを追加できます。
?options=value&option2=value&…
8.2. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
8.2.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
8.2.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
8.3. コンポーネントオプション
Azure Storage Blob Service コンポーネントは、以下に示す 31 のオプションをサポートしています。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| blobName (共通) | コンテナーから特定の BLOB を使用するための BLOB 名。ただし、プロデューサーでは、BLOB レベルでの操作にのみ必要です。 | String | |
| blobOffset (共通) | アップロードまたはダウンロード操作の BLOB オフセットを設定します。デフォルトは 0 です。 | 0 | long |
| blobType (共通) | BLOB の種類ごとに適切な設定を開始するための BLOB の種類。 列挙値:
| blockblob | BlobType |
| closeStreamAfterRead (common) | 読み取り後にストリームを閉じるか、開いたままにします。デフォルトは true です。 | true | boolean |
| configuration (共通) | コンポーネントの設定。 | BlobConfiguration | |
| credentials (共通) | StorageSharedKeyCredential を挿入して Azure クライアントを作成できます。これには重要な認証情報が保持されます。 | StorageSharedKeyCredential | |
| dataCount (共通) | 範囲に含めるバイト数。指定する場合は、0 以上である必要があります。 | Long | |
| fileDir (共通) | ダウンロードされた BLOB が保存されるファイルディレクトリー。これはプロデューサーとコンシューマーの両方で使用できます。 | 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 (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| blobSequenceNumber (producer) | リクエストの追跡に使用できるユーザー制御の値。シーケンス番号の値は、0 から 263 - 1 の間でなければなりません。デフォルト値は 0 です。 | 0 | Long |
| blockListType (プロデューサー) | 返すブロックのタイプを指定します。 列挙値:
| COMMITTED | BlockListType |
| changeFeedContext (producer) | getChangeFeed プロデューサーオペレーションを使用する場合は、これにより、サービス呼び出し中に Http パイプラインを介して渡される追加のコンテキストが提供されます。 | コンテキスト | |
| changeFeedEndTime (producer) | getChangeFeed プロデューサーオペレーションを使用する場合は、これにより結果がフィルター処理され、終了時刻のほぼ前にイベントが返されます。注意: 次の 1 時間に属するいくつかのイベントも返される可能性があります。この時間に属するいくつかのイベントが欠落している可能性があります。その時間のすべてのイベントが確実に返されるようにするには、終了時間を 1 時間単位で切り上げます。 | OffsetDateTime | |
| changeFeedStartTime (producer) | getChangeFeed プロデューサー操作を使用する場合は、これにより結果がフィルター処理され、開始時刻のほぼ後にイベントが返されます。注意: 前の時間に属するいくつかのイベントも返される可能性があります。この時間に属するいくつかのイベントが欠落している可能性があります。その時間のすべてのイベントが確実に返されるようにするには、開始時間を 1 時間単位で切り捨てます。 | OffsetDateTime | |
| closeStreamAfterWrite (プロデューサー) | 書き込み後にストリームを閉じるか、開いたままにします。デフォルトは true です。 | true | boolean |
| commitBlockListLater (producer) | true に設定されていると、ステージングされたブロックは直接コミットされません。 | true | boolean |
| createAppendBlob (プロデューサー) | true に設定されていると、追加ブロックのコミット時に追加ブロックが作成されます。 | true | boolean |
| createPageBlob (producer) | true に設定すると、ページブロブのアップロード時にページ Blob が作成されます。 | true | boolean |
| downloadLinkExpiration (プロデューサー) | URL ダウンロードリンクのデフォルトの有効期限 (ミリ秒) をオーバーライドします。 | Long | |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| operation (producer) | プロデューサーのこのコンポーネントで使用できる Blob 操作。 列挙値:
| listBlobContainers | BlobOperationsDefinition |
| pageBlobSize (producer) | ページ BLOB の最大サイズを 8 TB まで指定します。ページ BLOB のサイズは、512 バイトの境界に合わせる必要があります。 | 512 | Long |
| autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
| accessKey (security) | Azure Blob サービスでの認証に使用される、関連付けられた Azure アカウント名のアクセスキー。 | String | |
| sourceBlobAccessKey (セキュリティー) | ソース Blob アクセスキー: copyblob 操作では、コピーするソース Blob の accessKey が必要です。accessKey をヘッダーとして渡すと、安全ではないため、キーとして設定できます。 | String |
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 名。ただし、プロデューサーでは、BLOB レベルでの操作にのみ必要です。 | String | |
| blobOffset (共通) | アップロードまたはダウンロード操作の BLOB オフセットを設定します。デフォルトは 0 です。 | 0 | long |
| blobServiceClient (共通) | ストレージアカウントへのクライアント。このクライアントは、特定のストレージアカウントに関する状態を保持しませんが、サービス上のリソースに適切な要求を送信する便利な方法です。また、BLOB およびコンテナーへの URL を作成するために使用することもできます。このクライアントには、サービスアカウントに対する操作が含まれています。コンテナーに対する操作は、BlobServiceClient#getBlobContainerClient(String) を介して BlobContainerClient で利用でき、ブロブに対する操作は、getBlobContainerClient(String).getBlobClient(String) を介して BlobClient で利用できます。 | BlobServiceClient | |
| blobType (共通) | BLOB の種類ごとに適切な設定を開始するための BLOB の種類。 列挙値:
| blockblob | BlobType |
| closeStreamAfterRead (common) | 読み取り後にストリームを閉じるか、開いたままにします。デフォルトは true です。 | true | boolean |
| credentials (共通) | StorageSharedKeyCredential を挿入して Azure クライアントを作成できます。これには重要な認証情報が保持されます。 | StorageSharedKeyCredential | |
| dataCount (共通) | 範囲に含めるバイト数。指定する場合は、0 以上である必要があります。 | Long | |
| fileDir (共通) | ダウンロードされた BLOB が保存されるファイルディレクトリー。これはプロデューサーとコンシューマーの両方で使用できます。 | 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 (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| sendEmptyMessageWhenIdle (consumer) | ポーリングコンシューマーがファイルをポーリングしなかった場合、このオプションを有効にして、代わりに空のメッセージ (ボディーなし) を送信できます。 | false | boolean |
| exceptionHandler (コンシューマー (上級)) | コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
| exchangePattern (コンシューマー (上級)) | コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
| pollStrategy (コンシューマー (上級)) | プラグ可能な org.apache.camel.PollingConsumerPollingStrategy を使用すると、エクスチェンジが作成され、Camel でルーティングされる前に、通常はポーリング操作中に発生するエラー処理を制御するカスタム実装が提供できます。 | PollingConsumerPollStrategy | |
| blobSequenceNumber (producer) | リクエストの追跡に使用できるユーザー制御の値。シーケンス番号の値は、0 から 263 - 1 の間でなければなりません。デフォルト値は 0 です。 | 0 | Long |
| blockListType (プロデューサー) | 返すブロックのタイプを指定します。 列挙値:
| COMMITTED | BlockListType |
| changeFeedContext (producer) | getChangeFeed プロデューサーオペレーションを使用する場合は、これにより、サービス呼び出し中に Http パイプラインを介して渡される追加のコンテキストが提供されます。 | コンテキスト | |
| changeFeedEndTime (producer) | getChangeFeed プロデューサーオペレーションを使用する場合は、これにより結果がフィルター処理され、終了時刻のほぼ前にイベントが返されます。注意: 次の 1 時間に属するいくつかのイベントも返される可能性があります。この時間に属するいくつかのイベントが欠落している可能性があります。その時間のすべてのイベントが確実に返されるようにするには、終了時間を 1 時間単位で切り上げます。 | OffsetDateTime | |
| changeFeedStartTime (producer) | getChangeFeed プロデューサー操作を使用する場合は、これにより結果がフィルター処理され、開始時刻のほぼ後にイベントが返されます。注意: 前の時間に属するいくつかのイベントも返される可能性があります。この時間に属するいくつかのイベントが欠落している可能性があります。その時間のすべてのイベントが確実に返されるようにするには、開始時間を 1 時間単位で切り捨てます。 | OffsetDateTime | |
| closeStreamAfterWrite (プロデューサー) | 書き込み後にストリームを閉じるか、開いたままにします。デフォルトは true です。 | true | boolean |
| commitBlockListLater (producer) | true に設定されていると、ステージングされたブロックは直接コミットされません。 | true | boolean |
| createAppendBlob (プロデューサー) | true に設定されていると、追加ブロックのコミット時に追加ブロックが作成されます。 | true | boolean |
| createPageBlob (producer) | true に設定すると、ページブロブのアップロード時にページ Blob が作成されます。 | true | boolean |
| downloadLinkExpiration (プロデューサー) | URL ダウンロードリンクのデフォルトの有効期限 (ミリ秒) をオーバーライドします。 | Long | |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| operation (producer) | プロデューサーのこのコンポーネントで使用できる Blob 操作。 列挙値:
| listBlobContainers | BlobOperationsDefinition |
| pageBlobSize (producer) | ページ BLOB の最大サイズを 8 TB まで指定します。ページ BLOB のサイズは、512 バイトの境界に合わせる必要があります。 | 512 | Long |
| backoffErrorThreshold (スケジューラー) | backoffMultipler が開始する前に発生する必要がある後続のエラーポーリング (エラーによって失敗した) の数。 | int | |
| backoffIdleThreshold (スケジューラー) | backoffMultipler が開始する前に発生する必要がある後続のアイドルポーリングの数。 | int | |
| backoffMultiplier (スケジューラー) | 後続のアイドル状態/エラーが連続して発生した場合に、スケジュールされたポーリングコンシューマーのバックオフを許可します。乗数は、実際に次の試行が行われる前にスキップされるポーリングの数です。このオプションが使用されている場合は、backoffIdleThreshold や backoffErrorThreshold も設定する必要があります。 | int | |
| delay (スケジューラー) | 次のポーリングまでの時間 (ミリ秒単位)。 | 500 | long |
| greedy (スケジューラー) | greedy が有効で、以前の実行が 1 つ以上のメッセージをポーリングした場合、ScheduledPollConsumer は即座に再度実行されます。 | false | boolean |
| initialDelay (スケジューラー) | 最初のポーリングが開始されるまでの時間 (ミリ秒単位)。 | 1000 | long |
| repeatCount (スケジューラー) | 実行の最大数を指定します。そのため、これを 1 に設定するとスケジューラーは 1 度だけ実行されます。これを 5 に設定した場合、5 回だけ実行されます。0 または負の値を設定すると、無制限に実行されます。 | 0 | long |
| runLoggingLevel (scheduler) | コンシューマーはポーリング時に開始/完了のログ行を記録します。このオプションを使用すると、ログレベルを設定できます。 列挙値:
| TRACE | LoggingLevel |
| scheduledExecutorService (スケジューラー) | コンシューマーに使用するカスタム/共有スレッドプールを設定できます。デフォルトでは、各コンシューマーに独自の単一スレッドのスレッドプールがあります。 | ScheduledExecutorService | |
| scheduler (スケジューラー) | camel-spring または camel-quartz コンポーネントから cron スケジューラーを使用します。スケジューラーにビルドされた値 spring または quartz を使用。 | none | オブジェクト |
| schedulerProperties (スケジューラー) | カスタムスケジューラーまたは Quartz や Spring ベースのスケジューラーを使用する場合に、追加のプロパティーを設定します。 | マップ | |
| startScheduler (スケジューラー) | スケジューラーを自動起動するかどうか。 | true | boolean |
| timeUnit (スケジューラー) | initialDelay および delay オプションの時間単位。 列挙値:
| MILLISECONDS | TimeUnit |
| useFixedDelay (スケジューラー) | 固定遅延または固定レートを使用するかどうかを制御します。詳細は、JDK の ScheduledExecutorService を参照してください。 | true | boolean |
| accessKey (security) | Azure Blob サービスでの認証に使用される、関連付けられた Azure アカウント名のアクセスキー。 | String | |
| sourceBlobAccessKey (セキュリティー) | ソース Blob アクセスキー: copyblob 操作では、コピーするソース Blob の accessKey が必要です。accessKey をヘッダーとして渡すと、安全ではないため、キーとして設定できます。 | String |
必須情報オプション
このコンポーネントを使用するには、必要な Azure 認証情報を提供するための 3 つのオプションがあります。
-
Azure アカウントの
accountNameとaccessKeyを指定します。これが最も簡単な開始方法です。accessKey は、Azure portal から生成できます。 -
認証情報オプションに提供できる StorageSharedKeyCredential インスタンスを提供します。 -
blobServiceClientに提供できる BlobServiceClient インスタンスを提供します。注: 特定のクライアントを作成する必要はありません (例: BlockBlobClient)。BlobServiceClient は、下位レベルのクライアントを取得するために使用できる上位レベルを表します。
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. コンポーネントプロデューサーによって評価されるメッセージヘッダー
| ヘッダー | 変数名 | タイプ | 操作 | 説明 |
|---|---|---|---|---|
|
|
|
| すべて | それを超えると {@link RuntimeException} が発生する任意のタイムアウト値。 |
|
|
|
| コンテナーと BLOB に関する操作 | コンテナーまたは BLOB に関連付けるメタデータ。 |
|
|
|
|
|
このコンテナー内のデータを公開する方法を指定します。パブリックアクセスがない場合は |
|
|
|
| コンテナーと BLOB に関する操作 | これには、さまざまな要求の正常な動作を現在の条件に制限する値が含まれています。これらの条件は完全にオプションです。 |
|
|
|
|
| 特定のブロブを一覧表示するための詳細 |
|
|
|
|
| 結果をフィルター処理して、名前が指定された接頭辞で始まる BLOB のみを返します。すべての BLOB を返すには null の場合があります。 |
|
|
|
|
| すべての BlobPrefix 要素を含め、返される BLOB の最大数を指定します。要求で maxResultsPerPage が指定されていないか、5,000 を超える値が指定されている場合、サーバーは最大 5,000 項目を返します。 |
|
|
|
|
| {@link BlobContainerClient} オブジェクトで listBlobsFlatSegment への呼び出しの動作を設定するために使用できるオプションを定義します。 |
|
|
|
|
| 一連の操作の追加パラメーター。 |
|
|
|
|
| AccessTier の値を定義します。 |
|
|
|
| BLOB のアップロードに関連するほとんどの操作 | ブロックコンテンツの MD5 ハッシュ。このハッシュは、転送中にブロックの整合性を検証するために使用されます。このヘッダーが指定されている場合、ストレージサービスは、到着したコンテンツのハッシュとこのヘッダー値を比較します。この MD5 ハッシュは BLOB には保存されないことに注意してください。2 つのハッシュが一致しない場合、操作は失敗します。 |
|
|
|
| ページブロブに関連する操作 | {@link PageRange} オブジェクト。ページを 512 バイトの境界に揃える必要がある場合、開始オフセットは 512 の係数である必要があり、終了オフセットは 512 - 1 の係数である必要があります。有効なバイト範囲の例は、0 - 511、512 - 1023 などです。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 返すブロックのタイプを指定します。 |
|
|
|
|
| ページ BLOB の最大サイズを 8 TB まで指定します。ページ BLOB のサイズは、512 バイトの境界に合わせる必要があります。 |
|
|
|
|
| リクエストの追跡に使用できるユーザー制御の値。シーケンス番号の値は、0 から 2^63 - 1 の間でなければなりません。デフォルト値は 0 です。 |
|
|
|
|
| この BLOB のスナップショットを削除するための動作を指定します。\{@code Include} は、ベース BLOB とすべてのスナップショットを削除します。\{@code Only} はスナップショットのみを削除します。スナップショットが削除されている場合は、null を渡す必要があります。 |
|
|
|
|
| サービスによって返されるデータを指定する {@link ListBlobContainersOptions}。 |
|
|
|
|
| ファイルへのダウンロードに使用する {@link ParallelTransferOptions}。並列転送数パラメーターは無視されます。 |
|
|
|
|
| ダウンロードした BLOB が保存されるファイルディレクトリー。 |
|
|
|
|
| URL ダウンロードリンクのデフォルトの有効期限 (ミリ秒) をオーバーライドします。 |
|
|
|
| ブロブに関連する操作 | 交換ヘッダーの BLOB 名をオーバーライド/設定します。 |
|
|
|
| コンテナーと BLOB に関する操作 | 交換ヘッダーのコンテナー名をオーバーライド/設定します。 |
|
|
|
| すべて | 実行するプロデューサー操作を指定します。プロデューサー操作に関連するこのページのドキュメントを参照してください。 |
|
|
|
|
| 結果をフィルタリングして、指定された正規表現と名前が一致する BLOB のみを返します。すべてを返すには null の場合があります。接頭辞と正規表現の両方が設定されている場合、正規表現が優先され、接頭辞は無視されます。 |
|
|
|
|
| 結果をフィルタリングして、開始時刻の前後のイベントを返します。注意: 前の時間に属するいくつかのイベントも返される可能性があります。この時間に属するいくつかのイベントが欠落している可能性があります。その時間のすべてのイベントが確実に返されるようにするには、開始時間を 1 時間単位で切り捨てます。 |
|
|
|
|
| 結果をフィルタリングして、終了時刻のほぼ前にイベントを返します。注意: 次の 1 時間に属するいくつかのイベントも返される可能性があります。この時間に属するいくつかのイベントが欠落している可能性があります。その時間のすべてのイベントが確実に返されるようにするには、終了時間を 1 時間単位で切り上げます。 |
|
|
|
|
| これにより、サービス呼び出し中に Http パイプラインを介して渡される追加のコンテキストが提供されます。 |
|
|
|
|
| コピー BLOB 操作でソースアカウント名として使用されるソース BLOB アカウント名 |
|
|
|
|
| コピー BLOB 操作でソースコンテナー名として使用されるソース BLOB コンテナー名 |
8.5.2. コンポーネントのプロデューサーまたはコンシューマーによって設定されるメッセージヘッダー
| ヘッダー | 変数名 | タイプ | 説明 |
|---|---|---|---|
|
|
|
| BLOB のアクセス層。 |
|
|
|
| BLOB のアクセス層が最後に変更された日時。 |
|
|
|
| BLOB のアーカイブステータス。 |
|
|
|
| ブロブの作成時間。 |
|
|
|
| ページ BLOB の現在のシーケンス番号。 |
|
|
|
| ブロブのサイズ。 |
|
|
|
| ブロブのタイプ。 |
|
|
|
| BLOB に指定されたキャッシュコントロール。 |
|
|
|
| 追加 BLOB にコミットされたブロックの数 |
|
|
|
| BLOB に指定されたコンテンツの配置。 |
|
|
|
| BLOB に指定されたコンテンツエンコーディング。 |
|
|
|
| BLOB に指定されたコンテンツ言語。 |
|
|
|
| BLOB に指定されたコンテンツ MD5。 |
|
|
|
| BLOB に指定されたコンテンツタイプ。 |
|
|
|
| BLOB に対する最後のコピー操作が完了した日時。 |
|
|
|
| BLOB の最後の増分コピースナップショットのスナップショット識別子。 |
|
|
|
| BLOB に対して実行された最後のコピー操作の識別子。 |
|
|
|
| BLOB に対して実行された最後のコピー操作の状態。 |
|
|
|
| BLOB に対して実行された最後のコピー操作のソース。 |
|
|
|
| BLOB に対して実行された最後のコピー操作の状態。 |
|
|
|
| BLOB に対する最後のコピー操作の説明。 |
|
|
|
| ブロブの E タグ |
|
|
|
| BLOB のアクセス層が BLOB のプロパティーから推測されたかどうかを示すフラグ。 |
|
|
|
| BLOB が増分コピーされたかどうかを示すフラグ。 |
|
|
|
| BLOB のコンテンツがサーバー上で暗号化されているかどうかを示すフラグ。 |
|
|
|
| BLOB が最後に変更された日時。 |
|
|
|
| BLOB のリースの種類。 |
|
|
|
| BLOB のリースの状態。 |
|
|
|
| BLOB のリースのステータス。 |
|
|
|
| BLOB に関連付けられた追加のメタデータ。 |
|
|
|
| ブロックがブロック BLOB にコミットされたオフセット。 |
|
|
|
|
操作 |
|
|
|
|
|
|
|
|
| ユーザーが使用できる解析されていない httpHeaders を返します。 |
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 プロデューサーの操作
Camel Azure Storage Blob コンポーネントは、プロデューサー側で幅広い操作を提供します。
サービスレベルの操作
これらの操作には、accountName が 必要 です。
| 操作 | 説明 |
|---|---|
|
| ブロブの内容を取得します。この操作の出力をブロブ範囲に制限できます。 |
|
| ストレージアカウント内の BLOB と BLOB メタデータに発生したすべての変更のトランザクションログを返します。変更フィードは、これらの変更の順序付けられた、保証された、永続的で不変の読み取り専用ログを提供します。 |
コンテナーレベルでの操作
これらの操作には、accountName と containerName が 必要です。
| 操作 | 説明 |
|---|---|
|
| ストレージアカウント内に新しいコンテナーを作成します。同じ名前のコンテナーがすでに存在する場合、プロデューサーはそれを無視します。 |
|
| ストレージアカウント内の指定されたコンテナーを削除します。コンテナーが存在しない場合、操作は失敗します。 |
|
| フォルダー構造がフラット化された、このコンテナー内の BLOB のリストを返します。 |
BLOB レベルでの操作
これらの操作では、accountName、containerName、および blobName が 必須です。
| 操作 | ブロブの種類 | 説明 |
|---|---|---|
|
| 共通 | ブロブの内容を取得します。この操作の出力をブロブ範囲に制限できます。 |
|
| 共通 | ブロブを削除します。 |
|
| 共通 | パスで指定されたファイルに BLOB 全体をダウンロードします。ファイルが作成されますが、存在してはなりません。ファイルがすでに存在する場合、{@link FileAlreadyExistsException} が出力されます。 |
|
| 共通 | Shared Access Signature (SAS) を使用して、指定された BLOB のダウンロードリンクを生成します。デフォルトでは、これは許可されたアクセスを 1 時間に制限します。ただし、ヘッダーを使用してデフォルトの有効期限をオーバーライドできます。 |
|
| BlockBlob | 新しいブロック BLOB を作成するか、既存のブロック BLOB の内容を更新します。既存のブロック BLOB を更新すると、BLOB の既存のメタデータが上書きされます。PutBlob では部分的な更新はサポートされていません。既存の BLOB のコンテンツは新しいコンテンツで上書きされます。 |
|
|
|
指定されたブロックをブロック BLOB のステージング領域にアップロードし、後で commitBlobBlockList の呼び出しによってコミットします。ただし、ヘッダー |
|
|
|
BLOB を設定するブロック ID のリストを指定して、BLOB を書き込みます。ブロックが BLOB の一部として書き込まれるためには、ブロックが前の |
|
|
| 指定されたブロックリストフィルターを使用して、ブロック BLOB の一部としてアップロードされたブロックのリストを返します。 |
|
|
| 長さ 0 の追加 BLOB を作成します。commitAppendBlo`b 操作を呼び出して、追加 BLOB にデータを追加します。 |
|
|
|
新しいデータブロックを既存の追加 BLOB の末尾にコミットします。ヘッダー |
|
|
|
指定された長さのページ BLOB を作成します。 |
|
|
|
1 つ以上のページをページ BLOB に書き込みます。書き込みサイズは 512 の倍数である必要があります。ヘッダー |
|
|
| ページ BLOB のサイズを指定されたサイズ (512 の倍数である必要があります) に変更します。 |
|
|
| 指定されたページをページ BLOB から解放します。範囲のサイズは 512 の倍数でなければなりません。 |
|
|
| ページ BLOB またはページ BLOB のスナップショットの有効なページ範囲のリストを返します。 |
|
|
| 異なるアカウントからでも、あるコンテナーから別のコンテナーに BLOB をコピーします。 |
これらの操作を camel アプリケーションで使用する方法については、このページの例のセクションを参照してください。
8.5.6. コンシューマーの例
ファイルコンポーネントを使用して 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");また、コンポーネントはバッチコンシューマーをサポートしているため、コンテナー名を指定するだけで複数の BLOB を使用できます。コンシューマーは、コンテナー内の BLOB の数に応じて複数の交換を返します。
例
from("azure-storage-blob://camelazure/container1?accountName=yourAccountName&accessKey=yourAccessKey&fileDir=/var/to/awesome/dir").
to("mock:results");
8.5.7. プロデューサー操作の例
-
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 自動設定
Spring Boot で azure-storage-blob を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-azure-storage-blob-starter</artifactId> <version>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に記載される 32 のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| 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 名。ただし、プロデューサーでは、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 | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | ブール値 |
| camel.component.azure-storage-blob.change-feed-context | getChangeFeed プロデューサーオペレーションを使用する場合は、これにより、サービス呼び出し中に Http パイプラインを介して渡される追加のコンテキストが提供されます。オプションは com.azure.core.util.Context 型です。 | コンテキスト | |
| camel.component.azure-storage-blob.change-feed-end-time | getChangeFeed プロデューサーオペレーションを使用する場合は、これにより結果がフィルター処理され、終了時刻のほぼ前にイベントが返されます。注意: 次の 1 時間に属するいくつかのイベントも返される可能性があります。この時間に属するいくつかのイベントが欠落している可能性があります。その時間のすべてのイベントが確実に返されるようにするには、終了時間を 1 時間単位で切り上げます。オプションは java.time.OffsetDateTime 型です。 | OffsetDateTime | |
| camel.component.azure-storage-blob.change-feed-start-time | getChangeFeed プロデューサー操作を使用する場合は、これにより結果がフィルター処理され、開始時刻のほぼ後にイベントが返されます。注意: 前の時間に属するいくつかのイベントも返される可能性があります。この時間に属するいくつかのイベントが欠落している可能性があります。その時間のすべてのイベントが確実に返されるようにするには、開始時間を 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 が保存されるファイルディレクトリー。これはプロデューサーとコンシューマーの両方で使用できます。 | String | |
| camel.component.azure-storage-blob.lazy-start-producer | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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 | プロデューサーのこのコンポーネントで使用できる 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 ストレージキューサービス
プロデューサーとコンシューマーの両方がサポート対象
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>3.14.5.redhat-00018</version>
<!-- use the same version as your Camel core version -->
</dependency>9.1. URI 形式
azure-storage-queue://accountName[/queueName][?options]
コンシューマーの場合、accountName と queueName が必要です。プロデューサーの場合は、要求される操作によって異なります。たとえば、操作がサービスレベルである場合は 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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
9.3. コンポーネントオプション
Azure Storage Queue Service コンポーネントは、以下に示す 15 のオプションをサポートしています。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| configuration (共通) | コンポーネントの設定。 | QueueConfiguration | |
| serviceClient (共通) | Autowired サービスクライアントをストレージアカウントに接続して、キューサービスとやり取りします。このクライアントは、特定のストレージアカウントに関する状態を保持しませんが、サービス上のリソースに適切な要求を送信する便利な方法です。このクライアントには、Azure Storage のキューアカウントを操作するためのすべての操作が含まれています。クライアントによって許可される操作は、キューの作成、一覧表示、および削除、アカウントのプロパティーの取得と更新、およびアカウントの統計の取得です。 | QueueServiceClient | |
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| createQueue (プロデューサー) | true に設定すると、メッセージを送信するときにキューが自動的に作成されます。 | false | boolean |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| operation (producer) | プロデューサーへのキューサービス操作のヒント。 列挙値:
| QueueOperationDefinition | |
| autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
| maxMessages (キュー) | 取得するメッセージの最大数。要求された数よりもキューに存在するメッセージが少ない場合は、すべてのメッセージが返されます。空のままにすると、1 つのメッセージのみが取得されます。許可される範囲は 1 から 32 のメッセージです。 | 1 | Integer |
| messageId (queue) | 削除または更新するメッセージの ID。 | String | |
| popReceipt (queue) | メッセージを削除または更新するために一致する必要がある一意の識別子。 | String | |
| タイムアウト (キュー) | 操作に適用されるオプションのタイムアウト。タイムアウトが終了する前に応答が返されない場合、RuntimeException が出力されます。 | 期間 | |
| timeToLive (キュー) | メッセージがキュー内で存続する時間。設定されていない場合、値はデフォルトで 7 日になります。-1 が渡されると、メッセージは期限切れになりません。存続時間は -1 または任意の正の数でなければなりません。形式は PnDTnHnMn.nS の形式である必要があります (例: PT20.345S は 20.345 秒として解析し、P2D は、2 日として解析)。ただし、EndpointDsl/ComponentDsl を使用している場合は、これらの Java API はタイプセーフであるため、Duration.ofSeconds() のようなものが可能になります。 | 期間 | |
| visibilityTimeout (キュー) | メッセージがキューに表示されないタイムアウト期間。タイムアウトは 1 秒から 7 日の間にする必要があります。形式は PnDTnHnMn.nS の形式である必要があります (例: PT20.345S は 20.345 秒として解析し、P2D は、2 日として解析)。ただし、EndpointDsl/ComponentDsl を使用している場合は、これらの Java API はタイプセーフであるため、Duration.ofSeconds() のようなものが可能になります。 | 期間 | |
| accessKey (security) | azure キューサービスでの認証に使用される、関連付けられた azure アカウント名のアクセスキー。 | String | |
| 認証情報 (セキュリティー) | StorageSharedKeyCredential を挿入して Azure クライアントを作成できます。これには重要な認証情報が保持されます。 | StorageSharedKeyCredential |
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 (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| sendEmptyMessageWhenIdle (consumer) | ポーリングコンシューマーがファイルをポーリングしなかった場合、このオプションを有効にして、代わりに空のメッセージ (ボディーなし) を送信できます。 | false | boolean |
| exceptionHandler (コンシューマー (上級)) | コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
| exchangePattern (コンシューマー (上級)) | コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
| pollStrategy (コンシューマー (上級)) | プラグ可能な org.apache.camel.PollingConsumerPollingStrategy を使用すると、エクスチェンジが作成され、Camel でルーティングされる前に、通常はポーリング操作中に発生するエラー処理を制御するカスタム実装が提供できます。 | PollingConsumerPollStrategy | |
| createQueue (プロデューサー) | true に設定すると、メッセージを送信するときにキューが自動的に作成されます。 | false | boolean |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| operation (producer) | プロデューサーへのキューサービス操作のヒント。 列挙値:
| QueueOperationDefinition | |
| maxMessages (キュー) | 取得するメッセージの最大数。要求された数よりもキューに存在するメッセージが少ない場合は、すべてのメッセージが返されます。空のままにすると、1 つのメッセージのみが取得されます。許可される範囲は 1 から 32 のメッセージです。 | 1 | Integer |
| messageId (queue) | 削除または更新するメッセージの ID。 | String | |
| popReceipt (queue) | メッセージを削除または更新するために一致する必要がある一意の識別子。 | String | |
| タイムアウト (キュー) | 操作に適用されるオプションのタイムアウト。タイムアウトが終了する前に応答が返されない場合、RuntimeException が出力されます。 | 期間 | |
| timeToLive (キュー) | メッセージがキュー内で存続する時間。設定されていない場合、値はデフォルトで 7 日になります。-1 が渡されると、メッセージは期限切れになりません。存続時間は -1 または任意の正の数でなければなりません。形式は PnDTnHnMn.nS の形式である必要があります (例: PT20.345S は 20.345 秒として解析し、P2D は、2 日として解析)。ただし、EndpointDsl/ComponentDsl を使用している場合は、これらの Java API はタイプセーフであるため、Duration.ofSeconds() のようなものが可能になります。 | 期間 | |
| visibilityTimeout (キュー) | メッセージがキューに表示されないタイムアウト期間。タイムアウトは 1 秒から 7 日の間にする必要があります。形式は PnDTnHnMn.nS の形式である必要があります (例: PT20.345S は 20.345 秒として解析し、P2D は、2 日として解析)。ただし、EndpointDsl/ComponentDsl を使用している場合は、これらの Java API はタイプセーフであるため、Duration.ofSeconds() のようなものが可能になります。 | 期間 | |
| backoffErrorThreshold (スケジューラー) | backoffMultipler が開始する前に発生する必要がある後続のエラーポーリング (エラーによって失敗した) の数。 | int | |
| backoffIdleThreshold (スケジューラー) | backoffMultipler が開始する前に発生する必要がある後続のアイドルポーリングの数。 | int | |
| backoffMultiplier (スケジューラー) | 後続のアイドル状態/エラーが連続して発生した場合に、スケジュールされたポーリングコンシューマーのバックオフを許可します。乗数は、実際に次の試行が行われる前にスキップされるポーリングの数です。このオプションが使用されている場合は、backoffIdleThreshold や backoffErrorThreshold も設定する必要があります。 | int | |
| delay (スケジューラー) | 次のポーリングまでの時間 (ミリ秒単位)。 | 500 | long |
| greedy (スケジューラー) | greedy が有効で、以前の実行が 1 つ以上のメッセージをポーリングした場合、ScheduledPollConsumer は即座に再度実行されます。 | false | boolean |
| initialDelay (スケジューラー) | 最初のポーリングが開始されるまでの時間 (ミリ秒単位)。 | 1000 | long |
| repeatCount (スケジューラー) | 実行の最大数を指定します。そのため、これを 1 に設定するとスケジューラーは 1 度だけ実行されます。これを 5 に設定した場合、5 回だけ実行されます。0 または負の値を設定すると、無制限に実行されます。 | 0 | long |
| runLoggingLevel (scheduler) | コンシューマーはポーリング時に開始/完了のログ行を記録します。このオプションを使用すると、ログレベルを設定できます。 列挙値:
| TRACE | LoggingLevel |
| scheduledExecutorService (スケジューラー) | コンシューマーに使用するカスタム/共有スレッドプールを設定できます。デフォルトでは、各コンシューマーに独自の単一スレッドのスレッドプールがあります。 | ScheduledExecutorService | |
| scheduler (スケジューラー) | camel-spring または camel-quartz コンポーネントから cron スケジューラーを使用します。スケジューラーにビルドされた値 spring または quartz を使用。 | none | オブジェクト |
| schedulerProperties (スケジューラー) | カスタムスケジューラーまたは Quartz や Spring ベースのスケジューラーを使用する場合に、追加のプロパティーを設定します。 | マップ | |
| startScheduler (スケジューラー) | スケジューラーを自動起動するかどうか。 | true | boolean |
| timeUnit (スケジューラー) | initialDelay および delay オプションの時間単位。 列挙値:
| MILLISECONDS | TimeUnit |
| useFixedDelay (スケジューラー) | 固定遅延または固定レートを使用するかどうかを制御します。詳細は、JDK の ScheduledExecutorService を参照してください。 | true | boolean |
| accessKey (security) | azure キューサービスでの認証に使用される、関連付けられた azure アカウント名のアクセスキー。 | String | |
| 認証情報 (セキュリティー) | StorageSharedKeyCredential を挿入して Azure クライアントを作成できます。これには重要な認証情報が保持されます。 | StorageSharedKeyCredential |
必須情報オプション
このコンポーネントを使用するには、必要な Azure 認証情報を提供するための 3 つのオプションがあります。
-
Azure アカウントの
accountNameとaccessKeyを指定します。これが最も簡単な開始方法です。accessKey は、Azure portal から生成できます。 -
認証情報オプションに提供できる StorageSharedKeyCredential インスタンスを提供します。 -
serviceClientに提供できる QueueServiceClient インスタンスを提供します。注: 特定のクライアントを作成する必要はありません (例: QueueClient)。QueueServiceClient は、下位レベルのクライアントを取得するために使用できる上位レベルを表します。
9.5. 用途
たとえば、storageAccount ストレージアカウントのキュー messageQueue からメッセージコンテンツを取得するには、次のスニペットを使用します。
from("azure-storage-queue://storageAccount/messageQueue?accessKey=yourAccessKey").
to("file://queuedirectory");9.5.1. コンポーネントプロデューサーによって評価されるメッセージヘッダー
| ヘッダー | 変数名 | タイプ | 操作 | 説明 |
|---|---|---|---|---|
|
|
|
|
| キューを一覧表示するためのオプション |
|
|
|
| すべて | それを超えると \{@link RuntimeException} が発生する任意のタイムアウト値。 |
|
|
|
|
| キューに関連付けるメタデータ |
|
|
|
|
| メッセージがキュー内で存続する時間。設定されていない場合、値はデフォルトで 7 日になります。-1 が渡されると、メッセージは期限切れになりません。存続時間は -1 または任意の正の数でなければなりません。 |
|
|
|
|
| メッセージがキューに表示されないタイムアウト期間。設定されていない場合、値はデフォルトで 0 になり、メッセージはすぐに表示されます。タイムアウトは 0 秒から 7 日の間にする必要があります。 |
|
|
|
|
|
|
|
|
|
|
| メッセージを削除または更新するために一致する必要がある一意の識別子。 |
|
|
|
|
| 削除または更新するメッセージの ID。 |
|
|
|
|
| 取得するメッセージの最大数。要求された数よりもキューに存在するメッセージが少ない場合は、すべてのメッセージが返されます。空のままにすると、1 つのメッセージのみが取得されます。許可される範囲は 1 から 32 のメッセージです。 |
|
|
|
| すべて | 実行するプロデューサー操作を指定します。プロデューサー操作に関連するこのページのドキュメントを参照してください。 |
|
|
|
| すべて | キュー名をオーバーライドします。 |
9.5.2. コンポーネントのプロデューサーまたはコンシューマーによって設定されるメッセージヘッダー
| ヘッダー | 変数名 | タイプ | 説明 |
|---|---|---|---|
|
|
|
| キューに送信されるメッセージの ID。 |
|
|
|
| メッセージがキューに挿入された時刻。 |
|
|
|
| メッセージが期限切れになり、自動的に削除される時間。 |
|
|
|
| この値は、メッセージを削除/更新するために必要です。この popreceipt を使用して削除に失敗した場合、メッセージは別のクライアントによってキューから取り出されています。 |
|
|
|
| メッセージが再びキューに表示される時間。 |
|
|
|
| メッセージがデキューされた回数。 |
|
|
|
| ユーザーが使用できる解析されていない 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 コンポーネントは、プロデューサー側で幅広い操作を提供します。
サービスレベルの操作
これらの操作には、accountName が 必要 です。
| 操作 | 説明 |
|---|---|
|
| 指定されたマーカーから開始して、フィルターを通過するストレージアカウント内のキューを一覧表示します。 |
キューレベルでの操作
これらの操作には、accountName と queueName が 必要です。
| 操作 | 説明 |
|---|---|
|
| 新しいキューを作成します。 |
|
| キューを完全に削除します。 |
|
| キュー内のすべてのメッセージを削除します.. |
|
|
デフォルトのプロデューサ操作 指定された存続時間とメッセージがキューに表示されないタイムアウト期間を指定してメッセージを送信します。メッセージテキストは、Exchange メッセージ本文から評価されます。デフォルトでは、キューが存在しない場合、最初に空のキューが作成されます。これを無効にする場合は、config |
|
| 指定されたメッセージをキューから削除します。 |
|
| キューからメッセージを最大数まで取得し、タイムアウト期間中は他の操作から非表示にします。ただし、信頼性の理由から、キューからメッセージをデキューしません。 |
|
| キューの先頭からメッセージの最大数までメッセージをピークします。 |
|
| キュー内の特定のメッセージを新しいメッセージで更新し、表示タイムアウトをリセットします。メッセージテキストは、Exchange メッセージ本文から評価されます。 |
これらの操作を camel アプリケーションで使用する方法については、このページの例のセクションを参照してください。
9.5.6. コンシューマーの例
1 つのバッチで最大 5 つのメッセージを含むファイルコンポーネントにキューを消費するには、次のようにします。
from("azure-storage-queue://cameldev/queue1?serviceClient=#client&maxMessages=5")
.to("file://outputFolder?fileName=output.txt&fileExist=Append");9.5.7. プロデューサー操作の例
-
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 自動設定
Spring Boot で azure-storage-queue を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-azure-storage-queue-starter</artifactId> <version>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に記載される 16 のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| 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 | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは 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 | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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 | プロデューサーへのキューサービス操作のヒント。 | 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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
10.3. コンポーネントオプション
Bean コンポーネントは、以下に示す 4 つのオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| cache (producer) | 非推奨 代わりにシングルトンオプションを使用してください。 | true | ブール値 |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| scope (producer) | Bean のスコープ。シングルトンスコープ (デフォルト) を使用する場合、Bean は 1 回のみ作成または検索され、エンドポイントの有効期間に再利用されます。同時スレッドが同時に Bean を呼び出す場合、Bean はスレッドセーフである必要があります。リクエストスコープを使用する場合、Bean はリクエストごとに 1 回作成またはルックアップされます (交換)。リクエストの処理中に Bean に状態を保存する場合や、リクエストの処理中に同じ Bean インスタンスを複数回呼び出す場合に使用できます。インスタンスは同じリクエストからのみ呼び出されるため、Bean はスレッドセーフである必要はありません。delegate スコープを使用すると、呼び出しごとに Bean が検索または作成されます。ただしルックアップの場合、これは Spring や CDI (使用されている場合) などの Bean レジストリーに委譲され、設定に応じてシングルトンまたはプロトタイプスコープのいずれかとして機能します。したがって、いつプロトタイプを使用するかは委譲されたレジストリーにより異なります。 列挙値:
| シングルトン | BeanScope |
| autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
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 レジストリーに委譲され、設定に応じてシングルトンまたはプロトタイプスコープのいずれかとして機能します。したがって、いつプロトタイプを使用するかは委譲されたレジストリーにより異なります。 列挙値:
| シングルトン | BeanScope |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| parameters (上級) | Bean の追加プロパティーの設定に使用します。 | マップ |
10.5. 使用
メッセージの消費に使用されるオブジェクトインスタンスは、レジストリーに明示的に登録する必要があります。たとえば、Spring を使用している場合は、Spring 設定で Bean を定義する必要があります。
bind メソッドを使用して、Camel の Registry を介して Bean を手動で登録することもできます。
エンドポイントが登録されたら、エクスチェンジの処理に使用する Camel ルートを構築できます。
bean: エンドポイントは、ルートへの入力として定義できません。つまり、消費できません。一部のインバウンドメッセージエンドポイントから Bean エンドポイントに、出力としてのみルーティングできます。direct: または queue: エンドポイントを入力として使用することを検討してください。
ProxyHelper で createProxy() メソッドを使用して、BeanExchange を生成して任意のエンドポイントに送信するプロキシーを作成できます。
XML DSL を使用した同じルート:
<route> <from uri="direct:hello"/> <to uri="bean:bye"/> </route>
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 自動設定
Spring Boot で bean を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-bean-starter</artifactId> <version>3.14.5.redhat-00032</version> <!-- use the same version as your Camel core version --> </dependency>
このコンポーネントは、以下に示す 13 のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| camel.component.bean.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | ブール値 |
| camel.component.bean.enabled | Bean コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | ブール値 | |
| camel.component.bean.lazy-start-producer | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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 | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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>3.14.5.redhat-00018</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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
11.3. コンポーネントオプション
Bean バリデーターコンポーネントは、以下に示す 8 つのオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| ignoreXmlConfiguration (プロデューサー) | META-INF/validation.xml ファイルからのデータを無視するかどうか。 | false | boolean |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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 (プロデューサー) | 必須 ラベルは、エンドポイントを記述する任意のテキスト値です。 | String |
11.4.2. クエリーパラメーター (8 パラメーター)
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| group (producer) | カスタム検証グループを使用します。 | javax.validation.groups.Default | String |
| ignoreXmlConfiguration (プロデューサー) | META-INF/validation.xml ファイルからのデータを無視するかどうか。 | false | boolean |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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 自動設定
Spring Boot で bean-validator を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-bean-validator-starter</artifactId> <version>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
このコンポーネントは、以下に示す 9 のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| 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 | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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章 参照
プロデューサーとコンシューマーの両方がサポート対象
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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
12.3. コンポーネントオプション
Browse コンポーネントは、以下に示す 3 つのオプションをサポートしています。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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 (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| exceptionHandler (コンシューマー (上級)) | コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
| exchangePattern (コンシューマー (上級)) | コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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 自動設定
Spring Boot で bean を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-browse-starter</artifactId> <version>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に記載される 4 のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| camel.component.browse.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | ブール値 |
| camel.component.browse.bridge-error-handler | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | ブール値 |
| camel.component.browse.enabled | 参照コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | ブール値 | |
| camel.component.browse.lazy-start-producer | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | ブール値 |
第13章 Cassandra CQL
プロデューサーとコンシューマーの両方がサポート対象
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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
13.2. コンポーネントオプション
Cassandra CQL コンポーネントは、以下に示す 3 つのオプションをサポートしています。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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 (共通) | 使用する一貫性レベル。 列挙値:
| DefaultConsistencyLevel | |
| cql (共通) | 実行する CQL クエリー。キー CamelCqlQuery を持つメッセージヘッダーでオーバーライドできます。 | String | |
| datacenter (共通) | 使用するデータセンター。 | datacenter1 | String |
| loadBalancingPolicyClass (common) | 特定の LoadBalancingPolicyClass を使用するには。 | String | |
| password (共通) | セッション認証のパスワード。 | String | |
| prepareStatements (共通) | PreparedStatements を使用するか、通常のステートメントを使用するか。 | true | boolean |
| resultSetConversionStrategy (共通) | ResultSet をメッセージ本文 ALL、ONE、LIMIT_10、LIMIT_100… に変換するためのロジックを実装するカスタムクラスを使用するには | ResultSetConversionStrategy | |
| session (共通) | Session インスタンスを使用するには (通常、このオプションは使用しません)。 | CqlSession | |
| username (共通) | セッション認証のユーザー名。 | String | |
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| sendEmptyMessageWhenIdle (consumer) | ポーリングコンシューマーがファイルをポーリングしなかった場合、このオプションを有効にして、代わりに空のメッセージ (ボディーなし) を送信できます。 | false | boolean |
| exceptionHandler (コンシューマー (上級)) | コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
| exchangePattern (コンシューマー (上級)) | コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
| pollStrategy (コンシューマー (上級)) | プラグ可能な org.apache.camel.PollingConsumerPollingStrategy を使用すると、エクスチェンジが作成され、Camel でルーティングされる前に、通常はポーリング操作中に発生するエラー処理を制御するカスタム実装が提供できます。 | PollingConsumerPollStrategy | |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| backoffErrorThreshold (スケジューラー) | backoffMultipler が開始する前に発生する必要がある後続のエラーポーリング (エラーによって失敗した) の数。 | int | |
| backoffIdleThreshold (スケジューラー) | backoffMultipler が開始する前に発生する必要がある後続のアイドルポーリングの数。 | int | |
| backoffMultiplier (スケジューラー) | 後続のアイドル状態/エラーが連続して発生した場合に、スケジュールされたポーリングコンシューマーのバックオフを許可します。乗数は、実際に次の試行が行われる前にスキップされるポーリングの数です。このオプションが使用されている場合は、backoffIdleThreshold や backoffErrorThreshold も設定する必要があります。 | int | |
| delay (スケジューラー) | 次のポーリングまでの時間 (ミリ秒単位)。 | 500 | long |
| greedy (スケジューラー) | greedy が有効で、以前の実行が 1 つ以上のメッセージをポーリングした場合、ScheduledPollConsumer は即座に再度実行されます。 | false | boolean |
| initialDelay (スケジューラー) | 最初のポーリングが開始されるまでの時間 (ミリ秒単位)。 | 1000 | long |
| repeatCount (スケジューラー) | 実行の最大数を指定します。そのため、これを 1 に設定するとスケジューラーは 1 度だけ実行されます。これを 5 に設定した場合、5 回だけ実行されます。0 または負の値を設定すると、無制限に実行されます。 | 0 | long |
| runLoggingLevel (scheduler) | コンシューマーはポーリング時に開始/完了のログ行を記録します。このオプションを使用すると、ログレベルを設定できます。 列挙値:
| TRACE | LoggingLevel |
| scheduledExecutorService (スケジューラー) | コンシューマーに使用するカスタム/共有スレッドプールを設定できます。デフォルトでは、各コンシューマーに独自の単一スレッドのスレッドプールがあります。 | ScheduledExecutorService | |
| scheduler (スケジューラー) | camel-spring または camel-quartz コンポーネントから cron スケジューラーを使用します。スケジューラーにビルドされた値 spring または quartz を使用。 | none | オブジェクト |
| schedulerProperties (スケジューラー) | カスタムスケジューラーまたは Quartz や Spring ベースのスケジューラーを使用する場合に、追加のプロパティーを設定します。 | マップ | |
| startScheduler (スケジューラー) | スケジューラーを自動起動するかどうか。 | true | boolean |
| timeUnit (スケジューラー) | initialDelay および delay オプションの時間単位。 列挙値:
| MILLISECONDS | TimeUnit |
| useFixedDelay (スケジューラー) | 固定遅延または固定レートを使用するかどうかを制御します。詳細は、JDK の ScheduledExecutorService を参照してください。 | true | boolean |
13.4. エンドポイント接続の構文
エンドポイントは、Cassandra 接続を開始するか、既存のものを使用できます。
| URI | 説明 |
|---|---|
|
| 単一ホスト、デフォルトポート、通常はテスト用 |
|
| マルチホスト、デフォルトポート |
|
| マルチホスト、カスタムポート |
|
| デフォルトのポートとキースペース |
|
| 提供されたセッション参照 |
|
| 提供されたクラスター参照 |
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>(resultSetConversionStrategyがALLまたはLIMIT_0-9+の場合) -
resultSetConversionStrategyがONEの場合h Single` Row` -
その他 (
resultSetConversionStrategyがResultSetConversionStrategyのカスタム実装である場合)
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 列がなく、別のデータモデルを使用するように拡張できます。
| オプション | デフォルト | 説明 |
|---|---|---|
|
|
| テーブル名 |
|
|
| 主キー列 |
|
|
リポジトリー名、 | |
|
| 重要な生存期間 | |
|
|
キーの挿入/削除に使用される一貫性レベル: | |
|
|
キーの読み取り/チェックに使用される一貫性レベル: |
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 列がなく、別のデータモデルを使用するように拡張できます。
| オプション | デフォルト | 説明 |
|---|---|---|
|
|
| テーブル名 |
|
|
| 主キー列 |
|
|
| 交換 ID 列 |
|
|
| 交換内容欄 |
|
|
リポジトリー名、 | |
|
| 生存時間の交換 | |
|
|
交換の挿入/削除に使用される一貫性レベル: | |
|
|
交換の読み取り/チェックに使用される整合性レベル: |
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>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に記載される 4 のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| camel.component.cql.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | ブール値 |
| camel.component.cql.bridge-error-handler | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | ブール値 |
| camel.component.cql.enabled | cql コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | ブール値 | |
| camel.component.cql.lazy-start-producer | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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. コマンド
| コマンド | 説明 |
|---|---|
|
|
|
|
| メッセージ本文の評価に使用するを指定できます。評価の結果があれば、その結果がメッセージ本文に入れられます。 |
14.2. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
14.2.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
14.2.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
14.3. コンポーネントオプション
コントロールバスコンポーネントは、以下に示す 2 つのオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
14.4. エンドポイントオプション
Control Bus エンドポイントは、URI 構文を使用して設定されます。
controlbus:command:language
パスおよびクエリーパラメーターを使用します。
14.4.1. パスパラメーター (2 パラメーター)
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| command (プロデューサー) | 必要な コマンドは、ルートまたは言語のいずれかです。 列挙値:
| String | |
| language (プロデューサー) | メッセージ本文の評価に使用する言語の名前を指定できます。評価の結果があれば、その結果がメッセージ本文に入れられます。 列挙値:
| 言語 |
14.4.1.1. クエリーパラメーター (6 パラメーター)
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| action (プロデューサー) | 開始、停止、またはステータスのいずれかのアクションを示す。ルートを開始または停止するか、ルートのステータスをメッセージ本文の出力として取得します。Camel 2.11.1 以降では、サスペンドとレジュームを使用して、ルートをサスペンドまたはレジュームできます。また、Camel 2.11.1 以降では、stats を使用して、パフォーマンスの統計を XML 形式で取得できます。routeId オプションを使用して、パフォーマンス統計を取得するルートを定義できます。routeId が定義されていない場合は、CamelContext 全体の統計を取得します。再起動アクションはルートを再起動します。 列挙値:
| String | |
| async (プロデューサー) | コントロールバスタスクを非同期で実行するかどうか。重要: このオプションを有効にすると、タスクの結果は Exchange に設定されません。これは、タスクを同期的に実行する場合にのみ可能です。 | false | boolean |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| loggingLevel (producer) | タスクが完了したとき、またはタスクの処理中に例外が発生した場合にログに使用されるログレベル。 列挙値:
| INFO | LoggingLevel |
| restartDelay (プロデューサー) | ルートを再起動するときに使用するミリ単位の遅延。 | 1000 | int |
| routeId (プロデューサー) | 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 形式です。ManagedRouteMBean で dumpRouteStatsAsXml 操作を使用して 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 などのより強力な言語スクリプトを実行したり、Groovy 言語を拡張したりできます。
たとえば、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>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に記載される 3 つのオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| camel.component.controlbus.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | ブール値 |
| camel.component.controlbus.enabled | コントロールバスコンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | ブール値 | |
| camel.component.controlbus.lazy-start-producer | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | ブール値 |
第15章 Cron
コンシューマーのみがサポートされている
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>3.14.5.redhat-00018</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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
15.2. コンポーネントオプション
Cron コンポーネントは、以下に示す 3 つのオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは 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 (コンシューマー) | 必須 cron トリガーの名前。 | String |
15.3.2. クエリーパラメーター (4 パラメーター)
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| schedule (コンシューマー) | 必須 イベントの生成に使用される cron 式。 | String | |
| exceptionHandler (コンシューマー (上級)) | コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
| exchangePattern (コンシューマー (上級)) | コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern |
15.4. 用途
次の例のように、コンポーネントを使用して、指定した時間にイベントをトリガーできます。
from("cron:tab?schedule=0/1+*+*+*+*+?")
.setBody().constant("event")
.log("${body}");
スケジュール式 0/3+10+*+? は 0/3 10 * * * ? として記述でき、各 1 分の 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>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に記載される 4 のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| camel.component.cron.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | ブール値 |
| camel.component.cron.bridge-error-handler | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | ブール値 |
| camel.component.cron.cron-service | 複数の実装が提供されている場合に使用する CamelCronService の ID。 | String | |
| camel.component.cron.enabled | cron コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | ブール値 |
第16章 CXF
プロデューサーとコンシューマーの両方がサポート対象
CXF コンポーネントは、CXF でホストされている JAX-WS サービスに接続するための Apache CXF との統合を提供します。
ストリーミングモードで CXF を使用する場合 (DataFormat オプションを参照)、ストリームキャッシングについてもお読みください。
Maven ユーザーは、このコンポーネントの pom.xml に次の依存関係を追加する必要があります。
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-cxf-soap</artifactId>
<version>3.14.5.redhat-00018</version>
<!-- use the same version as your Camel core version -->
</dependency>16.1. URI 形式
このエンドポイントには、cxfEndpoint と someAddress の 2 つの URI 形式があります。
cxf:bean:cxfEndpoint[?options]
cxfEndpoint は、Spring Bean レジストリー内の Bean を参照する Bean ID を表します。この URI 形式では、ほとんどのエンドポイントの詳細が Bean 定義で指定されます。
cxf://someAddress[?options]
someAddress は、CXF エンドポイントのアドレスを指定します。この URI 形式では、ほとんどのエンドポイントの詳細がオプションを使用して指定されます。
上記のどちらのスタイルでも、次のように URI にオプションを追加できます。
cxf:bean:cxfEndpoint?wsdlURL=wsdl/hello_world.wsdl&dataFormat=PAYLOAD
16.2. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
16.2.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
16.2.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定する タイプセーフ 方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
16.3. コンポーネントオプション
CXF コンポーネントは、以下に示す 6 つのオプションをサポートしています。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| allowStreaming (上級) | このオプションは、CXF コンポーネントが PAYLOAD モードで実行されている場合に、着信メッセージを DOM 解析して DOM 要素にするか、場合によってはストリーミングを許可する javax.xml.transform.Source オブジェクトとしてペイロードを保持するかを制御します。 | ブール値 | |
| autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
| headerFilterStrategy (フィルター) | カスタムの 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 エンドポイントでサポートされるデータタイプメッセージ。 列挙値:
| POJO | DataFormat |
| ラップスタイル (共通) | パラメーターが SOAP 本文でどのように表現されるかを記述する WSDL スタイル。値が false の場合、CXF は document-literal のラップされていないスタイルを選択します。値が true の場合、CXF は document-literal のラップされたスタイルを選択します。 | ブール値 | |
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| exceptionHandler (コンシューマー (上級)) | コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
| exchangePattern (コンシューマー (上級)) | コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
| cookieHandler (プロデューサー) | HTTP セッションを維持するように Cookie ハンドラーを設定します。 | CookieHandler | |
| defaultOperationName (producer) | このオプションは、リモートサービスを呼び出す CxfProducer によって使用されるデフォルトの operationName を設定します。 | String | |
| defaultOperationNamespace (producer) | このオプションは、リモートサービスを呼び出す CxfProducer によって使用されるデフォルトの operationNamespace を設定します。 | String | |
| hostnameVerifier (プロデューサー) | 使用するホスト名ベリファイア。# 表記を使用して、レジストリーから HostnameVerifier を参照します。 | HostnameVerifier | |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| sslContextParameters (producer) | Camel SSL 設定リファレンス。# 表記を使用して、SSL コンテキストを参照します。 | SSLContextParameters | |
| ラップ (プロデューサー) | CXF エンドポイントプロデューサーが呼び出す操作の種類。 | false | boolean |
| synchronous (プロデューサー (上級)) | 同期処理を厳密に使用するかどうかを設定します。 | false | boolean |
| allowStreaming (上級) | このオプションは、CXF コンポーネントが PAYLOAD モードで実行されている場合に、着信メッセージを DOM 解析して DOM 要素にするか、場合によってはストリーミングを許可する javax.xml.transform.Source オブジェクトとしてペイロードを保持するかを制御します。 | ブール値 | |
| bus (上級) | カスタム設定の CXF バスを使用するには。 | バス | |
| continuationTimeout (上級) | このオプションは、CXF サーバーが Jetty またはサーブレットトランスポートを使用している場合にデフォルトで CxfConsumer で使用できる CXF 継続タイムアウトを設定するために使用されます。 | 30000 | long |
| cxfBinding (上級) | カスタム CxfBinding を使用して、Camel メッセージと CXF メッセージ間のバインディングを制御します。 | CxfBinding | |
| cxfConfigurer (上級) | このオプションは、プログラムによる方法での CXF エンドポイントの設定をサポートする org.apache.camel.component.cxf.CxfEndpointConfigurer の実装を適用できます。ユーザーは、CxfEndpointConfigurer の configure{ServerClient} メソッドを実装することで、CXF サーバーとクライアントを設定できます。 | CxfConfigurer | |
| defaultBus (上級) | CXF エンドポイントが独自にバスを作成するときに、デフォルトのバスを設定します。 | false | boolean |
| headerFilterStrategy (上級) | カスタムの HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルタリングします。 | HeaderFilterStrategy | |
| mergeProtocolHeaders (上級) | プロトコルヘッダーをマージするかどうか。有効にすると、Camel と CXF の間でヘッダーを伝播する際の一貫性と類似性が高まります。詳細については、CAMEL-6393 を参照してください。 | false | boolean |
| mtomEnabled (上級) | MTOM (添付ファイル) を有効にします。これには、POJO または PAYLOAD データ形式モードを使用する必要があります。 | false | boolean |
| properties (上級) | マップのキーと値のペアを使用して、追加の CXF オプションを設定します。たとえば、SOAP 障害でスタックトレースを有効にするには、properties.faultStackTraceEnabled=true とします。 | マップ | |
| skipPayloadMessagePartCheck (上級) | SOAP メッセージの検証を無効にするかどうかを設定します。 | false | boolean |
| loggingFeatureEnabled (logging) | このオプションは、インバウンドおよびアウトバウンドの SOAP メッセージをログに書き込む CXF ログ機能を有効にします。 | false | boolean |
| loggingSizeLimit (logging) | ロギング機能が有効になっているときにロガーが出力するバイト数の合計サイズを制限するには、制限なしの場合は -1 を指定します。 | 49152 | int |
| skipFaultLogging (ロギング) | このオプションは、PhaseInterceptorChain がキャッチした Fault のログ記録をスキップするかどうかを制御します。 | false | boolean |
| password (セキュリティー) | このオプションは、CXF クライアントのパスワードの基本認証情報を設定するために使用されます。 | String | |
| username (セキュリティー) | このオプションは、CXF クライアントのユーザー名の基本認証情報を設定するために使用されます。 | String | |
| bindingId (service) | 使用するサービスモデルの bindingId。 | String | |
| portName (サービス) | このサービスが実装しているエンドポイント名で、wsdl:portname にマップされます。ns:PORT_NAME の形式で、ns はこのスコープで有効な名前空間接頭辞です。 | String | |
| publishedEndpointUrl (service) | このオプションは、サービスアドレス URL と wsd でアクセスできる WSDL から発行された endpointUrl をオーバーライドできます。 | String | |
| serviceClass (サービス) | JSR181 アノテーションを持つかどうかにかかわらず、SEI (Service Endpoint Interface) クラスのクラス名。 | クラス | |
| サービス名 (サービス) | このサービスが実装しているサービス名で、wsdl:servicename にマップされます。 | String | |
| wsdlURL (サービス) | WSDL の場所。クラスパス、ファイルシステム、またはリモートでホストできます。 | String |
serviceName と portName は QNames であるため、これらを指定する場合は、上記の例に示すように {namespace} を前に付けてください。
16.4.3. データ形式の説明
Apache Camel では、Camel CXF コンポーネントがルートを Web サービスと統合するための鍵となります。Camel CXF コンポーネントを使用して、次のいずれかの方法で使用できる CXF エンドポイントを作成できます。
- コンシューマー — (ルートの開始時) は、ルートと統合される Web サービスインスタンスを表します。ルートに挿入されるペイロードのタイプは、エンドポイントの dataFormat オプションの値によって異なります。
- プロデューサー — (ルートの他のポイントで) WS クライアントプロキシーを表し、現在の交換オブジェクトをリモート Web サービスでの操作呼び出しに変換します。現在の交換の形式は、エンドポイントの dataFormat 設定と一致する必要があります。
| DataFormat | 説明 |
|---|---|
|
| POJO (Plain old Java objects) は、ターゲットサーバーで呼び出されるメソッドへの Java パラメーターです。プロトコル JAX-WS ハンドラーと論理 JAX-WS ハンドラーの両方がサポートされています。 |
|
|
|
|
|
|
|
|
|
交換プロパティー CamelCXFDataFormat を取得することで、交換のデータ形式モードを判別できます。交換キー定数は org.apache.camel.component.cxf.common.message.CxfConstants.DATA_FORMAT_PROPERTY で定義されています。
16.4.4. CXF の LoggingOutInterceptor を RAW モードで有効にする方法
CXF の LoggingOutInterceptor は、ロギングシステム (Java Util Logging) に送信されるアウトバウンドメッセージを出力します。LoggingOutInterceptor は PRE_STREAM フェーズにあるため (ただし、PRE_STREAM フェーズは RAW モードでは削除されます)、WRITE フェーズ中に実行されるように LoggingOutInterceptor を設定する必要があります。以下に例を示します。
@Bean
public CxfEndpoint serviceEndpoint(LoggingOutInterceptor loggingOutInterceptor) {
CxfSpringEndpoint cxfEndpoint = new CxfSpringEndpoint();
cxfEndpoint.setAddress("http://localhost:" + port
+ "/services" + SERVICE_ADDRESS);
cxfEndpoint.setServiceClass(org.apache.camel.component.cxf.HelloService.class);
Map<String, Object> properties = new HashMap<String, Object>();
properties.put("dataFormat", "RAW");
cxfEndpoint.setProperties(properties);
cxfEndpoint.getOutInterceptors().add(loggingOutInterceptor);
return cxfEndpoint;
}
@Bean
public LoggingOutInterceptor loggingOutInterceptor() {
LoggingOutInterceptor logger = new LoggingOutInterceptor("write");
return logger;
}16.4.5. RelayHeaders オプションの説明
JAXWS WSDL ファーストの開発者の観点から見ると、帯域内 ヘッダーと 帯域外 ヘッダーがあります。
インバンド ヘッダーは、SOAP ヘッダーなどのエンドポイントの WSDL バインディングコントラクトの一部として明示的に定義されるヘッダーです。
アウトオブバンド ヘッダーは、ネットワーク経由でシリアル化されるヘッダーですが、明示的に WSDL バインディングコントラクトの一部ではありません。
ヘッダーの中継/フィルタリングは双方向です。
ルートに CXF エンドポイントがあり、開発者が SOAP ヘッダーなどのオンザワイヤヘッダーをルートに沿ってリレーして、たとえば別の JAXWS エンドポイントで消費する必要がある場合、relayHeaders を true に設定する必要があります。デフォルト値。
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"/>ここでヘッダーをリレー/ドロップする方法を示すテストを見てください。
-
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 | 必須 | 説明 |
|---|---|---|
|
| いいえ |
すべてのメッセージヘッダーは、メッセージヘッダーフィルターによって処理されます タイプ: |
|
| いいえ |
すべてのメッセージヘッダーは伝播されます(メッセージヘッダーフィルターによる処理なし) タイプ: |
|
| いいえ |
アクティベーション名前空間で 2 つのフィルターが重複する場合、プロパティーはその処理方法を制御します。値が |
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 要素は、多くの追加属性をサポートしています。
| Name | 値 |
|---|---|
|
|
このサービスが実装しているエンドポイント名で、 |
|
|
このサービスが実装しているサービス名で、 |
|
| WSDL の場所。クラスパス、ファイルシステム、またはリモートでホストできます。 |
|
|
使用するサービスモデルの |
|
| サービス公開アドレス。 |
|
| JAX-WS エンドポイントで使用されるバス名。 |
|
| JSR181 アノテーションを持つかどうかにかかわらず、SEI (Service Endpoint Interface) クラスのクラス名。 |
また、多くの子要素もサポートしています。
| Name | 値 |
|---|---|
|
|
このエンドポイントの着信インターセプター。 |
|
|
このエンドポイントの着信障害インターセプター。 |
|
|
このエンドポイントの発信インターセプター。 |
|
|
このエンドポイントの送信障害インターセプター。 |
|
| JAX-WS エンドポイントに提供する必要があるプロパティーマップ。以下を参照してください。 |
|
| JAX-WS エンドポイントに提供する必要がある JAX-WS ハンドラーリスト。以下を参照してください。 |
|
|
エンドポイントで使用する |
|
|
このエンドポイントが使用する |
|
| このエンドポイントのインターセプターを保持する機能。Bean または参照のリスト |
|
| エンドポイントが使用するスキーマの場所。schemaLocations のリスト |
|
|
このエンドポイントが使用するサービスファクトリー。これは、Spring |
CXF JAX-WS 設定ページ で、インターセプター、プロパティー、およびハンドラーを提供する方法を示すより高度な例を見つけることができます。
cxf:properties を使用して、Spring 設定ファイルから camel-cxf エンドポイントの dataFormat および setDefaultBus プロパティーを設定できます。
<cxf:cxfEndpoint id="testEndpoint" address="http://localhost:9000/router"
serviceClass="org.apache.camel.component.cxf.HelloService"
endpointName="s:PortName"
serviceName="s:ServiceName"
xmlns:s="http://www.example.com/test">
<cxf:properties>
<entry key="dataFormat" value="RAW"/>
<entry key="setDefaultBus" value="true"/>
</cxf:properties>
</cxf:cxfEndpoint>
SpringBoot では、Spring XML ファイルを使用して camel-cxf を設定し、次の例のようなコードを使用して XML 設定 Bean を作成できます。
@ImportResource({
"classpath:spring-configuration.xml"
})ただし、SpringBoot では、(他の例で示されているように) Java コードで設定された Bean を使用するのがベストプラクティスです。
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 プロデューサーアドレスを上書きする方法
camel-cxf プロデューサーは、メッセージヘッダー 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 エンドポイントコンシューマー 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 エンドポイントプロデューサーは、CXF client API に基づいています。まず、メッセージヘッダーでオペレーション名を指定し、次にメソッドパラメーターをリストに追加し、このパラメーターリストでメッセージを初期化する必要があります。応答メッセージの本文は messageContentsList であり、そのリストから結果を取得できます。
メッセージヘッダーで操作名を指定しない場合、CxfProducer は CxfEndpoint から defaultOperationName を使用しようとします。CxfEndpoint に defaultOperationName が設定されていない場合、操作リストから最初の operationName を取得します。
メッセージ本文からオブジェクト配列を取得する場合は、CxfProducerRouterTest.testInvokingSimpleServerWithParams に示すように、message.getBody (Object.class) を使用して本文を取得できます。
Exchange senderExchange = new DefaultExchange(context, ExchangePattern.InOut);
final List<String> params = new ArrayList<>();
// Prepare the request message for the camel-cxf procedure
params.add(TEST_MESSAGE);
senderExchange.getIn().setBody(params);
senderExchange.getIn().setHeader(CxfConstants.OPERATION_NAME, ECHO_OPERATION);
Exchange exchange = template.send("direct:EndpointA", senderExchange);
org.apache.camel.Message out = exchange.getMessage();
// The response message's body is an MessageContentsList which first element is the return value of the operation,
// If there are some holder parameters, the holder parameter will be filled in the reset of List.
// The result will be extract from the MessageContentsList with the String class type
MessageContentsList result = (MessageContentsList) out.getBody();
LOG.info("Received output text: " + result.get(0));
Map<String, Object> responseContext = CastUtils.cast((Map<?, ?>) out.getHeader(Client.RESPONSE_CONTEXT));
assertNotNull(responseContext);
assertEquals("UTF-8", responseContext.get(org.apache.cxf.message.Message.ENCODING),
"We should get the response context here");
assertEquals("echo " + TEST_MESSAGE, result.get(0), "Reply body on Camel is wrong");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 を使用できます。POJO、PAYLOAD、および MESSAGE データ形式で機能します。
CxfCustomizedExceptionTest に示すように、SOAP 障害を定義できます。
SOAP_FAULT = new SoapFault(EXCEPTION_MESSAGE, SoapFault.FAULT_CODE_CLIENT); Element detail = SOAP_FAULT.getOrCreateDetail(); Document doc = detail.getOwnerDocument(); Text tn = doc.createTextNode(DETAIL_TEXT); detail.appendChild(tn);
あとは好きなように投げてください
from(routerEndpointURI).setFaultBody(constant(SOAP_FAULT));
CXF エンドポイントが MESSAGE データ形式で動作している場合、CxfMessageStreamExceptionTest で示されているように、メッセージ本文に SOAP Fault メッセージを設定し、メッセージヘッダーに応答コードを設定できます。
from(routerEndpointURI).process(new Processor() {
public void process(Exchange exchange) throws Exception {
Message out = exchange.getOut();
// Set the message body with the
out.setBody(this.getClass().getResourceAsStream("SoapFaultMessage.xml"));
// Set the response code here
out.setHeader(org.apache.cxf.message.Message.RESPONSE_CODE, new Integer(500));
}
});POJO データ形式を使用する場合も同様です。out body に SOAPFault を設定できます。
16.16. camel-cxf エンドポイントのリクエストとレスポンスのコンテキストを伝播する方法
CXF クライアント API は、要求と応答のコンテキストで操作を呼び出す方法を提供します。camel-cxf エンドポイントプロデューサーを使用して外部 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>3.14.5.redhat-00032</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 | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは 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 | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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 | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは 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 | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
17.3. コンポーネントオプション
データ形式コンポーネントは、以下に示す 2 つのオプションをサポートしています。
| 名前 | 説明 | デフォルト | タイプ |
|---|---|---|---|
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
17.4. エンドポイントオプション
Data Format エンドポイントは、URI 構文を使用して設定されます。
dataformat:name:operation
パスおよびクエリーパラメーターを使用します。
17.4.1. パスパラメーター (2 パラメーター)
| 名前 | 説明 | デフォルト | タイプ |
|---|---|---|---|
| name (producer) | 必須 データ形式の名前。 | String | |
| operation (producer) | マーシャリングまたはアンマーシャリングのいずれかを使用するために 必要な 操作。 列挙値:
| String |
17.4.2. クエリーパラメーター (1 パラメーター)
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に記載される 3 つのオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| camel.component.dataformat.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | ブール値 |
| camel.component.dataformat.enabled | dataformat コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | ブール値 | |
| camel.component.dataformat.lazy-start-producer | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | ブール値 |
第18章 Dataset
プロデューサーとコンシューマーの両方がサポート対象
分散処理と非同期処理のテストは、非常に難しいことで知られています。Mock、Test、および DataSet エンドポイントは Camel テストフレームワークとうまく連携し、エンタープライズ統合パターン と Camel の幅広いコンポーネントを強力な Bean 統合と共に使用して、ユニットと統合のテストを簡素化します。
DataSet コンポーネントは、システムの負荷テストとソークテストを簡単に実行するメカニズムを提供します。メッセージのソースとして、またデータセットが受信されたことをアサートする方法として、DataSet インスタンス を作成できるようにすることで機能します。
Camel は、データセットを送信するときに スループットロガー を使用します。
18.1. URI 形式
dataset:name[?options]
name は、レジストリーで DataSet インスタンス を検索するために使用されます
Camel には、独自の DataSet を実装するためのベースとして使用できる org.apache.camel.component.dataset.DataSet、org.apache.camel.component.dataset.DataSetSupport クラスのサポート実装が付属しています。org.apache.camel.component.dataset.SimpleDataSet には、テスト に使用できるいくつかの実装も同 梱 されています。そのうち DataSetSupport を拡張します。
18.2. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
18.2.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
18.2.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
18.3. コンポーネントオプション
Dataset コンポーネントは、以下に示す 5 つのオプションをサポートしています。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| log (プロデューサー) | モックが着信メッセージを受信したときにロギングをオンにします。これは、着信メッセージの 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 (共通) | CamelDataSetIndex ヘッダーの動作を制御します。コンシューマーの場合: - off = ヘッダーは設定されません - strict/lenient = ヘッダーは設定されますプロデューサーの場合: - off = ヘッダー値は検証されず、存在しない場合は設定されません = strict =ヘッダー値が存在する必要があり、検証されます = lenient = ヘッダー値が存在する場合は検証され、存在しない場合は設定されます。 列挙値:
| lenient | String |
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| initialDelay (コンシューマー) | メッセージの送信を開始する前に待機する時間 (ミリ単位)。 | 1000 | long |
| minRate (コンシューマー) | DataSet に少なくともこの数のメッセージが含まれるまで待ちます。 | 0 | int |
| preloadSize (コンシューマー) | ルートが初期化を完了する前にプリロード (送信) するメッセージの数を設定します。 | 0 | long |
| produceDelay (コンシューマー) | メッセージがコンシューマーによって送信されるときに遅延を引き起こす遅延を指定できるようにします (遅い処理をシミュレートするため)。 | 3 | long |
| exceptionHandler (コンシューマー (上級)) | コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
| exchangePattern (コンシューマー (上級)) | コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
| assertPeriod (プロデューサー) | 暫定的なアサーションがまだ有効であることを確認するために、モックエンドポイントが再アサートするまでの猶予期間を設定します。これは、たとえば、正確な数のメッセージが到着したことをアサートするために使用されます。たとえば、expectedMessageCount (int) が 5 に設定されている場合、5 つ以上のメッセージが到着するとアサーションが満たされます。正確に 5 つのメッセージが到着するようにするには、それ以上メッセージが到着しないように少し待つ必要があります。これが、このメソッドを使用できるものです。デフォルトでは、この期間は無効になっています。 | long | |
| consumeDelay (プロデューサー) | メッセージがプロデューサによって消費されるときに遅延を引き起こす遅延を指定できるようにします (遅い処理をシミュレートするため)。 | 0 | long |
| expectedCount (プロデューサー) | このエンドポイントが受信するメッセージ交換の予想数を指定します。注意: 0 のメッセージを期待したい場合は、特別な注意が必要です。0 はテストの開始時に一致するため、アサート期間を設定して、テストをしばらく実行し、まだメッセージが到着していないことを確認する必要があります。;そのためには setAssertPeriod (long) を使用します。別の方法として、NotifyBuilder を使用し、モックで assertIsSatisfied () メソッドを呼び出す前に、NotifyBuilder を使用して、Camel がいくつかのメッセージのルーティングを完了したことを知ることができます。これにより、固定アサート期間を使用せずにテスト時間を短縮できます。正確に n 番目のメッセージがこのモックエンドポイントに到着することをアサートする場合は、詳細について setAssertPeriod (long) メソッドも参照してください。 | -1 | int |
| failFast (プロデューサー) | assertIsSatisfied () が最初に検出された失敗した期待で高速に失敗する必要があるかどうかを設定しますが、それ以外の場合は、期待されるすべてのメッセージが到着するのを待ってから、期待の検証を実行します。デフォルトでは true です。Camel 2.x のような動作を使用するには、false に設定します。 | false | boolean |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| log (プロデューサー) | モックが着信メッセージを受信したときにロギングをオンにします。これは、着信メッセージの INFO レベルで 1 回だけログに記録されます。より詳細なログを取得するには、ロガーを org.apache.camel.component.mock.MockEndpoint クラスの DEBUG レベルに設定します。 | false | boolean |
| reportGroup (producer) | サイズのグループに基づいてスループットログを有効にするために使用される数値。 | int | |
| resultMinimumWaitTime (producer) | ラッチが満たされるまで assertIsSatisfied () が待機する最小予想時間 (ミリ秒単位) を設定します。 | long | |
| resultWaitTime (プロデューサー) | ラッチが満たされるまで assertIsSatisfied () が待機する最大時間 (ミリ秒単位) を設定します。 | long | |
| retainFirst (プロデューサー) | 受信した Exchange の最初の n 番目の数だけを保持するように指定します。これは、ビッグデータでテストするときに使用され、このモックエンドポイントが受信するすべての Exchange のコピーを保存しないことでメモリー消費を削減します。重要: この制限を使用する場合、getReceivedCounter() は受信した Exchange の実際の数を返します。たとえば、5000 の交換を受信し、最初の 10 の交換のみを保持するように設定した場合、getReceivedCounter () は引き続き 5000 を返しますが、getExchanges () および getReceivedExchanges () メソッドには最初の 10 の交換しかありません。このメソッドを使用する場合、他の期待値メソッドの一部はサポートされません。たとえば、expectedBodiesReceived(Object…) は、受信した最初の数のボディに期待値を設定します。setRetainFirst(int) メソッドと setRetainLast(int) メソッドの両方を設定して、最初と最後の受信の両方を制限できます。 | -1 | int |
| retainLast (プロデューサー) | 受信した 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 のプロパティー
| プロパティー | タイプ | デフォルト | 説明 |
|---|---|---|---|
|
|
|
|
デフォルトのメッセージ本文を指定します。SimpleDataSet の場合、これは一定のペイロードです。ただし、メッセージごとにカスタムペイロードを作成する場合は、 |
|
|
| null | |
|
|
|
| 送信/消費するメッセージの数を指定します。 |
|
|
|
|
進行状況を報告する前に受信するメッセージの数を指定します。大規模な負荷テストの進行状況を表示するのに役立ちます。< 0 の場合は |
18.8. SimpleDataSet
SimpleDataSet は DataSetSupport を拡張し、デフォルトの本文を追加します。
18.8.1. SimpleDataSet の追加プロパティー
| プロパティー | タイプ | デフォルト | 説明 |
|---|---|---|---|
|
|
|
|
デフォルトのメッセージ本文を指定します。デフォルトでは、 |
18.9. ListDataSet
List`DataSet` は DataSetSupport を拡張し、デフォルトボディのリストを追加します。
18.9.1. ListDataSet の追加プロパティー
| プロパティー | タイプ | デフォルト | 説明 |
|---|---|---|---|
|
|
|
|
デフォルトのメッセージ本文を指定します。デフォルトでは、 |
|
|
| defaultBodies リストのサイズ |
送信/消費するメッセージの数を指定します。この値は、 |
18.10. FileDataSet
FileDataSet は ListDataSet を拡張し、ファイルから本文をロードするためのサポートを追加します。
18.10.1. FileDataSet の追加プロパティー
| プロパティー | タイプ | デフォルト | 説明 |
|---|---|---|---|
|
|
| null | ペイロードのソースファイルを指定します |
|
|
| \z |
ファイルを複数のペイロードに分割するために |
18.11. Spring Boot Auto-Configuration
Spring Boot で dataset を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-dataset-starter</artifactId> <version>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に記載される 11 のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| 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 | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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 | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは 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 | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | ブール値 |
| camel.component.dataset.log | モックが着信メッセージを受信したときにロギングをオンにします。これは、着信メッセージの INFO レベルで 1 回だけログに記録されます。より詳細なログを取得するには、ロガーを org.apache.camel.component.mock.MockEndpoint クラスの DEBUG レベルに設定します。 | false | ブール値 |
第19章 Direct
プロデューサーとコンシューマーの両方がサポート対象
Direct コンポーネントプロデューサーがメッセージエクスチェンジを送信する際に、コンポーネントはコンシューマーを直接、同期呼び出しを提供します。
このエンドポイントは、同じ 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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
19.3. コンポーネントオプション
Direct コンポーネントは、以下に示す 5 つのオプションをサポートします。
| 名前 | 説明 | デフォルト | タイプ |
|---|---|---|---|
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| block (producer) | アクティブなコンシューマーを持たない direct エンドポイントにメッセージを送信する場合、ブロックしてコンシューマーがアクティブになるのを待つようプロデューサーに指示できます。 | true | boolean |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| timeout (プロデューサー) | ブロックが有効な場合に使用するタイムアウト値。 | 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 (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| exceptionHandler (コンシューマー (上級)) | コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
| exchangePattern (コンシューマー (上級)) | コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
| block (producer) | アクティブなコンシューマーを持たない direct エンドポイントにメッセージを送信する場合、ブロックしてコンシューマーがアクティブになるのを待つようプロデューサーに指示できます。 | true | boolean |
| failIfNoConsumers (プロデューサー) | アクティブなコンシューマーのない DIRECT エンドポイントに送信するときに、プロデューサーが例外を出力して失敗するかどうか。 | true | boolean |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| timeout (プロデューサー) | ブロックが有効な場合に使用するタイムアウト値。 | 30000 | long |
| synchronous (上級) | 同期処理を強制するかどうか。有効にすると、プロデューサースレッドは、同じスレッドが処理を続行する前に、メッセージが完了するまで強制的に待機します。無効 (デフォルト) にすると、プロデューサースレッドは解放され、他のスレッドが引き続きメッセージを処理する間、別の作業を行うことができます (リアクティブ)。 | 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>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
Bean コンポーネントは、以下に示す 6 つのオプションをサポートします。
| 名前 | 説明 | デフォルト | タイプ |
|---|---|---|---|
| camel.component.direct.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | ブール値 |
| camel.component.direct.block | アクティブなコンシューマーを持たない direct エンドポイントにメッセージを送信する場合、ブロックしてコンシューマーがアクティブになるのを待つようプロデューサーに指示できます。 | true | ブール値 |
| camel.component.direct.bridge-error-handler | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | ブール値 |
| camel.component.direct.enabled | direct コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | ブール値 | |
| camel.component.direct.lazy-start-producer | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | ブール値 |
| camel.component.direct.timeout | ブロックが有効な場合に使用するタイムアウト値。 | 30000 | Long |
第20章 FHIR
プロデューサーとコンシューマーの両方がサポート対象
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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
20.3. コンポーネントオプション
コンポーネントは、以下に記載される 27 のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| encoding (共通) | すべてのリクエストに使用するエンコーディング。 列挙値:
| String | |
| fhirVersion (共通) | 使用する FHIR バージョン。 列挙値:
| R4 | String |
| log (共通) | リクエストとレスポンスをすべてログに記録します。 | false | boolean |
| prettyPrint (共通) | すべてのリクエストをきれいに印刷します。 | false | boolean |
| serverUrl (common) | FHIR サーバーのベース URL。 | String | |
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
| client (上級) | カスタムクライアントを使用します。 | IGenericClient | |
| clientFactory (上級) | カスタムクライアントファクトリーを使用します。 | IRestfulClientFactory | |
| compress (上級) | 発信 (POST/PUT) コンテンツを GZIP 形式に圧縮します。 | false | boolean |
| configuration (上級) | 共有設定を使用するには、以下を行います。 | FhirConfiguration | |
| connectionTimeout (上級) | 初期 TCP 接続の試行と確立にかかる時間 (ミリ秒)。 | 10000 | Integer |
| deferModelScanning (上級) | このオプションが設定されている場合は、指定されたタイプの子リストが実際にアクセスされるまで、モデルクラスの子はスキャンされません。 | false | boolean |
| fhirContext (上級) | FhirContext は、作成するのにコストのかかるオブジェクトです。複数のインスタンスを作成しないようにするために、直接設定できます。 | FhirContext | |
| forceConformanceCheck (上級) | 適合性チェックを強制します。 | false | boolean |
| sessionCookie (上級) | すべてのリクエストに追加する HTTP セッション Cookie。 | String | |
| socketTimeout (上級) | 個々の読み取り/書き込み操作をブロックする時間 (ミリ秒単位)。 | 10000 | Integer |
| summary (上級) | _summary パラメーターを使用して、サーバーが応答を変更するように要求します。 列挙値:
| String | |
| validationMode (上級) | Camel が FHIR Server の適合ステートメントをいつ検証する必要があるか。 列挙値:
| ONCE | String |
| proxyHost (プロキシー) | プロキシーホスト。 | String | |
| proxyPassword (プロキシー) | プロキシーパスワード。 | String | |
| proxyPort (プロキシー) | プロキシーポート。 | Integer | |
| proxyUser (プロキシー) | プロキシーのユーザー名。 | String | |
| accessToken (セキュリティー) | OAuth アクセストークン。 | String | |
| password (セキュリティー) | Basic 認証に使用するユーザー名。 | String | |
| username (セキュリティー) | Basic 認証に使用するユーザー名。 | String |
20.4. エンドポイントオプション
FHIR エンドポイントは、URI 構文を使用して設定されます。
fhir:apiName/methodName
パスおよびクエリーパラメーターを使用します。
20.4.1. パスパラメーター (2 パラメーター)
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| apiName (共通) | 必須 実行する操作の種類 列挙値:
| FhirApiName | |
| methodName (共通) | 必須: 選択した操作に使用するサブ操作 | String |
20.4.2. クエリーパラメーター (44 パラメーター)
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| encoding (共通) | すべてのリクエストに使用するエンコーディング。 列挙値:
| String | |
| fhirVersion (共通) | 使用する FHIR バージョン。 列挙値:
| R4 | String |
| inBody (共通) | ボディにて交換で渡されるパラメーターの名前を設定します。 | String | |
| log (共通) | リクエストとレスポンスをすべてログに記録します。 | false | boolean |
| prettyPrint (共通) | すべてのリクエストをきれいに印刷します。 | false | boolean |
| serverUrl (common) | FHIR サーバーのベース URL。 | String | |
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| sendEmptyMessageWhenIdle (consumer) | ポーリングコンシューマーがファイルをポーリングしなかった場合、このオプションを有効にして、代わりに空のメッセージ (ボディーなし) を送信できます。 | false | boolean |
| exceptionHandler (コンシューマー (上級)) | コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
| exchangePattern (コンシューマー (上級)) | コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
| pollStrategy (コンシューマー (上級)) | プラグ可能な org.apache.camel.PollingConsumerPollingStrategy を使用すると、エクスチェンジが作成され、Camel でルーティングされる前に、通常はポーリング操作中に発生するエラー処理を制御するカスタム実装が提供できます。 | PollingConsumerPollStrategy | |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| client (上級) | カスタムクライアントを使用します。 | IGenericClient | |
| clientFactory (上級) | カスタムクライアントファクトリーを使用します。 | IRestfulClientFactory | |
| compress (上級) | 発信 (POST/PUT) コンテンツを GZIP 形式に圧縮します。 | false | boolean |
| connectionTimeout (上級) | 初期 TCP 接続の試行と確立にかかる時間 (ミリ秒)。 | 10000 | Integer |
| deferModelScanning (上級) | このオプションが設定されている場合は、指定されたタイプの子リストが実際にアクセスされるまで、モデルクラスの子はスキャンされません。 | false | boolean |
| fhirContext (上級) | FhirContext は、作成するのにコストのかかるオブジェクトです。複数のインスタンスを作成しないようにするために、直接設定できます。 | FhirContext | |
| forceConformanceCheck (上級) | 適合性チェックを強制します。 | false | boolean |
| sessionCookie (上級) | すべてのリクエストに追加する HTTP セッション Cookie。 | String | |
| socketTimeout (上級) | 個々の読み取り/書き込み操作をブロックする時間 (ミリ秒単位)。 | 10000 | Integer |
| summary (上級) | _summary パラメーターを使用して、サーバーが応答を変更するように要求します。 列挙値:
| String | |
| validationMode (上級) | Camel が FHIR Server の適合ステートメントをいつ検証する必要があるか。 列挙値:
| ONCE | String |
| proxyHost (プロキシー) | プロキシーホスト。 | String | |
| proxyPassword (プロキシー) | プロキシーパスワード。 | String | |
| proxyPort (プロキシー) | プロキシーポート。 | Integer | |
| proxyUser (プロキシー) | プロキシーのユーザー名。 | String | |
| backoffErrorThreshold (スケジューラー) | backoffMultipler が開始する前に発生する必要がある後続のエラーポーリング (エラーによって失敗した) の数。 | int | |
| backoffIdleThreshold (スケジューラー) | backoffMultipler が開始する前に発生する必要がある後続のアイドルポーリングの数。 | int | |
| backoffMultiplier (スケジューラー) | 後続のアイドル状態/エラーが連続して発生した場合に、スケジュールされたポーリングコンシューマーのバックオフを許可します。乗数は、実際に次の試行が行われる前にスキップされるポーリングの数です。このオプションが使用されている場合は、backoffIdleThreshold や backoffErrorThreshold も設定する必要があります。 | int | |
| delay (スケジューラー) | 次のポーリングまでの時間 (ミリ秒単位)。 | 500 | long |
| greedy (スケジューラー) | greedy が有効で、以前の実行が 1 つ以上のメッセージをポーリングした場合、ScheduledPollConsumer は即座に再度実行されます。 | false | boolean |
| initialDelay (スケジューラー) | 最初のポーリングが開始されるまでの時間 (ミリ秒単位)。 | 1000 | long |
| repeatCount (スケジューラー) | 実行の最大数を指定します。そのため、これを 1 に設定するとスケジューラーは 1 度だけ実行されます。これを 5 に設定した場合、5 回だけ実行されます。0 または負の値を設定すると、無制限に実行されます。 | 0 | long |
| runLoggingLevel (scheduler) | コンシューマーはポーリング時に開始/完了のログ行を記録します。このオプションを使用すると、ログレベルを設定できます。 列挙値:
| TRACE | LoggingLevel |
| scheduledExecutorService (スケジューラー) | コンシューマーに使用するカスタム/共有スレッドプールを設定できます。デフォルトでは、各コンシューマーに独自の単一スレッドのスレッドプールがあります。 | ScheduledExecutorService | |
| scheduler (スケジューラー) | camel-spring または camel-quartz コンポーネントから cron スケジューラーを使用します。スケジューラーにビルドされた値 spring または quartz を使用。 | none | オブジェクト |
| schedulerProperties (スケジューラー) | カスタムスケジューラーまたは Quartz や Spring ベースのスケジューラーを使用する場合に、追加のプロパティーを設定します。 | マップ | |
| startScheduler (スケジューラー) | スケジューラーを自動起動するかどうか。 | true | boolean |
| timeUnit (スケジューラー) | initialDelay および delay オプションの時間単位。 列挙値:
| MILLISECONDS | TimeUnit |
| useFixedDelay (スケジューラー) | 固定遅延または固定レートを使用するかどうかを制御します。詳細は、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 名 | タイプ | 説明 |
|---|---|---|
| 両方 | サーバーの機能ステートメントをフェッチする API | |
| 両方 | サーバー上に新しいリソースインスタンスを作成する作成操作用の API | |
| 両方 | サーバーリソースで論理的な削除を実行する、削除操作用の API | |
| 両方 | history メソッドの API | |
| 両方 | Atom バンドル内の link type=next タグで指定されたリンクを使用して、ページセットからリソースの前/次のバンドルをロードする API | |
| 両方 | タグやその他のメタ要素をリソースから、またはサーバー全体で取得、追加、削除するために使用できるメタ操作用の API | |
| 両方 | 拡張 FHIR 操作用の API | |
| 両方 | サーバーリソースで論理パッチを実行する、パッチ操作用の API | |
| 両方 | 読み取り操作の API メソッド | |
| 両方 | 特定の基準セットに一致するリソースを検索する API | |
| 両方 | トランザクション (リソースの集まり) をサーバーに送信して単体で実行するための API | |
| 両方 | サーバーリソースで論理的な削除を実行する、更新操作用の API | |
| 両方 | リソースを検証するための API |
各 API については、以降のセクションで説明します。
20.5.1. API: 機能
プロデューサーとコンシューマーの両方がサポート対象
機能 API は、次の構文で定義されます。
fhir:capabilities/methodName?[parameters]
以下の表にメソッドをリストし、その後に各メソッドの詳細な構文を示します。(API メソッドには、名前の代わりに構文で使用できる省略形の別名を付けることができます)
| メソッド | 説明 |
|---|---|
| 指定されたモデルタイプを使用して適合ステートメントを取得します |
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=myParameterNameHere は CamelFhir.myParameterNameHere ヘッダーをオーバーライドします。
20.5.2. API: 作成
プロデューサーとコンシューマーの両方がサポート対象
作成 API は、構文で次のように定義されます。
fhir:create/methodName?[parameters]
以下の表に 1 つのメソッドをリストし、その後に各メソッドの詳細な構文を示します。(API メソッドには、名前の代わりに構文で使用できる省略形の別名を付けることができます)
| メソッド | 説明 |
|---|---|
| サーバー上に 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=myParameterNameHere は CamelFhir.myParameterNameHere ヘッダーをオーバーライドします。
20.5.3. API: 削除
プロデューサーとコンシューマーの両方がサポート対象
削除 API は、構文で次のように定義されます。
fhir:delete/methodName?[parameters]
以下の表に 3 つのメソッドをリストし、その後に各メソッドの詳細な構文を示します。(API メソッドには、名前の代わりに構文で使用できる省略形の別名を付けることができます)
| メソッド | 説明 |
|---|---|
| 指定されたリソースを削除します | |
| リソースタイプ e でリソースを削除する | |
| 特定の検索 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=myParameterNameHere は CamelFhir.myParameterNameHere ヘッダーをオーバーライドします。
20.5.4. API: 履歴
プロデューサーとコンシューマーの両方がサポート対象
履歴 API は、次の構文で定義されます。
fhir:history/methodName?[parameters]
以下の表に 3 つのメソッドをリストし、その後に各メソッドの詳細な構文を示します。(API メソッドには、名前の代わりに構文で使用できる省略形の別名を付けることができます)
| メソッド | 説明 |
|---|---|
| サーバー上の特定のリソースのすべてのバージョンに対して (ID とタイプによって) 操作を実行します | |
| サーバー上のすべてのタイプのすべてのリソースのすべてのバージョンで操作を実行します | |
| サーバー上の指定されたタイプのすべてのリソースのすべてのバージョンで操作を実行します |
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=myParameterNameHere は CamelFhir.myParameterNameHere ヘッダーをオーバーライドします。
20.5.5. API: ページの読み込み
プロデューサーとコンシューマーの両方がサポート対象
ページ読み込み API は、次の構文で定義されます。
fhir:load-page/methodName?[parameters]
以下の表に 3 つのメソッドをリストし、その後に各メソッドの詳細な構文を示します。(API メソッドには、名前の代わりに構文で使用できる省略形の別名を付けることができます)
| メソッド | 説明 |
|---|---|
| 指定された URL とバンドルタイプを使用して結果のページを読み込み、DSTU1 Atom バンドルを返します | |
| バンドル内のリレーション next のリンクを使用して、結果の次のページを読み込みます | |
| バンドル内のリレーション 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=myParameterNameHere は CamelFhir.myParameterNameHere ヘッダーをオーバーライドします。
20.5.6. API: メタ
プロデューサーとコンシューマーの両方がサポート対象
メタ API は、次の構文で定義されます。
fhir:meta/methodName?[parameters]
以下の表に 5 つのメソッドをリストし、その後に各メソッドの詳細な構文を示します。(API メソッドには、名前の代わりに構文で使用できる省略形の別名を付けることができます)
| メソッド | 説明 |
|---|---|
| 指定されたメタデータの要素を既存のセットに追加します (削除しないでください)。 | |
| 指定された ID から指定されたメタデータの要素を削除します | |
| 特定のリソースから現在のメタデータを取得する | |
| サーバー全体から現在のメタデータを取得する | |
| 特定のタイプから現在のメタデータをフェッチする |
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=myParameterNameHere は CamelFhir.myParameterNameHere ヘッダーをオーバーライドします。
20.5.7. API: 操作
プロデューサーとコンシューマーの両方がサポート対象
操作 API は、次の構文で定義されます。
fhir:operation/methodName?[parameters]
以下の表に 5 つのメソッドをリストし、その後に各メソッドの詳細な構文を示します。(API メソッドには、名前の代わりに構文で使用できる省略形の別名を付けることができます)
| メソッド | 説明 |
|---|---|
| サーバー上の特定のリソースのすべてのバージョンに対して (ID とタイプによって) 操作を実行します | |
| この操作は、リソースの特定のバージョンで動作します | |
| サーバー上のすべてのタイプのすべてのリソースのすべてのバージョンで操作を実行します | |
| サーバー上の指定されたタイプのすべてのリソースのすべてのバージョンで操作を実行します | |
| この操作は、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=myParameterNameHere は CamelFhir.myParameterNameHere ヘッダーをオーバーライドします。
20.5.8. API: パッチ
プロデューサーとコンシューマーの両方がサポート対象
パッチ API は、次の構文で定義されます。
fhir:patch/methodName?[parameters]
以下の表に 2 つのメソッドをリストし、その後に各メソッドの詳細な構文を示します。(API メソッドには、名前の代わりに構文で使用できる省略形の別名を付けることができます)
| メソッド | 説明 |
|---|---|
| 指定されたリソース ID にパッチを適用します | |
| 特定の検索 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=myParameterNameHere は CamelFhir.myParameterNameHere ヘッダーをオーバーライドします。
20.5.9. API: 読み取り
プロデューサーとコンシューマーの両方がサポート対象
読み取り API は、次の構文で定義されます。
fhir:read/methodName?[parameters]
以下の表に 2 つのメソッドをリストし、その後に各メソッドの詳細な構文を示します。(API メソッドには、名前の代わりに構文で使用できる省略形の別名を付けることができます)
| メソッド | 説明 |
|---|---|
| サーバー上の IBaseResource を ID で読み取ります | |
| サーバー上の 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=myParameterNameHere は CamelFhir.myParameterNameHere ヘッダーをオーバーライドします。
20.5.10. API: 検索
プロデューサーとコンシューマーの両方がサポート対象
検索 API は、次の構文で定義されます。
fhir:search/methodName?[parameters]
以下の表に 1 つのメソッドをリストし、その後に各メソッドの詳細な構文を示します。(API メソッドには、名前の代わりに構文で使用できる省略形の別名を付けることができます)
| メソッド | 説明 |
|---|---|
| URL で直接検索を実行する |
20.5.10.1. メソッド searchByUrl
署名:
- org.hl7.fhir.instance.model.api.IBaseBundle searchByUrl(String url, java.util.Map<org.apache.camel.component.fhir.api.ExtraParameters, Object> extraParameters);
fhir/searchByUrl API メソッドには、次の表に示すパラメーターがあります。
| パラメーター | 説明 | タイプ |
|---|---|---|
| extraParameters | 渡すことができるパラメーターの完全なリストについては、ExtraParameters を参照してください。NULL の場合があります。 | マップ |
| url | 検索する URL。この URL が完全である場合があることに注意してください (例:)。その場合、クライアントのベース URL は無視されます。または、クライアントのベース URL が使用される場合に相対 (Patientname=foo など) にすることもできます。 | String |
上記のパラメーターに加えて、fhir API は任意の クエリーパラメーター も使用できます。
いずれのパラメーターも、エンドポイント URI で指定するか、メッセージヘッダーで動的に指定できます。メッセージヘッダー名は CamelFhir.parameter の形式である必要があります。inBody パラメーターはメッセージヘッダーをオーバーライドします。つまり、エンドポイントパラメーター inBody=myParameterNameHere は CamelFhir.myParameterNameHere ヘッダーをオーバーライドします。
20.5.11. API: トランザクション
プロデューサーとコンシューマーの両方がサポート対象
トランザクション API は、次の構文で定義されます。
fhir:transaction/methodName?[parameters]
以下の表に 2 つのメソッドをリストし、その後に各メソッドの詳細な構文を示します。(API メソッドには、名前の代わりに構文で使用できる省略形の別名を付けることができます)
| メソッド | 説明 |
|---|---|
| 指定された生のテキスト (バンドルリソースである必要があります) をトランザクション入力として使用します | |
| リソースのリストをトランザクション入力として使用する |
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=myParameterNameHere は CamelFhir.myParameterNameHere ヘッダーをオーバーライドします。
20.5.12. API: 更新
プロデューサーとコンシューマーの両方がサポート対象
更新 API は、次の構文で定義されます。
fhir:update/methodName?[parameters]
以下の表に 2 つのメソッドをリストし、その後に各メソッドの詳細な構文を示します。(API メソッドには、名前の代わりに構文で使用できる省略形の別名を付けることができます)
| メソッド | 説明 |
|---|---|
| サーバー上の IBaseResource を ID で更新します | |
| 検索 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=myParameterNameHere は CamelFhir.myParameterNameHere ヘッダーをオーバーライドします。
20.5.13. API: 検証
プロデューサーとコンシューマーの両方がサポート対象
検証 API は、構文で次のように定義されます。
fhir:validate/methodName?[parameters]
以下の表に 1 つのメソッドをリストし、その後に各メソッドの詳細な構文を示します。(API メソッドには、名前の代わりに構文で使用できる省略形の別名を付けることができます)
| メソッド | 説明 |
|---|---|
| リソースを検証します |
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=myParameterNameHere は CamelFhir.myParameterNameHere ヘッダーをオーバーライドします。
20.6. Spring Boot Auto-Configuration
Spring Boot で fhir を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-fhir-starter</artifactId> <version>3.14.5.redhat-00032</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 | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは 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 | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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 データ形式の自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | ブール値 | |
| 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 | ブール値 |
| camel.dataformat.fhirjson.override-resource-id-with-bundle-entry-full-url | true (デフォルト)に設定すると、fullUrl が定義されている場合には Bundle.entry.fullUrl は Bundle.entry.resource のリソース ID を上書きします。この動作は、ソースデータをバンドルオブジェクトに解析するときに発生します。これが望ましい動作でない場合は、これを false に設定します (たとえば、クライアントコードが fullUrl とリソース ID の間で追加の検証チェックを実行する場合)。 | false | ブール値 |
| camel.dataformat.fhirjson.pretty-print | プリティプリントフラグを設定します。これは、パーサーが、出力を可能な限り圧縮するのではなく、人間が読めるスペースと要素間の改行でリソースをエンコードすることを意味します。 | false | ブール値 |
| camel.dataformat.fhirjson.server-base-url | このパーサーが使用するサーバーのベース URL を設定します。値が設定されている場合、リソース参照が絶対 URL として提供されているが、指定されたベースと一致するベースを持っている場合、リソース参照は相対参照に変換されます。 | String | |
| camel.dataformat.fhirjson.strip-versions-from-references | true (デフォルト) に設定すると、バージョンを含むリソース参照は、リソースがエンコードされるときにバージョンが削除されます。ほとんどの場合、あるリソースから別のリソースへの参照は、ID とバージョンではなく、ID によってリソースを参照する必要があるため、これは通常は適切な動作です。ただし、場合によっては、リソースリンクでバージョンを保持することが望ましい場合があります。その場合、この値は false に設定する必要があります。このメソッドは、参照エンコーディングをグローバルに無効にする機能を提供します。より細かい制御が必要な場合は、setDontStripVersionsFromReferencesAtPaths(List) を使用します。 | false | ブール値 |
| camel.dataformat.fhirjson.summary-mode | true に設定すると (デフォルトは false)、FHIR 仕様によって要約要素としてマークされた要素のみが含まれます。 | false | ブール値 |
| 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 データ形式の自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | ブール値 | |
| 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 | ブール値 |
| camel.dataformat.fhirxml.override-resource-id-with-bundle-entry-full-url | true (デフォルト)に設定すると、fullUrl が定義されている場合には Bundle.entry.fullUrl は Bundle.entry.resource のリソース ID を上書きします。この動作は、ソースデータをバンドルオブジェクトに解析するときに発生します。これが望ましい動作でない場合は、これを false に設定します (たとえば、クライアントコードが fullUrl とリソース ID の間で追加の検証チェックを実行する場合)。 | false | ブール値 |
| camel.dataformat.fhirxml.pretty-print | プリティプリントフラグを設定します。これは、パーサーが、出力を可能な限り圧縮するのではなく、人間が読めるスペースと要素間の改行でリソースをエンコードすることを意味します。 | false | ブール値 |
| camel.dataformat.fhirxml.server-base-url | このパーサーが使用するサーバーのベース URL を設定します。値が設定されている場合、リソース参照が絶対 URL として提供されているが、指定されたベースと一致するベースを持っている場合、リソース参照は相対参照に変換されます。 | String | |
| camel.dataformat.fhirxml.strip-versions-from-references | true (デフォルト) に設定すると、バージョンを含むリソース参照は、リソースがエンコードされるときにバージョンが削除されます。ほとんどの場合、あるリソースから別のリソースへの参照は、ID とバージョンではなく、ID によってリソースを参照する必要があるため、これは通常は適切な動作です。ただし、場合によっては、リソースリンクでバージョンを保持することが望ましい場合があります。その場合、この値は false に設定する必要があります。このメソッドは、参照エンコーディングをグローバルに無効にする機能を提供します。より細かい制御が必要な場合は、setDontStripVersionsFromReferencesAtPaths(List) を使用します。 | false | ブール値 |
| camel.dataformat.fhirxml.summary-mode | true に設定すると (デフォルトは false)、FHIR 仕様によって要約要素としてマークされた要素のみが含まれます。 | false | ブール値 |
| camel.dataformat.fhirxml.suppress-narratives | true に設定すると (デフォルトは false)、物語はエンコードされた値に含まれません。 | false | ブール値 |
第21章 File
プロデューサーとコンシューマーの両方がサポート対象
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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
21.3. コンポーネントオプション
File コンポーネントは、以下に示す 3 つのオプションをサポートします。
| 名前 | 説明 | デフォルト | タイプ |
|---|---|---|---|
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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 (共通) | このオプションは、ファイルのエンコーディングを指定するために使用されます。コンシューマーでこれを使用して、ファイルのエンコーディングを指定できます。これにより、Camel は、ファイルコンテンツがアクセスされている場合にファイルコンテンツをロードする必要がある charset を知ることができます。ファイルを書き込む場合も同様に、このオプションを使用して、ファイルを書き込む charset を指定できます。ファイルを書き込むとき、Camel はメッセージの内容をメモリーに読み込んで、データを設定された charset に変換できるようにする必要があることに注意してください。つまり、メッセージが大きい場合は、これを使用しないでください。 | String | |
| doneFileName (共通) | Producer: 指定された場合、元のファイルが書き込まれると、Camel は 2 番目の完了ファイルを書き込みます。完了ファイルは空になります。このオプションは、使用するファイル名を設定します。固定の名前を指定できます。または、動的プレースホルダーを使用することもできます。完了ファイルは、常に元のファイルと同じフォルダーに書き込まれます。Consumer: 指定すると、Camel は完了ファイルが存在する場合にのみファイルを消費します。このオプションは、使用するファイル名を設定します。固定の名前を指定できます。または、動的なプレースホルダーを使用できます。完了ファイルは、常に元のファイルと同じフォルダーにあると想定されます。$\\{file.name} と $\\{file.name.next} のみが動的プレースホルダーとしてサポートされています。 | String | |
| fileName (共通) | File Language などの式を使用して、ファイル名を動的に設定します。コンシューマーの場合は、ファイル名フィルターとして使用されます。プロデューサーの場合、書き込むファイル名を評価するために使用されます。式が設定されている場合は、CamelFileName ヘッダーよりも優先されます。(注: ヘッダー自体を式にすることもできます)。式オプションは String タイプと Expression タイプの両方をサポートします。式が String タイプである場合、これは常にファイル言語を使用して評価されます。式が Expression タイプである場合、指定された Expression タイプが使用されます。これにより、たとえば OGNL 式を使用できます。コンシューマーの場合、これを使用してファイル名をフィルターリングできるため、たとえば、ファイル言語構文 mydata-$\\{date:now:yyyyMMdd}.txt を使用して今日のファイルを消費できます。プロデューサーは、既存の CamelFileName ヘッダーよりも優先される CamelOverruleFileName ヘッダーをサポートします。CamelOverruleFileName は一度だけ使用されるヘッダーであり、CamelFileName を一時的に保存して後で復元する必要がなくなるため、簡単になります。 | String | |
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| delete (コンシューマー) | true の場合、ファイルは正常に処理された後に削除されます。 | false | boolean |
| moveFailed (コンシューマー) | Simple 言語に基づいて move failure 式を設定します。たとえば、ファイルを .error サブディレクトリーに移動するには、.error を使用します。注: ファイルを失敗した場所に移動すると、Camel はエラーを処理し、ファイルを再度取得しません。 | String | |
| noop (コンシューマー) | true の場合、ファイルは移動または削除されません。このオプションは、読み取り専用データまたは ETL タイプの要件に適しています。noop=true の場合、Camel は idempotent=true も設定し、同じファイルを繰り返し消費しないようにします。 | false | boolean |
| preMove (コンシューマー) | 処理前に移動する場合にファイル名を動的に設定するために使用される式 (File 言語など)。たとえば、進行中のファイルを order ディレクトリーに移動するには、この値を order に設定します。 | String | |
| preSort (コンシューマー) | pre-sort が有効になっている場合、コンシューマーはポーリング中に、ファイルシステムから取得されたファイル名とディレクトリー名を並べ替えます。ソートされた順序でファイルを操作する必要がある場合に、これを行うことができます。pre-sort は、コンシューマーがフィルターリングを開始する前に実行され、Camel によって処理されるファイルを受け入れます。このオプション default=false で無効になっています。 | false | boolean |
| recursive (コンシューマー) | ディレクトリーの場合は、すべてのサブディレクトリー内のファイルも検索します。 | false | boolean |
| sendEmptyMessageWhenIdle (consumer) | ポーリングコンシューマーがファイルをポーリングしなかった場合、このオプションを有効にして、代わりに空のメッセージ (ボディーなし) を送信できます。 | false | boolean |
| directoryMustExist (consumer (advanced)) | startingDirectoryMustExist オプションと同様ですが、これはポーリング中に適用されます (コンシューマーの起動後)。 | false | boolean |
| exceptionHandler (コンシューマー (上級)) | コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
| exchangePattern (コンシューマー (上級)) | コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
| extendedAttributes (コンシューマー (上級)) | 対象のファイル属性を定義します。posix:permissions,posix:owner,basic:lastAccessTime と同様に、posix:、basic:lastAccessTime などの基本的なワイルドカードをサポートします。 | String | |
| inProgressRepository (コンシューマー (上級)) | プラグ可能な in-progress リポジトリー org.apache.camel.spi.IdempotentRepository。in-progress リポジトリーは、現在進行中のファイルが消費されていることを示すために使用されます。デフォルトでは、メモリーベースのリポジトリーが使用されます。 | IdempotentRepository | |
| localWorkDirectory (コンシューマー (上級)) | 使用する場合、ローカルの作業ディレクトリーを使用して、リモートファイルのコンテンツをローカルファイルに直接保存し、コンテンツがメモリーに読み込まれないようにできます。これは、非常に大きなリモートファイルを使用している場合に、メモリーを節約するために役立ちます。 | String | |
| onCompletionExceptionHandler (consumer (advanced)) | カスタム org.apache.camel.spi.ExceptionHandler を使用して、コンシューマーがコミットまたはロールバックを実行する完了プロセスのファイル中に出力される例外を処理します。デフォルトの実装は、WARN レベルですべての例外をログに記録し、無視します。 | ExceptionHandler | |
| pollStrategy (コンシューマー (上級)) | プラグ可能な org.apache.camel.PollingConsumerPollingStrategy を使用すると、エクスチェンジが作成され、Camel でルーティングされる前に、通常はポーリング操作中に発生するエラー処理を制御するカスタム実装が提供できます。 | PollingConsumerPollStrategy | |
| probeContentType (コンシューマー (上級)) | コンテンツタイプのプローブを有効にするかどうか。有効な場合、コンシューマーは Files#probeContentType(java.nio.file.Path) を使用してファイルのコンテンツタイプを判断し、それをキー Exchange#FILE_CONTENT_TYPE を持つヘッダーとしてメッセージに格納します。 | false | boolean |
| processStrategy (コンシューマー (上級)) | プラグ可能な org.apache.camel.component.file.GenericFileProcessStrategy を使用すると、独自の readLock オプションまたは同様のものを実装できます。特別な準備完了ファイルが存在するなど、ファイルを使用する前に特別な条件を満たす必要がある場合にも使用できます。このオプションを設定すると、readLock オプションは適用されません。 | GenericFileProcessStrategy | |
| resumeStrategy (コンシューマー (上級)) | ファイルの再開戦略を設定します。これにより、アプリケーションを停止する前に、最後のポイントの後にファイルの読み取りを再開するための戦略を定義できます。実装の詳細については、FileConsumerResumeStrategy を参照してください。 | FileConsumerResumeStrategy | |
| startingDirectoryMustExist (consumer (advanced)) | 開始ディレクトリーの存在が必要かどうか。autoCreate オプションがデフォルトで有効になっていることに注意してください。これは、開始ディレクトリーが存在しない場合、通常は自動作成されることを意味します。autoCreate を無効にして有効にすると、開始ディレクトリーの存在が必要なことを確認できます。ディレクトリーが存在しない場合は例外が発生します。 | false | boolean |
| startingDirectoryMustHaveAccess (consumer (advanced)) | 開始ディレクトリーにアクセス権があるかどうか。ディレクトリーが存在することを確認するには、startDirectoryMustExist パラメーターを true に設定する必要があります。ディレクトリーに読み取りおよび書き込みパーミッションがない場合は例外が発生します。 | false | boolean |
| appendChars (プロデューサー) | ファイルの書き込み後に文字 (テキスト) を追加するために使用されます。たとえば、新規ファイルや既存ファイルを書き込んで追加する際に、新しい行やその他のセパレーターを追加するために使用できます。改行 (slash-n または slash-r) またはタブ (slash-t) 文字を指定するには、slash-slash-n のように追加のスラッシュでエスケープします。 | String | |
| fileExist (プロデューサー) | 同じ名前のファイルがすでに存在する場合のアクション。デフォルトの上書きは、既存のファイルを置き換えます。- 追加 - 既存のファイルにコンテンツを追加します。- 失敗 - 既存のファイルがすでに存在することを示す GenericFileOperationException を出力します。- 無視 - 問題を黙って無視し、既存のファイルを上書きしませんが、すべて問題ないと想定します。- 移動 - オプションを設定するには、moveExisting オプションも使用する必要があります。オプション eagerDeleteTargetFile を使用して、ファイルを移動する際に既存ファイルが存在する場合に何をすべきか制御でき、そうでない場合は移動操作が失敗します。移動オプションは、ターゲットファイルを書き込む前に、既存のファイルを移動します。- TryRename は、tempFileName オプションが使用されている場合にのみ適用されます。これにより、存在チェックを実行せずに、一時的なファイル名から実際のファイル名への変更を試みることができます。このチェックは、一部のファイルシステム、特に FTP サーバーでは高速になる場合があります。 列挙値:
| オーバーライド | GenericFileExist |
| flatten (プロデューサー) | flatten は、ファイル名パスをフラット化して先頭のパスを削除するために使用されるので、ファイル名だけになります。これにより、サブディレクトリーに再帰的に使用できますが、たとえばファイルを別のディレクトリーに書き込む場合、ファイルは単一のディレクトリーに書き込まれます。これをプロデューサーで true に設定すると、CamelFileName ヘッダーのファイル名が先頭パスから削除されます。 | false | boolean |
| jailStartingDirectory (プロデューサー) | ファイルの書き込みを開始ディレクトリー (およびサブ) のみに拘束 (制限) するために使用されます。これはデフォルトで有効になっており、Camel は外部ディレクトリーにファイルを書き込むことができません (そのままでセキュアにするため)。無効にすると、親フォルダーやルートフォルダーなど、開始ディレクトリー以外のディレクトリーにファイルを書き込むことができます。 | true | boolean |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| moveExisting (プロデューサー) | 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 (プロデューサー) | このオプションは、一時的な名前を使用してファイルを書き込み、書き込みが完了した後に、その名前を実際の名前に変更するために使用されます。書き込み中のファイルを識別し、(排他的読み取りロックを使用せずに) コンシューマーが進行中のファイルを読み取らないようにするために使用できます。大きなファイルをアップロードするときに FTP でよく使用されます。 | String | |
| allowNullBody (プロデューサー (上級)) | ファイルの書き込み中に null の本文を許可するかどうかを指定するために使用されます。true に設定すると空のファイルが作成され、false に設定して null の本文をファイルコンポーネントに送信しようとすると、Cannot write null body to file.という GenericFileWriteException が出力されます。fileExist オプションを Override に設定するとファイルは切り捨てられ、append に設定するとファイルは変更されません。 | false | boolean |
| chmod (プロデューサー (上級)) | プロデューサーによって送信されるファイルパーミッションを指定します。chmod の値は 000 から 777 の間の値である必要があります。0755 のように先頭に数字がある場合は無視します。 | String | |
| chmodDirectory (プロデューサー (上級)) | 不足しているディレクトリーをプロデューサーが作成するときに使用するディレクトリーパーミッションを指定します。chmod 値は 000 から 777 の間である必要があります。0755 のように先頭に数字がある場合は無視します。 | String | |
| eagerDeleteTargetFile (producer (advanced)) | 既存のターゲットファイルを積極的に削除するかどうか。このオプションは、fileExists=Override および tempFileName オプションを使用している場合にのみ適用されます。これを使用して、一時ファイルが書き込まれる前にターゲットファイルを削除することを無効化 (false に設定) できます。たとえば、大きなファイルを書き込んで、一時ファイルの書き込み中にターゲットファイルを存在させたい場合があります。これにより、一時ファイルの名前がターゲットファイル名に変更される直前まで、ターゲットファイルは削除されません。このオプションは、fileExist=Move が有効で、既存のファイルが存在する場合に、既存のファイルを削除するかどうかを制御するためにも使用されます。このオプション copyAndDeleteOnRenameFails が false の場合、既存のファイルが存在する場合は例外が出力されます。true の場合、移動操作の前に既存のファイルが削除されます。 | true | boolean |
| forceWrites (プロデューサー (上級)) | ファイルシステムへの書き込みを強制的に同期するかどうか。たとえばログや監査ログへの書き込みなど、このレベルの保証が必要ない場合はオフにすることでパフォーマンスが向上します。 | true | boolean |
| keepLastModified (producer (advanced)) | ソースファイル (存在する場合) からの最終変更のタイムスタンプを保持します。Exchange.FILE_LAST_MODIFIED ヘッダーを使用してタイムスタンプを見つけます。このヘッダーには、java.util.Date またはタイムスタンプ付きの long を含めることができます。タイムスタンプが存在し、オプションが有効な場合は、書き込まれたファイルにこのタイムスタンプが設定されます。注記: このオプションは、ファイルプロデューサーにのみ適用されます。このオプションは、ftp プロデューサーでは使用できません。 | false | boolean |
| moveExistingFileStrategy (プロデューサー (上級)) | fileExist=Move が設定されている場合に使用する特別な命名トークンを持つファイルを移動するために使用されるストラテジー (カスタムストラテジー)。デフォルトでは、カスタムストラテジーが指定されていない場合に使用される実装があります。 | FileMoveExistingStrategy | |
| autoCreate (上級) | ファイルのパス名に不足しているディレクトリーを自動的に作成します。ファイルコンシューマーの場合は、開始ディレクトリーを作成することを意味します。ファイルプロデューサーの場合、ファイルが書き込まれるディレクトリーを意味します。 | true | boolean |
| bufferSize (上級) | ファイルの書き込みに使用されるバッファーサイズ (バイト単位) (または、ファイルのダウンロードとアップロードに使用される FTP の場合)。 | 131072 | int |
| copyAndDeleteOnRenameFail (advanced) | ファイルの名前を直接変更できなかった場合に、フォールバックしてファイルのコピーと削除を行うかどうか。このオプションは FTP コンポーネントでは使用できません。 | true | boolean |
| renameUsingCopy (上級) | コピーおよび削除ストラテジーを使用して名前変更操作を実行します。これは主に、通常の名前変更操作が信頼できない環境で使用されます (たとえば、異なるファイルシステムまたはネットワーク間)。このオプションは、遅延が追加された後に限り、コピーおよび削除ストラテジーに自動的にフォールバックする copyAndDeleteOnRenameFail パラメーターよりも優先されます。 | false | boolean |
| synchronous (上級) | 同期処理を厳密に使用するかどうかを設定します。 | false | boolean |
| antExclude (フィルター) | ant スタイルのフィルターの除外。antInclude と antExclude の両方を使用する場合は、antInclude よりも antExclude が優先されます。コンマ区切り形式で複数の除外を指定できます。 | String | |
| antFilterCaseSensitive (フィルター) | ant フィルターに大文字と小文字を区別するフラグを設定します | true | boolean |
| antInclude (フィルター) | 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 (フィルター) | Simple 言語に基づいてディレクトリーをフィルターリングします。たとえば、現在の日付でフィルターリングするには、$\\{date:now:yyyMMdd} などの単純な日付パターンを使用できます。 | String | |
| filterFile (フィルター) | Simple 言語に基づいてファイルをフィルターリングします。たとえば、ファイルサイズでフィルターリングするには、$\\{file:size} 5000 を使用できます。 | String | |
| idempotent (フィルター) | Camel が既に処理されたファイルをスキップできるように、Idempotent Consumer EIP パターンを使用するオプション。デフォルトでは、1000 エントリーを保持するメモリーベースの LRUCache を使用します。noop=true の場合は、同じファイルを何度も使用することを回避するため、べき等性も有効になります。 | false | ブール値 |
| idempotentKey (フィルター) | カスタムのべき等性キーを使用するには、以下を行います。デフォルトでは、ファイルの絶対パスが使用されます。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 (フィルター) | ディレクトリーを再帰的に処理する際にトラバースする最大深度。 | 2147483647 | int |
| maxMessagesPerPoll (フィルター) | ポーリングごとに収集する最大メッセージを定義します。デフォルトでは最大値は設定されていません。たとえば制限を 1000 などに設定して、数千のファイルがあるサーバーの起動を回避できます。無効にするには、0 または負の値を設定します。注記: このオプションが使用されている場合、File および FTP コンポーネントはソート前に制限されます。たとえば、100000 個のファイルがある場合に maxMessagesPerPoll=500 を使用すると、最初の 500 個のファイルのみ選択され、ソートされます。eagerMaxMessagesPerPoll オプションを使用して、これを false に設定すると、最初にすべてのファイルをスキャンし、後でソートできます。 | int | |
| minDepth (フィルター) | ディレクトリーを再帰的に処理する際に処理を開始する最小深度。minDepth=1 はベースディレクトリーを意味します。minDepth=2 は最初のサブディレクトリーを意味します。 | int | |
| move (filter) | 処理後に移動する場合にファイル名を動的に設定するために使用される式 (Simple 言語など)。ファイルを .done サブディレクトリーに移動するには、.done と入力します。 | String | |
| exclusiveReadLockStrategy (ロック) | org.apache.camel.component.file.GenericFileExclusiveReadLockStrategy 実装としてのプラグ可能な読み取りロック。 | GenericFileExclusiveReadLockStrategy | |
| readLock (ロック) | ファイルに排他的な読み取りロックがある (つまり、ファイルが進行中または書き込み中ではない) 場合にのみファイルをポーリングするために、コンシューマーが使用します。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 を結合された読み取りロックとして使用するためのものです。これにより、べき等リポジトリー実装がクラスタリングをサポートする場合、クラスタリングをサポートする読み取りロックを使用できます。注意: さまざまな読み取りロックは、異なるノードの同時コンシューマーが共有ファイルシステム上の同じファイルを求めて競合するクラスターモードでの動作にすべて適しているわけではありません。.アトミックに近い操作を使用して空のマーカーファイルを作成する markerFile ですが、クラスターでの動作は保証されていません。fileLock の方が良好に機能しますが、ファイルシステムは分散ファイルロックなどに対応する必要があります。べき等性リポジトリーが Hazelcast コンポーネントや Infinispan などのクラスターリングに対応している場合、べき等性等読み取りロックを使用できます。 列挙値:
| none | String |
| readLockCheckInterval (ロック) | 読み取りロックでサポートされている場合、読み取りロックの間隔 (ミリ単位)。この間隔は、読み取りロックを取得する試行間のスリープに使用されます。たとえば、changed 読み取りロックを使用する場合、遅い書き込みに対応するために間隔を長く設定できます。デフォルトは 1 秒ですが、プロデューサーによるファイルの書き込みが非常に遅い場合は短すぎる可能性があります。注記: FTP の場合、デフォルトの readLockCheckInterval は 5000 です。readLockTimeout の値は readLockCheckInterval よりも大きくする必要がありますが、thumb のルールではタイムアウトは readLockCheckInterval の 2 倍以上にする必要があります。これは、タイムアウトに達する前に読み取りロックプロセスがロックを取得しようとするためのアンブル時間を確保するために必要です。 | 1000 | long |
| readLockDeleteOrphanLockFiles (lock) | Camel が適切にシャットダウンされなかった場合 (JVM クラッシュなど)、マーカーファイルを使用した読み取りロックが、ファイルシステムに残っている可能性のある孤立した読み取りロックファイルを起動時に削除する必要があるかどうか。このオプションを false にすると、孤立したロックファイルがあると Camel はそのファイルを取得しようとしなくなります。これは、別のノードが同じ共有ディレクトリーから同時にファイルを読み取っているが原因である可能性もあります。 | true | boolean |
| readLockIdempotentReleaseAsync (lock) | 遅延リリースタスクを同期と非同期のどちらにするか。詳細は、readLockIdempotentReleaseDelay オプションを参照してください。 | false | boolean |
| readLockIdempotentReleaseAsyncPoolSize (lock) | 非同期リリースタスクを使用する場合の、スケジュール済みスレッドプール内のスレッドの数。デフォルトの 1 コアスレッドの使用で、ほとんどすべてのユースケースに対応できます。べき等リポジトリーの更新が遅い場合、または処理するファイルが多い場合にのみ、より高い値に設定してください。readLockIdempotentReleaseExecutorService オプションを設定して共有スレッドプールを使用する場合、このオプションは使用されません。詳細は、readLockIdempotentReleaseDelay オプションを参照してください。 | int | |
| readLockIdempotentReleaseDelay (lock) | リリースタスクをミリ秒遅らせるかどうか。これを使用して、共有べき等性リポジトリーを使用するアクティブ/アクティブクラスターシナリオで、ファイルに読み取りロックが適用されていると見なされる場合にウィンドウを拡張するリリースタスクを遅らせることができます。そうすることで、競合条件により、他のノードは同じファイルをスキャンして取得できくなります。リリースタスクの期間を拡張することで、このような状況を防ぐことができます。readLockRemoveOnCommit を true に設定した場合にのみ、遅延が必要になることに注意してください。 | int | |
| readLockIdempotentReleaseExecutorService (lock) | 非同期リリースタスクにカスタムおよび共有スレッドプールを使用します。詳細は、readLockIdempotentReleaseDelay オプションを参照してください。 | ScheduledExecutorService | |
| readLockLoggingLevel (lock) | 読み取りロックを取得できなかったときに使用されるロギングレベル。デフォルトでは、DEBUG がログに記録されます。このレベルを変更できます。たとえば、ログを記録しないように OFF に設定できます。このオプションを適用できる readLock タイプは、changed、fileLock、idempotent、idempotent-changed、idempotent-rename、rename のみです。 列挙値:
| DEBUG | LoggingLevel |
| readLockMarkerFile (lock) | changed、rename、exclusive の読み取りロックタイプでマーカーファイルを使用するかどうか。デフォルトでは、他のプロセスが同じファイルを取得するのを防ぐために、マーカーファイルも使用されます。このオプションを false に設定すると、この動作をオフにできます。たとえば、Camel アプリケーションによってマーカーファイルをファイルシステムに書き込みたくない場合などです。 | true | boolean |
| readLockMinAge (lock) | このオプションは、readLock=changed の場合にのみ適用されます。読み取りロックを取得しようとする前に、ファイルが経過しなければならない最小期間を指定できます。たとえば、readLockMinAge=300s を使用して、ファイルに 5 分以上の経過を要求します。これにより、指定された期間以上のファイルの取得を試みるため、changed 読み取りロックが高速化されます。 | 0 | long |
| readLockMinLength (lock) | このオプションは、readLock=changed の場合にのみ適用されます。最小ファイル長を設定できます。デフォルトで Camel はファイルにデータが含まれていると想定するため、デフォルト値は 1 です。このオプションをゼロに設定すると、長さがゼロのファイルを使用できます。 | 1 | long |
| readLockRemoveOnCommit (lock) | このオプションは、readLock=idempotent にのみ適用されます。ファイル処理に成功し、コミットが行われるときに、べき等性リポジトリーからファイル名のエントリーを削除するかどうかを指定できます。デフォルトはファイルは削除されないため、競合状態が発生せず、別のアクティブなノードがファイルを取得しようとする可能性があります。代わりにべき等性リポジトリーは、X 分後にファイル名のエントリーをエビクトするように設定するエビクションストラテジーをサポートする場合があります。これにより、競合状態の問題がなくなります。詳細は、readLockIdempotentReleaseDelay オプションを参照してください。 | false | boolean |
| readLockRemoveOnRollback (lock) | このオプションは、readLock=idempotent にのみ適用されます。ファイル処理に失敗し、ロールバックが発生するときに、べき等性リポジトリーからファイル名のエントリーを削除するかどうかを指定できます。このオプションが false の場合、ファイル名のエントリーが (ファイルがコミットされたかのように) 確認されます。 | true | boolean |
| readLockTimeout (ロック) | 読み取りロックでサポートされている場合、読み取りロックのオプションのタイムアウト (ミリ秒単位)。読み取りロックを許可できず、タイムアウトがトリガーされた場合、Camel はファイルをスキップします。次のポーリングで、Camel はファイルを再試行します。このときに、読み取りロックが許可される可能性があります。無期限を指定するには、0 以下の値を使用します。現在、fileLock、changed、および rename がタイムアウトに対応しています。注記: FTP の場合、デフォルトの readLockTimeout 値は 10000 ではなく 20000 です。readLockTimeout の値は readLockCheckInterval よりも大きくする必要がありますが、thumb のルールではタイムアウトは readLockCheckInterval の 2 倍以上にする必要があります。これは、タイムアウトに達する前に読み取りロックプロセスがロックを取得しようとするためのアンブル時間を確保するために必要です。 | 10000 | long |
| backoffErrorThreshold (スケジューラー) | backoffMultipler が開始する前に発生する必要がある後続のエラーポーリング (エラーによって失敗した) の数。 | int | |
| backoffIdleThreshold (スケジューラー) | backoffMultipler が開始する前に発生する必要がある後続のアイドルポーリングの数。 | int | |
| backoffMultiplier (スケジューラー) | 後続のアイドル状態/エラーが連続して発生した場合に、スケジュールされたポーリングコンシューマーのバックオフを許可します。乗数は、実際に次の試行が行われる前にスキップされるポーリングの数です。このオプションが使用されている場合は、backoffIdleThreshold や backoffErrorThreshold も設定する必要があります。 | int | |
| delay (スケジューラー) | 次のポーリングまでの時間 (ミリ秒単位)。 | 500 | long |
| greedy (スケジューラー) | greedy が有効で、以前の実行が 1 つ以上のメッセージをポーリングした場合、ScheduledPollConsumer は即座に再度実行されます。 | false | boolean |
| initialDelay (スケジューラー) | 最初のポーリングが開始されるまでの時間 (ミリ秒単位)。 | 1000 | long |
| repeatCount (スケジューラー) | 実行の最大数を指定します。そのため、これを 1 に設定するとスケジューラーは 1 度だけ実行されます。これを 5 に設定した場合、5 回だけ実行されます。0 または負の値を設定すると、無制限に実行されます。 | 0 | long |
| runLoggingLevel (scheduler) | コンシューマーはポーリング時に開始/完了のログ行を記録します。このオプションを使用すると、ログレベルを設定できます。 列挙値:
| TRACE | LoggingLevel |
| scheduledExecutorService (スケジューラー) | コンシューマーに使用するカスタム/共有スレッドプールを設定できます。デフォルトでは、各コンシューマーに独自の単一スレッドのスレッドプールがあります。 | ScheduledExecutorService | |
| scheduler (スケジューラー) | camel-spring または camel-quartz コンポーネントから cron スケジューラーを使用します。スケジューラーにビルドされた値 spring または quartz を使用。 | none | オブジェクト |
| schedulerProperties (スケジューラー) | カスタムスケジューラーまたは Quartz や Spring ベースのスケジューラーを使用する場合に、追加のプロパティーを設定します。 | マップ | |
| startScheduler (スケジューラー) | スケジューラーを自動起動するかどうか。 | true | boolean |
| timeUnit (スケジューラー) | initialDelay および delay オプションの時間単位。 列挙値:
| MILLISECONDS | TimeUnit |
| useFixedDelay (スケジューラー) | 固定遅延または固定レートを使用するかどうかを制御します。詳細は、JDK の ScheduledExecutorService を参照してください。 | true | boolean |
| シャッフル (並べ替え) | ファイルの一覧をシャッフルします (ランダムな順序でのソート) | false | boolean |
| sortBy (並べ替え) | File 言語を使用したビルトインソート。ネストされたソートをサポートしているため、ファイル名でのソートと、2 つ目のグループとして変更日でソートできます。 | String | |
| sorter (sort) | java.util.Comparator クラスとしてのプラグ可能なソーター。 | Comparator |
ファイルプロデューサーのデフォルト動作
デフォルトでは、同じ名前の既存ファイルが存在する場合は、既存ファイルをオーバーライドします。
21.5. 移動および削除操作
移動または削除操作は、ルーティングが完了した後 (ポストコマンド) に実行されます。そのため、Exchange の処理中、ファイルはまだ受信トレイフォルダーにあります。
これを例で説明しましょう。
from("file://inbox?move=.done").to("bean:handleOrder");
ファイルが inbox フォルダーにドロップされると、ファイルコンシューマーはこれに気づき、handleOrder Bean にルーティングされる新しい FileExchange を作成します。次に、Bean は File オブジェクトを処理します。この時点で、ファイルはまだ inbox フォルダーにあります。Bean が完了してルートが完了すると、ファイルコンシューマーは移動操作を実行し、ファイルを .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. ファイルプロデューサーのみ
| ヘッダー | 説明 |
|---|---|
|
|
書き込むファイルの名前を指定します (エンドポイントディレクトリーに相対的)。この名前は |
|
| 書き込まれた出力ファイルの実際の絶対ファイルパス (パス + 名前)。このヘッダーは Camel によって設定され、その目的は、書き込まれたファイルの名前をエンドユーザーに提供することです。 |
|
|
|
21.8.2. ファイルコンシューマーのみ
| ヘッダー | 説明 |
|---|---|
|
| エンドポイントで設定された開始ディレクトリーからのオフセットを含む相対ファイルパスとしての使用済みファイルの名前。 |
|
| ファイル名のみ (先行パスを含まない名前)。 |
|
|
消費されたファイルが絶対パスを示すかどうかを指定する |
|
| ファイルへの絶対パス。相対ファイルの場合、このパスは代わりに相対パスを保持します。 |
|
| ファイルパス。相対ファイルの場合、これは開始ディレクトリー + 相対ファイル名です。絶対ファイルの場合、これは絶対パスです。 |
|
| 相対パス。 |
|
| 親パス。 |
|
|
ファイルサイズを含む |
|
|
ファイルの最終変更タイムスタンプを含む |
21.9. バッチコンシューマー
このコンポーネントは、Batch Consumer を実装します。
21.10. Exchange プロパティー (ファイルコンシューマーのみ)
ファイルコンシューマーは BatchConsumer を実装するため、ポーリングするファイルのバッチ処理をサポートします。バッチ処理とは、Camel が次の追加プロパティーを Exchange に追加することを意味します。これにより、ポーリングされたファイルの数、現在のインデックス、およびバッチがすでに完了しているかどうかがわかります。
| プロパティー | 説明 |
|---|---|
|
| このバッチでポーリングされたファイルの総数。 |
|
| バッチの現在のインデックス。0 から始まります。 |
|
|
バッチ内の最後の Exchange を示す |
これにより、たとえば、このバッチに存在するファイルの数を知ることができ、たとえば、Aggregator2 にこの数のファイルを集約させることができます。
21.11. 文字セットの使用
charset オプションを使用すると、コンシューマーエンドポイントとプロデューサーエンドポイントの両方でファイルのエンコードを設定できます。たとえば、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");
コンシューマーエンドポイントで文字セットを省略した場合、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:name と file:name.noext は $\{ } で囲む必要があります。コンシューマーは、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. 完了ファイルの書き込み
ファイルを書いた後は、ファイルが終了して書き込まれたことを他の人に示すために、一種のマーカーとして追加の完了ファイルを書き込むことができます。これを行うには、ファイルプロデューサーエンドポイントで doneFileName オプションを使用できます。
.to("file:bar?doneFileName=done");
ターゲットファイルと同じディレクトリーに done という名前のファイルを作成するだけです。
ただし、ターゲットファイルごとに 1 つの完了ファイルを作成する方が一般的です。これは、1:1 の相関があることを意味します。これを行うには、doneFileName オプションで動的プレースホルダーを使用する必要があります。現在、Camel は次の 2 つの動的トークンをサポートしています: file:name と file:name.noext は $\{ } で囲む必要があります。
.to("file:bar?doneFileName=done-${file:name}");
たとえば、ターゲットファイルがターゲットファイルと同じディレクトリーにある foo.txt の場合、done-foo.txt という名前のファイルを作成します。
.to("file:bar?doneFileName=${file:name}.done");
たとえば、ターゲットファイルがターゲットファイルと同じディレクトリーにある foo.txt の場合、foo.txt.done という名前のファイルを作成します。
.to("file:bar?doneFileName=${file:name.noext}.done");
たとえば、ターゲットファイルがターゲットファイルと同じディレクトリーにある foo.txt の場合、foo.done という名前のファイルが作成されます。
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 ディレクトリーに保存する場合に、ソースディレクトリーのレイアウトを無視して (パスをフラット化するなど)、ファイルプロデューサー側で 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. 同じファイルを複数回読み取ることを避ける (べき等コンシューマー)
Camel は Idempotent Consumer をコンポーネント内で直接サポートしているため、すでに処理されたファイルはスキップされます。この機能は、idempotent=true オプションを設定することで有効にできます。
from("file://inbox?idempotent=true").to("...");Camel は絶対ファイル名を冪等キーとして使用して、重複ファイルを検出します。このキーは、idempotentKey オプションで式を使用してカスタマイズできます。たとえば、名前とファイルサイズの両方をキーとして使用するには
<route>
<from uri="file://inbox?idempotent=true&idempotentKey=${file:name}-${file:size}"/>
<to uri="bean:processInbox"/>
</route>
デフォルトでは、Camel は消費されたファイルを追跡するためにインメモリーベースのストアを使用し、最大 1000 エントリーを保持する最も使用頻度の低いキャッシュを使用します。値に # 記号を使用して idempotentRepository オプションを使用して、指定された id を持つレジストリー内の Bean を参照していることを示すことにより、このストアの独自の実装をプラグインできます。
<!-- define our store as a plain spring bean --> <bean id="myStore" class="com.mycompany.MyIdempotentStore"/> <route> <from uri="file://inbox?idempotent=true&idempotentRepository=#myStore"/> <to uri="bean:processInbox"/> </route>
以前に消費されたためにファイルをスキップした場合、Camel は DEBUG レベルでログを記録します。
DEBUG FileConsumer is idempotent and the file has been consumed before. Will skip this file: target\idempotent\report.txt
21.24. ファイルベースの冪等リポジトリーの使用
このセクションでは、デフォルトとして使用されるメモリー内ベースの代わりに、ファイルベースのべき等リポジトリー org.apache.camel.processor.idempotent.FileIdempotentRepository を使用します。
このリポジトリーは、ファイルリポジトリーの読み取りを回避するために、第 1 レベルのキャッシュを使用します。ファイルリポジトリーのみを使用して、第 1 レベルのキャッシュのコンテンツを格納します。これにより、リポジトリーはサーバーの再起動後も存続できます。起動時にファイルのコンテンツを第 1 レベルのキャッシュにロードします。ファイル内の別々の行にキーを格納するため、ファイル構造は非常に単純です。デフォルトでは、ファイルストアのサイズ制限は 1MB です。ファイルが大きくなると、Camel はファイルストアを切り詰め、第 1 レベルのキャッシュを新しい空のファイルにフラッシュしてコンテンツを再構築します。
ファイルべき等リポジトリーを作成する Spring XML を使用してリポジトリーを設定し、# 記号を使用して idempotentRepository でリポジトリーを使用するようにファイルコンシューマーを定義して、レジストリールックアップを示します。
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 を使用して、ファイルコンシューマーエンドポイントで jpaStore Bean を参照する必要があります。
<route> <from uri="file://inbox?idempotent=true&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 言語の実際の機能で、パターンをサポートする date コマンドを使用できます。したがって、これは次のように解決できます。
sortBy=date:file:yyyyMMdd;file:name
ええ、それは非常に強力です。ちなみに、グループごとにリバースを使用することもできるので、ファイル名を逆にすることができます。
sortBy=date:file:yyyyMMdd;reverse:file:name
21.28. GenericFileProcessStrategy の使用
オプション processStrategy を使用して、独自の begin、commit、および 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 エラーハンドラーを使用してファイルコンシューマーで発生した例外を処理する場合は、以下に示すように 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>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に記載される 11 のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| 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 | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | ブール値 |
| camel.component.file.enabled | ファイルコンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | ブール値 | |
| camel.component.file.lazy-start-producer | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | ブール値 |
第22章 FTP
プロデューサーとコンシューマーの両方がサポート対象
このコンポーネントは、FTP および SFTP プロトコルを介したリモートファイルシステムへのアクセスを提供します。
リモート FTP サーバーから使用する場合は、ファイルの使用に関する詳細について、さらに下の ファイルを使用する場合のデフォルト というタイトルのセクションを必ずお読みください。
絶対パスはサポートされて いません。Camel は、directoryname から先頭のスラッシュをすべて削除することにより、絶対パスを相対パスに変換します。ログに WARN メッセージが出力されます。
Maven ユーザーは、このコンポーネントの pom.xml に以下の依存関係を追加する必要があります。
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-ftp</artifactId>
<version>3.14.5.redhat-00018</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 オプションがサポートされています。コンシューマーが開始すると、ポーリングがスケジュールされる前に、エンドポイント用に設定されたディレクトリーを作成するために追加の 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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
22.3. コンポーネントオプション
FTP コンポーネントは、以下に示す 3 つのオプションをサポートしています。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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 (共通) | ファイル転送モードを BINARY または ASCII で指定します。デフォルトは ASCII (false) です。 | false | boolean |
| charset (共通) | このオプションは、ファイルのエンコーディングを指定するために使用されます。コンシューマーでこれを使用して、ファイルのエンコーディングを指定できます。これにより、Camel は、ファイルコンテンツがアクセスされている場合にファイルコンテンツをロードする必要がある charset を知ることができます。ファイルを書き込む場合も同様に、このオプションを使用して、ファイルを書き込む charset を指定できます。ファイルを書き込むとき、Camel はメッセージの内容をメモリーに読み込んで、データを設定された charset に変換できるようにする必要があることに注意してください。つまり、メッセージが大きい場合は、これを使用しないでください。 | String | |
| disconnect (共通) | 使用直後にリモート FTP サーバーから切断するかどうか。切断は、FTP サーバーへの現在の接続のみを切断します。停止したいコンシューマーがある場合は、代わりにコンシューマー/ルートを停止する必要があります。 | false | boolean |
| doneFileName (共通) | Producer: 指定された場合、元のファイルが書き込まれると、Camel は 2 番目の完了ファイルを書き込みます。完了ファイルは空になります。このオプションは、使用するファイル名を設定します。固定の名前を指定できます。または、動的プレースホルダーを使用することもできます。完了ファイルは、常に元のファイルと同じフォルダーに書き込まれます。Consumer: 指定すると、Camel は完了ファイルが存在する場合にのみファイルを消費します。このオプションは、使用するファイル名を設定します。固定の名前を指定できます。または、動的なプレースホルダーを使用できます。完了ファイルは、常に元のファイルと同じフォルダーにあると想定されます。$\\{file.name} と $\\{file.name.next} のみが動的プレースホルダーとしてサポートされています。 | String | |
| fileName (共通) | File Language などの式を使用して、ファイル名を動的に設定します。コンシューマーの場合は、ファイル名フィルターとして使用されます。プロデューサーの場合、書き込むファイル名を評価するために使用されます。式が設定されている場合は、CamelFileName ヘッダーよりも優先されます。(注: ヘッダー自体を式にすることもできます)。式オプションは String タイプと Expression タイプの両方をサポートします。式が String タイプである場合、これは常にファイル言語を使用して評価されます。式が Expression タイプである場合、指定された Expression タイプが使用されます。これにより、たとえば OGNL 式を使用できます。コンシューマーの場合、これを使用してファイル名をフィルターリングできるため、たとえば、ファイル言語構文 mydata-$\\{date:now:yyyyMMdd}.txt を使用して今日のファイルを消費できます。プロデューサーは、既存の CamelFileName ヘッダーよりも優先される CamelOverruleFileName ヘッダーをサポートします。CamelOverruleFileName は一度だけ使用されるヘッダーであり、CamelFileName を一時的に保存して後で復元する必要がなくなるため、簡単になります。 | String | |
| passiveMode (共通) | パッシブモード接続の設定デフォルトはアクティブモード接続です。 | false | boolean |
| separator (共通) | 使用するパス区切りを設定します。UNIX = UNIX スタイルのパス区切りを使用 Windows = Windows スタイルのパス区切りを使用 Auto = (デフォルト) ファイル名に既存のパス区切りを使用します。 列挙値:
| UNIX | PathSeparator |
| transferLoggingIntervalSeconds (common) | 進行中のアップロードおよびダウンロード操作の進行状況をログに記録するときに使用する間隔を秒単位で設定します。これは、操作に時間がかかる場合に進行状況を記録するために使用されます。 | 5 | int |
| transferLoggingLevel (共通) | アップロードおよびダウンロード操作の進行状況をログに記録するときに使用するログレベルを設定します。 列挙値:
| DEBUG | LoggingLevel |
| transferLoggingVerbose (共通) | がアップロードおよびダウンロード操作の進行状況の詳細な (詳細な) ログを実行するかどうかを設定します。 | false | boolean |
| fastExistsCheck (common (上級)) | このオプションを true に設定すると、camel-ftp はリストファイルを直接使用して、ファイルが存在するかどうかを確認します。一部の FTP サーバーはファイルを直接一覧表示することをサポートしていない可能性があるため、オプションが false の場合、camel-ftp は古い方法を使用してディレクトリーを一覧表示し、ファイルが存在するかどうかを確認します。このオプションは、readLock=changed にも影響を与え、ファイル情報を更新するための高速チェックを実行するかどうかを制御します。これは、FTP サーバーに多くのファイルがある場合にプロセスを高速化するために使用できます。 | false | boolean |
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| delete (コンシューマー) | true の場合、ファイルは正常に処理された後に削除されます。 | false | boolean |
| moveFailed (コンシューマー) | Simple 言語に基づいて move failure 式を設定します。たとえば、ファイルを .error サブディレクトリーに移動するには、.error を使用します。注: ファイルを失敗した場所に移動すると、Camel はエラーを処理し、ファイルを再度取得しません。 | String | |
| noop (コンシューマー) | true の場合、ファイルは移動または削除されません。このオプションは、読み取り専用データまたは ETL タイプの要件に適しています。noop=true の場合、Camel は idempotent=true も設定し、同じファイルを繰り返し消費しないようにします。 | false | boolean |
| preMove (コンシューマー) | 処理前に移動する場合にファイル名を動的に設定するために使用される式 (File 言語など)。たとえば、進行中のファイルを order ディレクトリーに移動するには、この値を order に設定します。 | String | |
| preSort (コンシューマー) | pre-sort が有効になっている場合、コンシューマーはポーリング中に、ファイルシステムから取得されたファイル名とディレクトリー名を並べ替えます。ソートされた順序でファイルを操作する必要がある場合に、これを行うことができます。pre-sort は、コンシューマーがフィルターリングを開始する前に実行され、Camel によって処理されるファイルを受け入れます。このオプション default=false で無効になっています。 | false | boolean |
| recursive (コンシューマー) | ディレクトリーの場合は、すべてのサブディレクトリー内のファイルも検索します。 | false | boolean |
| resumeDownload (コンシューマー) | ダウンロードの再開を有効にするかどうかを設定します。これは、FTP サーバーでサポートされている必要があります (ほとんどすべての FTP サーバーがサポートしています)。さらに、オプション localWorkDirectory を設定して、ダウンロードしたファイルがローカルディレクトリーに保存されるようにし、オプションバイナリーを有効にする必要があります。これは、ダウンロードの再開をサポートするために必要です。 | false | boolean |
| sendEmptyMessageWhenIdle (consumer) | ポーリングコンシューマーがファイルをポーリングしなかった場合、このオプションを有効にして、代わりに空のメッセージ (ボディーなし) を送信できます。 | false | boolean |
| streamDownload (コンシューマー) | ローカル作業ディレクトリーを使用しない場合に使用するダウンロード方法を設定します。true に設定すると、リモートファイルは読み取られるときにルートにストリーミングされます。false に設定すると、リモートファイルはルートに送信される前にメモリーにロードされます。このオプションを有効にする場合、両方を同時に有効にすることはできないため、stepwise=false を設定する必要があります。 | false | boolean |
| download (コンシューマー (上級)) | FTP コンシューマーがファイルをダウンロードする必要があるかどうか。このオプションが false に設定されている場合、メッセージ本文は null になりますが、コンシューマーはファイル名、ファイルサイズなどのファイルに関する詳細を含む Camel Exchange を引き続きトリガーします。ファイルがダウンロードされないだけです。 | false | boolean |
| exceptionHandler (コンシューマー (上級)) | コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
| exchangePattern (コンシューマー (上級)) | コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
| handleDirectoryParserAbsoluteResult (consumer (advanced)) | ディレクトリーパーサーの結果が絶対パスである場合に、コンシューマーがパス内のサブフォルダーとファイルを処理する方法を設定できます。この理由は、一部の FTP サーバーが絶対パスでファイル名を返す場合があるためです。その場合、FTP コンポーネントは返されたパスを相対パスに変換することでこれを処理します。 | false | boolean |
| ignoreFileNotFoundOrPermissionError (consumer (advanced)) | (ディレクトリー内のファイルを一覧表示しようとするとき、またはファイルをダウンロードするとき)、存在しない場合、またはアクセス許可エラーが原因である場合に無視するかどうか。デフォルトでは、ディレクトリーまたはファイルが存在しないか、権限が不十分な場合、例外が出力されます。このオプションを true に設定すると、代わりにそれを無視できます。 | false | boolean |
| inProgressRepository (コンシューマー (上級)) | プラグ可能な in-progress リポジトリー org.apache.camel.spi.IdempotentRepository。in-progress リポジトリーは、現在進行中のファイルが消費されていることを示すために使用されます。デフォルトでは、メモリーベースのリポジトリーが使用されます。 | IdempotentRepository | |
| localWorkDirectory (コンシューマー (上級)) | 使用する場合、ローカルの作業ディレクトリーを使用して、リモートファイルのコンテンツをローカルファイルに直接保存し、コンテンツがメモリーに読み込まれないようにできます。これは、非常に大きなリモートファイルを使用している場合に、メモリーを節約するために役立ちます。 | String | |
| onCompletionExceptionHandler (consumer (advanced)) | カスタム org.apache.camel.spi.ExceptionHandler を使用して、コンシューマーがコミットまたはロールバックを実行する完了プロセスのファイル中に出力される例外を処理します。デフォルトの実装は、WARN レベルですべての例外をログに記録し、無視します。 | ExceptionHandler | |
| pollStrategy (コンシューマー (上級)) | プラグ可能な org.apache.camel.PollingConsumerPollingStrategy を使用すると、エクスチェンジが作成され、Camel でルーティングされる前に、通常はポーリング操作中に発生するエラー処理を制御するカスタム実装が提供できます。 | PollingConsumerPollStrategy | |
| processStrategy (コンシューマー (上級)) | プラグ可能な org.apache.camel.component.file.GenericFileProcessStrategy を使用すると、独自の readLock オプションまたは同様のものを実装できます。特別な準備完了ファイルが存在するなど、ファイルを使用する前に特別な条件を満たす必要がある場合にも使用できます。このオプションを設定すると、readLock オプションは適用されません。 | GenericFileProcessStrategy | |
| useList (コンシューマー (上級)) | ファイルのダウンロード時に LIST コマンドの使用を許可するかどうか。デフォルトは true です。場合によっては、特定のファイルをダウンロードする必要があり、LIST コマンドの使用が許可されていない場合があるため、このオプションを false に設定できます。このオプションを使用する場合、ダウンロードする特定のファイルには、ファイルサイズ、タイムスタンプ、権限などのメタデータ情報が含まれないことに注意してください。これらの情報は、LIST コマンドを使用している場合にのみ取得できるためです。 | true | boolean |
| fileExist (プロデューサー) | 同じ名前のファイルがすでに存在する場合のアクション。デフォルトの上書きは、既存のファイルを置き換えます。- 追加 - 既存のファイルにコンテンツを追加します。- 失敗 - 既存のファイルがすでに存在することを示す GenericFileOperationException を出力します。- 無視 - 問題を黙って無視し、既存のファイルを上書きしませんが、すべて問題ないと想定します。- 移動 - オプションを設定するには、moveExisting オプションも使用する必要があります。オプション eagerDeleteTargetFile を使用して、ファイルを移動する際に既存ファイルが存在する場合に何をすべきか制御でき、そうでない場合は移動操作が失敗します。移動オプションは、ターゲットファイルを書き込む前に、既存のファイルを移動します。- TryRename は、tempFileName オプションが使用されている場合にのみ適用されます。これにより、存在チェックを実行せずに、一時的なファイル名から実際のファイル名への変更を試みることができます。このチェックは、一部のファイルシステム、特に FTP サーバーでは高速になる場合があります。 列挙値:
| オーバーライド | GenericFileExist |
| flatten (プロデューサー) | flatten は、ファイル名パスをフラット化して先頭のパスを削除するために使用されるので、ファイル名だけになります。これにより、サブディレクトリーに再帰的に使用できますが、たとえばファイルを別のディレクトリーに書き込む場合、ファイルは単一のディレクトリーに書き込まれます。これをプロデューサーで true に設定すると、CamelFileName ヘッダーのファイル名が先頭パスから削除されます。 | false | boolean |
| jailStartingDirectory (プロデューサー) | ファイルの書き込みを開始ディレクトリー (およびサブ) のみに拘束 (制限) するために使用されます。これはデフォルトで有効になっており、Camel は外部ディレクトリーにファイルを書き込むことができません (そのままでセキュアにするため)。無効にすると、親フォルダーやルートフォルダーなど、開始ディレクトリー以外のディレクトリーにファイルを書き込むことができます。 | true | boolean |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| moveExisting (プロデューサー) | 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 (プロデューサー) | このオプションは、一時的な名前を使用してファイルを書き込み、書き込みが完了した後に、その名前を実際の名前に変更するために使用されます。書き込み中のファイルを識別し、(排他的読み取りロックを使用せずに) コンシューマーが進行中のファイルを読み取らないようにするために使用できます。大きなファイルをアップロードするときに FTP でよく使用されます。 | String | |
| allowNullBody (プロデューサー (上級)) | ファイルの書き込み中に null の本文を許可するかどうかを指定するために使用されます。true に設定すると空のファイルが作成され、false に設定して null の本文をファイルコンポーネントに送信しようとすると、Cannot write null body to file.という GenericFileWriteException が出力されます。fileExist オプションを Override に設定するとファイルは切り捨てられ、append に設定するとファイルは変更されません。 | false | boolean |
| chmod (プロデューサー (上級)) | 保存されたファイルに chmod を設定できます。たとえば、chmod=640 です。 | String | |
| disconnectOnBatchComplete (プロデューサー (上級)) | バッチアップロードが完了した直後にリモート 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 を含めることができます。タイムスタンプが存在し、オプションが有効な場合は、書き込まれたファイルにこのタイムスタンプが設定されます。注記: このオプションは、ファイルプロデューサーにのみ適用されます。このオプションは、ftp プロデューサーでは使用できません。 | false | boolean |
| moveExistingFileStrategy (プロデューサー (上級)) | fileExist=Move が設定されている場合に使用する特別な命名トークンを持つファイルを移動するために使用されるストラテジー (カスタムストラテジー)。デフォルトでは、カスタムストラテジーが指定されていない場合に使用される実装があります。 | FileMoveExistingStrategy | |
| sendNoop (プロデューサー (上級)) | ファイルを FTP サーバーにアップロードする前に書き込み前チェックとして noop コマンドを送信するかどうか。接続の検証がまだ有効であるため、これはデフォルトで有効になっています。これにより、サイレントに再接続してファイルをアップロードできるようになります。ただし、これにより問題が発生する場合は、このオプションをオフにすることができます。 | true | boolean |
| activePortRange (上級) | アクティブモードでクライアント側のポート範囲を設定します。構文は minPort-maxPort です。両方のポート番号が含まれます。たとえば、すべての 1xxxx ポートを含めるには 10000-19999 です。 | String | |
| autoCreate (上級) | ファイルのパス名に不足しているディレクトリーを自動的に作成します。ファイルコンシューマーの場合は、開始ディレクトリーを作成することを意味します。ファイルプロデューサーの場合、ファイルが書き込まれるディレクトリーを意味します。 | true | boolean |
| bufferSize (上級) | ファイルの書き込みに使用されるバッファーサイズ (バイト単位) (または、ファイルのダウンロードとアップロードに使用される FTP の場合)。 | 131072 | int |
| connectTimeout (上級) | 接続が確立されるのを待つための接続タイムアウトを設定します。FTPClient と JSCH の両方で使用されます。 | 10000 | int |
| ftpClient (上級) | FTPClient のカスタムインスタンスを使用します。 | FTPClient | |
| ftpClientConfig (上級) | FTPClientConfig のカスタムインスタンスを使用して、エンドポイントが使用する FTP クライアントを設定するには。 | FTPClientConfig | |
| ftpClientConfigParameters (advanced) | FtpClientConfig. に追加パラメーターを提供するために FtpComponent によって使用されます。 | マップ | |
| ftpClientParameters (上級) | FTPClient に追加のパラメーターを提供するために FtpComponent によって使用されます。 | マップ | |
| maximumReconnectAttempts (上級) | Camel がリモート FTP サーバーへの接続を試行するときに実行する再接続の最大試行回数を指定します。この動作を無効にするには、0 を使用します。 | int | |
| reconnectDelay (上級) | ミリ秒単位の遅延 Camel は、再接続試行を実行する前に待機します。 | 1000 | long |
| siteCommand (上級) | ログインの成功後に実行されるオプションのサイトコマンドを設定します。複数のサイトコマンドは、改行文字を使用して区切ることができます。 | String | |
| soTimeout (上級) | SO タイムアウトを設定します FTP および FTPS ミリ秒単位の SocketOptions.SO_TIMEOUT 値です。接続がハングしないように、これを 300000 に設定することをお勧めします。SFTP では、このオプションは JSCH セッションインスタンスのタイムアウトとして設定されます。 | 300000 | int |
| stepwise (上級) | ファイルをダウンロードするとき、またはファイルをディレクトリーにアップロードするときに、ファイル構造をトラバースしながらディレクトリーを段階的に変更するかどうかを設定します。たとえば、セキュリティー上の理由で FTP サーバーのディレクトリーを変更できない場合は、これを無効にすることができます。Stepwise は、streamDownload と一緒に使用することはできません。 | true | boolean |
| synchronous (上級) | 同期処理を厳密に使用するかどうかを設定します。 | false | boolean |
| throwExceptionOnConnectFailed (上級) | 接続が失敗した (使い果たされた) 場合に例外を出力する必要があります。デフォルトでは、例外は出力されず、WARN がログに記録されます。これを使用して、例外の出力を有効にし、org.apache.camel.spi.PollingConsumerPollStrategy ロールバックメソッドから出力された例外を処理できます。 | false | boolean |
| timeout (上級) | 応答を待つためのデータタイムアウトを設定します。FTPClient だけが使用します。 | 30000 | int |
| antExclude (フィルター) | ant スタイルのフィルターの除外。antInclude と antExclude の両方を使用する場合は、antInclude よりも antExclude が優先されます。コンマ区切り形式で複数の除外を指定できます。 | String | |
| antFilterCaseSensitive (フィルター) | ant フィルターに大文字と小文字を区別するフラグを設定します | true | boolean |
| antInclude (フィルター) | 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 (フィルター) | Simple 言語に基づいてディレクトリーをフィルターリングします。たとえば、現在の日付でフィルターリングするには、$\\{date:now:yyyMMdd} などの単純な日付パターンを使用できます。 | String | |
| filterFile (フィルター) | Simple 言語に基づいてファイルをフィルターリングします。たとえば、ファイルサイズでフィルターリングするには、$\\{file:size} 5000 を使用できます。 | String | |
| idempotent (フィルター) | Camel が既に処理されたファイルをスキップできるように、Idempotent Consumer EIP パターンを使用するオプション。デフォルトでは、1000 エントリーを保持するメモリーベースの LRUCache を使用します。noop=true の場合は、同じファイルを何度も使用することを回避するため、べき等性も有効になります。 | false | ブール値 |
| idempotentKey (フィルター) | カスタムのべき等性キーを使用するには、以下を行います。デフォルトでは、ファイルの絶対パスが使用されます。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 (フィルター) | ディレクトリーを再帰的に処理する際にトラバースする最大深度。 | 2147483647 | int |
| maxMessagesPerPoll (フィルター) | ポーリングごとに収集する最大メッセージを定義します。デフォルトでは最大値は設定されていません。たとえば制限を 1000 などに設定して、数千のファイルがあるサーバーの起動を回避できます。無効にするには、0 または負の値を設定します。注記: このオプションが使用されている場合、File および FTP コンポーネントはソート前に制限されます。たとえば、100000 個のファイルがある場合に maxMessagesPerPoll=500 を使用すると、最初の 500 個のファイルのみ選択され、ソートされます。eagerMaxMessagesPerPoll オプションを使用して、これを false に設定すると、最初にすべてのファイルをスキャンし、後でソートできます。 | int | |
| minDepth (フィルター) | ディレクトリーを再帰的に処理する際に処理を開始する最小深度。minDepth=1 はベースディレクトリーを意味します。minDepth=2 は最初のサブディレクトリーを意味します。 | int | |
| move (filter) | 処理後に移動する場合にファイル名を動的に設定するために使用される式 (Simple 言語など)。ファイルを .done サブディレクトリーに移動するには、.done と入力します。 | String | |
| exclusiveReadLockStrategy (ロック) | org.apache.camel.component.file.GenericFileExclusiveReadLockStrategy 実装としてのプラグ可能な読み取りロック。 | GenericFileExclusiveReadLockStrategy | |
| readLock (ロック) | ファイルに排他的な読み取りロックがある (つまり、ファイルが進行中または書き込み中ではない) 場合にのみファイルをポーリングするために、コンシューマーが使用します。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 を結合された読み取りロックとして使用するためのものです。これにより、べき等リポジトリー実装がクラスタリングをサポートする場合、クラスタリングをサポートする読み取りロックを使用できます。注意: さまざまな読み取りロックは、異なるノードの同時コンシューマーが共有ファイルシステム上の同じファイルを求めて競合するクラスターモードでの動作にすべて適しているわけではありません。.アトミックに近い操作を使用して空のマーカーファイルを作成する markerFile ですが、クラスターでの動作は保証されていません。fileLock の方が良好に機能しますが、ファイルシステムは分散ファイルロックなどに対応する必要があります。べき等性リポジトリーが Hazelcast コンポーネントや Infinispan などのクラスターリングに対応している場合、べき等性等読み取りロックを使用できます。 列挙値:
| none | String |
| readLockCheckInterval (ロック) | 読み取りロックでサポートされている場合、読み取りロックの間隔 (ミリ単位)。この間隔は、読み取りロックを取得する試行間のスリープに使用されます。たとえば、changed 読み取りロックを使用する場合、遅い書き込みに対応するために間隔を長く設定できます。デフォルトは 1 秒ですが、プロデューサーによるファイルの書き込みが非常に遅い場合は短すぎる可能性があります。注記: FTP の場合、デフォルトの readLockCheckInterval は 5000 です。readLockTimeout の値は readLockCheckInterval よりも大きくする必要がありますが、thumb のルールではタイムアウトは readLockCheckInterval の 2 倍以上にする必要があります。これは、タイムアウトに達する前に読み取りロックプロセスがロックを取得しようとするためのアンブル時間を確保するために必要です。 | 1000 | long |
| readLockDeleteOrphanLockFiles (lock) | Camel が適切にシャットダウンされなかった場合 (JVM クラッシュなど)、マーカーファイルを使用した読み取りロックが、ファイルシステムに残っている可能性のある孤立した読み取りロックファイルを起動時に削除する必要があるかどうか。このオプションを false にすると、孤立したロックファイルがあると Camel はそのファイルを取得しようとしなくなります。これは、別のノードが同じ共有ディレクトリーから同時にファイルを読み取っているが原因である可能性もあります。 | true | boolean |
| readLockLoggingLevel (lock) | 読み取りロックを取得できなかったときに使用されるロギングレベル。デフォルトでは、DEBUG がログに記録されます。このレベルを変更できます。たとえば、ログを記録しないように OFF に設定できます。このオプションを適用できる readLock タイプは、changed、fileLock、idempotent、idempotent-changed、idempotent-rename、rename のみです。 列挙値:
| DEBUG | LoggingLevel |
| readLockMarkerFile (lock) | changed、rename、exclusive の読み取りロックタイプでマーカーファイルを使用するかどうか。デフォルトでは、他のプロセスが同じファイルを取得するのを防ぐために、マーカーファイルも使用されます。このオプションを false に設定すると、この動作をオフにできます。たとえば、Camel アプリケーションによってマーカーファイルをファイルシステムに書き込みたくない場合などです。 | true | boolean |
| readLockMinAge (lock) | このオプションは、readLock=changed の場合にのみ適用されます。読み取りロックを取得しようとする前に、ファイルが経過しなければならない最小期間を指定できます。たとえば、readLockMinAge=300s を使用して、ファイルに 5 分以上の経過を要求します。これにより、指定された期間以上のファイルの取得を試みるため、changed 読み取りロックが高速化されます。 | 0 | long |
| readLockMinLength (lock) | このオプションは、readLock=changed の場合にのみ適用されます。最小ファイル長を設定できます。デフォルトで Camel はファイルにデータが含まれていると想定するため、デフォルト値は 1 です。このオプションをゼロに設定すると、長さがゼロのファイルを使用できます。 | 1 | long |
| readLockRemoveOnCommit (lock) | このオプションは、readLock=idempotent にのみ適用されます。ファイル処理に成功し、コミットが行われるときに、べき等性リポジトリーからファイル名のエントリーを削除するかどうかを指定できます。デフォルトはファイルは削除されないため、競合状態が発生せず、別のアクティブなノードがファイルを取得しようとする可能性があります。代わりにべき等性リポジトリーは、X 分後にファイル名のエントリーをエビクトするように設定するエビクションストラテジーをサポートする場合があります。これにより、競合状態の問題がなくなります。詳細は、readLockIdempotentReleaseDelay オプションを参照してください。 | false | boolean |
| readLockRemoveOnRollback (lock) | このオプションは、readLock=idempotent にのみ適用されます。ファイル処理に失敗し、ロールバックが発生するときに、べき等性リポジトリーからファイル名のエントリーを削除するかどうかを指定できます。このオプションが false の場合、ファイル名のエントリーが (ファイルがコミットされたかのように) 確認されます。 | true | boolean |
| readLockTimeout (ロック) | 読み取りロックでサポートされている場合、読み取りロックのオプションのタイムアウト (ミリ秒単位)。読み取りロックを許可できず、タイムアウトがトリガーされた場合、Camel はファイルをスキップします。次のポーリングで、Camel はファイルを再試行します。このときに、読み取りロックが許可される可能性があります。無期限を指定するには、0 以下の値を使用します。現在、fileLock、changed、および rename がタイムアウトに対応しています。注記: FTP の場合、デフォルトの readLockTimeout 値は 10000 ではなく 20000 です。readLockTimeout の値は readLockCheckInterval よりも大きくする必要がありますが、thumb のルールではタイムアウトは readLockCheckInterval の 2 倍以上にする必要があります。これは、タイムアウトに達する前に読み取りロックプロセスがロックを取得しようとするためのアンブル時間を確保するために必要です。 | 10000 | long |
| backoffErrorThreshold (スケジューラー) | backoffMultipler が開始する前に発生する必要がある後続のエラーポーリング (エラーによって失敗した) の数。 | int | |
| backoffIdleThreshold (スケジューラー) | backoffMultipler が開始する前に発生する必要がある後続のアイドルポーリングの数。 | int | |
| backoffMultiplier (スケジューラー) | 後続のアイドル状態/エラーが連続して発生した場合に、スケジュールされたポーリングコンシューマーのバックオフを許可します。乗数は、実際に次の試行が行われる前にスキップされるポーリングの数です。このオプションが使用されている場合は、backoffIdleThreshold や backoffErrorThreshold も設定する必要があります。 | int | |
| delay (スケジューラー) | 次のポーリングまでの時間 (ミリ秒単位)。 | 500 | long |
| greedy (スケジューラー) | greedy が有効で、以前の実行が 1 つ以上のメッセージをポーリングした場合、ScheduledPollConsumer は即座に再度実行されます。 | false | boolean |
| initialDelay (スケジューラー) | 最初のポーリングが開始されるまでの時間 (ミリ秒単位)。 | 1000 | long |
| repeatCount (スケジューラー) | 実行の最大数を指定します。そのため、これを 1 に設定するとスケジューラーは 1 度だけ実行されます。これを 5 に設定した場合、5 回だけ実行されます。0 または負の値を設定すると、無制限に実行されます。 | 0 | long |
| runLoggingLevel (scheduler) | コンシューマーはポーリング時に開始/完了のログ行を記録します。このオプションを使用すると、ログレベルを設定できます。 列挙値:
| TRACE | LoggingLevel |
| scheduledExecutorService (スケジューラー) | コンシューマーに使用するカスタム/共有スレッドプールを設定できます。デフォルトでは、各コンシューマーに独自の単一スレッドのスレッドプールがあります。 | ScheduledExecutorService | |
| scheduler (スケジューラー) | camel-spring または camel-quartz コンポーネントから cron スケジューラーを使用します。スケジューラーにビルドされた値 spring または quartz を使用。 | none | オブジェクト |
| schedulerProperties (スケジューラー) | カスタムスケジューラーまたは Quartz や Spring ベースのスケジューラーを使用する場合に、追加のプロパティーを設定します。 | マップ | |
| startScheduler (スケジューラー) | スケジューラーを自動起動するかどうか。 | true | boolean |
| timeUnit (スケジューラー) | initialDelay および delay オプションの時間単位。 列挙値:
| MILLISECONDS | TimeUnit |
| useFixedDelay (スケジューラー) | 固定遅延または固定レートを使用するかどうかを制御します。詳細は、JDK の ScheduledExecutorService を参照してください。 | true | boolean |
| アカウント (セキュリティー) | ログインに使用するアカウント。 | String | |
| password (セキュリティー) | ログインに使用するパスワード。 | String | |
| username (セキュリティー) | ログインに使用するユーザー名。 | String | |
| シャッフル (並べ替え) | ファイルの一覧をシャッフルします (ランダムな順序でのソート) | false | boolean |
| sortBy (並べ替え) | File 言語を使用したビルトインソート。ネストされたソートをサポートしているため、ファイル名でのソートと、2 つ目のグループとして変更日でソートできます。 | String | |
| sorter (sort) | java.util.Comparator クラスとしてのプラグ可能なソーター。 | Comparator |
22.5. FTPS コンポーネントのデフォルトの信頼ストア
ftpClient. を使用する場合。トラストストアはすべての証明書を受け入れます。トラスト選択証明書のみが必要な場合は、ftpClient.trustStore.xxx オプションを使用するか、カスタム ftpClient を設定して、トラストストアを設定する必要があります。
sslContextParameters を使用する場合、トラストストアは提供された SSLContextParameters インスタンスの設定によって管理されます。
ftpClient を使用して、URI から直接 ftpClient および ftpClientConfig の追加オプションを設定できます。または ftpClientConfig. 接頭辞。
たとえば、FTPClient の setDataTimeout を 30 秒に設定するには、次のようにします。
from("ftp://foo@myserver?password=secret&ftpClient.dataTimeout=30000").to("bean:foo");たとえば、日付形式やタイムゾーンを設定するために、両方の接頭辞を組み合わせて使用することができます。
from("ftp://foo@myserver?password=secret&ftpClient.dataTimeout=30000&ftpClientConfig.serverLanguageCode=fr").to("bean:foo");これらのオプションはいくつでも使用できます。
可能なオプションと詳細については、Apache Commons FTP FTPClientConfig のドキュメントを参照してください。Apache Commons FTP FTPClient についても同様です。
URL に多くの長い設定を含めるのが気に入らない場合は、キャメルがレジストリーで検索できるようにすることで、使用する ftpClient または ftpClientConfig を参照できます。
以下に例を示します。
<bean id="myConfig" class="org.apache.commons.net.ftp.FTPClientConfig">
<property name="lenientFutureDates" value="true"/>
<property name="serverLanguageCode" value="fr"/>
</bean>そして、URL で # 表記を使用すると、Camel がこの Bean をルックアップします。
from("ftp://foo@myserver?password=secret&ftpClientConfig=#myConfig").to("bean:foo");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 コンシューマーは同時実行をサポートしていません
FTP コンシューマー (同じエンドポイントを持つ) は同時実行をサポートしません (バッキング FTP クライアントはスレッドセーフではありません)。
複数の FTP コンシューマーを使用して、異なるエンドポイントからポーリングできます。同時コンシューマーをサポートしないのは、単一のエンドポイントのみです。
FTP プロデューサーにはこの問題は なく、並行性がサポートされています。
22.8. 補足情報
このコンポーネントは、File コンポーネントの拡張です。そのため、ファイルコンポーネントページには、より多くのサンプルと詳細があります。
22.9. ファイルを使用するときのデフォルト
FTP コンシューマーは、デフォルトで、消費されたファイルをリモート FTP サーバーにそのまま残します。ファイルを削除したり、別の場所に移動したりする場合は、明示的に設定する必要があります。たとえば、delete=true を使用してファイルを削除したり、move=.done を使用してファイルを非表示の done サブディレクトリーに移動したりできます。
デフォルトでファイルを .camel サブディレクトリーに移動するため、通常のファイルコンシューマーは異なります。Camel が FTP コンシューマーに対してデフォルトでこれを行わ ない 理由は、ファイルを移動または削除できる権限がデフォルトで不足している可能性があるためです。
22.9.1. limitations
オプション readLock を使用して、Camel が現在書き込み中のファイルを消費し ない ようにすることができます。ただし、このオプションは、ユーザーが書き込みアクセス権を持っている必要があるため、デフォルトではオフになっています。読み取りロックの詳細については、File2 のオプションテーブルを参照してください。
現在 FTP 経由で書き込まれているファイルを消費しないようにするための解決策は他にもあります。たとえば、一時的な宛先に書き込み、書き込み後にファイルを移動できます。
move または preMove オプションを使用してファイルを移動する場合、ファイルは FTP_ROOT フォルダーに制限されます。これにより、FTP 領域外にファイルを移動できなくなります。ファイルを別の領域に移動する場合は、ソフトリンクを使用してファイルをソフトリンクフォルダーに移動できます。
22.10. メッセージヘッダー
次のメッセージヘッダーを使用して、コンポーネントの動作に影響を与えることができます。
| ヘッダー | 説明 |
|---|---|
|
| エンドポイントへの送信時に出力メッセージに使用される出力ファイル名 (エンドポイントディレクトリーに関連する) を指定します。これが存在せず、式もない場合は、代わりに生成されたメッセージ ID がファイル名として使用されます。 |
|
| 書き込まれた出力ファイルの実際のファイルパス (パス + 名前)。このヘッダーは Camel によって設定され、その目的は、書き込まれたファイルの名前をエンドユーザーに提供することです。 |
|
| 消費されたファイルのファイル名 |
|
| リモートホスト名。 |
|
| ローカル作業ディレクトリーが使用されている場合は、ローカル作業ファイルへのパス。 |
さらに、FTP/FTPS のコンシューマーとプロデューサーは、次のヘッダーを使用してキャメル Message を強化します。
| ヘッダー | 説明 |
|---|---|
|
| FTP クライアントの応答コード (型は整数) |
|
| FTP クライアントの応答文字列 |
22.10.1. エクスチェンジプロパティー
Camel は次の交換プロパティーを設定します
| ヘッダー | 説明 |
|---|---|
|
| このバッチで消費されているファイルの総数に対する現在のインデックス。 |
|
| このバッチで消費されているファイルの総数。 |
|
| このバッチにこれ以上ファイルがない場合は true。 |
22.11. タイムアウトについて
ライブラリーの 2 つのセット (上を参照) には、タイムアウトを設定するための異なる API があります。どちらにも connectTimeout オプションを使用して、ミリ秒単位でタイムアウトを設定し、ネットワーク接続を確立できます。個々の soTimeout は、FTP/FTPS で設定することもできます。これは、ftpClient.soTimeout の使用に対応します。SFTP は自動的に connectTimeout を soTimeout として使用することに注意してください。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 本体として使用されます。ファイルプロデューサーはこの事実を利用して、作業ファイルの 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&binary=true&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&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 に伝えることができます。デフォルトでは、コンシューマーは引き続き FTP LIST コマンドを実行してディレクトリーのリストを作成し、次に fileName オプションに基づいてこれらのファイルをフィルタリングします。ただし、このユースケースでは、useList=false を設定してディレクトリーリストをオフにすることが望ましい場合があります。たとえば、FTP サーバーへのログインに使用されるユーザーアカウントには、FTP LIST コマンドを実行する権限がない場合があります。したがって、useList=false でこれをオフにしてから、ダウンロードするファイルの固定名を fileName=myFileName.txt で指定すると、FTP コンシューマーは引き続きファイルをダウンロードできます。何らかの理由でファイルが存在しない場合、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>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
このコンポーネントは、以下に示す 13 のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| camel.component.ftp.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | ブール値 |
| camel.component.ftp.bridge-error-handler | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | ブール値 |
| camel.component.ftp.enabled | ftp コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | ブール値 | |
| camel.component.ftp.lazy-start-producer | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | ブール値 |
| camel.component.ftps.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | ブール値 |
| camel.component.ftps.bridge-error-handler | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | ブール値 |
| camel.component.ftps.enabled | ftps コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | ブール値 | |
| camel.component.ftps.lazy-start-producer | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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 | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | ブール値 |
| camel.component.sftp.enabled | sftp コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | ブール値 | |
| camel.component.sftp.lazy-start-producer | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | ブール値 |
第23章 HTTP
producer のみサポート対象
HTTP コンポーネントは、外部 HTTP リソースを呼び出すための HTTP ベースのエンドポイントを提供します (HTTP を使用して外部サーバーを呼び出すクライアントとして)。
Maven ユーザーは、このコンポーネントの pom.xml に以下の依存関係を追加する必要があります。
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-http</artifactId>
<version>3.14.5.redhat-00018</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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
23.3. コンポーネントオプション
HTTP コンポーネントは、以下に示す 37 のオプションをサポートしています。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| cookieStore (プロデューサー) | カスタム org.apache.http.client.CookieStore を使用するには。デフォルトでは、メモリー内のみの Cookie ストアである org.apache.http.impl.client.BasicCookieStore が使用されます。bridgeEndpoint=true の場合、Cookie ストアは強制的に noop cookie ストアになることに注意してください。これは、単にブリッジしているだけであるため (たとえば、プロキシーとして動作するため)、Cookie を保存するべきではないためです。 | CookieStore | |
| copyHeaders (プロデューサー) | このオプションが true の場合、IN 交換ヘッダーは、コピー戦略に従って OUT 交換ヘッダーにコピーされます。これを false に設定すると、HTTP 応答からのヘッダーのみを含めることができます (IN ヘッダーは伝播されません)。 | true | boolean |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| responsePayloadStreamingThreshold (producer) | このバイト単位のしきい値は、応答ペイロードをメモリーにバイト配列として格納するか、ストリーミングベースにするかを制御します。常にストリーミングモードを使用するには、これを -1 に設定します。 | 8192 | int |
| skipRequestHeaders (producer (advanced)) | すべての Camel ヘッダーを HTTP リクエストヘッダーとしてマッピングすることをスキップするかどうか。HTTP 要求に含める必要がある Camel ヘッダーからのデータがない場合は、これにより、JVM ガベージコレクターの多くのオブジェクト割り当てによるオーバーヘッドの解析を回避できます。 | false | boolean |
| skipResponseHeaders (プロデューサー (上級)) | すべての 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 (フィルター) | カスタムの org.apache.camel.spi.HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルターします。 | HeaderFilterStrategy | |
| proxyAuthDomain (プロキシー) | 使用するプロキシー認証ドメイン。 | String | |
| proxyAuthHost (プロキシー) | プロキシー認証ホスト。 | String | |
| proxyAuthMethod (プロキシー) | 使用するプロキシー認証方法。 列挙値:
| String | |
| proxyAuthNtHost (プロキシー) | NTML で使用するプロキシー認証ドメイン (ワークステーション名)。 | String | |
| proxyAuthPassword (プロキシー) | プロキシー認証パスワード。 | String | |
| proxyAuthPort (プロキシー) | プロキシー認証ポート。 | Integer | |
| proxyAuthUsername (プロキシー) | プロキシー認証のユーザー名。 | String | |
| sslContextParameters (security) | SSLContextParameters を使用してセキュリティーを設定する場合。重要: HttpComponent ごとにサポートされる org.apache.camel.support.jsse.SSLContextParameters のインスタンスは 1 つだけです。2 つ以上の異なるインスタンスを使用する必要がある場合は、必要なインスタンスごとに新しい HttpComponent を定義する必要があります。 | SSLContextParameters | |
| useGlobalSslContextParameters (security) | グローバル SSL コンテキストパラメーターの使用を有効にします。 | false | boolean |
| x509HostnameVerifier (セキュリティー) | DefaultHostnameVerifier や NoopHostnameVerifier などのカスタム X509HostnameVerifier を使用します。 | HostnameVerifier | |
| connectionRequestTimeout (timeout) | 接続マネージャーからの接続を要求するときに使用されるミリ秒単位のタイムアウト。タイムアウト値 0 は無限のタイムアウトとして解釈されます。タイムアウト値 0 は無限のタイムアウトとして解釈されます。負の値は未定義として解釈されます (該当する場合はシステムのデフォルト)。 | -1 | int |
| connectTimeout (タイムアウト) | 接続が確立されるまでのタイムアウトをミリ秒単位で決定します。タイムアウト値 0 は無限のタイムアウトとして解釈されます。タイムアウト値 0 は無限のタイムアウトとして解釈されます。負の値は未定義として解釈されます (該当する場合はシステムのデフォルト)。 | -1 | int |
| socketTimeout (タイムアウト) | ソケットのタイムアウトをミリ秒単位で定義します。これは、データを待機するためのタイムアウト、または別の言い方をすれば、2 つの連続するデータパケット間の最大非アクティブ期間です)。タイムアウト値 0 は無限のタイムアウトとして解釈されます。負の値は未定義として解釈されます (該当する場合はシステムのデフォルト)。 | -1 | int |
23.4. エンドポイントオプション
HTTP エンドポイントは、URI 構文を使用して設定されます。
http://httpUri
パスおよびクエリーパラメーターを使用します。
23.4.1. パスパラメーター(1 パラメーター)
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| httpUri (common) | 必須 呼び出す HTTP エンドポイントの URL。 | URI |
23.4.2. クエリーパラメーター (51 パラメーター)
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| chunked (プロデューサー) | このオプションが false の場合、サーブレットは HTTP ストリーミングを無効にし、応答に content-length ヘッダーを設定します。 | true | boolean |
| disableStreamCache (共通) | サーブレットからの生の入力ストリームがキャッシュされるかどうかを決定します (Camel はストリームをメモリー内/ファイルへのオーバーフロー、ストリームキャッシュに読み込みます)。デフォルトでは、Camel はサーブレット入力ストリームをキャッシュして複数回の読み取りをサポートし、Camel がストリームからすべてのデータを取得できるようにします。ただし、ファイルやその他の永続ストアに直接ストリーミングするなど、生のストリームにアクセスする必要がある場合は、このオプションを true に設定できます。ストリームの複数回の読み取りをサポートするためにこのオプションが false の場合、DefaultHttpBinding は要求入力ストリームをストリームキャッシュにコピーし、それをメッセージ本文に入れます。サーブレットを使用してエンドポイントをブリッジ/プロキシーする場合、メッセージペイロードを複数回読み取る必要がない場合は、このオプションを有効にしてパフォーマンスを向上させることを検討してください。http プロデューサーは、デフォルトで応答本文ストリームをキャッシュします。このオプションを true に設定すると、プロデューサは応答本文ストリームをキャッシュせず、応答ストリームをそのままメッセージ本文として使用します。 | false | boolean |
| headerFilterStrategy (共通) | カスタムの HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルタリングします。 | HeaderFilterStrategy | |
| httpBinding (common (上級)) | カスタム HttpBinding を使用して、Camel メッセージと HttpClient との間のマッピングを制御します。 | HttpBinding | |
| bridgeEndpoint (producer) | オプションが true の場合、HttpProducer は Exchange.HTTP_URI ヘッダーを無視し、エンドポイントの URI を要求に使用します。オプション throwExceptionOnFailure を false に設定して、HttpProducer がすべての障害応答を送り返すようにすることもできます。 | false | boolean |
| clearExpiredCookies (プロデューサー) | HTTP リクエストを送信する前に期限切れの Cookie をクリアするかどうか。これにより、有効期限が切れたときに削除される新しい Cookie を追加することで、Cookie ストアが成長し続けることがなくなります。コンポーネントが Cookie 管理を無効にしている場合、このオプションも無効になります。 | true | boolean |
| connectionClose (プロデューサー) | Connection Close ヘッダーを HTTP 要求に追加する必要があるかどうかを指定します。デフォルトでは、connectionClose は false です。 | false | boolean |
| copyHeaders (プロデューサー) | このオプションが true の場合、IN 交換ヘッダーは、コピー戦略に従って OUT 交換ヘッダーにコピーされます。これを false に設定すると、HTTP 応答からのヘッダーのみを含めることができます (IN ヘッダーは伝播されません)。 | true | boolean |
| customHostHeader (producer) | プロデューサーのカスタムホストヘッダーを使用するには。クエリーで設定されていない場合は無視されます。設定すると、url から派生したホストヘッダーが上書きされます。 | String | |
| httpMethod (プロデューサー) | 使用する HTTP メソッドを設定します。設定されている場合、HttpMethod ヘッダーはこのオプションをオーバーライドできません。 列挙値:
| HttpMethods | |
| ignoreResponseBody (プロデューサー) | このオプションが true の場合、http プロデューサーは応答本文を読み取らず、入力ストリームをキャッシュしません。 | false | boolean |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| preserveHostHeader (producer) | オプションが true の場合、HttpProducer は Host ヘッダーを現在の Exchange Host ヘッダーに含まれる値に設定します。これは、ダウンストリームサーバーが受信した Host ヘッダーにアップストリームクライアントが呼び出した URL を反映させたいリバースプロキシーアプリケーションで役立ちます。Host ヘッダーを使用するアプリケーションが、プロキシーされたサービスの正確な URL を生成できるようにします。 | false | boolean |
| throwExceptionOnFailure (プロデューサー) | リモートサーバーからの応答が失敗した場合に HttpOperationFailedException を出力することを無効にするオプション。これにより、HTTP ステータスコードに関係なくすべての応答を取得できます。 | true | boolean |
| transferException (プロデューサー) | 有効にすると、エクスチェンジがコンシューマー側で処理に失敗し、発生した例外が application/x-java-serialized-object コンテンツタイプとして応答でシリアライズされた場合に、例外がシリアライズされました。プロデューサー側では、例外がデシリアライズされ、HttpOperationFailedException ではなくそのまま出力されます。原因となった例外はシリアライズする必要があります。これは、デフォルトでオフになっています。これを有効にすると、Java が受信データをリクエストから Java にデシリアライズし、セキュリティー上のリスクが生じる可能性があることに注意してください。 | false | boolean |
| cookieHandler (プロデューサー (上級)) | HTTP セッションを維持するように Cookie ハンドラーを設定します。 | CookieHandler | |
| cookieStore (プロデューサー (上級)) | カスタム CookieStore を使用するには。デフォルトでは、メモリー内のみの Cookie ストアである BasicCookieStore が使用されます。bridgeEndpoint=true の場合、Cookie ストアは強制的に noop cookie ストアになることに注意してください。これは、単にブリッジしているだけであるため (たとえば、プロキシーとして動作するため)、Cookie を保存するべきではないためです。cookieHandler が設定されている場合、cookie の処理は cookieHandler によって実行されるため、cookie ストアも強制的に noop cookie ストアになります。 | CookieStore | |
| deleteWithBody (プロデューサー (上級)) | HTTP DELETE にメッセージ本文を含めるかどうか。デフォルトでは、HTTP DELETE には HTTP 本文は含まれません。ただし、ごくまれに、ユーザーがメッセージ本文を含める必要がある場合があります。 | false | boolean |
| getWithBody (producer (advanced)) | HTTP GET にメッセージ本文を含めるかどうか。デフォルトでは、HTTP GET には HTTP 本文は含まれません。ただし、ごくまれに、ユーザーがメッセージ本文を含める必要がある場合があります。 | false | boolean |
| okStatusCodeRange (プロデューサー (上級)) | 正常な応答と見なされるステータスコード。値は含まれます。複数の範囲をコンマで区切って定義できます (例: 200-204,209,301-304)。各範囲は、ダッシュを含む 1 つの数字または from-to である必要があります。 | 200-299 | String |
| skipRequestHeaders (producer (advanced)) | すべての Camel ヘッダーを HTTP リクエストヘッダーとしてマッピングすることをスキップするかどうか。HTTP 要求に含める必要がある Camel ヘッダーからのデータがない場合は、これにより、JVM ガベージコレクターの多くのオブジェクト割り当てによるオーバーヘッドの解析を回避できます。 | false | boolean |
| skipResponseHeaders (プロデューサー (上級)) | すべての HTTP 応答ヘッダーの Camel ヘッダーへのマッピングをスキップするかどうか。HTTP ヘッダーから必要なデータがない場合は、これにより、JVM ガベージコレクターの多くのオブジェクト割り当てによる解析のオーバーヘッドを回避できます。 | false | boolean |
| userAgent (プロデューサー (上級)) | カスタム HTTP User-Agent 要求ヘッダーを設定します。 | String | |
| clientBuilder (上級) | このエンドポイントのプロデューサーまたはコンシューマーによって使用される新しい RequestConfig インスタンスで使用される http クライアント要求パラメーターへのアクセスを提供します。 | HttpClientBuilder | |
| clientConnectionManager (上級) | カスタム HttpClientConnectionManager を使用して接続を管理するには。 | HttpClientConnectionManager | |
| connectionsPerRoute (上級) | ルートごとの接続の最大数。 | 20 | int |
| httpClient (上級) | プロデューサーが使用するカスタム HttpClient を設定します。 | HttpClient | |
| httpClientConfigurer (上級) | 認証メカニズムなどを設定するために、プロデューサーまたはコンシューマーによって作成された新しい HttpClient インスタンスのカスタム設定戦略を登録します。 | HttpClientConfigurer | |
| httpClientOptions (上級) | マップのキー/値を使用して HttpClient を設定するには。 | マップ | |
| httpContext (上級) | カスタム HttpContext インスタンスを使用します。 | HttpContext | |
| maxTotalConnections (上級) | 接続の最大数。 | 200 | int |
| useSystemProperties (上級) | システムプロパティーを設定のフォールバックとして使用します。 | false | boolean |
| proxyAuthDomain (プロキシー) | NTML で使用するプロキシー認証ドメイン。 | String | |
| proxyAuthHost (プロキシー) | プロキシー認証ホスト。 | String | |
| proxyAuthMethod (プロキシー) | 使用するプロキシー認証方法。 列挙値:
| String | |
| proxyAuthNtHost (プロキシー) | NTML で使用するプロキシー認証ドメイン (ワークステーション名)。 | String | |
| proxyAuthPassword (プロキシー) | プロキシー認証パスワード。 | String | |
| proxyAuthPort (プロキシー) | プロキシー認証ポート。 | int | |
| proxyAuthScheme (プロキシー) | 使用するプロキシー認証スキーム。 列挙値:
| String | |
| proxyAuthUsername (プロキシー) | プロキシー認証のユーザー名。 | String | |
| proxyHost (プロキシー) | 使用するプロキシーホスト名。 | String | |
| proxyPort (プロキシー) | 使用するプロキシーポート。 | int | |
| authDomain (セキュリティー) | NTML で使用する認証ドメイン。 | String | |
| authenticationPreemptive (セキュリティー) | このオプションが true の場合、camel-http はプリエンプティブ基本認証をサーバーに送信します。 | false | boolean |
| authHost (セキュリティー) | NTML で使用する認証ホスト。 | String | |
| authMethod (セキュリティー) | Basic、Digest、または NTLM の値のコンマ区切りリストとして使用できる認証方法。 | String | |
| authMethodPriority (セキュリティー) | 基本、ダイジェスト、または 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. メッセージヘッダー
| Name | タイプ | 説明 |
|---|---|---|
|
|
| 呼び出す URI。エンドポイントで直接設定された既存の URI をオーバーライドします。この uri は、呼び出す http サーバーの uri です。セキュリティーなどのエンドポイントオプションを設定できる Camel エンドポイント uri とは異なります。このヘッダーはそれをサポートしていません。http サーバーの唯一の uri です。 |
|
|
| リクエスト URI のパス。ヘッダーは、HTTP_URI でリクエスト URI を構築するために使用されます。 |
|
|
| URI パラメーター。エンドポイントに直接設定された既存の URI パラメーターをオーバーライドします。 |
|
|
| 外部サーバーからの HTTP 応答コード。OK の場合は 200 です。 |
|
|
| 外部サーバーからの HTTP 応答テキスト。 |
|
|
| 文字エンコーディング。 |
|
|
|
HTTP コンテンツタイプ。 |
|
|
|
HTTP コンテンツエンコーディング。 |
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 オプション throwExceptionOnFailure を false に設定して、失敗した応答コードに対して 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 プロデューサーの 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 プロデューサーは、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を追加してプリエンプティブ Basic 認証を実行する必要があります。
23.20. 高度な使用方法
HTTP プロデューサーをさらに制御する必要がある場合は、さまざまなクラスを設定してカスタム動作を提供できる 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>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に記載される 38 オプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| 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 | ブール値 |
| 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 | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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
プロデューサーとコンシューマーの両方がサポート対象
このコンポーネントを使用すると、Hot Rod プロトコルを使用して Infinispan 分散データグリッド/キャッシュと対話できます。Infinispan は、Java で記述された、非常にスケーラブルで可用性の高いキー/バリューデータストアおよび Data Grid プラットフォームです。
Maven を使用する場合は、次の依存関係を pom.xml に追加する必要があります。
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-infinispan</artifactId>
<version>3.14.5.redhat-00018</version>
<!-- use the same version as your Camel core version -->
</dependency>24.1. URI 形式
infinispan://cacheName?[options]
プロデューサは、HotRod プロトコルを使用してメッセージをリモートキャッシュに送信できます。コンシューマーは、HotRod プロトコルを使用してリモートキャッシュからのイベントをリッスンできます。
24.2. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
24.2.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
24.2.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
24.3. コンポーネントオプション
Infinispan コンポーネントは、以下に示す 26 のオプションをサポートしています。
| 名前 | 説明 | デフォルト | タイプ |
|---|---|---|---|
| configuration (共通) | コンポーネントの設定。 | InfinispanRemoteConfiguration | |
| hosts (共通) | Infinispan インスタンスのキャッシュのホストを指定します。 | String | |
| queryBuilder (共通) | クエリービルダーを指定します。 | InfinispanQueryBuilder | |
| secure (共通) | 安全な Infinispan インスタンスに接続するかどうかを定義します。 | false | boolean |
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| customListener (コンシューマー) | 提供されている場合は、使用中のカスタムリスナーを返します。 | InfinispanRemoteCustomListener | |
| eventTypes (コンシューマー) | コンシューマーによって登録される一連のイベントタイプを指定します。複数のイベントはコンマで区切ることができます。可能なイベントタイプは、CLIENT_CACHE_ENTRY_CREATED、CLIENT_CACHE_ENTRY_MODIFIED、CLIENT_CACHE_ENTRY_REMOVED、CLIENT_CACHE_ENTRY_EXPIRED、CLIENT_CACHE_FAILOVER です。 | String | |
| defaultValue (producer) | 一部のプロデューサー操作に対して特定のデフォルト値を設定します。 | オブジェクト | |
| key (プロデューサー) | プロデューサー操作用の特定のキーを設定します。 | オブジェクト | |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| oldValue (プロデューサー) | 一部のプロデューサー操作に特定の古い値を設定します。 | オブジェクト | |
| operation (producer) | 実行する操作。 列挙値:
| PUT | InfinispanOperation |
| value (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 パラメーター)
| 名前 | 説明 | デフォルト | タイプ |
|---|---|---|---|
| cacheName (common) | 必須 使用するキャッシュの名前。current を使用して、現在設定されているキャッシュされたマネージャーの既存のキャッシュ名を使用します。または、デフォルトのキャッシュマネージャー名に default を使用します。 | String |
24.4.2. クエリーパラメーター (26 パラメーター)
| 名前 | 説明 | デフォルト | タイプ |
|---|---|---|---|
| hosts (共通) | Infinispan インスタンスのキャッシュのホストを指定します。 | String | |
| queryBuilder (共通) | クエリービルダーを指定します。 | InfinispanQueryBuilder | |
| secure (共通) | 安全な Infinispan インスタンスに接続するかどうかを定義します。 | false | boolean |
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| customListener (コンシューマー) | 提供されている場合は、使用中のカスタムリスナーを返します。 | InfinispanRemoteCustomListener | |
| eventTypes (コンシューマー) | コンシューマーによって登録される一連のイベントタイプを指定します。複数のイベントはコンマで区切ることができます。可能なイベントタイプは、CLIENT_CACHE_ENTRY_CREATED、CLIENT_CACHE_ENTRY_MODIFIED、CLIENT_CACHE_ENTRY_REMOVED、CLIENT_CACHE_ENTRY_EXPIRED、CLIENT_CACHE_FAILOVER です。 | String | |
| exceptionHandler (コンシューマー (上級)) | コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
| exchangePattern (コンシューマー (上級)) | コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
| defaultValue (producer) | 一部のプロデューサー操作に対して特定のデフォルト値を設定します。 | オブジェクト | |
| key (プロデューサー) | プロデューサー操作用の特定のキーを設定します。 | オブジェクト | |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| oldValue (プロデューサー) | 一部のプロデューサー操作に特定の古い値を設定します。 | オブジェクト | |
| operation (producer) | 実行する操作。 列挙値:
| PUT | InfinispanOperation |
| value (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 |
| String | 共有 | 操作またはイベントに参加するキャッシュ。 |
| CamelInfinispanOperation |
| InfinispanOperation | プロデューサー | 実行する操作。 |
| CamelInfinispanMap |
| マップ | プロデューサー | CamelInfinispanOperationPutAll 操作の場合に使用する Map |
| CamelInfinispanKey |
| オブジェクト | 共有 | 操作を実行するキー、またはイベントを生成するキー。 |
| CamelInfinispanValue |
| オブジェクト | プロデューサー | 操作に使用する値。 |
| CamelInfinispanEventType |
| String | コンシューマー | 受信したイベントのタイプ。 |
| CamelInfinispanLifespanTime |
| long | プロデューサー | キャッシュ内の値の有効期間。負の値は無限大として解釈されます。 |
| CamelInfinispanTimeUnit |
| String | プロデューサー | エントリーのライフスパン時間の時間単位。 |
| CamelInfinispanMaxIdleTime |
| long | プロデューサー | エントリーが期限切れと見なされるまでにアイドル状態が許可される最大時間。 |
| CamelInfinispanMaxIdleTimeUnit |
| String | プロデューサー | エントリーの最大アイドル時間の時間単位。 |
| CamelInfinispanQueryBuilder | null | InfinispanQueryBuilder | プロデューサー | QUERY コマンドに使用する QueryBuilde。存在しない場合、コマンドのデフォルトは InifinispanConfiguration のものになります。 |
| CamelInfinispanOperationResultHeader | null | String | プロデューサー | 操作結果をメッセージ本文ではなくヘッダーに格納する |
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>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に記載される 23 のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| camel.component.infinispan.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | ブール値 |
| camel.component.infinispan.bridge-error-handler | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは 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 | コンシューマーによって登録される一連のイベントタイプを指定します。複数のイベントはコンマで区切ることができます。可能なイベントタイプは、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 | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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
プロデューサーとコンシューマーの両方がサポート対象
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 タイプは次の操作を受け入れます。
コンシューマー向け:
- 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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
25.3. コンポーネントオプション
Jira コンポーネントは、以下に示す 12 のオプションをサポートしています。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| delay (共通) | 次のポーリングまでの経過時間 (ミリ秒)。 | 6000 | Integer |
| jiraUrl (共通) | 必須 Jira サーバーの URL。例: . | String | |
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
| configuration (上級) | 共有ベース Jira 設定を使用するには。 | JiraConfiguration | |
| accessToken (セキュリティー) | (OAuth のみ) Jira サーバーによって生成されたアクセストークン。 | String | |
| consumerKey (セキュリティー) | (OAuth のみ) Jira 設定のコンシューマーキー。 | 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 (共通) | 実行するために 必要な 操作。コンシューマー: NewIssues、NewComments。プロデューサー: AddIssue、AttachFile、DeleteIssue、TransitionIssue、UpdateIssue、Watchers。詳細は、このクラスの javadoc の説明を参照してください。 列挙値:
| JiraType |
25.4.2. クエリーパラメーター(16 パラメーター)
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| delay (共通) | 次のポーリングまでの経過時間 (ミリ秒)。 | 6000 | Integer |
| jiraUrl (共通) | 必須 Jira サーバーの URL。例: . | String | |
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| jql (コンシューマー) | JQL は、必要なデータを取得できるようにする JIRA のクエリー言語です。例: jql=project=MyProject ここで、MyProject は Jira のプロダクトキーです。RAW() を使用し、その中に JQL を設定してラクダによる解析を防ぐことが重要です。例: RAW(project in (MYP、COM) AND resolution = Unresolved)。 | String | |
| maxResults (コンシューマー) | 検索する課題の最大数。 | 50 | Integer |
| sendOnlyUpdatedField (consumer) | 交換本体または課題オブジェクトで変更されたフィールドのみを送信するためのインジケーター。デフォルトでは、コンシューマーは変更されたフィールドのみを送信します。 | true | boolean |
| watchedFields (コンシューマー) | 変更を監視するフィールドのコンマ区切りリスト。ステータス、優先度がデフォルトです。 | ステータス、優先度 | String |
| exceptionHandler (コンシューマー (上級)) | コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
| exchangePattern (コンシューマー (上級)) | コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| accessToken (セキュリティー) | (OAuth のみ) Jira サーバーによって生成されたアクセストークン。 | String | |
| consumerKey (セキュリティー) | (OAuth のみ) Jira 設定のコンシューマーキー。 | String | |
| password (セキュリティー) | Basic 認証のみ) Jira サーバーに対して認証するためのパスワード。ユーザー名の Basic 認証が使用されている場合にのみ使用します。 | String | |
| privateKey (セキュリティー) | (OAuth のみ) サーバーへの会話を暗号化するためにクライアントによって生成された秘密鍵。 | String | |
| username (セキュリティー) | (Basic 認証のみ) Jira サーバーに対して認証するためのユーザー名。Jira サーバーで OAuth が有効になっていない場合にのみ使用します。ユーザー名と OAuth トークンパラメーターを設定しないでください。両方が設定されている場合は、ユーザー名の Basic 認証が優先されます。 | String | |
| 検証コード (セキュリティー) | (OAuth のみ) 認証プロセスの最初のステップで生成された Jira からの検証コード。 | String |
25.5. クライアントファクトリー
レジストリーで JiraRestClientFactory を JiraRestClientFactory という名前でバインドして、Jira エンドポイントで自動的に設定することができます。
25.6. 認証
Camel-jira は Basic 認証 と OAuth 3 legged authentication をサポートしています。
ユーザーとシステムに最高のセキュリティーを提供するため、可能な限り OAuth を使用することをお勧めします。
25.6.1. 基本認証要件:
- ユーザー名とパスワード
25.6.2. OAuth 認証の要件:
Jira OAuth ドキュメント のチュートリアルに従って、クライアントプライベートキー、コンシューマーキー、検証コード、およびアクセストークンを生成します。
- システム上でローカルに生成された秘密鍵。
- Jira サーバーによって生成された確認コード。
- Jira サーバー設定で設定されたコンシューマーキー。
- Jira サーバーによって生成されたアクセストークン。
25.7. JQL
JQL URI オプションは、両方のコンシューマーエンドポイントで使用されます。理論的には、プロジェクトキーなどの項目は URI オプション自体である可能性があります。ただし、JQL の使用を要求することで、コンシューマーはより柔軟で強力になります。
最低限、コンシューマーは以下を必要とします。
jira://[type]?[required options]&jql=project=[project key]
注意すべき重要な点の 1 つは、newIssues コンシューマーが JQL を次のように自動的に設定することです。
-
ORDER BY key descを JQL に追加します -
先頭に
id > latestIssueIdを追加して、camel ルートの開始後に追加された課題を取得します。
これは、プロジェクト内のすべての問題をインデックス化するのではなく、起動処理を最適化するためです。
もう 1 つの注意点は、同様に、newComments コンシューマーは、プロジェクト内のすべての問題 と コメントをインデックス化する必要があることです。したがって、大規模なプロジェクトでは、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 操作を使用するときに設定する必要があるヘッダーのリストを参照してください。プロデューサーの作成者フィールドは、Jira 側で認証済みユーザーに自動的に設定されます。
必須フィールドが設定されていない場合は、IllegalArgumentException が出力されます。
課題タイプ、優先度、トランジションなどのフィールドに id を必要とする操作があります。Jira のインストールとプロジェクトのワークフローによって異なる可能性があるため、Jira プロジェクトで有効な id を確認してください。
25.9. AddIssue
必須:
-
ProjectKey: プロジェクトキー。例: CAMEL、HHH、MYP。 -
IssueTypeIdまたはIssueTypeName: 課題タイプのidまたは課題タイプの名前。有効なリストはhttp://jira_server/rest/api/2/issue/createmeta?projectKeys=SAMPLE_KEYで確認できます。 -
IssueSummary: 問題の概要。
オプション:
-
IssueAssignee: 担当者ユーザー -
IssuePriorityIdまたはIssuePriorityName: 課題の優先度。有効なリストはhttp://jira_server/rest/api/2/priorityで確認できます。 -
IssueComponents: 有効なコンポーネント名を含む文字列のリスト。 -
IssueWatchersAdd: ウォッチャーリストに追加するユーザー名を含む文字列のリスト。 -
IssueDescription: 問題の説明。
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 (コンシューマー)
-
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>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
このコンポーネントは、以下に示す 13 のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| camel.component.jira.access-token | (OAuth のみ) Jira サーバーによって生成されたアクセストークン。 | String | |
| camel.component.jira.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | ブール値 |
| camel.component.jira.bridge-error-handler | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは 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 設定のコンシューマーキー。 | 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 | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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
プロデューサーとコンシューマーの両方がサポート対象
このコンポーネントを使用すると、メッセージを JMS キューまたはトピックに送信 (またはそこから消費) できます。送信用の Spring の JmsTemplate や消費用の MessageListenerContainer など、Spring の JMS サポートを宣言型トランザクションに使用します。
Maven ユーザーは、このコンポーネントの pom.xml に以下の依存関係を追加する必要があります。
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-jms</artifactId>
<version>3.14.5.redhat-00018</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. 永続サブスクリプション
永続的なトピックサブスクリプションを使用する場合は、clientId と durableSubscriptionName の両方を指定する必要があります。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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
26.3. コンポーネントオプション
JMS コンポーネントは、以下に示す 98 個のオプションをサポートしています。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| clientId (共通) | 使用する JMS クライアント ID を設定します。この値を指定する場合は、一意である必要があり、単一の JMS 接続インスタンスでのみ使用できることに注意してください。通常、永続的なトピックサブスクリプションの場合にのみ必要です。Apache ActiveMQ を使用している場合は、代わりに仮想トピックを使用することをお勧めします。 | String | |
| connectionFactory (共通) | 使用する接続ファクトリー。コンポーネントまたはエンドポイントで接続ファクトリーを設定する必要があります。 | ConnectionFactory | |
| disableReplyTo (共通) | Camel がメッセージの JMSReplyTo ヘッダーを無視するかどうかを指定します。true の場合、Camel は JMSReplyTo ヘッダーで指定された宛先に返信を送り返しません。Camel にルートから消費させたいが、コード内の別のコンポーネントが応答メッセージを処理するため、Camel に自動的に応答メッセージを送り返したくない場合は、このオプションを使用できます。Camel を異なるメッセージブローカー間のプロキシーとして使用し、あるシステムから別のシステムにメッセージをルーティングする場合にも、このオプションを使用できます。 | false | boolean |
| durableSubscriptionName (共通) | 永続トピックサブスクリプションを指定するための永続サブスクライバー名。clientId オプションも設定する必要があります。 | String | |
| jmsMessageType (共通) | JMS メッセージの送信に特定の javax.jms.Message 実装を強制的に使用できるようにします。可能な値は、Bytes、Map、Object、Stream、Text です。デフォルトでは、Camel は In body タイプから使用する JMS メッセージタイプを決定します。このオプションで指定できます。 列挙値:
| JmsMessageType | |
| replyTo (共通) | 明示的な ReplyTo 宛先を提供します (コンシューマーの Message.getJMSReplyTo() の着信値をオーバーライドします)。 | String | |
| testConnectionOnStartup (common) | 起動時に接続をテストするかどうかを指定します。これにより、Camel の起動時に、すべての JMS コンシューマーが JMS ブローカーへの有効な接続を持つことが保証されます。接続を許可できない場合、Camel は起動時に例外を出力します。これにより、接続に失敗した状態で Camel が開始されなくなります。JMS プロデューサーもテストされています。 | false | boolean |
| acknowledgementModeName (コンシューマー) | JMS 確認応答名。SESSION_TRANSACTED、CLIENT_ACKNOWLEDGE、AUTO_ACKNOWLEDGE、DUPS_OK_ACKNOWLEDGE のいずれかです。 列挙値:
| AUTO_ACKNOWLEDGE | String |
| artemisConsumerPriority (コンシューマー) | コンシューマーの優先度を使用すると、優先度の高いコンシューマーがアクティブなときにメッセージを受信できるようになります。通常、キューに接続されているアクティブなコンシューマーは、ラウンドロビン方式でキューからメッセージを受け取ります。コンシューマーの優先度が使用されているとき、同じ優先度の高いアクティブなコンシューマーが複数存在する場合は、メッセージがラウンドロビンで配信されます。メッセージは、優先度の高いコンシューマーがメッセージを消費するために利用できるクレジットを持っていない場合、またはそれらの優先度の高いコンシューマーがメッセージの受け入れを拒否した場合にのみ、優先度の低いコンシューマーに送信されます (たとえば、コンシューマーに関連するセレクターの基準を満たさないため)。 | int | |
| asyncConsumer (コンシューマー) | JmsConsumer が Exchange を非同期的に処理するかどうか。有効にすると、JmsConsumer は JMS キューから次のメッセージを取得できますが、前のメッセージは (非同期ルーティングエンジンによって) 非同期に処理されます。これは、メッセージが 100% 厳密に順序どおりに処理されない可能性があることを意味します。無効になっている場合 (デフォルト)、JmsConsumer が JMS キューから次のメッセージを取得する前に Exchange が完全に処理されます。transactioned が有効になっている場合、トランザクションは同期的に実行する必要があるため、asyncConsumer=true は非同期的に実行されないことに注意してください (Camel 3.0 は非同期トランザクションをサポートする場合があります)。 | false | boolean |
| autoStartup (コンシューマー) | コンシューマーコンテナーを自動起動するかどうかを指定します。 | true | boolean |
| cacheLevel (コンシューマー) | 基礎となる JMS リソースの ID によってキャッシュレベルを設定します。詳細は、cacheLevelName オプションを参照してください。 | int | |
| cacheLevelName (コンシューマー) | 基礎となる JMS リソースのキャッシュレベルを名前で設定します。可能な値は、CACHE_AUTO、CACHE_CONNECTION、CACHE_CONSUMER、CACHE_NONE、および CACHE_SESSION です。デフォルト設定は CACHE_AUTO です。詳細は、Spring のドキュメントとトランザクションキャッシュレベルを参照してください。 列挙値:
| CACHE_AUTO | String |
| concurrentConsumers (コンシューマー) | JMS から消費する場合の同時コンシューマーのデフォルト数を指定します (JMS を介した要求/応答ではありません)。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。JMS を介して要求/応答を行う場合は、オプション replyToConcurrentConsumers を使用して、応答メッセージリスナーの同時コンシューマーの数を制御します。 | 1 | int |
| maxConcurrentConsumers (コンシューマー) | JMS から消費する場合の同時コンシューマーの最大数を指定します (JMS を介した要求/応答ではありません)。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。JMS を介して要求/応答を行う場合は、オプション replyToMaxConcurrentConsumers を使用して、応答メッセージリスナーの同時コンシューマーの数を制御します。 | int | |
| replyToDeliveryPersistent (コンシューマー) | 返信に対してデフォルトで永続的な配信を使用するかどうかを指定します。 | true | boolean |
| selector (コンシューマー) | 使用する JMS セレクターを設定します。 | String | |
| subscriptionDurable (コンシューマー) | サブスクリプションを永続化するかどうかを設定します。使用する永続サブスクリプション名は、subscriptionName プロパティーで指定できます。デフォルトは false です。通常、subscriptionName 値と組み合わせて永続的なサブスクリプションを登録するには、これを true に設定します (メッセージリスナークラス名がサブスクリプション名として十分でない場合)。トピック (pub-sub ドメイン) をリッスンする場合にのみ意味があるため、このメソッドは pubSubDomain フラグも切り替えます。 | false | boolean |
| subscriptionName (コンシューマー) | 作成するサブスクリプションの名前を設定します。共有または永続的なサブスクリプションを持つトピック (pub-sub ドメイン) の場合に適用されます。サブスクリプション名は、このクライアントの JMS クライアント ID 内で一意である必要があります。デフォルトは、指定されたメッセージリスナーのクラス名です。注: 共有サブスクリプション (JMS 2.0 が必要) を除き、サブスクリプションごとに 1 つの同時コンシューマー (このメッセージリスナコンテナーのデフォルト) のみが許可されます。 | String | |
| subscriptionShared (コンシューマー) | サブスクリプションを共有するかどうかを設定します。使用する共有サブスクリプション名は、subscriptionName プロパティーで指定できます。デフォルトは false です。通常は subscriptionName 値と組み合わせて共有サブスクリプションを登録するには、これを true に設定します (メッセージリスナークラス名がサブスクリプション名として十分でない場合)。共有サブスクリプションも永続的である可能性があるため、このフラグを subscriptionDurable と組み合わせることもできます (多くの場合は組み合わせます)。トピック (pub-sub ドメイン) をリッスンする場合にのみ意味があるため、このメソッドは pubSubDomain フラグも切り替えます。JMS 2.0 互換のメッセージブローカーが必要です。 | false | boolean |
| acceptMessagesWhileStopping (consumer (advanced)) | コンシューマーが停止中にメッセージを受け入れるかどうかを指定します。実行時に JMS ルートを開始および停止するが、キューにメッセージが入れられている場合は、このオプションを有効にすることを検討してください。このオプションが false の場合は、JMS ルートを停止すると、メッセージが拒否される可能性があり、JMS ブローカは再配信を試行する必要がありますが、これも拒否される可能性があり、最終的にメッセージはJMS ブローカー上のデッドレターキューに移動される可能性があります。これを回避するには、このオプションを有効にすることをお勧めします。 | false | boolean |
| allowReplyManagerQuickStop (コンシューマー (上級)) | JmsConfiguration#isAcceptMessagesWhileStopping が有効で、org.apache.camel.CamelContext が現在停止している場合に、要求/応答メッセージングのリプライマネージャーで使用される DefaultMessageListenerContainer が、DefaultMessageListenerContainer.runningAllowed フラグを迅速に停止できるようにするかどうか。このクイック停止機能は、通常の JMS コンシューマーではデフォルトで有効になっていますが、応答マネージャーを有効にするには、このフラグを有効にする必要があります。 | false | boolean |
| consumerType (コンシューマー (上級)) | 使用するコンシューマータイプ。Simple、Default、または Custom のいずれかです。コンシューマータイプによって、使用する Spring JMS リスナーが決まります。デフォルトは org.springframework.jms.listener.DefaultMessageListenerContainer を使用し、Simple は org.springframework.jms.listener.SimpleMessageListenerContainer を使用します。Custom を指定した場合は、messageListenerContainerFactory オプションで定義された MessageListenerContainerFactory によって、使用する org.springframework.jms.listener.AbstractMessageListenerContainer が決まります。 列挙値:
| デフォルト | ConsumerType |
| defaultTaskExecutorType (コンシューマー (上級)) | コンシューマーエンドポイントとプロデューサエンドポイントの ReplyTo コンシューマーの両方に対して、DefaultMessageListenerContainer で使用するデフォルトの TaskExecutor タイプを指定します。可能な値: SimpleAsync (Spring の SimpleAsyncTaskExecutor を使用) または ThreadPool (Spring の ThreadPoolTaskExecutor を最適な値で使用 - キャッシュされたスレッドプールのようなもの)。設定されていない場合は、デフォルトで以前の動作になり、コンシューマーエンドポイントにはキャッシュされたスレッドプールが使用され、応答コンシューマーには SimpleAsync が使用されます。ThreadPool の使用は、同時コンシューマーが動的に増減するエラスティック設定でスレッドのゴミを減らすために推奨されます。 列挙値:
| DefaultTaskExecutorType | |
| eagerLoadingOfProperties (consumer (advanced)) | メッセージが読み込まれるとすぐに JMS プロパティーとペイロードの熱心な読み込みを有効にします。これは、JMS プロパティーが必要ない場合があるため一般的に非効率的ですが、基盤となる JMS プロバイダーと JMS プロパティーの使用に関する問題を早期に発見できる場合があります。オプション eagerPoisonBody も参照してください。 | false | boolean |
| eagerPoisonBody (コンシューマー (上級)) | eagerLoadingOfProperties が有効であり、JMS メッセージペイロード (JMS 本文または JMS プロパティー) が有害 (読み取り/マッピングできない) である場合は、代わりにこのテキストをメッセージボディーとして設定し、メッセージを処理できるようにします (有害の原因は、Exchange では例外としてすでに保存されています)。これは、eagerPoisonBody=false を設定することでオフにすることができます。オプション eagerLoadingOfProperties も参照してください。 | $\{exception.message} による JMS メッセージへの影響 | String |
| exposeListenerSession (コンシューマー (上級)) | メッセージを消費するときにリスナーセッションを公開するかどうかを指定します。 | false | boolean |
| replyToSameDestinationAllowed (consumer (advanced)) | JMS コンシューマーが、コンシューマーが使用しているのと同じ宛先に応答メッセージを送信できるかどうか。これにより、同じメッセージを消費してそれ自体に送り返すことで、無限ループが回避されます。 | false | boolean |
| taskExecutor (コンシューマー (上級)) | メッセージを消費するためのカスタムタスクエグゼキュータを指定できます。 | TaskExecutor | |
| deliveryDelay (プロデューサー) | JMS の送信呼び出しに使用する配信遅延を設定します。このオプションには、JMS 2.0 準拠のブローカーが必要です。 | -1 | long |
| deliveryMode (プロデューサー) | 使用する配信モードを指定します。可能な値は、javax.jms.DeliveryMode で定義された値です。NON_PERSISTENT = 1 および PERSISTENT = 2。 列挙値:
| Integer | |
| deliveryPersistent (プロデューサー) | デフォルトで永続配信を使用するかどうかを指定します。 | true | boolean |
| explicitQosEnabled (プロデューサー) | メッセージの送信時に、deliveryMode、priority、または timeToLive のサービス品質を使用する必要があるかどうかを設定します。このオプションは、Spring の JmsTemplate に基づいています。deliveryMode、priority、および timeToLive オプションは、現在のエンドポイントに適用されます。これは、メッセージの粒度で動作し、Camel In メッセージヘッダーから排他的に QoS プロパティーを読み取る preserveMessageQos オプションとは対照的です。 | false | ブール値 |
| formatDateHeadersToIso8601 (producer) | JMS 日付プロパティーを ISO 8601 標準に従ってフォーマットするかどうかを設定します。 | false | boolean |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| preserveMessageQos (producer) | JMS エンドポイントの QoS 設定ではなく、メッセージで指定された QoS 設定を使用してメッセージを送信する場合は、true に設定します。次の 3 つのヘッダーは、JMSPriority、JMSDeliveryMode、および JMSExpiration と見なされます。それらのすべてまたは一部のみを指定できます。指定されていない場合、Camel は代わりにエンドポイントからの値を使用するようにフォールバックします。したがって、このオプションを使用すると、ヘッダーはエンドポイントからの値をオーバーライドします。対照的に、explicitQosEnabled オプションは、エンドポイントに設定されたオプションのみを使用し、メッセージヘッダーの値は使用しません。 | false | boolean |
| priority (プロデューサー) | 1 より大きい値は、送信時のメッセージの優先度を指定します (1 が最低の優先度で、9 が最高の優先度です)。このオプションを有効にするには、explicitQosEnabled オプションも有効にする必要があります。 列挙値:
| 4 | int |
| replyToConcurrentConsumers (プロデューサー) | JMS を介して要求/応答を行うときの同時コンシューマーのデフォルト数を指定します。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。 | 1 | int |
| replyToMaxConcurrentConsumers (producer) | JMS を介した要求/応答を使用する場合の同時コンシューマーの最大数を指定します。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。 | int | |
| replyToOnTimeoutMaxConcurrentConsumers (producer) | JMS 経由の要求/応答を使用するときにタイムアウトが発生したときに、ルーティングを継続するための同時コンシューマーの最大数を指定します。 | 1 | int |
| replyToOverride (プロデューサー) | JMS メッセージで明示的な ReplyTo 宛先を提供します。これは、replyTo の設定をオーバーライドします。メッセージをリモート Queue に転送し、ReplyTo 宛先から応答メッセージを受け取る場合に便利です。 | String | |
| replyToType (プロデューサー) | JMS を介して要求/応答を行うときに、replyTo キューに使用する戦略の種類を明示的に指定できます。可能な値は、Temporary、Shared、または Exclusive です。デフォルトでは、Camel は一時キューを使用します。ただし、replyTo が設定されている場合は、デフォルトで Shared が使用されます。このオプションを使用すると、共有キューの代わりに専用キューを使用できます。詳細については、Camel JMS のドキュメントを参照してください。特に、クラスター化された環境で実行する場合の影響に関する注意事項と、共有応答キューは代替の一時および排他的キューよりもパフォーマンスが低いという事実を参照してください。 列挙値:
| ReplyToType | |
| requestTimeout (プロデューサー) | InOut Exchange パターン使用時の応答待ちタイムアウト (ミリ秒単位)。デフォルトは 20 秒です。ヘッダー CamelJmsRequestTimeout を含めて、このエンドポイントで設定されたタイムアウト値をオーバーライドし、メッセージごとに個別のタイムアウト値を持つことができます。requestTimeoutCheckerInterval オプションも参照してください。 | 20000 | long |
| timeToLive (プロデューサー) | メッセージの送信時に、メッセージの有効期限をミリ秒単位で指定します。 | -1 | long |
| allowAdditionalHeaders (プロデューサー (上級)) | このオプションは、JMS 仕様に従って無効な値を持つ可能性がある追加のヘッダーを許可するために使用されます。たとえば、WMQ などの一部のメッセージシステムは、バイト配列またはその他の無効な型の値を含む接頭辞 JMS_IBM_MQMD_ を使用するヘッダー名でこれを行います。コンマで区切られた複数のヘッダー名を指定し、ワイルドカードマッチングの接尾辞として使用できます。 | String | |
| allowNullBody (プロデューサー (上級)) | ボディーのないメッセージの送信を許可するかどうか。このオプションが false でメッセージボディーが null の場合は、JMSException が出力されます。 | true | boolean |
| alwaysCopyMessage (プロデューサー (上級)) | true の場合、メッセージがプロデューサーに渡されて送信されると、Camel は常にメッセージの JMS メッセージコピーを作成します。replyToDestinationSelectorName が設定されている場合など、状況によってはメッセージをコピーする必要があります (ちなみに、replyToDestinationSelectorName が設定されている場合、Camel は alwaysCopyMessage オプションを true に設定します)。 | false | boolean |
| correlationProperty (producer (advanced)) | InOut 交換パターンを使用する場合、JMSCorrelationID JMS プロパティーの代わりにこの JMS プロパティーを使用してメッセージを関連付けます。設定されたメッセージがこのプロパティーの値のみに関連付けられる場合、JMSCorrelationID プロパティーは無視され、Camel によって設定されません。 | String | |
| disableTimeToLive (プロデューサー (上級)) | このオプションを使用して、有効期限を強制的に無効にします。たとえば、JMS を介して要求/応答を行う場合、Camel はデフォルトで、送信されるメッセージの存続時間として requestTimeout 値を使用します。問題は、送信側システムと受信側システムのクロックを同期させる必要があるため、同期していることです。これをアーカイブするのは必ずしも簡単ではありません。したがって、disableTimeToLive=true を使用して、送信されたメッセージに有効期限の値を設定しないようにすることができます。その後、メッセージは受信側システムで期限切れになりません。詳細については、以下の生存時間についてのセクションを参照してください。 | false | boolean |
| forceSendOriginalMessage (プロデューサー (上級)) | 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 を介して要求/応答を行うときに、応答コンシューマーのキャッシュレベルを名前で設定します。このオプションは、固定応答キュー (一時的ではない) を使用する場合にのみ適用されます。Camel はデフォルトで次を使用します: 排他的または replyToSelectorName と共有の CACHE_CONSUMER。そして、replyToSelectorName なしで共有するための CACHE_SESSION。IBM WebSphere などの一部の JMS ブローカーは、replyToCacheLevelName=CACHE_NONE を機能させるために設定する必要がある場合があります。注: 一時キューを使用する場合、CACHE_NONE は許可されず、CACHE_CONSUMER や 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 (上級) | シリアル化されたヘッダーを含めるかどうかを制御します。transferExchange が true の場合にのみ適用されます。これには、オブジェクトがシリアライズ可能である必要があります。Camel はシリアル化できないオブジェクトを除外し、WARN レベルでログに記録します。 | false | boolean |
| artemisStreamingEnabled (上級) | Apache Artemis ストリーミングモード用に最適化するかどうか。これにより、JMS StreamMessage タイプで Artemis を使用する場合のメモリーオーバーヘッドを削減できます。このオプションは、Apache Artemis が使用されている場合にのみ有効にする必要があります。 | false | boolean |
| asyncStartListener (上級) | ルートの開始時に JmsConsumer メッセージリスナーを非同期で開始するかどうか。たとえば、JmsConsumer がリモート JMS ブローカーへの接続を取得できない場合は、再試行中やフェイルオーバー中にブロックされる可能性があります。これにより、ルートの開始時に Camel がブロックされます。このオプションを true に設定すると、ルートの起動を許可します。一方、JmsConsumer は非同期モードで専用のスレッドを使用して JMS ブローカーに接続します。このオプションを使用する場合は、接続を確立できない場合は例外が WARN レベルでログに記録され、コンシューマーはメッセージを受信できず、ルートを再起動して再試行できます。 | false | boolean |
| asyncStopListener (上級) | ルートを停止するときに、JmsConsumer メッセージリスナーを非同期的に停止するかどうか。 | false | boolean |
| autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
| configuration (上級) | 共有 JMS 設定を使用するには。 | JmsConfiguration | |
| destinationResolver (上級) | 独自のリゾルバーを使用できるようにするプラグ可能な org.springframework.jms.support.destination.DestinationResolver (たとえば、JNDI レジストリーで実際の宛先を検索するため)。 | DestinationResolver | |
| errorHandler (上級) | Message の処理中にキャッチされない例外が出力された場合に呼び出される org.springframework.util.ErrorHandler を指定します。デフォルトでは、errorHandler が設定されていない場合、これらの例外は WARN レベルでログに記録されます。errorHandlerLoggingLevel および errorHandlerLogStackTrace オプションを使用して、ログレベルとスタックトレースをログに記録するかどうかを設定できます。これにより、カスタム errorHandler をコーディングするよりも設定がはるかに簡単になります。 | ErrorHandler | |
| exceptionListener (上級) | 基礎となる JMS 例外の通知を受ける JMS 例外リスナーを指定します。 | ExceptionListener | |
| idleConsumerLimit (advanced) | 常にアイドル状態にできるコンシューマーの数の制限を指定します。 | 1 | int |
| idleTaskExecutionLimit (advanced) | 実行中にメッセージを受信していない、受信タスクのアイドル実行の制限を指定します。この制限に達すると、タスクはシャットダウンし、他の実行中のタスクに受信を任せます (動的スケジューリングの場合。maxConcurrentConsumers 設定を参照してください)。Spring から入手できる追加のドキュメントがあります。 | 1 | int |
| includeAllJMSXProperties (上級) | JMS から Camel Message へのマッピング時に JMSXxxx プロパティーをすべて含めるかどうか。これを true に設定すると、JMSXAppID や JMSXUserID などのプロパティーが含まれます。注記: カスタムの headerFilterStrategy を使用している場合、このオプションは適用されません。 | false | boolean |
| jmsKeyFormatStrategy (上級) | JMS 仕様に準拠できるように、JMS キーをエンコードおよびデコードするためのプラグ可能な戦略。Camel は、追加設定なしで、default と passthrough の 2 つの実装を提供します。デフォルトのストラテジーでは、ドットとハイフン(. および -)を安全にマーシャリングします。パススルー戦略では、キーはそのまま残ります。JMS ヘッダーキーに不正な文字が含まれているかどうかは問題にならない JMS ブローカーに使用できます。org.apache.camel.component.jms.JmsKeyFormatStrategy の独自の実装を提供し、# 表記を使用して参照できます。 列挙値:
| JmsKeyFormatStrategy | |
| mapJmsMessage (上級) | Camel が受信した JMS メッセージを適切なペイロードタイプ (javax.jms.TextMessage を文字列など) に自動マップするかどうかを指定します。 | true | boolean |
| maxMessagesPerTask (上級) | タスクあたりのメッセージ数。-1 は無制限です。同時コンシューマーの範囲 (例: min max) を使用する場合、このオプションを使用して値を 100 などに設定し、必要な作業が少ない場合にコンシューマーが縮小する速度を制御できます。 | -1 | int |
| messageConverter (上級) | カスタム Spring org.springframework.jms.support.converter.MessageConverter を使用して、javax.jms.Message との間でどのようにマッピングするかを制御できるようにします。 | MessageConverter | |
| messageCreatedStrategy (上級) | Camel が JMS メッセージを送信しているときに、Camel が javax.jms.Message オブジェクトの新しいインスタンスを作成するときに呼び出される、指定された MessageCreatedStrategy を使用します。 | MessageCreatedStrategy | |
| messageIdEnabled (上級) | 送信時に、メッセージ ID を追加するかどうかを指定します。これは、JMS ブローカーへの単なるヒントです。JMS プロバイダーがこのヒントを受け入れる場合、これらのメッセージのメッセージ ID を null に設定する必要があります。プロバイダーがヒントを無視する場合、メッセージ ID は通常の一意の値に設定する必要があります。 | true | boolean |
| messageListenerContainerFactory (上級) | メッセージを消費するために使用する org.springframework.jms.listener.AbstractMessageListenerContainer を決定するために使用される MessageListenerContainerFactory のレジストリー ID。これを設定すると、consumerType が自動的に Custom に設定されます。 | MessageListenerContainerFactory | |
| messageTimestampEnabled (上級) | メッセージの送信時にデフォルトでタイムスタンプを有効にするかどうかを指定します。これは、JMS ブローカーへの単なるヒントです。JMS プロバイダーがこのヒントを受け入れる場合、これらのメッセージのタイムスタンプをゼロに設定する必要があります。プロバイダーがヒントを無視する場合は、タイムスタンプを通常の値に設定する必要があります。 | true | boolean |
| pubSubNoLocal (上級) | 独自の接続によってパブリッシュされたメッセージの配信を禁止するかどうかを指定します。 | false | boolean |
| queueBrowseStrategy (上級) | キューを参照するときにカスタム QueueBrowseStrategy を使用するには。 | QueueBrowseStrategy | |
| receiveTimeout (上級) | メッセージ受信のタイムアウト (ミリ秒単位)。 | 1000 | long |
| recoveryInterval (上級) | リカバリーの試行の間隔を指定します。つまり、接続が更新されるタイミング(ミリ秒単位)を指定します。デフォルトは 5000 ミリ秒、つまり 5 秒です。 | 5000 | long |
| requestTimeoutCheckerInterval (advanced) | JMS を介してリクエスト/リプライを行うときに、Camel がタイムアウトになった Exchange をチェックする頻度を設定します。デフォルトでは、Camel は 1 秒に 1 回確認します。ただし、タイムアウトが発生したときに迅速に対応する必要がある場合は、この間隔を短くして、より頻繁にチェックすることができます。タイムアウトは、オプション requestTimeout によって決定されます。 | 1000 | long |
| synchronous (上級) | 同期処理を厳密に使用するかどうかを設定します。 | false | boolean |
| transferException (上級) | 有効で、Request Reply メッセージング (InOut) を使用していて、Exchange がコンシューマー側で失敗した場合、原因となった例外が javax.jms.ObjectMessage として応答で返されます。クライアントが Camel の場合、返された Exception は再出力されます。これにより、Camel JMS をルーティングのブリッジとして使用できます。たとえば、永続的なキューを使用して堅牢なルーティングを有効にできます。transferExchange も有効にしている場合は、このオプションが優先されることに注意してください。キャッチされた例外はシリアライズ可能である必要があります。コンシューマー側の元の Exception は、プロデューサーに返されるときに org.apache.camel.RuntimeCamelException などの外部例外にラップできます。データは Java オブジェクトのシリアライゼーションを使用しており、受信側がクラスレベルでデータをデシリアライズできる必要があるため、これは注意して使用してください。 | false | boolean |
| transferExchange (上級) | 本文とヘッダーだけでなく、電信送金で交換を転送できます。次のフィールドが転送されます: In body、Out body、Fault body、In ヘッダー、Out ヘッダー、Fault ヘッダー、交換プロパティー、交換例外。これには、オブジェクトがシリアライズ可能である必要があります。Camel はシリアル化できないオブジェクトを除外し、WARN レベルでログに記録します。プロデューサ側とコンシューマー側の両方でこのオプションを有効にする必要があるため、Camel はペイロードが Exchange であり、通常のペイロードではないことを認識します。データは Java オブジェクトのシリアライゼーションを使用しており、レシーバーがクラスレベルでデータをデシリアライズできる必要があるため、これは注意して使用してください。これにより、互換性のある Camel バージョンを使用する必要があるプロデューサーとコンシューマーの間の強い結合が強制されます。 | false | boolean |
| useMessageIDAsCorrelationID (上級) | InOut メッセージの JMSCorrelationID として JMSMessageID を常に使用するかどうかを指定します。 | false | boolean |
| waitForProvisionCorrelationToBeUpdatedCounter (advanced) | JMS を介して要求/応答を行う場合、およびオプション useMessageIDAsCorrelationID が有効な場合に、暫定相関 ID が実際の相関 ID に更新されるのを待機する回数。 | 50 | int |
| waitForProvisionCorrelationToBeUpdatedThreadSleepingTime (advanced) | 暫定相関 ID が更新されるのを待機するたびにスリープする間隔 (ミリ単位)。 | 100 | long |
| headerFilterStrategy (フィルター) | カスタムの org.apache.camel.spi.HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルターします。 | HeaderFilterStrategy | |
| errorHandlerLoggingLevel (logging) | キャッチされていない例外をログに記録するためのデフォルトの errorHandler ログレベルを設定できます。 列挙値:
| WARN | LoggingLevel |
| errorHandlerLogStackTrace (logging) | デフォルトの errorHandler でスタックトレースをログに記録するかどうかを制御できます。 | true | boolean |
| password (セキュリティー) | ConnectionFactory で使用するパスワード。また、ConnectionFactory でユーザー名およびパスワードを直接設定することもできます。 | String | |
| username (セキュリティー) | 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 | String |
| destinationName (common) | 必須 宛先として使用するキューまたはトピックの名前。 | String |
26.4.2. クエリーパラメーター (95 パラメーター)
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| clientId (共通) | 使用する JMS クライアント ID を設定します。この値を指定する場合は、一意である必要があり、単一の JMS 接続インスタンスでのみ使用できることに注意してください。通常、永続的なトピックサブスクリプションの場合にのみ必要です。Apache ActiveMQ を使用している場合は、代わりに仮想トピックを使用することをお勧めします。 | String | |
| connectionFactory (共通) | 使用する接続ファクトリー。コンポーネントまたはエンドポイントで接続ファクトリーを設定する必要があります。 | ConnectionFactory | |
| disableReplyTo (共通) | Camel がメッセージの JMSReplyTo ヘッダーを無視するかどうかを指定します。true の場合、Camel は JMSReplyTo ヘッダーで指定された宛先に返信を送り返しません。Camel にルートから消費させたいが、コード内の別のコンポーネントが応答メッセージを処理するため、Camel に自動的に応答メッセージを送り返したくない場合は、このオプションを使用できます。Camel を異なるメッセージブローカー間のプロキシーとして使用し、あるシステムから別のシステムにメッセージをルーティングする場合にも、このオプションを使用できます。 | false | boolean |
| durableSubscriptionName (共通) | 永続トピックサブスクリプションを指定するための永続サブスクライバー名。clientId オプションも設定する必要があります。 | String | |
| jmsMessageType (共通) | JMS メッセージの送信に特定の javax.jms.Message 実装を強制的に使用できるようにします。可能な値は、Bytes、Map、Object、Stream、Text です。デフォルトでは、Camel は In body タイプから使用する JMS メッセージタイプを決定します。このオプションで指定できます。 列挙値:
| JmsMessageType | |
| replyTo (共通) | 明示的な ReplyTo 宛先を提供します (コンシューマーの Message.getJMSReplyTo() の着信値をオーバーライドします)。 | String | |
| testConnectionOnStartup (common) | 起動時に接続をテストするかどうかを指定します。これにより、Camel の起動時に、すべての JMS コンシューマーが JMS ブローカーへの有効な接続を持つことが保証されます。接続を許可できない場合、Camel は起動時に例外を出力します。これにより、接続に失敗した状態で Camel が開始されなくなります。JMS プロデューサーもテストされています。 | false | boolean |
| acknowledgementModeName (コンシューマー) | JMS 確認応答名。SESSION_TRANSACTED、CLIENT_ACKNOWLEDGE、AUTO_ACKNOWLEDGE、DUPS_OK_ACKNOWLEDGE のいずれかです。 列挙値:
| AUTO_ACKNOWLEDGE | String |
| artemisConsumerPriority (コンシューマー) | コンシューマーの優先度を使用すると、優先度の高いコンシューマーがアクティブなときにメッセージを受信できるようになります。通常、キューに接続されているアクティブなコンシューマーは、ラウンドロビン方式でキューからメッセージを受け取ります。コンシューマーの優先度が使用されているとき、同じ優先度の高いアクティブなコンシューマーが複数存在する場合は、メッセージがラウンドロビンで配信されます。メッセージは、優先度の高いコンシューマーがメッセージを消費するために利用できるクレジットを持っていない場合、またはそれらの優先度の高いコンシューマーがメッセージの受け入れを拒否した場合にのみ、優先度の低いコンシューマーに送信されます (たとえば、コンシューマーに関連するセレクターの基準を満たさないため)。 | int | |
| asyncConsumer (コンシューマー) | JmsConsumer が Exchange を非同期的に処理するかどうか。有効にすると、JmsConsumer は JMS キューから次のメッセージを取得できますが、前のメッセージは (非同期ルーティングエンジンによって) 非同期に処理されます。これは、メッセージが 100% 厳密に順序どおりに処理されない可能性があることを意味します。無効になっている場合 (デフォルト)、JmsConsumer が JMS キューから次のメッセージを取得する前に Exchange が完全に処理されます。transactioned が有効になっている場合、トランザクションは同期的に実行する必要があるため、asyncConsumer=true は非同期的に実行されないことに注意してください (Camel 3.0 は非同期トランザクションをサポートする場合があります)。 | false | boolean |
| autoStartup (コンシューマー) | コンシューマーコンテナーを自動起動するかどうかを指定します。 | true | boolean |
| cacheLevel (コンシューマー) | 基礎となる JMS リソースの ID によってキャッシュレベルを設定します。詳細は、cacheLevelName オプションを参照してください。 | int | |
| cacheLevelName (コンシューマー) | 基礎となる JMS リソースのキャッシュレベルを名前で設定します。可能な値は、CACHE_AUTO、CACHE_CONNECTION、CACHE_CONSUMER、CACHE_NONE、および CACHE_SESSION です。デフォルト設定は CACHE_AUTO です。詳細は、Spring のドキュメントとトランザクションキャッシュレベルを参照してください。 列挙値:
| CACHE_AUTO | String |
| concurrentConsumers (コンシューマー) | JMS から消費する場合の同時コンシューマーのデフォルト数を指定します (JMS を介した要求/応答ではありません)。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。JMS を介して要求/応答を行う場合は、オプション replyToConcurrentConsumers を使用して、応答メッセージリスナーの同時コンシューマーの数を制御します。 | 1 | int |
| maxConcurrentConsumers (コンシューマー) | JMS から消費する場合の同時コンシューマーの最大数を指定します (JMS を介した要求/応答ではありません)。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。JMS を介して要求/応答を行う場合は、オプション replyToMaxConcurrentConsumers を使用して、応答メッセージリスナーの同時コンシューマーの数を制御します。 | int | |
| replyToDeliveryPersistent (コンシューマー) | 返信に対してデフォルトで永続的な配信を使用するかどうかを指定します。 | true | boolean |
| selector (コンシューマー) | 使用する JMS セレクターを設定します。 | String | |
| subscriptionDurable (コンシューマー) | サブスクリプションを永続化するかどうかを設定します。使用する永続サブスクリプション名は、subscriptionName プロパティーで指定できます。デフォルトは false です。通常、subscriptionName 値と組み合わせて永続的なサブスクリプションを登録するには、これを true に設定します (メッセージリスナークラス名がサブスクリプション名として十分でない場合)。トピック (pub-sub ドメイン) をリッスンする場合にのみ意味があるため、このメソッドは pubSubDomain フラグも切り替えます。 | false | boolean |
| subscriptionName (コンシューマー) | 作成するサブスクリプションの名前を設定します。共有または永続的なサブスクリプションを持つトピック (pub-sub ドメイン) の場合に適用されます。サブスクリプション名は、このクライアントの JMS クライアント ID 内で一意である必要があります。デフォルトは、指定されたメッセージリスナーのクラス名です。注: 共有サブスクリプション (JMS 2.0 が必要) を除き、サブスクリプションごとに 1 つの同時コンシューマー (このメッセージリスナコンテナーのデフォルト) のみが許可されます。 | String | |
| subscriptionShared (コンシューマー) | サブスクリプションを共有するかどうかを設定します。使用する共有サブスクリプション名は、subscriptionName プロパティーで指定できます。デフォルトは false です。通常は subscriptionName 値と組み合わせて共有サブスクリプションを登録するには、これを true に設定します (メッセージリスナークラス名がサブスクリプション名として十分でない場合)。共有サブスクリプションも永続的である可能性があるため、このフラグを subscriptionDurable と組み合わせることもできます (多くの場合は組み合わせます)。トピック (pub-sub ドメイン) をリッスンする場合にのみ意味があるため、このメソッドは pubSubDomain フラグも切り替えます。JMS 2.0 互換のメッセージブローカーが必要です。 | false | boolean |
| acceptMessagesWhileStopping (consumer (advanced)) | コンシューマーが停止中にメッセージを受け入れるかどうかを指定します。実行時に JMS ルートを開始および停止するが、キューにメッセージが入れられている場合は、このオプションを有効にすることを検討してください。このオプションが false の場合は、JMS ルートを停止すると、メッセージが拒否される可能性があり、JMS ブローカは再配信を試行する必要がありますが、これも拒否される可能性があり、最終的にメッセージはJMS ブローカー上のデッドレターキューに移動される可能性があります。これを回避するには、このオプションを有効にすることをお勧めします。 | false | boolean |
| allowReplyManagerQuickStop (コンシューマー (上級)) | JmsConfiguration#isAcceptMessagesWhileStopping が有効で、org.apache.camel.CamelContext が現在停止している場合に、要求/応答メッセージングのリプライマネージャーで使用される DefaultMessageListenerContainer が、DefaultMessageListenerContainer.runningAllowed フラグを迅速に停止できるようにするかどうか。このクイック停止機能は、通常の JMS コンシューマーではデフォルトで有効になっていますが、応答マネージャーを有効にするには、このフラグを有効にする必要があります。 | false | boolean |
| consumerType (コンシューマー (上級)) | 使用するコンシューマータイプ。Simple、Default、または Custom のいずれかです。コンシューマータイプによって、使用する Spring JMS リスナーが決まります。デフォルトは org.springframework.jms.listener.DefaultMessageListenerContainer を使用し、Simple は org.springframework.jms.listener.SimpleMessageListenerContainer を使用します。Custom を指定した場合は、messageListenerContainerFactory オプションで定義された MessageListenerContainerFactory によって、使用する org.springframework.jms.listener.AbstractMessageListenerContainer が決まります。 列挙値:
| デフォルト | ConsumerType |
| defaultTaskExecutorType (コンシューマー (上級)) | コンシューマーエンドポイントとプロデューサエンドポイントの ReplyTo コンシューマーの両方に対して、DefaultMessageListenerContainer で使用するデフォルトの TaskExecutor タイプを指定します。可能な値: SimpleAsync (Spring の SimpleAsyncTaskExecutor を使用) または ThreadPool (Spring の ThreadPoolTaskExecutor を最適な値で使用 - キャッシュされたスレッドプールのようなもの)。設定されていない場合は、デフォルトで以前の動作になり、コンシューマーエンドポイントにはキャッシュされたスレッドプールが使用され、応答コンシューマーには SimpleAsync が使用されます。ThreadPool の使用は、同時コンシューマーが動的に増減するエラスティック設定でスレッドのゴミを減らすために推奨されます。 列挙値:
| DefaultTaskExecutorType | |
| eagerLoadingOfProperties (consumer (advanced)) | メッセージが読み込まれるとすぐに JMS プロパティーとペイロードの熱心な読み込みを有効にします。これは、JMS プロパティーが必要ない場合があるため一般的に非効率的ですが、基盤となる JMS プロバイダーと JMS プロパティーの使用に関する問題を早期に発見できる場合があります。オプション eagerPoisonBody も参照してください。 | false | boolean |
| eagerPoisonBody (コンシューマー (上級)) | eagerLoadingOfProperties が有効であり、JMS メッセージペイロード (JMS 本文または JMS プロパティー) が有害 (読み取り/マッピングできない) である場合は、代わりにこのテキストをメッセージボディーとして設定し、メッセージを処理できるようにします (有害の原因は、Exchange では例外としてすでに保存されています)。これは、eagerPoisonBody=false を設定することでオフにすることができます。オプション eagerLoadingOfProperties も参照してください。 | $\{exception.message} による JMS メッセージへの影響 | String |
| exceptionHandler (コンシューマー (上級)) | コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
| exchangePattern (コンシューマー (上級)) | コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
| exposeListenerSession (コンシューマー (上級)) | メッセージを消費するときにリスナーセッションを公開するかどうかを指定します。 | false | boolean |
| replyToSameDestinationAllowed (consumer (advanced)) | JMS コンシューマーが、コンシューマーが使用しているのと同じ宛先に応答メッセージを送信できるかどうか。これにより、同じメッセージを消費してそれ自体に送り返すことで、無限ループが回避されます。 | false | boolean |
| taskExecutor (コンシューマー (上級)) | メッセージを消費するためのカスタムタスクエグゼキュータを指定できます。 | TaskExecutor | |
| deliveryDelay (プロデューサー) | JMS の送信呼び出しに使用する配信遅延を設定します。このオプションには、JMS 2.0 準拠のブローカーが必要です。 | -1 | long |
| deliveryMode (プロデューサー) | 使用する配信モードを指定します。可能な値は、javax.jms.DeliveryMode で定義された値です。NON_PERSISTENT = 1 および PERSISTENT = 2。 列挙値:
| Integer | |
| deliveryPersistent (プロデューサー) | デフォルトで永続配信を使用するかどうかを指定します。 | true | boolean |
| explicitQosEnabled (プロデューサー) | メッセージの送信時に、deliveryMode、priority、または timeToLive のサービス品質を使用する必要があるかどうかを設定します。このオプションは、Spring の JmsTemplate に基づいています。deliveryMode、priority、および timeToLive オプションは、現在のエンドポイントに適用されます。これは、メッセージの粒度で動作し、Camel In メッセージヘッダーから排他的に QoS プロパティーを読み取る preserveMessageQos オプションとは対照的です。 | false | ブール値 |
| formatDateHeadersToIso8601 (producer) | JMS 日付プロパティーを ISO 8601 標準に従ってフォーマットするかどうかを設定します。 | false | boolean |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| preserveMessageQos (producer) | JMS エンドポイントの QoS 設定ではなく、メッセージで指定された QoS 設定を使用してメッセージを送信する場合は、true に設定します。次の 3 つのヘッダーは、JMSPriority、JMSDeliveryMode、および JMSExpiration と見なされます。それらのすべてまたは一部のみを指定できます。指定されていない場合、Camel は代わりにエンドポイントからの値を使用するようにフォールバックします。したがって、このオプションを使用すると、ヘッダーはエンドポイントからの値をオーバーライドします。対照的に、explicitQosEnabled オプションは、エンドポイントに設定されたオプションのみを使用し、メッセージヘッダーの値は使用しません。 | false | boolean |
| priority (プロデューサー) | 1 より大きい値は、送信時のメッセージの優先度を指定します (1 が最低の優先度で、9 が最高の優先度です)。このオプションを有効にするには、explicitQosEnabled オプションも有効にする必要があります。 列挙値:
| 4 | int |
| replyToConcurrentConsumers (プロデューサー) | JMS を介して要求/応答を行うときの同時コンシューマーのデフォルト数を指定します。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。 | 1 | int |
| replyToMaxConcurrentConsumers (producer) | JMS を介した要求/応答を使用する場合の同時コンシューマーの最大数を指定します。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。 | int | |
| replyToOnTimeoutMaxConcurrentConsumers (producer) | JMS 経由の要求/応答を使用するときにタイムアウトが発生したときに、ルーティングを継続するための同時コンシューマーの最大数を指定します。 | 1 | int |
| replyToOverride (プロデューサー) | JMS メッセージで明示的な ReplyTo 宛先を提供します。これは、replyTo の設定をオーバーライドします。メッセージをリモート Queue に転送し、ReplyTo 宛先から応答メッセージを受け取る場合に便利です。 | String | |
| replyToType (プロデューサー) | JMS を介して要求/応答を行うときに、replyTo キューに使用する戦略の種類を明示的に指定できます。可能な値は、Temporary、Shared、または Exclusive です。デフォルトでは、Camel は一時キューを使用します。ただし、replyTo が設定されている場合は、デフォルトで Shared が使用されます。このオプションを使用すると、共有キューの代わりに専用キューを使用できます。詳細については、Camel JMS のドキュメントを参照してください。特に、クラスター化された環境で実行する場合の影響に関する注意事項と、共有応答キューは代替の一時および排他的キューよりもパフォーマンスが低いという事実を参照してください。 列挙値:
| ReplyToType | |
| requestTimeout (プロデューサー) | InOut Exchange パターン使用時の応答待ちタイムアウト (ミリ秒単位)。デフォルトは 20 秒です。ヘッダー CamelJmsRequestTimeout を含めて、このエンドポイントで設定されたタイムアウト値をオーバーライドし、メッセージごとに個別のタイムアウト値を持つことができます。requestTimeoutCheckerInterval オプションも参照してください。 | 20000 | long |
| timeToLive (プロデューサー) | メッセージの送信時に、メッセージの有効期限をミリ秒単位で指定します。 | -1 | long |
| allowAdditionalHeaders (プロデューサー (上級)) | このオプションは、JMS 仕様に従って無効な値を持つ可能性がある追加のヘッダーを許可するために使用されます。たとえば、WMQ などの一部のメッセージシステムは、バイト配列またはその他の無効な型の値を含む接頭辞 JMS_IBM_MQMD_ を使用するヘッダー名でこれを行います。コンマで区切られた複数のヘッダー名を指定し、ワイルドカードマッチングの接尾辞として使用できます。 | String | |
| allowNullBody (プロデューサー (上級)) | ボディーのないメッセージの送信を許可するかどうか。このオプションが false でメッセージボディーが null の場合は、JMSException が出力されます。 | true | boolean |
| alwaysCopyMessage (プロデューサー (上級)) | true の場合、メッセージがプロデューサーに渡されて送信されると、Camel は常にメッセージの JMS メッセージコピーを作成します。replyToDestinationSelectorName が設定されている場合など、状況によってはメッセージをコピーする必要があります (ちなみに、replyToDestinationSelectorName が設定されている場合、Camel は alwaysCopyMessage オプションを true に設定します)。 | false | boolean |
| correlationProperty (producer (advanced)) | InOut 交換パターンを使用する場合、JMSCorrelationID JMS プロパティーの代わりにこの JMS プロパティーを使用してメッセージを関連付けます。設定されたメッセージがこのプロパティーの値のみに関連付けられる場合、JMSCorrelationID プロパティーは無視され、Camel によって設定されません。 | String | |
| disableTimeToLive (プロデューサー (上級)) | このオプションを使用して、有効期限を強制的に無効にします。たとえば、JMS を介して要求/応答を行う場合、Camel はデフォルトで、送信されるメッセージの存続時間として requestTimeout 値を使用します。問題は、送信側システムと受信側システムのクロックを同期させる必要があるため、同期していることです。これをアーカイブするのは必ずしも簡単ではありません。したがって、disableTimeToLive=true を使用して、送信されたメッセージに有効期限の値を設定しないようにすることができます。その後、メッセージは受信側システムで期限切れになりません。詳細については、以下の生存時間についてのセクションを参照してください。 | false | boolean |
| forceSendOriginalMessage (プロデューサー (上級)) | 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 を介して要求/応答を行うときに、応答コンシューマーのキャッシュレベルを名前で設定します。このオプションは、固定応答キュー (一時的ではない) を使用する場合にのみ適用されます。Camel はデフォルトで次を使用します: 排他的または replyToSelectorName と共有の CACHE_CONSUMER。そして、replyToSelectorName なしで共有するための CACHE_SESSION。IBM WebSphere などの一部の JMS ブローカーは、replyToCacheLevelName=CACHE_NONE を機能させるために設定する必要がある場合があります。注: 一時キューを使用する場合、CACHE_NONE は許可されず、CACHE_CONSUMER や CACHE_SESSION などのより高い値を使用する必要があります。 列挙値:
| String | |
| replyToDestinationSelectorName (producer (advanced)) | 使用する固定名を使用して JMS セレクターを設定し、共有キューを使用している場合 (つまり、一時的な応答キューを使用していない場合) に、他の応答から自分の応答を除外できるようにします。 | String | |
| streamMessageTypeEnabled (producer (advanced)) | StreamMessage タイプを有効にするかどうかを設定します。ファイル、InputStream などのストリーミングの種類のメッセージペイロードは、BytesMessage または StreamMessage として送信されます。このオプションは、どの種類が使用されるかを制御します。デフォルトでは、BytesMessage が使用され、メッセージペイロード全体がメモリーに読み込まれます。このオプションを有効にすると、メッセージペイロードがチャンク単位でメモリーに読み込まれ、データがなくなるまで各チャンクが StreamMessage に書き込まれます。 | false | boolean |
| allowSerializedHeaders (上級) | シリアル化されたヘッダーを含めるかどうかを制御します。transferExchange が true の場合にのみ適用されます。これには、オブジェクトがシリアライズ可能である必要があります。Camel はシリアル化できないオブジェクトを除外し、WARN レベルでログに記録します。 | false | boolean |
| artemisStreamingEnabled (上級) | Apache Artemis ストリーミングモード用に最適化するかどうか。これにより、JMS StreamMessage タイプで Artemis を使用する場合のメモリーオーバーヘッドを削減できます。このオプションは、Apache Artemis が使用されている場合にのみ有効にする必要があります。 | false | boolean |
| asyncStartListener (上級) | ルートの開始時に JmsConsumer メッセージリスナーを非同期で開始するかどうか。たとえば、JmsConsumer がリモート JMS ブローカーへの接続を取得できない場合は、再試行中やフェイルオーバー中にブロックされる可能性があります。これにより、ルートの開始時に Camel がブロックされます。このオプションを true に設定すると、ルートの起動を許可します。一方、JmsConsumer は非同期モードで専用のスレッドを使用して JMS ブローカーに接続します。このオプションを使用する場合は、接続を確立できない場合は例外が WARN レベルでログに記録され、コンシューマーはメッセージを受信できず、ルートを再起動して再試行できます。 | false | boolean |
| asyncStopListener (上級) | ルートを停止するときに、JmsConsumer メッセージリスナーを非同期的に停止するかどうか。 | false | boolean |
| destinationResolver (上級) | 独自のリゾルバーを使用できるようにするプラグ可能な org.springframework.jms.support.destination.DestinationResolver (たとえば、JNDI レジストリーで実際の宛先を検索するため)。 | DestinationResolver | |
| errorHandler (上級) | Message の処理中にキャッチされない例外が出力された場合に呼び出される org.springframework.util.ErrorHandler を指定します。デフォルトでは、errorHandler が設定されていない場合、これらの例外は WARN レベルでログに記録されます。errorHandlerLoggingLevel および errorHandlerLogStackTrace オプションを使用して、ログレベルとスタックトレースをログに記録するかどうかを設定できます。これにより、カスタム errorHandler をコーディングするよりも設定がはるかに簡単になります。 | ErrorHandler | |
| exceptionListener (上級) | 基礎となる JMS 例外の通知を受ける JMS 例外リスナーを指定します。 | ExceptionListener | |
| headerFilterStrategy (上級) | カスタムの HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルタリングします。 | HeaderFilterStrategy | |
| idleConsumerLimit (advanced) | 常にアイドル状態にできるコンシューマーの数の制限を指定します。 | 1 | int |
| idleTaskExecutionLimit (advanced) | 実行中にメッセージを受信していない、受信タスクのアイドル実行の制限を指定します。この制限に達すると、タスクはシャットダウンし、他の実行中のタスクに受信を任せます (動的スケジューリングの場合。maxConcurrentConsumers 設定を参照してください)。Spring から入手できる追加のドキュメントがあります。 | 1 | int |
| includeAllJMSXProperties (上級) | JMS から Camel Message へのマッピング時に JMSXxxx プロパティーをすべて含めるかどうか。これを true に設定すると、JMSXAppID や JMSXUserID などのプロパティーが含まれます。注記: カスタムの headerFilterStrategy を使用している場合、このオプションは適用されません。 | false | boolean |
| jmsKeyFormatStrategy (上級) | JMS 仕様に準拠できるように、JMS キーをエンコードおよびデコードするためのプラグ可能な戦略。Camel は、追加設定なしで、default と passthrough の 2 つの実装を提供します。デフォルトのストラテジーでは、ドットとハイフン(. および -)を安全にマーシャリングします。パススルー戦略では、キーはそのまま残ります。JMS ヘッダーキーに不正な文字が含まれているかどうかは問題にならない JMS ブローカーに使用できます。org.apache.camel.component.jms.JmsKeyFormatStrategy の独自の実装を提供し、# 表記を使用して参照できます。 列挙値:
| JmsKeyFormatStrategy | |
| mapJmsMessage (上級) | Camel が受信した JMS メッセージを適切なペイロードタイプ (javax.jms.TextMessage を文字列など) に自動マップするかどうかを指定します。 | true | boolean |
| maxMessagesPerTask (上級) | タスクあたりのメッセージ数。-1 は無制限です。同時コンシューマーの範囲 (例: min max) を使用する場合、このオプションを使用して値を 100 などに設定し、必要な作業が少ない場合にコンシューマーが縮小する速度を制御できます。 | -1 | int |
| messageConverter (上級) | カスタム Spring org.springframework.jms.support.converter.MessageConverter を使用して、javax.jms.Message との間でどのようにマッピングするかを制御できるようにします。 | MessageConverter | |
| messageCreatedStrategy (上級) | Camel が JMS メッセージを送信しているときに、Camel が javax.jms.Message オブジェクトの新しいインスタンスを作成するときに呼び出される、指定された MessageCreatedStrategy を使用します。 | MessageCreatedStrategy | |
| messageIdEnabled (上級) | 送信時に、メッセージ ID を追加するかどうかを指定します。これは、JMS ブローカーへの単なるヒントです。JMS プロバイダーがこのヒントを受け入れる場合、これらのメッセージのメッセージ ID を null に設定する必要があります。プロバイダーがヒントを無視する場合、メッセージ ID は通常の一意の値に設定する必要があります。 | true | boolean |
| messageListenerContainerFactory (上級) | メッセージを消費するために使用する org.springframework.jms.listener.AbstractMessageListenerContainer を決定するために使用される MessageListenerContainerFactory のレジストリー ID。これを設定すると、consumerType が自動的に Custom に設定されます。 | MessageListenerContainerFactory | |
| messageTimestampEnabled (上級) | メッセージの送信時にデフォルトでタイムスタンプを有効にするかどうかを指定します。これは、JMS ブローカーへの単なるヒントです。JMS プロバイダーがこのヒントを受け入れる場合、これらのメッセージのタイムスタンプをゼロに設定する必要があります。プロバイダーがヒントを無視する場合は、タイムスタンプを通常の値に設定する必要があります。 | true | boolean |
| pubSubNoLocal (上級) | 独自の接続によってパブリッシュされたメッセージの配信を禁止するかどうかを指定します。 | false | boolean |
| receiveTimeout (上級) | メッセージ受信のタイムアウト (ミリ秒単位)。 | 1000 | long |
| recoveryInterval (上級) | リカバリーの試行の間隔を指定します。つまり、接続が更新されるタイミング(ミリ秒単位)を指定します。デフォルトは 5000 ミリ秒、つまり 5 秒です。 | 5000 | long |
| requestTimeoutCheckerInterval (advanced) | JMS を介してリクエスト/リプライを行うときに、Camel がタイムアウトになった Exchange をチェックする頻度を設定します。デフォルトでは、Camel は 1 秒に 1 回確認します。ただし、タイムアウトが発生したときに迅速に対応する必要がある場合は、この間隔を短くして、より頻繁にチェックすることができます。タイムアウトは、オプション requestTimeout によって決定されます。 | 1000 | long |
| synchronous (上級) | 同期処理を厳密に使用するかどうかを設定します。 | false | boolean |
| transferException (上級) | 有効で、Request Reply メッセージング (InOut) を使用していて、Exchange がコンシューマー側で失敗した場合、原因となった例外が javax.jms.ObjectMessage として応答で返されます。クライアントが Camel の場合、返された Exception は再出力されます。これにより、Camel JMS をルーティングのブリッジとして使用できます。たとえば、永続的なキューを使用して堅牢なルーティングを有効にできます。transferExchange も有効にしている場合は、このオプションが優先されることに注意してください。キャッチされた例外はシリアライズ可能である必要があります。コンシューマー側の元の Exception は、プロデューサーに返されるときに org.apache.camel.RuntimeCamelException などの外部例外にラップできます。データは Java オブジェクトのシリアライゼーションを使用しており、受信側がクラスレベルでデータをデシリアライズできる必要があるため、これは注意して使用してください。 | false | boolean |
| transferExchange (上級) | 本文とヘッダーだけでなく、電信送金で交換を転送できます。次のフィールドが転送されます: In body、Out body、Fault body、In ヘッダー、Out ヘッダー、Fault ヘッダー、交換プロパティー、交換例外。これには、オブジェクトがシリアライズ可能である必要があります。Camel はシリアル化できないオブジェクトを除外し、WARN レベルでログに記録します。プロデューサ側とコンシューマー側の両方でこのオプションを有効にする必要があるため、Camel はペイロードが Exchange であり、通常のペイロードではないことを認識します。データは Java オブジェクトのシリアライゼーションを使用しており、レシーバーがクラスレベルでデータをデシリアライズできる必要があるため、これは注意して使用してください。これにより、互換性のある Camel バージョンを使用する必要があるプロデューサーとコンシューマーの間の強い結合が強制されます。 | false | boolean |
| useMessageIDAsCorrelationID (上級) | InOut メッセージの JMSCorrelationID として JMSMessageID を常に使用するかどうかを指定します。 | false | boolean |
| waitForProvisionCorrelationToBeUpdatedCounter (advanced) | JMS を介して要求/応答を行う場合、およびオプション useMessageIDAsCorrelationID が有効な場合に、暫定相関 ID が実際の相関 ID に更新されるのを待機する回数。 | 50 | int |
| waitForProvisionCorrelationToBeUpdatedThreadSleepingTime (advanced) | 暫定相関 ID が更新されるのを待機するたびにスリープする間隔 (ミリ単位)。 | 100 | long |
| errorHandlerLoggingLevel (logging) | キャッチされていない例外をログに記録するためのデフォルトの errorHandler ログレベルを設定できます。 列挙値:
| WARN | LoggingLevel |
| errorHandlerLogStackTrace (logging) | デフォルトの errorHandler でスタックトレースをログに記録するかどうかを制御できます。 | true | boolean |
| password (セキュリティー) | ConnectionFactory で使用するパスワード。また、ConnectionFactory でユーザー名およびパスワードを直接設定することもできます。 | String | |
| username (セキュリティー) | 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 をトランスポートとして使用する場合、ペイロードとしてボディとヘッダーのみを転送します。Dead Letter Channel で JMS を使用する場合、JMS キューをデッドレターキューとして使用する場合、通常、発生した例外は JMS メッセージに格納されません。ただし、JMS デッドレターキューで transferExchange オプションを使用して、Exchange 全体を org.apache.camel.support.DefaultExchangeHolder を保持する javax.jms.ObjectMessage としてキューに格納するよう Camel に指示できます。これにより、デッドレターキューから消費し、キー Exchange.EXCEPTION_CAUGHT を使用して Exchange プロパティーから原因の例外を取得できます。以下のデモは、これを示しています。
// setup error handler to use JMS as queue and store the entire Exchange
errorHandler(deadLetterChannel("jms:queue:dead?transferExchange=true"));次に、JMS キューから消費して問題を分析できます。
from("jms:queue:dead").to("bean:myErrorAnalyzer");
// and in our bean
String body = exchange.getIn().getBody();
Exception cause = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, Exception.class);
// the cause message is
String problem = cause.getMessage();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.Message と org.apache.camel.Message の間でメッセージを自動的にマップします。
JMS メッセージを送信するとき、Camel はメッセージ本文を次の JMS メッセージタイプに変換します。
| ボディタイプ | JMS Message | Comment |
|---|---|---|
|
|
| |
|
|
|
DOM は |
|
|
| |
|
|
| |
|
|
| |
|
|
| |
|
|
| |
|
|
| |
|
|
|
JMS メッセージを受信すると、Camel は JMS メッセージを次のボディタイプに変換します。
| JMS Message | ボディタイプ |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
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 プロデューサーエンドポイントにテキストメッセージの使用を強制したためです。
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 の場合、次のルールがヘッダー 値 に適用されます。
-
値は、プリミティブまたはそのカウンターオブジェクト (
Integer、Long、Characterなど) である必要があります。タイプString、CharSequence、Date、BigDecimal、およびBigIntegerはすべて、それらのtoString()表現に変換されます。他のすべてのタイプはドロップされます。
Camel は、特定のヘッダー値を削除すると、カテゴリー org.apache.camel.component.jms.JmsBinding で DEBUG レベルでログに記録します。以下に例を示します。
2008-07-09 06:43:04,046 [main ] DEBUG JmsBinding
- Ignoring non primitive header: order of class: org.apache.camel.component.jms.issues.DummyOrder with value: DummyOrder{orderId=333, itemId=4444, quantity=2}26.8. 受信時のメッセージフォーマット
Camel は、メッセージを受信すると、次のプロパティーを Exchange に追加します。
| プロパティー | タイプ | 説明 |
|---|---|---|
|
|
| 返信先。 |
Camel は、JMS メッセージを受信すると、In メッセージヘッダーに次の JMS プロパティーを追加します。
| ヘッダー | タイプ | 説明 |
|---|---|---|
|
|
| JMS 相関 ID。 |
|
|
| JMS 配信モード。 |
|
|
| JMS 宛先。 |
|
|
| JMS の有効期限。 |
|
|
| JMS 固有のメッセージ ID。 |
|
|
| JMS 優先度 (0 が最低の優先度、9 が最高の優先度)。 |
|
|
| JMS メッセージは再配信されますか。 |
|
|
| JMS 返信先の宛先。 |
|
|
| JMS タイムスタンプ。 |
|
|
| JMS タイプ。 |
|
|
| JMS グループ ID。 |
上記の情報はすべて標準の JMS であるため、詳細については JMS のドキュメント を参照してください。
26.9. Camel を使用したメッセージの送受信と JMSReplyTo について
JMS コンポーネントは複雑で、場合によってはその動作に細心の注意を払う必要があります。したがって、これは探すべき領域/落とし穴のいくつかの簡単な要約です.
Camel が JMSProducer を使用してメッセージを送信すると、次の条件がチェックされます。
- メッセージ交換パターン、
-
JMSReplyToがエンドポイントまたはメッセージヘッダーで設定されたかどうか、 -
次のいずれかのオプションが JMS エンドポイントに設定されているかどうか:
disableReplyTo、preserveMessageQos、explicitQosEnabled。
これらすべてを理解し、ユースケースをサポートするように設定するには、少し複雑になる可能性があります。
26.9.1. JmsProducer
JmsProducer は、設定に応じて次のように動作します。
| 交換パターン | その他のオプション | 説明 |
|---|---|---|
| InOut | - |
Camel は応答を期待し、一時的な |
| InOut |
|
Camel は応答を期待し、メッセージの送信後、指定された |
| InOnly | - | Camel はメッセージを送信しますが、返信は期待 しません。 |
| InOnly |
|
デフォルトでは、Camel は |
26.9.2. JmsConsumer
JmsConsumer は、設定に応じて次のように動作します。
| 交換パターン | その他のオプション | 説明 |
|---|---|---|
| InOut | - |
Camel は応答を |
| InOnly | - | パターンが InOnly であるため、Camel は返信を返しません。 |
| - |
| このオプションは、返信を抑制します。 |
そのため、取引所に設定されているメッセージ交換パターンに注意してください。
ルートの途中で JMS 宛先にメッセージを送信する場合は、使用する交換パターンを指定できます。詳細については、Request Reply を参照してください。
これは、InOnly メッセージを JMS トピックに送信する場合に便利です。
from("activemq:queue:in")
.to("bean:validateOrder")
.to(ExchangePattern.InOnly, "activemq:topic:order")
.to("bean:handleOrder");26.10. エンドポイントを再利用し、実行時に計算されたさまざまな宛先に送信します
多くの異なる JMS 宛先にメッセージを送信する必要がある場合は、JMS エンドポイントを再利用して、メッセージヘッダーで実際の宛先を指定するのが理にかなっています。これにより、Camel は同じエンドポイントを再利用できますが、異なる宛先に送信できます。これにより、作成されるエンドポイントの数が大幅に削減され、メモリーとスレッドリソースが節約されます。
次のヘッダーで宛先を指定できます。
| ヘッダー | タイプ | 説明 |
|---|---|---|
|
|
| 宛先オブジェクト。 |
|
|
| 宛先名。 |
たとえば、次のルートは、実行時に宛先を計算し、それを使用して JMS URL に表示される宛先をオーバーライドする方法を示しています。
from("file://inbox")
.to("bean:computeDestination")
.to("activemq:queue:dummy");
キュー名の dummy は単なるプレースホルダーです。JMS エンドポイント URL の一部として指定する必要がありますが、この例では無視されます。
computeDestination bean で、CamelJmsDestinationName ヘッダーを次のように設定して、実際の宛先を指定します。
public void setJmsHeader(Exchange exchange) {
String id = ....
exchange.getIn().setHeader("CamelJmsDestinationName", "order:" + id");
}
次に、Camel はこのヘッダーを読み取り、エンドポイントで設定されたものの代わりに宛先として使用します。したがって、この例では、id 値が 2 であると仮定して、Camel はメッセージを activemq:queue:order:2 に送信します。
CamelJmsDestination ヘッダーと CamelJmsDestinationName ヘッダーの両方が設定されている場合、CamelJmsDestination が優先されます。JMS プロデューサーは、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. 非同期コンシューマーによる同時消費
各同時コンシューマーは、現在のメッセージが完全に処理されたときに、JMS ブローカーから次に利用可能なメッセージのみを取得することに注意してください。オプション asyncConsumer=true を設定すると、前のメッセージが (非同期ルーティングエンジンによって) 非同期に処理されている間に、コンシューマーが 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 | 説明 |
|---|---|---|---|
|
| 高速 | はい |
一時キューは応答キューとして使用され、Camel によって自動作成されます。これを使用するには、replyTo キュー名を指定 しないでください。オプションで、 |
|
| Slow | はい |
共有永続キューが応答キューとして使用されます。キューは事前に作成する必要がありますが、Apache ActiveMQ などの一部のブローカーはオンザフライで作成できます。これを使用するには、replyTo キュー名を指定する必要があります。オプションで、 |
|
| 高速 | No (*Yes) |
応答キューとして専用の永続キューが使用されます。キューは事前に作成する必要がありますが、Apache ActiveMQ などの一部のブローカーはオンザフライで作成できます。これを使用するには、replyTo キュー名を指定する必要があります。また、 |
|
| 高速 | はい |
使用中の同時メッセージリスナーを使用して、応答メッセージを同時に処理できます。範囲は、 |
|
| 高速 | はい |
使用中の同時メッセージリスナーを使用して、応答メッセージを同時に処理できます。範囲は、 |
JmsProducer は InOut を検出し、使用する返信先を含む JMSReplyTo ヘッダーを提供します。デフォルトでは、Camel は一時キューを使用しますが、エンドポイントで replyTo オプションを使用して、固定応答キューを指定できます (固定応答キューについては以下を参照してください)。
Camel は応答キューをリッスンするコンシューマーを自動的にセットアップするので、何もする必要 はありません。
このコンシューマーは、返信をリッスンする Spring DefaultMessageListenerContainer です。ただし、同時コンシューマーは 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 セレクターは低速であるため、これを行うには欠点があります。また、応答キューのコンシューマーは、新しい JMS セレクター ID での更新が遅くなります。実際には、receiveTimeout オプションがタイムアウトしたときにのみ更新されます。デフォルトでは 1 秒です。したがって、理論的には、応答メッセージが検出されるまでに約 1 秒かかる可能性があります。一方、固定リプライキューが Camel リプライコンシューマー専用である場合は、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 メッセージの送信時に time to live の値は 設定されません。ただし、リクエストのタイムアウトはまだ有効です。たとえば、JMS を介して要求/応答を行い、存続時間を無効にしている場合、Camel は引き続き 20 秒のタイムアウトを使用します( requestTimeout オプション)。もちろん、そのオプションも設定できます。そのため、requestTimeout と disableTimeToLive の 2 つのオプションを使用すると、リクエスト/リプライを行うときにきめ細かい制御が可能になります。
メッセージにヘッダーを指定してオーバーライドし、エンドポイントの設定値の代わりにリクエストのタイムアウト値として使用できます。以下に例を示します。
from("direct:someWhere")
.to("jms:queue:foo?replyTo=bar&requestTimeout=30s")
.to("bean:processReply");
上記のルートでは、requestTimeout が 30 秒に設定されたエンドポイントがあります。そのため、Camel は、その応答メッセージがバーキューに戻ってくるまで最大 30 秒待機します。応答メッセージが受信されない場合、Exchange で org.apache.camel.ExchangeTimedOutException が設定され、Camel はメッセージのルーティングを続行しますが、例外が原因で失敗し、Camel のエラーハンドラーが反応します。
メッセージごとのタイムアウト値を使用する場合は、長型としてタイムアウト値を持つ定数値 "CamelJmsRequestTimeout" を持つキー org.apache.camel.component.jms.JmsConstants#JMS_REQUEST_TIMEOUT でヘッダーを設定できます。
たとえば、bean を使用して、以下に示すようにサービス Bean で "whatIsTheTimeout" メソッドを呼び出すなど、個々のメッセージごとのタイムアウト値を計算できます。
from("direct:someWhere")
.setHeader("CamelJmsRequestTimeout", method(ServiceBean.class, "whatIsTheTimeout"))
.to("jms:queue:foo?replyTo=bar&requestTimeout=30s")
.to("bean:processReply");
Camel を使用して JMS を介して fire and 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>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に記載される 99 のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| camel.component.jms.accept-messages-while-stopping | コンシューマーが停止中にメッセージを受け入れるかどうかを指定します。実行時に 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 | ブール値 |
| camel.component.jms.allow-reply-manager-quick-stop | JmsConfiguration#isAcceptMessagesWhileStopping が有効で、org.apache.camel.CamelContext が現在停止している場合に、要求/応答メッセージングのリプライマネージャーで使用される DefaultMessageListenerContainer が、DefaultMessageListenerContainer.runningAllowed フラグを迅速に停止できるようにするかどうか。このクイック停止機能は、通常の JMS コンシューマーではデフォルトで有効になっていますが、応答マネージャーを有効にするには、このフラグを有効にする必要があります。 | false | ブール値 |
| camel.component.jms.allow-serialized-headers | シリアル化されたヘッダーを含めるかどうかを制御します。transferExchange が true の場合にのみ適用されます。これには、オブジェクトがシリアライズ可能である必要があります。Camel はシリアル化できないオブジェクトを除外し、WARN レベルでログに記録します。 | false | ブール値 |
| camel.component.jms.always-copy-message | true の場合、メッセージがプロデューサーに渡されて送信されると、Camel は常にメッセージの JMS メッセージコピーを作成します。replyToDestinationSelectorName が設定されている場合など、状況によってはメッセージをコピーする必要があります (ちなみに、replyToDestinationSelectorName が設定されている場合、Camel は alwaysCopyMessage オプションを true に設定します)。 | false | ブール値 |
| camel.component.jms.artemis-consumer-priority | コンシューマーの優先度を使用すると、優先度の高いコンシューマーがアクティブなときにメッセージを受信できるようになります。通常、キューに接続されているアクティブなコンシューマーは、ラウンドロビン方式でキューからメッセージを受け取ります。コンシューマーの優先度が使用されているとき、同じ優先度の高いアクティブなコンシューマーが複数存在する場合は、メッセージがラウンドロビンで配信されます。メッセージは、優先度の高いコンシューマーがメッセージを消費するために利用できるクレジットを持っていない場合、またはそれらの優先度の高いコンシューマーがメッセージの受け入れを拒否した場合にのみ、優先度の低いコンシューマーに送信されます (たとえば、コンシューマーに関連するセレクターの基準を満たさないため)。 | Integer | |
| camel.component.jms.artemis-streaming-enabled | Apache Artemis ストリーミングモード用に最適化するかどうか。これにより、JMS StreamMessage タイプで Artemis を使用する場合のメモリーオーバーヘッドを削減できます。このオプションは、Apache Artemis が使用されている場合にのみ有効にする必要があります。 | false | ブール値 |
| camel.component.jms.async-consumer | JmsConsumer が Exchange を非同期的に処理するかどうか。有効にすると、JmsConsumer は JMS キューから次のメッセージを取得できますが、前のメッセージは (非同期ルーティングエンジンによって) 非同期に処理されます。これは、メッセージが 100% 厳密に順序どおりに処理されない可能性があることを意味します。無効になっている場合 (デフォルト)、JmsConsumer が JMS キューから次のメッセージを取得する前に Exchange が完全に処理されます。transactioned が有効になっている場合、トランザクションは同期的に実行する必要があるため、asyncConsumer=true は非同期的に実行されないことに注意してください (Camel 3.0 は非同期トランザクションをサポートする場合があります)。 | false | ブール値 |
| camel.component.jms.async-start-listener | ルートの開始時に JmsConsumer メッセージリスナーを非同期で開始するかどうか。たとえば、JmsConsumer がリモート JMS ブローカーへの接続を取得できない場合は、再試行中やフェイルオーバー中にブロックされる可能性があります。これにより、ルートの開始時に Camel がブロックされます。このオプションを true に設定すると、ルートの起動を許可します。一方、JmsConsumer は非同期モードで専用のスレッドを使用して JMS ブローカーに接続します。このオプションを使用する場合は、接続を確立できない場合は例外が WARN レベルでログに記録され、コンシューマーはメッセージを受信できず、ルートを再起動して再試行できます。 | false | ブール値 |
| camel.component.jms.async-stop-listener | ルートを停止するときに、JmsConsumer メッセージリスナーを非同期的に停止するかどうか。 | false | ブール値 |
| camel.component.jms.auto-startup | コンシューマーコンテナーを自動起動するかどうかを指定します。 | true | ブール値 |
| camel.component.jms.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | ブール値 |
| 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 から消費する場合の同時コンシューマーのデフォルト数を指定します (JMS を介した要求/応答ではありません)。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。JMS を介して要求/応答を行う場合は、オプション replyToConcurrentConsumers を使用して、応答メッセージリスナーの同時コンシューマーの数を制御します。 | 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 | 使用するコンシューマータイプ。Simple、Default、または Custom のいずれかです。コンシューマータイプによって、使用する 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 | コンシューマーエンドポイントとプロデューサエンドポイントの ReplyTo コンシューマーの両方に対して、DefaultMessageListenerContainer で使用するデフォルトの TaskExecutor タイプを指定します。可能な値: SimpleAsync (Spring の SimpleAsyncTaskExecutor を使用) または ThreadPool (Spring の ThreadPoolTaskExecutor を最適な値で使用 - キャッシュされたスレッドプールのようなもの)。設定されていない場合は、デフォルトで以前の動作になり、コンシューマーエンドポイントにはキャッシュされたスレッドプールが使用され、応答コンシューマーには SimpleAsync が使用されます。ThreadPool の使用は、同時コンシューマーが動的に増減するエラスティック設定でスレッドのゴミを減らすために推奨されます。 | 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 | ブール値 |
| 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 | ブール値 |
| 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 | ブール値 |
| camel.component.jms.expose-listener-session | メッセージを消費するときにリスナーセッションを公開するかどうかを指定します。 | false | ブール値 |
| camel.component.jms.force-send-original-message | mapJmsMessage=false を使用すると、ルート中にヘッダーに触れると (get または set)、Camel は新しい JMS メッセージを作成して新しい JMS 宛先に送信します。Camel が受信した元の JMS メッセージを強制的に送信するには、このオプションを true に設定します。 | false | ブール値 |
| camel.component.jms.format-date-headers-to-iso8601 | JMS 日付プロパティーを ISO 8601 標準に従ってフォーマットするかどうかを設定します。 | false | ブール値 |
| camel.component.jms.header-filter-strategy | カスタムの org.apache.camel.spi.HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルターします。このオプションは org.apache.camel.spi.HeaderFilterStrategy タイプです。 | HeaderFilterStrategy | |
| camel.component.jms.idle-consumer-limit | 常にアイドル状態にできるコンシューマーの数の制限を指定します。 | 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 | ブール値 |
| camel.component.jms.include-sent-j-m-s-message-i-d | InOnly を使用して JMS 宛先に送信する場合にのみ適用されます (例: ファイアアンドフォーゲット)。このオプションを有効にすると、メッセージが JMS 宛先に送信されたときに JMS クライアントによって使用された実際の JMSMessageID で Camel Exchange が強化されます。 | false | ブール値 |
| 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 | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | ブール値 |
| camel.component.jms.map-jms-message | Camel が受信した JMS メッセージを適切なペイロードタイプ (javax.jms.TextMessage を文字列など) に自動マップするかどうかを指定します。 | true | ブール値 |
| camel.component.jms.max-concurrent-consumers | JMS から消費する場合の同時コンシューマーの最大数を指定します (JMS を介した要求/応答ではありません)。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。JMS を介して要求/応答を行う場合は、オプション replyToMaxConcurrentConsumers を使用して、応答メッセージリスナーの同時コンシューマーの数を制御します。 | Integer | |
| camel.component.jms.max-messages-per-task | タスクあたりのメッセージ数。-1 は無制限です。同時コンシューマーの範囲 (例: min max) を使用する場合、このオプションを使用して値を 100 などに設定し、必要な作業が少ない場合にコンシューマーが縮小する速度を制御できます。 | -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 | ブール値 |
| camel.component.jms.password | ConnectionFactory で使用するパスワード。また、ConnectionFactory でユーザー名およびパスワードを直接設定することもできます。 | String | |
| camel.component.jms.preserve-message-qos | JMS エンドポイントの QoS 設定ではなく、メッセージで指定された QoS 設定を使用してメッセージを送信する場合は、true に設定します。次の 3 つのヘッダーは、JMSPriority、JMSDeliveryMode、および JMSExpiration と見なされます。それらのすべてまたは一部のみを指定できます。指定されていない場合、Camel は代わりにエンドポイントからの値を使用するようにフォールバックします。したがって、このオプションを使用すると、ヘッダーはエンドポイントからの値をオーバーライドします。対照的に、explicitQosEnabled オプションは、エンドポイントに設定されたオプションのみを使用し、メッセージヘッダーの値は使用しません。 | false | ブール値 |
| camel.component.jms.priority | 1 より大きい値は、送信時のメッセージの優先度を指定します (1 が最低の優先度で、9 が最高の優先度です)。このオプションを有効にするには、explicitQosEnabled オプションも有効にする必要があります。 | 4 | Integer |
| camel.component.jms.pub-sub-no-local | 独自の接続によってパブリッシュされたメッセージの配信を禁止するかどうかを指定します。 | false | ブール値 |
| 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 宛先を提供します (コンシューマーの Message.getJMSReplyTo() の着信値をオーバーライドします)。 | String | |
| camel.component.jms.reply-to-cache-level-name | JMS を介して要求/応答を行うときに、応答コンシューマーのキャッシュレベルを名前で設定します。このオプションは、固定応答キュー (一時的ではない) を使用する場合にのみ適用されます。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 を介して要求/応答を行うときの同時コンシューマーのデフォルト数を指定します。スレッドの動的なスケールアップ/ダウンを制御するには、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 を介した要求/応答を使用する場合の同時コンシューマーの最大数を指定します。スレッドの動的なスケールアップ/ダウンを制御するには、maxMessagesPerTask オプションも参照してください。 | Integer | |
| camel.component.jms.reply-to-on-timeout-max-concurrent-consumers | JMS 経由の要求/応答を使用するときにタイムアウトが発生したときに、ルーティングを継続するための同時コンシューマーの最大数を指定します。 | 1 | Integer |
| camel.component.jms.reply-to-override | JMS メッセージで明示的な ReplyTo 宛先を提供します。これは、replyTo の設定をオーバーライドします。メッセージをリモート Queue に転送し、ReplyTo 宛先から応答メッセージを受け取る場合に便利です。 | String | |
| camel.component.jms.reply-to-same-destination-allowed | JMS コンシューマーが、コンシューマーが使用しているのと同じ宛先に応答メッセージを送信できるかどうか。これにより、同じメッセージを消費してそれ自体に送り返すことで、無限ループが回避されます。 | 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 | ブール値 |
| camel.component.jms.subscription-durable | サブスクリプションを永続化するかどうかを設定します。使用する永続サブスクリプション名は、subscriptionName プロパティーで指定できます。デフォルトは false です。通常、subscriptionName 値と組み合わせて永続的なサブスクリプションを登録するには、これを true に設定します (メッセージリスナークラス名がサブスクリプション名として十分でない場合)。トピック (pub-sub ドメイン) をリッスンする場合にのみ意味があるため、このメソッドは pubSubDomain フラグも切り替えます。 | false | ブール値 |
| camel.component.jms.subscription-name | 作成するサブスクリプションの名前を設定します。共有または永続的なサブスクリプションを持つトピック (pub-sub ドメイン) の場合に適用されます。サブスクリプション名は、このクライアントの JMS クライアント ID 内で一意である必要があります。デフォルトは、指定されたメッセージリスナーのクラス名です。注: 共有サブスクリプション (JMS 2.0 が必要) を除き、サブスクリプションごとに 1 つの同時コンシューマー (このメッセージリスナコンテナーのデフォルト) のみが許可されます。 | String | |
| camel.component.jms.subscription-shared | サブスクリプションを共有するかどうかを設定します。使用する共有サブスクリプション名は、subscriptionName プロパティーで指定できます。デフォルトは false です。通常は subscriptionName 値と組み合わせて共有サブスクリプションを登録するには、これを true に設定します (メッセージリスナークラス名がサブスクリプション名として十分でない場合)。共有サブスクリプションも永続的である可能性があるため、このフラグを subscriptionDurable と組み合わせることもできます (多くの場合は組み合わせます)。トピック (pub-sub ドメイン) をリッスンする場合にのみ意味があるため、このメソッドは pubSubDomain フラグも切り替えます。JMS 2.0 互換のメッセージブローカーが必要です。 | false | ブール値 |
| camel.component.jms.synchronous | 同期処理を厳密に使用するかどうかを設定します。 | false | ブール値 |
| camel.component.jms.task-executor | メッセージを消費するためのカスタムタスクエグゼキュータを指定できます。オプションは org.springframework.core.task.TaskExecutor 型です。 | TaskExecutor | |
| camel.component.jms.test-connection-on-startup | 起動時に接続をテストするかどうかを指定します。これにより、Camel の起動時に、すべての JMS コンシューマーが JMS ブローカーへの有効な接続を持つことが保証されます。接続を許可できない場合、Camel は起動時に例外を出力します。これにより、接続に失敗した状態で Camel が開始されなくなります。JMS プロデューサーもテストされています。 | false | ブール値 |
| 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 | ブール値 |
| 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 がコンシューマー側で失敗した場合、原因となった例外が javax.jms.ObjectMessage として応答で返されます。クライアントが Camel の場合、返された Exception は再出力されます。これにより、Camel JMS をルーティングのブリッジとして使用できます。たとえば、永続的なキューを使用して堅牢なルーティングを有効にできます。transferExchange も有効にしている場合は、このオプションが優先されることに注意してください。キャッチされた例外はシリアライズ可能である必要があります。コンシューマー側の元の Exception は、プロデューサーに返されるときに org.apache.camel.RuntimeCamelException などの外部例外にラップできます。データは Java オブジェクトのシリアライゼーションを使用しており、受信側がクラスレベルでデータをデシリアライズできる必要があるため、これは注意して使用してください。 | false | ブール値 |
| camel.component.jms.transfer-exchange | 本文とヘッダーだけでなく、電信送金で交換を転送できます。次のフィールドが転送されます: In body、Out body、Fault body、In ヘッダー、Out ヘッダー、Fault ヘッダー、交換プロパティー、交換例外。これには、オブジェクトがシリアライズ可能である必要があります。Camel はシリアル化できないオブジェクトを除外し、WARN レベルでログに記録します。プロデューサ側とコンシューマー側の両方でこのオプションを有効にする必要があるため、Camel はペイロードが Exchange であり、通常のペイロードではないことを認識します。データは Java オブジェクトのシリアライゼーションを使用しており、レシーバーがクラスレベルでデータをデシリアライズできる必要があるため、これは注意して使用してください。これにより、互換性のある Camel バージョンを使用する必要があるプロデューサーとコンシューマーの間の強い結合が強制されます。 | false | ブール値 |
| camel.component.jms.use-message-i-d-as-correlation-i-d | InOut メッセージの JMSCorrelationID として JMSMessageID を常に使用するかどうかを指定します。 | false | ブール値 |
| 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
プロデューサーとコンシューマーの両方がサポート対象
Kafka コンポーネントは、Apache Kafka メッセージブローカーとの通信に使用されます。
Maven ユーザーは、このコンポーネントの pom.xml に以下の依存関係を追加する必要があります。
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-kafka</artifactId>
<version>3.14.5.redhat-00018</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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
27.3. コンポーネントオプション
Kafka コンポーネントは、以下にリストされている 104 のオプションをサポートしています。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| additionalProperties (共通) | camel 設定で直接設定できない場合に備えて、kafka コンシューマーまたは kafka プロデューサーのいずれかに追加のプロパティーを設定します (例: Camel 設定にまだ反映されていない新しい Kafka プロパティー)。プロパティーには additionalProperties を接頭辞として付ける必要があります。たとえば、additionalProperties.transactional.id=12345&additionalProperties.schema.registry.url=http://localhost:8811/avro です。 | マップ | |
| brokers (共通) | 使用する Kafka ブローカーの URL。形式は host1:port1,host2:port2 で、リストはブローカーのサブセットまたはブローカーのサブセットを指す VIP にすることができます。このオプションは、Kafka ドキュメントでは bootstrap.servers として知られています。 | String | |
| clientId (共通) | クライアント ID は、呼び出しの追跡に役立つように、各要求で送信されるユーザー指定の文字列です。要求を行っているアプリケーションを論理的に識別する必要があります。 | String | |
| configuration (共通) | エンドポイントが再利用する共通オプションを使用して、Kafka コンポーネントを事前設定できます。 | KafkaConfiguration | |
| headerFilterStrategy (共通) | カスタムの HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルタリングします。 | HeaderFilterStrategy | |
| reconnectBackoffMaxMs (共通) | 接続に繰り返し失敗したブローカーへの再接続時に待機する最大時間 (ミリ秒単位)。これが指定されている場合、ホストごとのバックオフは、連続して接続に失敗するたびに、この最大値まで指数関数的に増加します。バックオフの増加を計算した後、コネクションストームを回避するために 20% のランダムなジッターが追加されます。 | 1000 | Integer |
| shutdownTimeout (共通) | コンシューマーまたはプロデューサがワーカースレッドをシャットダウンして終了するまで正常に待機するためのミリ秒単位のタイムアウト。 | 30000 | int |
| allowManualCommit (コンシューマー) | KafkaManualCommit による手動コミットを許可するかどうか。このオプションを有効にすると、KafkaManualCommit のインスタンスが Exchange メッセージヘッダーに格納されます。これにより、エンドユーザーはこの API にアクセスし、Kafka コンシューマーを介して手動でオフセットコミットを実行できます。 | false | boolean |
| autoCommitEnable (コンシューマー) | true の場合、コンシューマーによってすでにフェッチされているメッセージのオフセットを ZooKeeper に定期的にコミットします。このコミットされたオフセットは、プロセスが失敗したときに、新しいコンシューマーが開始される位置として使用されます。 | true | ブール値 |
| autoCommitIntervalMs (コンシューマー) | コンシューマーオフセットが Zookeeper にコミットされるミリ秒単位の頻度。 | 5000 | Integer |
| autoCommitOnStop (コンシューマー) | コンシューマーが停止したときに明示的な自動コミットを実行して、ブローカーが最後に消費されたメッセージからコミットされていることを確認するかどうか。これには、autoCommitEnable オプションをオンにする必要があります。可能な値は、sync、async、または none です。sync がデフォルト値です。 列挙値:
| sync | String |
| autoOffsetReset (consumer) | ZooKeeper に初期オフセットがない場合、またはオフセットが範囲外の場合の対処方法: Early : オフセットを最も古いオフセットに自動的にリセット latest : オフセットを最新のオフセットに自動的にリセット Fail: コンシューマーに例外を出力します。 列挙値:
| latest | String |
| breakOnFirstError (コンシューマー) | このオプションは、コンシューマーが交換を処理していて失敗した場合に何が起こるかを制御します。オプションが false の場合、コンシューマーは次のメッセージに進み、それを処理します。オプションが true の場合、コンシューマーは中断し、失敗の原因となったメッセージのオフセットに戻ってシークし、このメッセージの処理を再試行します。ただし、これは、たとえば有害なメッセージのように毎回失敗する場合、同じメッセージの無限の処理につながる可能性があります。したがって、Camel のエラーハンドラーを使用するなどして対処することをお勧めします。 | false | boolean |
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| checkCrcs (コンシューマー) | 消費されたレコードの CRC32 を自動的に確認します。これにより、メッセージのネットワーク上またはディスク上の破損が発生しなくなります。このチェックはオーバーヘッドを追加するため、極端なパフォーマンスを求める場合は無効になる可能性があります。 | true | ブール値 |
| commitTimeoutMs (consumer) | 同期コミットが完了するまでコードが待機する最大時間 (ミリ秒単位)。 | 5000 | Long |
| consumerRequestTimeoutMs (consumer) | この設定は、クライアントの要求の応答を待つ最大時間を制御します。タイムアウトが経過する前に応答が受信されない場合、クライアントは必要に応じてリクエストを再送信します。または、再試行が使い切られるとリクエストが失敗します。 | 40000 | Integer |
| consumersCount (コンシューマー) | kafka サーバーに接続するコンシューマーの数。各コンシューマーは、受信データを取得して処理する個別のスレッドで実行されます。 | 1 | int |
| fetchMaxBytes (コンシューマー) | サーバーがフェッチ要求に対して返す必要があるデータの最大量。これは絶対的な最大値ではありません。フェッチの最初の空でないパーティションの最初のメッセージがこの値よりも大きい場合でも、メッセージが返されて、コンシューマーは進歩することができます。ブローカーが受け入れる最大メッセージサイズは、message.max.bytes (ブローカー設定) または max.message.bytes (トピック設定) で定義されます。コンシューマーは複数のフェッチを並行して実行することに注意してください。 | 52428800 | Integer |
| fetchMinBytes (コンシューマー) | サーバーがフェッチ要求に対して返す必要のあるデータの最小量。利用可能なデータが不十分な場合、リクエストは、リクエストに応答する前に、十分なデータが蓄積されるのを待ちます。 | 1 | Integer |
| fetchWaitMaxMs (コンシューマー) | すぐに fetch.min.bytes を満たすのに十分なデータがない場合に、サーバーがフェッチ要求に応答する前にブロックする最大時間。 | 500 | Integer |
| groupId (コンシューマー) | このコンシューマーが属するコンシューマープロセスのグループを一意に識別する文字列。同じグループ ID を設定することにより、複数のプロセスはそれらがすべて同じコンシューマーグループの一部であることを示します。このオプションは、コンシューマーに必要です。 | String | |
| groupInstanceId (コンシューマー) | エンドユーザーが提供するコンシューマーインスタンスの一意の識別子。non-empty strings のみが許可されます。設定されている場合、コンシューマーは静的メンバーとして扱われます。つまり、常に、この ID を持つ 1 つのインスタンスのみがコンシューマーグループで許可されます。これは、より大きなセッションタイムアウトと組み合わせて使用して、一時的な利用不可 (プロセス再起動など) によるグループのリバランスを回避します。設定しないと、コンシューマーは従来の動作である動的メンバーとしてグループに参加します。 | String | |
| headerDeserializer (コンシューマー) | カスタム KafkaHeaderDeserializer を使用して、kafka ヘッダー値を逆シリアル化します。 | KafkaHeaderDeserializer | |
| heartbeatIntervalMs (コンシューマー) | Kafka のグループ管理機能を使用する場合の、ハートビートからコンシューマーコーディネーター間の想定される時間。ハートビートは、コンシューマーのセッションがアクティブな状態を維持し、新しいコンシューマーがグループに参加したり離脱したりする際のリバランスを促進するために使用されます。この値は session.timeout.ms よりも低く設定する必要がありますが、通常はその値の 1/3 以下に設定する必要があります。さらに低く調整することで、通常のリバランスの予想時間を制御することもできます。 | 3000 | Integer |
| keyDeserializer (コンシューマー) | Deserializer インターフェイスを実装する key の Deserializer クラス。 | org.apache.kafka.common.serialization.StringDeserializer | String |
| maxPartitionFetchBytes (コンシューマー) | サーバーが返すパーティションごとのデータの最大量。リクエストに使用される最大合計メモリーは #partitions max.partition.fetch.bytes になります。このサイズは、少なくともサーバーが許可する最大メッセージサイズと同じである必要があります。そうしないと、プロデューサーがコンシューマーがフェッチできるよりも大きなメッセージを送信する可能性があります。その場合、コンシューマーは特定のパーティションで大きなメッセージを取得しようとしてスタックする可能性があります。 | 1048576 | Integer |
| maxPollIntervalMs (コンシューマー) | コンシューマーグループ管理を使用する場合の poll() の呼び出し間の最大遅延。これにより、コンシューマーがさらにレコードをフェッチする前にアイドル状態になることができる時間に上限が設定されます。このタイムアウトの期限が切れる前に poll() が呼び出されない場合、コンシューマーは失敗とみなされ、グループはパーティションを別のメンバーに再割り当てするためにリバランスします。 | Long | |
| maxPollRecords (コンシューマー) | poll() への単一の呼び出しで返される最大レコード数。 | 500 | Integer |
| offsetRepository (コンシューマー) | トピックの各パーティションのオフセットをローカルに保存するために使用するオフセットリポジトリー。定義すると、自動コミットが無効になります。 | StateRepository | |
| partitionAssignor (コンシューマー) | グループ管理が使用されている場合に、クライアントがコンシューマーインスタンス間でパーティションの所有権を分散するために使用するパーティション割り当て戦略のクラス名。 | org.apache.kafka.clients.consumer.RangeAssignor | String |
| pollOnError (コンシューマー) | 新しいメッセージのポーリング中に、kafka が例外を出力した場合のアクション。エンドポイントレベルで明示的な値が設定されていない限り、デフォルトでコンポーネント設定の値が使用されます。DISCARD はメッセージを破棄し、次のメッセージのポーリングを続行します。ERROR_HANDLER は Camel のエラーハンドラーを使用して例外を処理し、その後、次のメッセージのポーリングを続行します。RECONNECT はコンシューマーに再接続し、メッセージのポーリングを再試行します RETRY はコンシューマーが同じメッセージのポーリングを再試行できるようにします STOP はコンシューマーを停止します (コンシューマーがメッセージを再び消費できるようにする必要がある場合は、手動で開始/再起動する必要があります)。 列挙値:
| ERROR_HANDLER | PollOnError |
| pollTimeoutMs (コンシューマー) | KafkaConsumer をポーリングするときに使用されるタイムアウト。 | 5000 | Long |
| resumeStrategy (コンシューマー) | このオプションを使用すると、ユーザーはカスタムの再開方法を設定できます。再開戦略は、パーティションが割り当てられたとき (つまり、接続時または再接続時) に実行されます。これにより、実装は操作を再開する方法をカスタマイズし、seekTo および offsetRepository メカニズムのより柔軟な代替手段として機能できます。実装の詳細については、KafkaConsumerResumeStrategy を参照してください。このオプションは、自動コミット設定には影響しません。この設定を使用する実装は、これと一緒に手動コミットオプションを使用して評価することも必要になる可能性があります。 | KafkaConsumerResumeStrategy | |
| seekTo (コンシューマー) | KafkaConsumer が起動時に最初または最後から読み取るかどうかを設定します。begin : 最初から読み取る end : 最後から読み取るこれは、以前のプロパティー seekToBeginning を置き換えています。 列挙値:
| String | |
| sessionTimeoutMs (コンシューマー) | Kafka のグループ管理機能を使用するときに障害を検出するために使用されるタイムアウト。 | 10000 | Integer |
| specificAvroReader (コンシューマー) | これにより、Confluent Platform スキーマレジストリーおよび io.confluent.kafka.serializers.KafkaAvroDeserializer で使用する特定の Avro リーダーを使用できるようになります。このオプションは、Confluent Platform (標準の Apache Kafka ではない) でのみ使用できます。 | false | boolean |
| topicIsPattern (コンシューマー) | トピックがパターン (正規表現) であるかどうか。これを使用して、パターンに一致する動的な数のトピックをサブスクライブできます。 | false | boolean |
| valueDeserializer (コンシューマー) | Deserializer インターフェイスを実装する値の Deserializer クラス。 | org.apache.kafka.common.serialization.StringDeserializer | String |
| kafkaManualCommitFactory (コンシューマー (上級)) | KafkaManualCommit インスタンスの作成に使用する Autowired Factory。これにより、カスタムファクトリーをプラグインしてカスタム KafkaManualCommit インスタンスを作成できます。これは、すぐに使用できるデフォルトの実装から逸脱する手動コミットを行うときに特別なロジックが必要な場合に備えています。 | KafkaManualCommitFactory | |
| pollExceptionStrategy (コンシューマー (上級)) | Autowired コンシューマーでカスタム戦略を使用して、メッセージのプール中に Kafka ブローカーから出力された例外の処理方法を制御します。 | PollExceptionStrategy | |
| bufferMemorySize (プロデューサー) | プロデューサーが、サーバーへの送信を待機しているレコードをバッファーリングするために使用できるメモリーの合計バイト数。レコードがサーバーに配信されるよりも速く送信された場合、プロデューサはブロックするか、block.on.buffer.full で指定された設定に基づいて例外を出力します。この設定は、プロデューサが使用する合計メモリーにほぼ対応する必要があります。ただし、プロデューサが使用するすべてのメモリーがバッファーリングに使用されるわけではないため、ハードバウンドではありません。一部の追加メモリーは、圧縮 (圧縮が有効な場合) やインフライトリクエストの維持に使用されます。 | 33554432 | Integer |
| compressionCodec (producer) | このパラメーターを使用すると、このプロデューサーによって生成されるすべてのデータの圧縮コーデックを指定できます。有効な値は none、gzip、snappy です。 列挙値:
| none | String |
| connectionMaxIdleMs (プロデューサー) | この設定で指定された期間 (ミリ秒単位) の後にアイドル状態の接続を閉じます。 | 540000 | Integer |
| deliveryTimeoutMs (producer) | send() の呼び出しが返された後、成功または失敗を報告する時間の上限。これにより、送信前にレコードが遅延する合計時間、ブローカーから確認応答を待つ時間 (予想される場合)、および再試行可能な送信の失敗に許容される時間が制限されます。 | 120000 | Integer |
| enableIdempotence (プロデューサー) | 'true' に設定すると、プロデューサーは、プロデューサーは各メッセージのコピーが 1 つだけストリームに書き込まれるようにします。false の場合、プロデューサの再試行により、再試行されたメッセージの複製がストリームに書き込まれる可能性があります。true に設定した場合、このオプションでは max.in.flight.requests.per.connection を 1 に設定する必要があり、再試行をゼロにすることはできず、さらに ack を all に設定する必要があります。 | false | boolean |
| headerSerializer (プロデューサー) | カスタム KafkaHeaderSerializer を使用して、kafka ヘッダー値をシリアル化します。 | KafkaHeaderSerializer | |
| key (プロデューサー) | レコードキー (キーが指定されていない場合は null)。このオプションが設定されている場合、ヘッダー KafkaConstants#KEY よりも優先されます。 | String | |
| keySerializer (プロデューサー) | キーのシリアライザクラス (何も指定されていない場合、デフォルトはメッセージと同じになります)。 | org.apache.kafka.common.serialization.StringSerializer | String |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| lingerMs (プロデューサー) | プロデューサーは、リクエストの送信の間に到着したレコードを 1 つのバッチリクエストにグループ化します。通常、これは、レコードが送信できるよりも早く到着した場合に、負荷がかかった状態でのみ発生します。ただし、状況によっては、中程度の負荷がかかっている場合でも、クライアントがリクエストの数を減らす場合があります。この設定は、少量の人為的な遅延を追加することでこれを実現します。つまり、レコードをすぐに送信するのではなく、プロデューサーは指定された遅延まで待機して他のレコードを送信できるようにし、送信をまとめてバッチ処理できるようにします。これは、TCP の Nagle アルゴリズムに類似するものと考えることができます。この設定は、バッチ処理の遅延の上限を提供します。あるパーティションで batch.size 相当のレコードを取得すると、この設定に関係なくすぐに送信されますが、このパーティションで蓄積されたバイト数がこれより少ない場合は、指定された時間の間、さらにレコードが取得されるのを待つことになります。デフォルトは 0 (つまり遅延なし) に設定されます。たとえば、linger.ms=5 を設定すると、送信されるリクエストの数が減りますが、負荷がない状態で送信されるレコードに最大 5 ミリ秒のレイテンシーが追加されます。 | 0 | Integer |
| maxBlockMs (プロデューサー) | 設定は、kafka への送信がブロックされる時間を制御します。これらのメソッドは、複数の理由でブロックされる可能性があります。例: バッファーがいっぱい、メタデータが利用できない。この設定では、メタデータのフェッチ、キーと値のシリアル化、send () を実行するときのバッファーメモリーの分割と割り当てに費やされる合計時間に最大制限が課されます。partitionsFor () の場合、この設定はメタデータの待機に最大時間のしきい値を課します。 | 60000 | Integer |
| maxInFlightRequest (プロデューサー) | ブロックする前にクライアントが 1 つの接続で送信する確認されていないリクエストの最大数。この設定が 1 より大きい値に設定されていて、送信に失敗した場合、再試行によりメッセージの順序が変更されるリスクがあることに注意してください (つまり、再試行が有効になっている場合)。 | 5 | Integer |
| maxRequestSize (プロデューサー) | リクエストの最大サイズ。これは事実上、最大レコードサイズの上限でもあります。サーバーには、これとは異なる場合がある独自のレコードサイズの上限があることに注意してください。この設定により、プロデューサーが 1 回のリクエストで送信するレコードバッチの数が制限され、大量のリクエストが送信されないようになります。 | 1048576 | Integer |
| metadataMaxAgeMs (プロデューサー) | 新しいブローカーまたはパーティションをプロアクティブに検出するためのパーティションリーダーシップの変更がない場合でも、メタデータの更新を強制するまでの期間 (ミリ秒単位)。 | 300000 | Integer |
| metricReporters (プロデューサー) | メトリクスレポーターとして使用するクラスの一覧。MetricReporter インターフェイスを実装すると、新しいメトリックの作成が通知されるクラスをプラグインできます。JmxReporter は、JMX 統計を登録するために常に含まれます。 | String | |
| metricsSampleWindowMs (producer) | メトリクスを計算するために保持されるサンプルの数。 | 30000 | Integer |
| noOfMetricsSample (producer) | メトリクスを計算するために保持されるサンプルの数。 | 2 | Integer |
| partitioner (プロデューサー) | サブトピック間でメッセージを分割するパーティショナークラス。デフォルトのパーティショナーは、キーのハッシュに基づいています。 | org.apache.kafka.clients.producer.internals.DefaultPartitioner | String |
| partitionKey (プロデューサー) | レコードの送信先のパーティション (パーティションが指定されていない場合は null)。このオプションが設定されている場合、ヘッダー KafkaConstants#PARTITION_KEY よりも優先されます。 | Integer | |
| producerBatchSize (プロデューサー) | 複数のレコードが同じパーティションに送信されるときは常に、プロデューサーはレコードをまとめてより少ない要求にバッチ処理しようとします。これにより、クライアントとサーバーの両方でパフォーマンスが向上します。この設定では、デフォルトのバッチサイズをバイト単位で制御します。このサイズより大きいバッチレコードは試行されません。ブローカーに送信されるリクエストには、複数のバッチが含まれ、送信可能なデータを含む各パーティションに 1 つずつ含まれます。バッチサイズが小さいと、バッチ処理が一般的ではなくなり、スループット (バッチサイズゼロの場合、バッチ処理が完全に無効になります)。バッチサイズが非常に大きい場合は、追加のレコードを想定して、常に指定のバッチサイズのバッファーを割り当てるため、メモリーを多少無駄に使用する可能性があります。 | 16384 | Integer |
| queueBufferingMaxMessages (producer) | プロデューサをブロックするか、データを削除する前に、非同期モードを使用するときにプロデューサのキューに入れることができる未送信メッセージの最大数。 | 10000 | Integer |
| receiveBufferBytes (プロデューサー) | データの読み取り時に使用する TCP 受信バッファー (SO_RCVBUF) のサイズ。 | 65536 | Integer |
| reconnectBackoffMs (プロデューサー) | 特定のホストへの再接続を試行するまでの待機時間。これにより、タイトなループでホストに繰り返し接続することを回避します。このバックオフは、コンシューマーからブローカーに送信されるすべてのリクエストに適用されます。 | 50 | Integer |
| recordMetadata (producer) | プロデューサが Kafka への送信から RecordMetadata の結果を保存する必要があるかどうか。結果は、RecordMetadata メタデータを含む List に保存されます。リストは、キー KafkaConstants#KAFKA_RECORDMETA を持つヘッダーに保存されます。 | true | boolean |
| requestRequiredAcks (プロデューサー) | リクエストが完了したと見なす前に、プロデューサーがリーダーに受け取ったことを要求する確認の数。これは、送信されるレコードの耐久性を制御します。次の設定が一般的です: acks=0 ゼロに設定すると、プロデューサはサーバーからの確認をまったく待ちません。レコードは直ちにソケットバッファーに追加され、送信済みと見なされます。この場合、サーバーがレコードを受信したかどうかは保証されず、retries の設定は有効になりません (クライアントは通常、失敗を知ることができないからです)。各レコードに返されるオフセットは常に -1 に設定されます。acks=1 これは、リーダーがレコードをローカルログに書き込みますが、すべてのフォロワーからの完全な承認を待たずに応答することを意味します。この場合、レコードを承認した直後にリーダーが失敗したが、フォロワーがそれを複製する前に、レコードは失われます。acks=all これは、リーダーが同期レプリカの完全なセットがレコードを承認するまで待機することを意味します。これにより、少なくとも 1 つの In-Sync レプリカが動作している限り、レコードが失われないことが保証されます。これは利用可能な最強の保証になります。 列挙値:
| 1 | String |
| requestTimeoutMs (プロデューサー) | クライアントにエラーを返す前に、ブローカーが request.required.acks 要件を満たすために待機する時間。 | 30000 | Integer |
| retries (プロデューサー) | ゼロより大きい値を設定すると、クライアントは、一時的なエラーの可能性により送信に失敗したレコードを再送信します。この再試行は、クライアントがエラーを受信したときにレコードを再送した場合と同じであることに注意してください。再試行を許可すると、レコードの順序が変更される可能性があります。これは、2 つのレコードが 1 つのパーティションに送信され、最初のレコードが失敗して再試行され、2 番目のレコードが成功した場合、2 番目のレコードが最初に表示される可能性があるためです。 | 0 | Integer |
| retryBackoffMs (プロデューサー) | 各再試行の前に、プロデューサーは関連するトピックのメタデータを更新して、新しいリーダーが選出されたかどうかを確認します。リーダーの選択には少し時間がかかるため、このプロパティーはプロデューサーがメタデータを更新するまで待機する時間を指定します。 | 100 | Integer |
| sendBufferBytes (プロデューサー) | ソケット書き込みバッファーサイズ。 | 131072 | Integer |
| valueSerializer (プロデューサー) | メッセージのシリアライザクラス。 | org.apache.kafka.common.serialization.StringSerializer | String |
| workerPool (プロデューサー) | カスタムワーカープールを使用して、kafka サーバーが非同期のノンブロッキング処理を使用して KafkaProducer から送信されたメッセージを確認した後、Exchange のルーティングを続行します。このオプションを使用する場合は、スレッドプールのライフサイクルを処理して、不要になったときにプールをシャットダウンする必要があります。 | ExecutorService | |
| workerPoolCoreSize (プロデューサー) | Kafka サーバーが非同期のノンブロッキング処理を使用して KafkaProducer から送信されたメッセージを確認した後、Exchange のルーティングを続行するためのワーカープールのコアスレッドの数。 | 10 | Integer |
| workerPoolMaxSize (プロデューサー) | 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 インターセプターは org.apache.kafka.clients.producer.ProducerInterceptor を実装するクラスでなければなりません Consumer インターセプターは org.apache.kafka.clients.consumer.ConsumerInterceptor を実装するクラスでなければなりません実行時のクラスキャスト例外。 | String | |
| kerberosBeforeReloginMinTime (セキュリティー) | 更新試行間のログインスレッドのスリープ時間。 | 60000 | Integer |
| kerberosInitCmd (セキュリティー) | Kerberos kinit コマンドパス。デフォルトは/usr/bin/kinit です。 | /usr/bin/kinit | String |
| kerberosPrincipalToLocalRules (セキュリティー) | プリンシパル名から短縮名 (通常はオペレーティングシステムのユーザー名) にマッピングするためのルールの一覧です。ルールは順番に評価され、プリンシパル名と一致する最初のルールは、これを短縮名にマップするために使用されます。一覧の後続のルールは無視されます。デフォルトでは、{username}/{hostname}{REALM} 形式のプリンシパル名は {username} にマッピングされます。形式の詳細については、セキュリティー認証と ACL のドキュメントを参照してください。複数の値はコンマで区切ることができます。 | DEFAULT | String |
| kerberosRenewJitter (セキュリティー) | 更新時間に追加されたランダムなジッターの割合。 | 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 (セキュリティー) | 使用される Simple Authentication and Security Layer(SASL) メカニズム。有効な値については、を参照してください。 | GSSAPI | String |
| securityProtocol (セキュリティー) | ブローカーとの通信に使用されるプロトコル。SASL_PLAINTEXT、PLAINTEXT、および SSL がサポートされています。 | PLAINTEXT | String |
| sslCipherSuites (セキュリティー) | 暗号化スイートの一覧。これは、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 (セキュリティー) | サーバー証明書を使用してサーバーのホスト名を検証するエンドポイント識別アルゴリズム。 | https | String |
| sslKeymanagerAlgorithm (セキュリティー) | SSL 接続のキーマネージャーファクトリーによって使用されるアルゴリズム。デフォルト値は、Java 仮想マシンに設定されたキーマネージャーファクトリーアルゴリズムです。 | SunX509 | String |
| sslKeyPassword (security) | キーストアファイル内の秘密キーのパスワード。これはクライアントにとってオプションになります。 | String | |
| sslKeystoreLocation (セキュリティー) | キーストアファイルの場所。これはクライアントではオプションで、クライアントの双方向認証に使用できます。 | String | |
| sslKeystorePassword (security) | キーストアファイルのストアパスワード。これはクライアントのオプションであり、ssl.keystore.location が設定されている場合にのみ必要です。 | String | |
| sslKeystoreType (セキュリティー) | キーストアファイルのファイル形式。これはクライアントにとってオプションになります。デフォルト値は JKS です。 | JKS | String |
| sslProtocol (セキュリティー) | SSLContext の生成に使用される SSL プロトコル。デフォルト設定は TLS で、ほとんどの場合はこれで問題ありません。最近の JVM で許可されている値は、TLS、TLSv1.1、および TLSv1.2 です。SSL、SSLv2、および SSLv3 は古い JVM でサポートされている可能性がありますが、セキュリティーの脆弱性が知られているため、それらの使用はお勧めできません。 | String | |
| sslProvider (セキュリティー) | SSL 接続に使用されるセキュリティープロバイダーの名前。デフォルト値は JVM のデフォルトのセキュリティープロバイダーです。 | String | |
| sslTrustmanagerAlgorithm (セキュリティー) | SSL 接続のトラストマネージャーファクトリーによって使用されるアルゴリズム。デフォルト値は、Java 仮想マシンに設定されたトラストマネージャーファクトリーアルゴリズムです。 | PKIX | String |
| sslTruststoreLocation (セキュリティー) | トラストストアファイルの場所。 | String | |
| sslTruststorePassword (security) | トラストストアファイルのパスワード。 | String | |
| sslTruststoreType (セキュリティー) | トラストストアファイルのファイル形式。デフォルト値は JKS です。 | JKS | String |
| useGlobalSslContextParameters (security) | グローバル SSL コンテキストパラメーターの使用を有効にします。 | false | boolean |
27.4. エンドポイントオプション
Kafka エンドポイントは、URI 構文を使用して設定されます。
kafka:topic
パスおよびクエリーパラメーターを使用します。
27.4.1. パスパラメーター(1 パラメーター)
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| topic (共通) | 必須 使用するトピックの名前。コンシューマーでは、コンマを使用して複数のトピックを区切ることができます。プロデューサーは、1 つのトピックにのみメッセージを送信できます。 | String |
27.4.2. クエリーパラメーター (102 パラメーター)
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| additionalProperties (共通) | camel 設定で直接設定できない場合に備えて、kafka コンシューマーまたは kafka プロデューサーのいずれかに追加のプロパティーを設定します (例: Camel 設定にまだ反映されていない新しい Kafka プロパティー)。プロパティーには additionalProperties を接頭辞として付ける必要があります。たとえば、additionalProperties.transactional.id=12345&additionalProperties.schema.registry.url=http://localhost:8811/avro です。 | マップ | |
| brokers (共通) | 使用する Kafka ブローカーの URL。形式は host1:port1,host2:port2 で、リストはブローカーのサブセットまたはブローカーのサブセットを指す VIP にすることができます。このオプションは、Kafka ドキュメントでは bootstrap.servers として知られています。 | String | |
| clientId (共通) | クライアント ID は、呼び出しの追跡に役立つように、各要求で送信されるユーザー指定の文字列です。要求を行っているアプリケーションを論理的に識別する必要があります。 | String | |
| headerFilterStrategy (共通) | カスタムの HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルタリングします。 | HeaderFilterStrategy | |
| reconnectBackoffMaxMs (共通) | 接続に繰り返し失敗したブローカーへの再接続時に待機する最大時間 (ミリ秒単位)。これが指定されている場合、ホストごとのバックオフは、連続して接続に失敗するたびに、この最大値まで指数関数的に増加します。バックオフの増加を計算した後、コネクションストームを回避するために 20% のランダムなジッターが追加されます。 | 1000 | Integer |
| shutdownTimeout (共通) | コンシューマーまたはプロデューサがワーカースレッドをシャットダウンして終了するまで正常に待機するためのミリ秒単位のタイムアウト。 | 30000 | int |
| allowManualCommit (コンシューマー) | KafkaManualCommit による手動コミットを許可するかどうか。このオプションを有効にすると、KafkaManualCommit のインスタンスが Exchange メッセージヘッダーに格納されます。これにより、エンドユーザーはこの API にアクセスし、Kafka コンシューマーを介して手動でオフセットコミットを実行できます。 | false | boolean |
| autoCommitEnable (コンシューマー) | true の場合、コンシューマーによってすでにフェッチされているメッセージのオフセットを ZooKeeper に定期的にコミットします。このコミットされたオフセットは、プロセスが失敗したときに、新しいコンシューマーが開始される位置として使用されます。 | true | ブール値 |
| autoCommitIntervalMs (コンシューマー) | コンシューマーオフセットが Zookeeper にコミットされるミリ秒単位の頻度。 | 5000 | Integer |
| autoCommitOnStop (コンシューマー) | コンシューマーが停止したときに明示的な自動コミットを実行して、ブローカーが最後に消費されたメッセージからコミットされていることを確認するかどうか。これには、autoCommitEnable オプションをオンにする必要があります。可能な値は、sync、async、または none です。sync がデフォルト値です。 列挙値:
| sync | String |
| autoOffsetReset (consumer) | ZooKeeper に初期オフセットがない場合、またはオフセットが範囲外の場合の対処方法: Early : オフセットを最も古いオフセットに自動的にリセット latest : オフセットを最新のオフセットに自動的にリセット Fail: コンシューマーに例外を出力します。 列挙値:
| latest | String |
| breakOnFirstError (コンシューマー) | このオプションは、コンシューマーが交換を処理していて失敗した場合に何が起こるかを制御します。オプションが false の場合、コンシューマーは次のメッセージに進み、それを処理します。オプションが true の場合、コンシューマーは中断し、失敗の原因となったメッセージのオフセットに戻ってシークし、このメッセージの処理を再試行します。ただし、これは、たとえば有害なメッセージのように毎回失敗する場合、同じメッセージの無限の処理につながる可能性があります。したがって、Camel のエラーハンドラーを使用するなどして対処することをお勧めします。 | false | boolean |
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| checkCrcs (コンシューマー) | 消費されたレコードの CRC32 を自動的に確認します。これにより、メッセージのネットワーク上またはディスク上の破損が発生しなくなります。このチェックはオーバーヘッドを追加するため、極端なパフォーマンスを求める場合は無効になる可能性があります。 | true | ブール値 |
| commitTimeoutMs (consumer) | 同期コミットが完了するまでコードが待機する最大時間 (ミリ秒単位)。 | 5000 | Long |
| consumerRequestTimeoutMs (consumer) | この設定は、クライアントの要求の応答を待つ最大時間を制御します。タイムアウトが経過する前に応答が受信されない場合、クライアントは必要に応じてリクエストを再送信します。または、再試行が使い切られるとリクエストが失敗します。 | 40000 | Integer |
| consumersCount (コンシューマー) | kafka サーバーに接続するコンシューマーの数。各コンシューマーは、受信データを取得して処理する個別のスレッドで実行されます。 | 1 | int |
| fetchMaxBytes (コンシューマー) | サーバーがフェッチ要求に対して返す必要があるデータの最大量。これは絶対的な最大値ではありません。フェッチの最初の空でないパーティションの最初のメッセージがこの値よりも大きい場合でも、メッセージが返されて、コンシューマーは進歩することができます。ブローカーが受け入れる最大メッセージサイズは、message.max.bytes (ブローカー設定) または max.message.bytes (トピック設定) で定義されます。コンシューマーは複数のフェッチを並行して実行することに注意してください。 | 52428800 | Integer |
| fetchMinBytes (コンシューマー) | サーバーがフェッチ要求に対して返す必要のあるデータの最小量。利用可能なデータが不十分な場合、リクエストは、リクエストに応答する前に、十分なデータが蓄積されるのを待ちます。 | 1 | Integer |
| fetchWaitMaxMs (コンシューマー) | すぐに fetch.min.bytes を満たすのに十分なデータがない場合に、サーバーがフェッチ要求に応答する前にブロックする最大時間。 | 500 | Integer |
| groupId (コンシューマー) | このコンシューマーが属するコンシューマープロセスのグループを一意に識別する文字列。同じグループ ID を設定することにより、複数のプロセスはそれらがすべて同じコンシューマーグループの一部であることを示します。このオプションは、コンシューマーに必要です。 | String | |
| groupInstanceId (コンシューマー) | エンドユーザーが提供するコンシューマーインスタンスの一意の識別子。non-empty strings のみが許可されます。設定されている場合、コンシューマーは静的メンバーとして扱われます。つまり、常に、この ID を持つ 1 つのインスタンスのみがコンシューマーグループで許可されます。これは、より大きなセッションタイムアウトと組み合わせて使用して、一時的な利用不可 (プロセス再起動など) によるグループのリバランスを回避します。設定しないと、コンシューマーは従来の動作である動的メンバーとしてグループに参加します。 | String | |
| headerDeserializer (コンシューマー) | カスタム KafkaHeaderDeserializer を使用して、kafka ヘッダー値を逆シリアル化します。 | KafkaHeaderDeserializer | |
| heartbeatIntervalMs (コンシューマー) | Kafka のグループ管理機能を使用する場合の、ハートビートからコンシューマーコーディネーター間の想定される時間。ハートビートは、コンシューマーのセッションがアクティブな状態を維持し、新しいコンシューマーがグループに参加したり離脱したりする際のリバランスを促進するために使用されます。この値は session.timeout.ms よりも低く設定する必要がありますが、通常はその値の 1/3 以下に設定する必要があります。さらに低く調整することで、通常のリバランスの予想時間を制御することもできます。 | 3000 | Integer |
| keyDeserializer (コンシューマー) | Deserializer インターフェイスを実装する key の Deserializer クラス。 | org.apache.kafka.common.serialization.StringDeserializer | String |
| maxPartitionFetchBytes (コンシューマー) | サーバーが返すパーティションごとのデータの最大量。リクエストに使用される最大合計メモリーは #partitions max.partition.fetch.bytes になります。このサイズは、少なくともサーバーが許可する最大メッセージサイズと同じである必要があります。そうしないと、プロデューサーがコンシューマーがフェッチできるよりも大きなメッセージを送信する可能性があります。その場合、コンシューマーは特定のパーティションで大きなメッセージを取得しようとしてスタックする可能性があります。 | 1048576 | Integer |
| maxPollIntervalMs (コンシューマー) | コンシューマーグループ管理を使用する場合の poll() の呼び出し間の最大遅延。これにより、コンシューマーがさらにレコードをフェッチする前にアイドル状態になることができる時間に上限が設定されます。このタイムアウトの期限が切れる前に poll() が呼び出されない場合、コンシューマーは失敗とみなされ、グループはパーティションを別のメンバーに再割り当てするためにリバランスします。 | Long | |
| maxPollRecords (コンシューマー) | poll() への単一の呼び出しで返される最大レコード数。 | 500 | Integer |
| offsetRepository (コンシューマー) | トピックの各パーティションのオフセットをローカルに保存するために使用するオフセットリポジトリー。定義すると、自動コミットが無効になります。 | StateRepository | |
| partitionAssignor (コンシューマー) | グループ管理が使用されている場合に、クライアントがコンシューマーインスタンス間でパーティションの所有権を分散するために使用するパーティション割り当て戦略のクラス名。 | org.apache.kafka.clients.consumer.RangeAssignor | String |
| pollOnError (コンシューマー) | 新しいメッセージのポーリング中に、kafka が例外を出力した場合のアクション。エンドポイントレベルで明示的な値が設定されていない限り、デフォルトでコンポーネント設定の値が使用されます。DISCARD はメッセージを破棄し、次のメッセージのポーリングを続行します。ERROR_HANDLER は Camel のエラーハンドラーを使用して例外を処理し、その後、次のメッセージのポーリングを続行します。RECONNECT はコンシューマーに再接続し、メッセージのポーリングを再試行します RETRY はコンシューマーが同じメッセージのポーリングを再試行できるようにします STOP はコンシューマーを停止します (コンシューマーがメッセージを再び消費できるようにする必要がある場合は、手動で開始/再起動する必要があります)。 列挙値:
| ERROR_HANDLER | PollOnError |
| pollTimeoutMs (コンシューマー) | KafkaConsumer をポーリングするときに使用されるタイムアウト。 | 5000 | Long |
| resumeStrategy (コンシューマー) | このオプションを使用すると、ユーザーはカスタムの再開方法を設定できます。再開戦略は、パーティションが割り当てられたとき (つまり、接続時または再接続時) に実行されます。これにより、実装は操作を再開する方法をカスタマイズし、seekTo および offsetRepository メカニズムのより柔軟な代替手段として機能できます。実装の詳細については、KafkaConsumerResumeStrategy を参照してください。このオプションは、自動コミット設定には影響しません。この設定を使用する実装は、これと一緒に手動コミットオプションを使用して評価することも必要になる可能性があります。 | KafkaConsumerResumeStrategy | |
| seekTo (コンシューマー) | KafkaConsumer が起動時に最初または最後から読み取るかどうかを設定します。begin : 最初から読み取る end : 最後から読み取るこれは、以前のプロパティー seekToBeginning を置き換えています。 列挙値:
| String | |
| sessionTimeoutMs (コンシューマー) | Kafka のグループ管理機能を使用するときに障害を検出するために使用されるタイムアウト。 | 10000 | Integer |
| specificAvroReader (コンシューマー) | これにより、Confluent Platform スキーマレジストリーおよび io.confluent.kafka.serializers.KafkaAvroDeserializer で使用する特定の Avro リーダーを使用できるようになります。このオプションは、Confluent Platform (標準の Apache Kafka ではない) でのみ使用できます。 | false | boolean |
| topicIsPattern (コンシューマー) | トピックがパターン (正規表現) であるかどうか。これを使用して、パターンに一致する動的な数のトピックをサブスクライブできます。 | false | boolean |
| valueDeserializer (コンシューマー) | Deserializer インターフェイスを実装する値の Deserializer クラス。 | org.apache.kafka.common.serialization.StringDeserializer | String |
| exceptionHandler (コンシューマー (上級)) | コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
| exchangePattern (コンシューマー (上級)) | コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
| kafkaManualCommitFactory (コンシューマー (上級)) | KafkaManualCommit インスタンスの作成に使用するファクトリー。これにより、カスタムファクトリーをプラグインしてカスタム KafkaManualCommit インスタンスを作成できます。これは、すぐに使用できるデフォルトの実装から逸脱する手動コミットを行うときに特別なロジックが必要な場合に備えています。 | KafkaManualCommitFactory | |
| bufferMemorySize (プロデューサー) | プロデューサーが、サーバーへの送信を待機しているレコードをバッファーリングするために使用できるメモリーの合計バイト数。レコードがサーバーに配信されるよりも速く送信された場合、プロデューサはブロックするか、block.on.buffer.full で指定された設定に基づいて例外を出力します。この設定は、プロデューサが使用する合計メモリーにほぼ対応する必要があります。ただし、プロデューサが使用するすべてのメモリーがバッファーリングに使用されるわけではないため、ハードバウンドではありません。一部の追加メモリーは、圧縮 (圧縮が有効な場合) やインフライトリクエストの維持に使用されます。 | 33554432 | Integer |
| compressionCodec (producer) | このパラメーターを使用すると、このプロデューサーによって生成されるすべてのデータの圧縮コーデックを指定できます。有効な値は none、gzip、snappy です。 列挙値:
| none | String |
| connectionMaxIdleMs (プロデューサー) | この設定で指定された期間 (ミリ秒単位) の後にアイドル状態の接続を閉じます。 | 540000 | Integer |
| deliveryTimeoutMs (producer) | send() の呼び出しが返された後、成功または失敗を報告する時間の上限。これにより、送信前にレコードが遅延する合計時間、ブローカーから確認応答を待つ時間 (予想される場合)、および再試行可能な送信の失敗に許容される時間が制限されます。 | 120000 | Integer |
| enableIdempotence (プロデューサー) | 'true' に設定すると、プロデューサーは、プロデューサーは各メッセージのコピーが 1 つだけストリームに書き込まれるようにします。false の場合、プロデューサの再試行により、再試行されたメッセージの複製がストリームに書き込まれる可能性があります。true に設定した場合、このオプションでは max.in.flight.requests.per.connection を 1 に設定する必要があり、再試行をゼロにすることはできず、さらに ack を all に設定する必要があります。 | false | boolean |
| headerSerializer (プロデューサー) | カスタム KafkaHeaderSerializer を使用して、kafka ヘッダー値をシリアル化します。 | KafkaHeaderSerializer | |
| key (プロデューサー) | レコードキー (キーが指定されていない場合は null)。このオプションが設定されている場合、ヘッダー KafkaConstants#KEY よりも優先されます。 | String | |
| keySerializer (プロデューサー) | キーのシリアライザクラス (何も指定されていない場合、デフォルトはメッセージと同じになります)。 | org.apache.kafka.common.serialization.StringSerializer | String |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| lingerMs (プロデューサー) | プロデューサーは、リクエストの送信の間に到着したレコードを 1 つのバッチリクエストにグループ化します。通常、これは、レコードが送信できるよりも早く到着した場合に、負荷がかかった状態でのみ発生します。ただし、状況によっては、中程度の負荷がかかっている場合でも、クライアントがリクエストの数を減らす場合があります。この設定は、少量の人為的な遅延を追加することでこれを実現します。つまり、レコードをすぐに送信するのではなく、プロデューサーは指定された遅延まで待機して他のレコードを送信できるようにし、送信をまとめてバッチ処理できるようにします。これは、TCP の Nagle アルゴリズムに類似するものと考えることができます。この設定は、バッチ処理の遅延の上限を提供します。あるパーティションで batch.size 相当のレコードを取得すると、この設定に関係なくすぐに送信されますが、このパーティションで蓄積されたバイト数がこれより少ない場合は、指定された時間の間、さらにレコードが取得されるのを待つことになります。デフォルトは 0 (つまり遅延なし) に設定されます。たとえば、linger.ms=5 を設定すると、送信されるリクエストの数が減りますが、負荷がない状態で送信されるレコードに最大 5 ミリ秒のレイテンシーが追加されます。 | 0 | Integer |
| maxBlockMs (プロデューサー) | 設定は、kafka への送信がブロックされる時間を制御します。これらのメソッドは、複数の理由でブロックされる可能性があります。例: バッファーがいっぱい、メタデータが利用できない。この設定では、メタデータのフェッチ、キーと値のシリアル化、send () を実行するときのバッファーメモリーの分割と割り当てに費やされる合計時間に最大制限が課されます。partitionsFor () の場合、この設定はメタデータの待機に最大時間のしきい値を課します。 | 60000 | Integer |
| maxInFlightRequest (プロデューサー) | ブロックする前にクライアントが 1 つの接続で送信する確認されていないリクエストの最大数。この設定が 1 より大きい値に設定されていて、送信に失敗した場合、再試行によりメッセージの順序が変更されるリスクがあることに注意してください (つまり、再試行が有効になっている場合)。 | 5 | Integer |
| maxRequestSize (プロデューサー) | リクエストの最大サイズ。これは事実上、最大レコードサイズの上限でもあります。サーバーには、これとは異なる場合がある独自のレコードサイズの上限があることに注意してください。この設定により、プロデューサーが 1 回のリクエストで送信するレコードバッチの数が制限され、大量のリクエストが送信されないようになります。 | 1048576 | Integer |
| metadataMaxAgeMs (プロデューサー) | 新しいブローカーまたはパーティションをプロアクティブに検出するためのパーティションリーダーシップの変更がない場合でも、メタデータの更新を強制するまでの期間 (ミリ秒単位)。 | 300000 | Integer |
| metricReporters (プロデューサー) | メトリクスレポーターとして使用するクラスの一覧。MetricReporter インターフェイスを実装すると、新しいメトリックの作成が通知されるクラスをプラグインできます。JmxReporter は、JMX 統計を登録するために常に含まれます。 | String | |
| metricsSampleWindowMs (producer) | メトリクスを計算するために保持されるサンプルの数。 | 30000 | Integer |
| noOfMetricsSample (producer) | メトリクスを計算するために保持されるサンプルの数。 | 2 | Integer |
| partitioner (プロデューサー) | サブトピック間でメッセージを分割するパーティショナークラス。デフォルトのパーティショナーは、キーのハッシュに基づいています。 | org.apache.kafka.clients.producer.internals.DefaultPartitioner | String |
| partitionKey (プロデューサー) | レコードの送信先のパーティション (パーティションが指定されていない場合は null)。このオプションが設定されている場合、ヘッダー KafkaConstants#PARTITION_KEY よりも優先されます。 | Integer | |
| producerBatchSize (プロデューサー) | 複数のレコードが同じパーティションに送信されるときは常に、プロデューサーはレコードをまとめてより少ない要求にバッチ処理しようとします。これにより、クライアントとサーバーの両方でパフォーマンスが向上します。この設定では、デフォルトのバッチサイズをバイト単位で制御します。このサイズより大きいバッチレコードは試行されません。ブローカーに送信されるリクエストには、複数のバッチが含まれ、送信可能なデータを含む各パーティションに 1 つずつ含まれます。バッチサイズが小さいと、バッチ処理が一般的ではなくなり、スループット (バッチサイズゼロの場合、バッチ処理が完全に無効になります)。バッチサイズが非常に大きい場合は、追加のレコードを想定して、常に指定のバッチサイズのバッファーを割り当てるため、メモリーを多少無駄に使用する可能性があります。 | 16384 | Integer |
| queueBufferingMaxMessages (producer) | プロデューサをブロックするか、データを削除する前に、非同期モードを使用するときにプロデューサのキューに入れることができる未送信メッセージの最大数。 | 10000 | Integer |
| receiveBufferBytes (プロデューサー) | データの読み取り時に使用する TCP 受信バッファー (SO_RCVBUF) のサイズ。 | 65536 | Integer |
| reconnectBackoffMs (プロデューサー) | 特定のホストへの再接続を試行するまでの待機時間。これにより、タイトなループでホストに繰り返し接続することを回避します。このバックオフは、コンシューマーからブローカーに送信されるすべてのリクエストに適用されます。 | 50 | Integer |
| recordMetadata (producer) | プロデューサが Kafka への送信から RecordMetadata の結果を保存する必要があるかどうか。結果は、RecordMetadata メタデータを含む List に保存されます。リストは、キー KafkaConstants#KAFKA_RECORDMETA を持つヘッダーに保存されます。 | true | boolean |
| requestRequiredAcks (プロデューサー) | リクエストが完了したと見なす前に、プロデューサーがリーダーに受け取ったことを要求する確認の数。これは、送信されるレコードの耐久性を制御します。次の設定が一般的です: acks=0 ゼロに設定すると、プロデューサはサーバーからの確認をまったく待ちません。レコードは直ちにソケットバッファーに追加され、送信済みと見なされます。この場合、サーバーがレコードを受信したかどうかは保証されず、retries の設定は有効になりません (クライアントは通常、失敗を知ることができないからです)。各レコードに返されるオフセットは常に -1 に設定されます。acks=1 これは、リーダーがレコードをローカルログに書き込みますが、すべてのフォロワーからの完全な承認を待たずに応答することを意味します。この場合、レコードを承認した直後にリーダーが失敗したが、フォロワーがそれを複製する前に、レコードは失われます。acks=all これは、リーダーが同期レプリカの完全なセットがレコードを承認するまで待機することを意味します。これにより、少なくとも 1 つの In-Sync レプリカが動作している限り、レコードが失われないことが保証されます。これは利用可能な最強の保証になります。 列挙値:
| 1 | String |
| requestTimeoutMs (プロデューサー) | クライアントにエラーを返す前に、ブローカーが request.required.acks 要件を満たすために待機する時間。 | 30000 | Integer |
| retries (プロデューサー) | ゼロより大きい値を設定すると、クライアントは、一時的なエラーの可能性により送信に失敗したレコードを再送信します。この再試行は、クライアントがエラーを受信したときにレコードを再送した場合と同じであることに注意してください。再試行を許可すると、レコードの順序が変更される可能性があります。これは、2 つのレコードが 1 つのパーティションに送信され、最初のレコードが失敗して再試行され、2 番目のレコードが成功した場合、2 番目のレコードが最初に表示される可能性があるためです。 | 0 | Integer |
| retryBackoffMs (プロデューサー) | 各再試行の前に、プロデューサーは関連するトピックのメタデータを更新して、新しいリーダーが選出されたかどうかを確認します。リーダーの選択には少し時間がかかるため、このプロパティーはプロデューサーがメタデータを更新するまで待機する時間を指定します。 | 100 | Integer |
| sendBufferBytes (プロデューサー) | ソケット書き込みバッファーサイズ。 | 131072 | Integer |
| valueSerializer (プロデューサー) | メッセージのシリアライザクラス。 | org.apache.kafka.common.serialization.StringSerializer | String |
| workerPool (プロデューサー) | カスタムワーカープールを使用して、kafka サーバーが非同期のノンブロッキング処理を使用して KafkaProducer から送信されたメッセージを確認した後、Exchange のルーティングを続行します。このオプションを使用する場合は、スレッドプールのライフサイクルを処理して、不要になったときにプールをシャットダウンする必要があります。 | ExecutorService | |
| workerPoolCoreSize (プロデューサー) | Kafka サーバーが非同期のノンブロッキング処理を使用して KafkaProducer から送信されたメッセージを確認した後、Exchange のルーティングを続行するためのワーカープールのコアスレッドの数。 | 10 | Integer |
| workerPoolMaxSize (プロデューサー) | 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 インターセプターは org.apache.kafka.clients.producer.ProducerInterceptor を実装するクラスでなければなりません Consumer インターセプターは org.apache.kafka.clients.consumer.ConsumerInterceptor を実装するクラスでなければなりません実行時のクラスキャスト例外。 | String | |
| kerberosBeforeReloginMinTime (セキュリティー) | 更新試行間のログインスレッドのスリープ時間。 | 60000 | Integer |
| kerberosInitCmd (セキュリティー) | Kerberos kinit コマンドパス。デフォルトは/usr/bin/kinit です。 | /usr/bin/kinit | String |
| kerberosPrincipalToLocalRules (セキュリティー) | プリンシパル名から短縮名 (通常はオペレーティングシステムのユーザー名) にマッピングするためのルールの一覧です。ルールは順番に評価され、プリンシパル名と一致する最初のルールは、これを短縮名にマップするために使用されます。一覧の後続のルールは無視されます。デフォルトでは、{username}/{hostname}{REALM} 形式のプリンシパル名は {username} にマッピングされます。形式の詳細については、セキュリティー認証と ACL のドキュメントを参照してください。複数の値はコンマで区切ることができます。 | DEFAULT | String |
| kerberosRenewJitter (セキュリティー) | 更新時間に追加されたランダムなジッターの割合。 | 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 (セキュリティー) | 使用される Simple Authentication and Security Layer(SASL) メカニズム。有効な値については、を参照してください。 | GSSAPI | String |
| securityProtocol (セキュリティー) | ブローカーとの通信に使用されるプロトコル。SASL_PLAINTEXT、PLAINTEXT、および SSL がサポートされています。 | PLAINTEXT | String |
| sslCipherSuites (セキュリティー) | 暗号化スイートの一覧。これは、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 (セキュリティー) | サーバー証明書を使用してサーバーのホスト名を検証するエンドポイント識別アルゴリズム。 | https | String |
| sslKeymanagerAlgorithm (セキュリティー) | SSL 接続のキーマネージャーファクトリーによって使用されるアルゴリズム。デフォルト値は、Java 仮想マシンに設定されたキーマネージャーファクトリーアルゴリズムです。 | SunX509 | String |
| sslKeyPassword (security) | キーストアファイル内の秘密キーのパスワード。これはクライアントにとってオプションになります。 | String | |
| sslKeystoreLocation (セキュリティー) | キーストアファイルの場所。これはクライアントではオプションで、クライアントの双方向認証に使用できます。 | String | |
| sslKeystorePassword (security) | キーストアファイルのストアパスワード。これはクライアントのオプションであり、ssl.keystore.location が設定されている場合にのみ必要です。 | String | |
| sslKeystoreType (セキュリティー) | キーストアファイルのファイル形式。これはクライアントにとってオプションになります。デフォルト値は JKS です。 | JKS | String |
| sslProtocol (セキュリティー) | SSLContext の生成に使用される SSL プロトコル。デフォルト設定は TLS で、ほとんどの場合はこれで問題ありません。最近の JVM で許可されている値は、TLS、TLSv1.1、および TLSv1.2 です。SSL、SSLv2、および SSLv3 は古い JVM でサポートされている可能性がありますが、セキュリティーの脆弱性が知られているため、それらの使用はお勧めできません。 | String | |
| sslProvider (セキュリティー) | SSL 接続に使用されるセキュリティープロバイダーの名前。デフォルト値は JVM のデフォルトのセキュリティープロバイダーです。 | String | |
| sslTrustmanagerAlgorithm (セキュリティー) | SSL 接続のトラストマネージャーファクトリーによって使用されるアルゴリズム。デフォルト値は、Java 仮想マシンに設定されたトラストマネージャーファクトリーアルゴリズムです。 | PKIX | String |
| sslTruststoreLocation (セキュリティー) | トラストストアファイルの場所。 | String | |
| sslTruststorePassword (security) | トラストストアファイルのパスワード。 | String | |
| sslTruststoreType (セキュリティー) | トラストストアファイルのファイル形式。デフォルト値は JKS です。 | JKS | String |
Producer/Consumer 設定の詳細については、以下を参照してください。
27.5. メッセージヘッダー
27.5.1. コンシューマーヘッダー
次のヘッダーは、Kafka からのメッセージを使用するときに使用できます。
| ヘッダー定数 | ヘッダーの値 | タイプ | 説明 |
|---|---|---|---|
|
|
|
| メッセージの発信元のトピック |
|
|
|
| メッセージが格納されたパーティション |
|
|
|
| メッセージのオフセット |
|
|
|
| メッセージのキー (設定されている場合) |
|
|
|
| レコードのヘッダー |
|
|
|
|
コミット前の最後のレコードかどうか ( |
|
|
|
|
現在のポーリングリクエスト内の最後のレコードを示します ( |
|
|
|
| Kafka コンシューマーを使用する場合に手動オフセットコミットを強制するために使用できます。 |
27.5.2. プロデューサーヘッダー
メッセージを Kafka に送信する前に、次のヘッダーを設定できます。
| ヘッダー定数 | ヘッダーの値 | タイプ | 説明 |
|---|---|---|---|
|
|
|
| 必須 すべての関連メッセージが同じパーティションに入るようにするためのメッセージのキー |
|
|
|
| メッセージの送信先のトピック (オーバーライドおよび優先)、およびヘッダーは保持されません。 |
|
|
|
| ProducerRecord には、関連付けられたタイムスタンプもあります。ユーザーがタイムスタンプを提供した場合、プロデューサーは提供されたタイムスタンプをレコードにスタンプし、ヘッダーは保持されません。 |
|
|
|
| パーティションを明示的に指定する |
動的トピックにメッセージを送信する場合は、KafkaConstants.OVERRIDE_TOPIC を、プロデューサーで削除されるため、メッセージに沿って送信されないワンタイムヘッダーとして使用します。
メッセージが Kafka に送信された後、次のヘッダーを使用できます
| ヘッダー定数 | ヘッダーの値 | タイプ | 説明 |
|---|---|---|---|
|
|
|
|
メタデータ ( |
27.6. コンシューマーエラー処理
kafka コンシューマーが kafka ブローカーからのメッセージをポーリングしている間、エラーが発生する可能性があります。このセクションでは、何が起こるか、何を設定できるかについて説明します。
Kafka poll API を呼び出すときに、コンシューマーが例外を出力する場合があります。たとえば、無効なデータやその他の多くの種類のエラーが原因でメッセージをデシリアライズできない場合です。これらのエラーは、再試行 可能 かどうかのいずれかである KafkaException の形式です。再試行できる例外 (RetriableException) は、再試行されます (その間にポーリングタイムアウトがあります)。他のすべての種類の例外は、pollOnError 設定に従って処理されます。この設定には次の値があります。
- DISCARD はメッセージを破棄し、次のメッセージのポーリングを続行します。
- ERROR_HANDLER は Camel のエラーハンドラーを使用して例外を処理し、その後、次のメッセージのポーリングを続行します。
- RECONNECT はコンシューマーに再接続し、メッセージのポーリングを再試行します。
- RETRY を使用すると、コンシューマーは同じメッセージのポーリングを再試行できます
- STOP はコンシューマーを停止します (コンシューマーがメッセージを再度消費できるようにする必要がある場合は、手動で開始/再起動する必要があります)。
デフォルトは 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 トピックに保存し、イベントソーシングを通じて各リポジトリーのプロセスインスタンスのローカルインメモリーキャッシュにデータを取り込みます。使用されるトピックは、べき等リポジトリーインスタンスごとに一意である必要があります。
このメカニズムには、トピックパーティションの数に関する要件はありません。リポジトリーがすべてのパーティションから同時に消費するためです。また、トピックのレプリケーションファクターに関する要件もありません。
トピックを使用する各リポジトリーインスタンス (通常、並行して実行されている異なるマシン上) は独自のコンシューマーグループを制御するため、同じトピックを使用する 10 個の Camel プロセスのクラスターでは、それぞれが独自のオフセットを制御します。
起動時に、インスタンスはトピックにサブスクライブし、オフセットを先頭に巻き戻し、キャッシュを最新の状態に再構築します。pollDurationMs の長さの 1 つのポーリングで 0 レコードが返されるまで、キャッシュはウォームアップされたと見なされません。キャッシュがウォームアップするか、30 秒経過するまで、起動は完了しません。後者の場合、コンシューマーがトピックの最後に追いつくまで、冪等リポジトリーは一貫性のない状態になる可能性があります。
一意性チェックに使用されるヘッダーの形式に注意してください。デフォルトでは、文字列をデータ型として使用します。プリミティブな数値形式を使用する場合、それに応じてヘッダーを逆シリアル化する必要があります。例については、以下のサンプルを確認してください。
KafkaIdempotentRepository には次のプロパティーがあります。
| プロパティー | 説明 |
|---|---|
|
| 変更をブロードキャストするために使用する Kafka トピックの名前。(必要) |
|
|
内部 Kafka プロデューサーおよびコンシューマーの |
|
|
変更をブロードキャストする Kafka プロデューサーによって使用されるプロパティーを設定します。 |
|
|
トピックからキャッシュを設定する Kafka コンシューマーによって使用されるプロパティーを設定します。 |
|
| 最近使用したキーをメモリーに保存する数 (デフォルトは 1000)。 |
|
|
Kafka コンシューマーのポーリング期間。ローカルキャッシュはすぐに更新されます。この値は、トピックからキャッシュを更新する他のピアが、キャッシュアクションメッセージを送信した冪等のコンシューマーインスタンスと比べてどれだけ遅れているかに影響します。このデフォルト値は 100 ミリ秒です。 |
topic と bootstrapServers を定義してリポジトリーをインスタンス化するか、または producerConfig および consumerConfig プロパティーセットを明示的に定義して、SSL/SASL などの機能を有効にすることができます。使用するには、CamelContext に対応しているため、手動で、または Spring/Blueprint で Bean として登録することにより、このリポジトリーを Camel レジストリーに配置する必要があります。
使用例は次のとおりです。
KafkaIdempotentRepository kafkaIdempotentRepository = new KafkaIdempotentRepository("idempotent-db-inserts", "localhost:9091");
SimpleRegistry registry = new SimpleRegistry();
registry.put("insertDbIdemRepo", kafkaIdempotentRepository); // must be registered in the registry, to enable access to the CamelContext
CamelContext context = new CamelContext(registry);
// later in RouteBuilder...
from("direct:performInsert")
.idempotentConsumer(header("id")).messageIdRepositoryRef("insertDbIdemRepo")
// once-only insert into database
.end()XML の場合:
<!-- simple -->
<bean id="insertDbIdemRepo"
class="org.apache.camel.processor.idempotent.kafka.KafkaIdempotentRepository">
<property name="topic" value="idempotent-db-inserts"/>
<property name="bootstrapServers" value="localhost:9091"/>
</bean>
<!-- complex -->
<bean id="insertDbIdemRepo"
class="org.apache.camel.processor.idempotent.kafka.KafkaIdempotentRepository">
<property name="topic" value="idempotent-db-inserts"/>
<property name="maxCacheSize" value="10000"/>
<property name="consumerConfig">
<props>
<prop key="bootstrap.servers">localhost:9091</prop>
</props>
</property>
<property name="producerConfig">
<props>
<prop key="bootstrap.servers">localhost:9091</prop>
</props>
</property>
</bean>
数値識別子でべき等性を使用する場合は、3 つの選択肢から選択できます。1 つ目は、org.apache.camel.component.kafka.serde.KafkaSerdeHelper の静的メソッド numericHeader メソッドを使用して変換を実行することです。
from("direct:performInsert")
.idempotentConsumer(numericHeader("id")).messageIdRepositoryRef("insertDbIdemRepo")
// once-only insert into database
.end()または、ルート URL を介して設定されたカスタムシリアライザーを使用して変換を実行することもできます。
public class CustomHeaderDeserializer extends DefaultKafkaHeaderDeserializer {
private static final Logger LOG = LoggerFactory.getLogger(CustomHeaderDeserializer.class);
@Override
public Object deserialize(String key, byte[] value) {
if (key.equals("id")) {
BigInteger bi = new BigInteger(value);
return String.valueOf(bi.longValue());
} else {
return super.deserialize(key, value);
}
}
}最後に、プロセッサーでこれを行うこともできます。
from(from).routeId("foo")
.process(exchange -> {
byte[] id = exchange.getIn().getHeader("id", byte[].class);
BigInteger bi = new BigInteger(id);
exchange.getIn().setHeader("id", String.valueOf(bi.longValue()));
})
.idempotentConsumer(header("id"))
.messageIdRepositoryRef("kafkaIdempotentRepository")
.to(to);27.10. Kafka コンシューマーでの手動コミットの使用
デフォルトでは、Kafka コンシューマーは自動コミットを使用します。オフセットは、指定された間隔を使用してバックグラウンドで自動的にコミットされます。
手動コミットを強制する場合は、メッセージヘッダーに保存されている Camel Exchange の KafkaManualCommit API を使用できます。これには、KafkaComponent またはエンドポイントでオプション allowManualCommit を true に設定して、手動コミットを有効にする必要があります。次に例を示します。
KafkaComponent kafka = new KafkaComponent();
kafka.setAllowManualCommit(true);
...
camelContext.addComponent("kafka", kafka);
その後、Camel Processor などの Java コードから KafkaManualCommit を使用できます。
public void process(Exchange exchange) {
KafkaManualCommit manual =
exchange.getIn().getHeader(KafkaConstants.MANUAL_COMMIT, KafkaManualCommit.class);
manual.commit();
}
これにより、同期コミットが強制され、Kafka でコミットが確認されるまでブロックされるか、失敗した場合は例外が出力されます。KafkaManualCommitFactory を `DefaultKafkaManualAsyncCommitFactory` 実装で設定することにより、非同期コミットも使用できます。
その後、kafka 非同期コミット API を使用して、次のコンシューマーループでコミットが行われます。パーティションからのレコードは、一意のスレッドによって処理およびコミットする必要があることに注意してください。そうでない場合、一貫性のない動作が発生する可能性があります。これは、集約の完了タイムアウト戦略で最も役立ちます。
KafkaManualCommit のカスタム実装を使用する場合は、カスタム実装のインスタンスを作成する KafkaComponent でカスタム KafkaManualCommitFactory を設定できます。
27.11. Kafka ヘッダーの伝播
Kafka からメッセージを消費する場合、ヘッダーは camel exchange ヘッダーに自動的に伝播されます。同じ動作に裏打ちされたフローの生成 - 特定の交換のキャメルヘッダーは、kafka メッセージヘッダーに伝達されます。
kafka ヘッダーは byte[] 値のみを許可するため、camel exchange ヘッダーを伝播するには、その値を bytes[] にシリアル化する必要があります。そうしないと、ヘッダーはスキップされます。次のヘッダー値タイプがサポートされています: String、Integer、Long、Double、Boolean、byte[]。注: kafka から camel exchange に 伝播されるすべてのヘッダーには、デフォルトで byte[] 値が含まれます。デフォルトの機能をオーバーライドするために、URI パラメーターを設定できます。ルート から の headerDeserializer と ルートへの headerSerializer です。以下に例を示します。
from("kafka:my_topic?headerDeserializer=#myDeserializer")
...
.to("kafka:my_topic?headerSerializer=#mySerializer")
デフォルトでは、すべてのヘッダーが KafkaHeaderFilterStrategy によってフィルタリングされています。Strategy は、Camel または org.apache.camel 接頭辞で始まるヘッダーを除外します。デフォルトの戦略は、to ルートと from ルートの両方で headerFilterStrategy uri パラメーターを使用してオーバーライドできます。
from("kafka:my_topic?headerFilterStrategy=#myStrategy")
...
.to("kafka:my_topic?headerFilterStrategy=#myStrategy")
myStrategy オブジェクトは HeaderFilterStrategy のサブクラスである必要があり、CamelContext に対応しているため、手動で、または Spring/Blueprint で Bean として登録することにより、Camel レジストリーに配置する必要があります。
27.12. Spring Boot Auto-Configuration
Spring Boot で jira を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-kafka-starter</artifactId> <version>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に記載される 105 のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| camel.component.kafka.additional-properties | camel 設定で直接設定できない場合に備えて、kafka コンシューマーまたは kafka プロデューサーのいずれかに追加のプロパティーを設定します (例: 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 コンシューマーを介して手動でオフセットコミットを実行できます。 | false | ブール値 |
| camel.component.kafka.auto-commit-enable | true の場合、コンシューマーによってすでにフェッチされているメッセージのオフセットを ZooKeeper に定期的にコミットします。このコミットされたオフセットは、プロセスが失敗したときに、新しいコンシューマーが開始される位置として使用されます。 | true | ブール値 |
| camel.component.kafka.auto-commit-interval-ms | コンシューマーオフセットが Zookeeper にコミットされるミリ秒単位の頻度。 | 5000 | Integer |
| camel.component.kafka.auto-commit-on-stop | コンシューマーが停止したときに明示的な自動コミットを実行して、ブローカーが最後に消費されたメッセージからコミットされていることを確認するかどうか。これには、autoCommitEnable オプションをオンにする必要があります。可能な値は、sync、async、または none です。sync がデフォルト値です。 | sync | String |
| camel.component.kafka.auto-offset-reset | ZooKeeper に初期オフセットがない場合、またはオフセットが範囲外の場合の対処方法: Early : オフセットを最も古いオフセットに自動的にリセット latest : オフセットを最新のオフセットに自動的にリセット Fail: コンシューマーに例外を出力します。 | latest | String |
| camel.component.kafka.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | ブール値 |
| camel.component.kafka.break-on-first-error | このオプションは、コンシューマーが交換を処理していて失敗した場合に何が起こるかを制御します。オプションが false の場合、コンシューマーは次のメッセージに進み、それを処理します。オプションが true の場合、コンシューマーは中断し、失敗の原因となったメッセージのオフセットに戻ってシークし、このメッセージの処理を再試行します。ただし、これは、たとえば有害なメッセージのように毎回失敗する場合、同じメッセージの無限の処理につながる可能性があります。したがって、Camel のエラーハンドラーを使用するなどして対処することをお勧めします。 | false | ブール値 |
| camel.component.kafka.bridge-error-handler | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | ブール値 |
| camel.component.kafka.brokers | 使用する Kafka ブローカーの URL。形式は host1:port1,host2:port2 で、リストはブローカーのサブセットまたはブローカーのサブセットを指す VIP にすることができます。このオプションは、Kafka ドキュメントでは bootstrap.servers として知られています。 | String | |
| camel.component.kafka.buffer-memory-size | プロデューサーが、サーバーへの送信を待機しているレコードをバッファーリングするために使用できるメモリーの合計バイト数。レコードがサーバーに配信されるよりも速く送信された場合、プロデューサはブロックするか、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 | このパラメーターを使用すると、このプロデューサーによって生成されるすべてのデータの圧縮コーデックを指定できます。有効な値は 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 サーバーに接続するコンシューマーの数。各コンシューマーは、受信データを取得して処理する個別のスレッドで実行されます。 | 1 | Integer |
| camel.component.kafka.delivery-timeout-ms | send() の呼び出しが返された後、成功または失敗を報告する時間の上限。これにより、送信前にレコードが遅延する合計時間、ブローカーから確認応答を待つ時間 (予想される場合)、および再試行可能な送信の失敗に許容される時間が制限されます。 | 120000 | Integer |
| camel.component.kafka.enable-idempotence | 'true' に設定すると、プロデューサーは、プロデューサーは各メッセージのコピーが 1 つだけストリームに書き込まれるようにします。false の場合、プロデューサの再試行により、再試行されたメッセージの複製がストリームに書き込まれる可能性があります。true に設定した場合、このオプションでは max.in.flight.requests.per.connection を 1 に設定する必要があり、再試行をゼロにすることはできず、さらに ack を all に設定する必要があります。 | false | ブール値 |
| camel.component.kafka.enabled | kafka コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | ブール値 | |
| camel.component.kafka.fetch-max-bytes | サーバーがフェッチ要求に対して返す必要があるデータの最大量。これは絶対的な最大値ではありません。フェッチの最初の空でないパーティションの最初のメッセージがこの値よりも大きい場合でも、メッセージが返されて、コンシューマーは進歩することができます。ブローカーが受け入れる最大メッセージサイズは、message.max.bytes (ブローカー設定) または max.message.bytes (トピック設定) で定義されます。コンシューマーは複数のフェッチを並行して実行することに注意してください。 | 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 | このコンシューマーが属するコンシューマープロセスのグループを一意に識別する文字列。同じグループ ID を設定することにより、複数のプロセスはそれらがすべて同じコンシューマーグループの一部であることを示します。このオプションは、コンシューマーに必要です。 | String | |
| camel.component.kafka.group-instance-id | エンドユーザーが提供するコンシューマーインスタンスの一意の識別子。non-empty strings のみが許可されます。設定されている場合、コンシューマーは静的メンバーとして扱われます。つまり、常に、この ID を持つ 1 つのインスタンスのみがコンシューマーグループで許可されます。これは、より大きなセッションタイムアウトと組み合わせて使用して、一時的な利用不可 (プロセス再起動など) によるグループのリバランスを回避します。設定しないと、コンシューマーは従来の動作である動的メンバーとしてグループに参加します。 | 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 のグループ管理機能を使用する場合の、ハートビートからコンシューマーコーディネーター間の想定される時間。ハートビートは、コンシューマーのセッションがアクティブな状態を維持し、新しいコンシューマーがグループに参加したり離脱したりする際のリバランスを促進するために使用されます。この値は session.timeout.ms よりも低く設定する必要がありますが、通常はその値の 1/3 以下に設定する必要があります。さらに低く調整することで、通常のリバランスの予想時間を制御することもできます。 | 3000 | Integer |
| camel.component.kafka.interceptor-classes | プロデューサーまたはコンシューマーのインターセプターを設定します。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 | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | ブール値 |
| camel.component.kafka.linger-ms | プロデューサーは、リクエストの送信の間に到着したレコードを 1 つのバッチリクエストにグループ化します。通常、これは、レコードが送信できるよりも早く到着した場合に、負荷がかかった状態でのみ発生します。ただし、状況によっては、中程度の負荷がかかっている場合でも、クライアントがリクエストの数を減らす場合があります。この設定は、少量の人為的な遅延を追加することでこれを実現します。つまり、レコードをすぐに送信するのではなく、プロデューサーは指定された遅延まで待機して他のレコードを送信できるようにし、送信をまとめてバッチ処理できるようにします。これは、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 になります。このサイズは、少なくともサーバーが許可する最大メッセージサイズと同じである必要があります。そうしないと、プロデューサーがコンシューマーがフェッチできるよりも大きなメッセージを送信する可能性があります。その場合、コンシューマーは特定のパーティションで大きなメッセージを取得しようとしてスタックする可能性があります。 | 1048576 | Integer |
| camel.component.kafka.max-poll-interval-ms | コンシューマーグループ管理を使用する場合の poll() の呼び出し間の最大遅延。これにより、コンシューマーがさらにレコードをフェッチする前にアイドル状態になることができる時間に上限が設定されます。このタイムアウトの期限が切れる前に poll() が呼び出されない場合、コンシューマーは失敗とみなされ、グループはパーティションを別のメンバーに再割り当てするためにリバランスします。オプションは java.lang.Long 型です。 | Long | |
| camel.component.kafka.max-poll-records | poll() への単一の呼び出しで返される最大レコード数。 | 500 | Integer |
| camel.component.kafka.max-request-size | リクエストの最大サイズ。これは事実上、最大レコードサイズの上限でもあります。サーバーには、これとは異なる場合がある独自のレコードサイズの上限があることに注意してください。この設定により、プロデューサーが 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 | グループ管理が使用されている場合に、クライアントがコンシューマーインスタンス間でパーティションの所有権を分散するために使用するパーティション割り当て戦略のクラス名。 | 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 | コンシューマーでカスタム戦略を使用して、メッセージのプール中に Kafka ブローカーから出力された例外の処理方法を制御します。オプションは org.apache.camel.component.kafka.PollExceptionStrategy タイプです。 | PollExceptionStrategy | |
| camel.component.kafka.poll-on-error | 新しいメッセージのポーリング中に、kafka が例外を出力した場合のアクション。エンドポイントレベルで明示的な値が設定されていない限り、デフォルトでコンポーネント設定の値が使用されます。DISCARD はメッセージを破棄し、次のメッセージのポーリングを続行します。ERROR_HANDLER は Camel のエラーハンドラーを使用して例外を処理し、その後、次のメッセージのポーリングを続行します。RECONNECT はコンシューマーに再接続し、メッセージのポーリングを再試行します RETRY はコンシューマーが同じメッセージのポーリングを再試行できるようにします STOP はコンシューマーを停止します (コンシューマーがメッセージを再び消費できるようにする必要がある場合は、手動で開始/再起動する必要があります)。 | PollOnError | |
| camel.component.kafka.poll-timeout-ms | KafkaConsumer をポーリングするときに使用されるタイムアウト。オプションは java.lang.Long 型です。 | 5000 | Long |
| camel.component.kafka.producer-batch-size | 複数のレコードが同じパーティションに送信されるときは常に、プロデューサーはレコードをまとめてより少ない要求にバッチ処理しようとします。これにより、クライアントとサーバーの両方でパフォーマンスが向上します。この設定では、デフォルトのバッチサイズをバイト単位で制御します。このサイズより大きいバッチレコードは試行されません。ブローカーに送信されるリクエストには、複数のバッチが含まれ、送信可能なデータを含む各パーティションに 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 | 特定のホストへの再接続を試行するまでの待機時間。これにより、タイトなループでホストに繰り返し接続することを回避します。このバックオフは、コンシューマーからブローカーに送信されるすべてのリクエストに適用されます。 | 50 | Integer |
| camel.component.kafka.record-metadata | プロデューサが Kafka への送信から RecordMetadata の結果を保存する必要があるかどうか。結果は、RecordMetadata メタデータを含む List に保存されます。リストは、キー KafkaConstants#KAFKA_RECORDMETA を持つヘッダーに保存されます。 | true | ブール値 |
| camel.component.kafka.request-required-acks | リクエストが完了したと見なす前に、プロデューサーがリーダーに受け取ったことを要求する確認の数。これは、送信されるレコードの耐久性を制御します。次の設定が一般的です: 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 | 各再試行の前に、プロデューサーは関連するトピックのメタデータを更新して、新しいリーダーが選出されたかどうかを確認します。リーダーの選択には少し時間がかかるため、このプロパティーはプロデューサーがメタデータを更新するまで待機する時間を指定します。 | 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 | コンシューマーまたはプロデューサがワーカースレッドをシャットダウンして終了するまで正常に待機するためのミリ秒単位のタイムアウト。 | 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
プロデューサーとコンシューマーの両方がサポート対象
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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
28.3. コンポーネントオプション
Kamelet コンポーネントは、以下に示す 9 つのオプションをサポートしています。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| location (共通) | ファイルシステム上の Kamelets の場所。複数の場所をコンマで区切って設定できます。 | クラスパス:/kamelets | String |
| routeProperties (共通) | ルートローカルパラメーターを設定します。 | マップ | |
| templateProperties (共通) | テンプレートのローカルパラメーターを設定します。 | マップ | |
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| block (プロデューサー) | アクティブなコンシューマーを持たない direct エンドポイントにメッセージを送信する場合、ブロックしてコンシューマーがアクティブになるのを待つようプロデューサーに指示できます。 | true | boolean |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| timeout (プロデューサー) | ブロックが有効な場合に使用するタイムアウト値。 | 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 (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| exceptionHandler (コンシューマー (上級)) | コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
| exchangePattern (コンシューマー (上級)) | コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
| block (プロデューサー) | アクティブなコンシューマーを持たない direct エンドポイントにメッセージを送信する場合、ブロックしてコンシューマーがアクティブになるのを待つようプロデューサーに指示できます。 | true | boolean |
| failIfNoConsumers (プロデューサー) | アクティブなコンシューマーのない DIRECT エンドポイントに送信するときに、プロデューサーが例外を出力して失敗するかどうか。 | true | boolean |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| timeout (プロデューサー) | ブロックが有効な場合に使用するタイムアウト値。 | 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 コンポーネントは次のことを行います。
-
指定された
templateIdパスパラメーター (この場合はsetBody) によって識別されるルートテンプレートからルートをインスタンス化します。 -
これは
directコンポーネントのように機能し、現在のルートを具体化されたルートに接続します。
プログラムで行う必要がある場合は、次のようになります。
routeTemplate("setMyBody")
.templateParameter("bodyValue")
.from("direct:{{foo}}")
.setBody().constant("{{bodyValue}}");
TemplatedRouteBuilder.builder(context, "setMyBody")
.parameter("foo", "bar")
.parameter("bodyValue", "myKamelet")
.add();
from("direct:template")
.to("direct:bar");28.7. Spring Boot Auto-Configuration
Spring Boot で dataset を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-kamelet-starter</artifactId> <version>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に示す 10 個のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| camel.component.kamelet.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | ブール値 |
| camel.component.kamelet.block | アクティブなコンシューマーを持たない direct エンドポイントにメッセージを送信する場合、ブロックしてコンシューマーがアクティブになるのを待つようプロデューサーに指示できます。 | true | ブール値 |
| camel.component.kamelet.bridge-error-handler | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | ブール値 |
| camel.component.kamelet.enabled | kamelet コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | ブール値 | |
| camel.component.kamelet.lazy-start-producer | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
29.3. コンポーネントオプション
言語コンポーネントは、次に示す 2 つのオプションをサポートしています。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
29.4. エンドポイントオプション
Language エンドポイントは、URI 構文を使用して設定されます。
language:languageName:resourceUri
パスおよびクエリーパラメーターを使用します。
29.4.1. パスパラメーター (2 パラメーター)
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| languageName (producer) | 必須 使用する言語の名前を設定します。 列挙値:
| String | |
| resourceUri (producer) | リソースへのパス、またはリソースとして使用するレジストリー内の Bean をルックアップするための参照。 | String |
29.4.2. クエリーパラメーター (7 パラメーター)
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| allowContextMapAll (producer) | コンテキストマップが前詳細へのアクセスを許可するかどうかを設定します。デフォルトでは、メッセージの本文とヘッダーにのみアクセスできます。このオプションは、現在の Exchange および CamelContext へのフルアクセスに対して有効にできます。これを行うと、CamelContext API の全機能へのアクセスが開かれるため、潜在的なセキュリティーリスクが発生します。 | false | boolean |
| binary (プロデューサー) | スクリプトがバイナリーコンテンツかテキストコンテンツか。デフォルトでは、スクリプトはテキストコンテンツとして読み込まれます (例: java.lang.String)。 | false | boolean |
| cacheScript (プロデューサー) | コンパイルされたスクリプトをキャッシュして再利用するかどうかスクリプトを再利用すると、1 つの Camel org.apache.camel.Exchange の処理から次の org.apache.camel.Exchange への副作用が発生する可能性があることに注意してください。 | false | boolean |
| contentCache (プロデューサー) | リソースコンテンツキャッシュを使用するかどうかを設定します。 | true | boolean |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| script (プロデューサー) | 実行するスクリプトを設定します。 | String | |
| transform (プロデューサー) | スクリプトの結果をメッセージ本文として使用するかどうか。このオプションのデフォルトは true です。 | true | boolean |
29.5. メッセージヘッダー
次のメッセージヘッダーを使用して、コンポーネントの動作に影響を与えることができます。
| ヘッダー | 説明 |
|---|---|
|
| ヘッダーで提供される実行するスクリプト。エンドポイントで設定されたスクリプトよりも優先されます。 |
29.6. 例
たとえば、Simple 言語を使用してメッセージの変換を行うことができます。
以下に示すように、スクリプトをヘッダーとして提供することもできます。ここでは、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 Auto-Configuration
Spring Boot でファイルを使用する場合は、自動設定をサポートするために次の Maven 依存関係を使用してください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-language-starter</artifactId> <version>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に記載される 3 つのオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| camel.component.language.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | ブール値 |
| camel.component.language.enabled | 言語コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | ブール値 | |
| camel.component.language.lazy-start-producer | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
30.3. コンポーネントオプション
ログ コンポーネントは、以下に示す 3 個のオプションをサポートしています。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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 (プロデューサー) | true の場合、新しいメッセージが一定期間受信されていない場合に統計を非表示にします。false の場合、メッセージトラフィックに関係なく統計を表示します。 | true | ブール値 |
| groupDelay (プロデューサー) | 統計の初期遅延を設定します (ミリ秒単位)。 | Long | |
| groupInterval (プロデューサー) | 指定すると、この時間間隔 (ミリ秒単位) でメッセージ統計がグループ化されます。 | Long | |
| groupSize (プロデューサー) | スループットログのグループサイズを指定する整数。 | Integer | |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| level (プロデューサー) | 使用するロギングレベル。デフォルト値は INFO です。 列挙値:
| INFO | String |
| logMask (producer) | true の場合、ログ内のパスワードやパスフレーズなどの機密情報をマスクします。 | ブール値 | |
| marker (プロデューサー) | 使用するオプションのマーカー名。 | String | |
| exchangeFormatter (上級) | カスタム Exchange フォーマッタを使用するには。 | ExchangeFormatter | |
| maxChars (フォーマット) | 1 行に記録される文字数を制限します。 | 10000 | int |
| マルチライン (フォーマット) | 有効にすると、各情報が改行で出力されます。 | false | boolean |
| showAll (書式設定) | すべてのオプションをオンにするためのクイックオプション。(複数行、maxChars を使用する場合は手動で設定する必要があります)。 | false | boolean |
| showAllProperties (formatting) | すべての交換プロパティー (内部およびカスタムの両方) を表示します。 | false | boolean |
| showBody (フォーマット) | メッセージ本文を表示します。 | true | boolean |
| showBodyType (フォーマット) | 本体の Java タイプを表示します。 | true | boolean |
| showCaughtException (formatting) | 交換でキャッチされた例外がある場合は、例外メッセージを表示します (スタックトレースなし)。キャッチされた例外は、エクスチェンジのプロパティーとして保存され (キー org.apache.camel.Exchange#EXCEPTION_CAUGHT を使用)、たとえば doCatch は例外をキャッチできます。 | false | boolean |
| showException (フォーマット) | 交換に例外がある場合は、例外メッセージを表示します (スタックトレースなし)。 | false | boolean |
| showExchangeId (formatting) | 一意の取引所 ID を表示します。 | false | boolean |
| showExchangePattern (フォーマッティング) | メッセージ交換パターン (略して MEP) を表示します。 | true | boolean |
| showFiles (フォーマット) | 有効にすると、Camel はファイルを出力します。 | false | boolean |
| showFuture (フォーマット) | 有効にすると、Camel は Future オブジェクトで、ログに記録されるペイロードを取得するために完了するのを待ちます。 | false | boolean |
| showHeaders (フォーマット) | メッセージヘッダーを表示します。 | false | boolean |
| showProperties (フォーマット) | 交換のプロパティーを表示します (カスタムのみ)。内部プロパティーとカスタムプロパティーの両方を表示するには、showAllProperties を使用します。 | false | boolean |
| showStackTrace (フォーマット) | 交換に例外がある場合、スタックトレースを表示します。showAll、showException、または showCaughtException のいずれかが有効になっている場合にのみ有効です。 | false | boolean |
| showStreams (フォーマット) | Camel がストリーム本体を表示するかどうか (例: java.io.InputStream など)。このオプションを有効にすると、ストリームがこのロガーによってすでに読み取られているため、後でメッセージ本文にアクセスできなくなる可能性があることに注意してください。これを解決するには、ストリームキャッシングを使用する必要があります。 | false | boolean |
| skipBodyLineSeparator (フォーマット) | メッセージ本文をログに記録するときに行区切りをスキップするかどうか。これにより、メッセージ本文を 1 行でログに記録できます。このオプションを false に設定すると、本文の行区切りが保持され、本文がそのままログに記録されます。 | true | boolean |
| スタイル (フォーマット) | 使用する出力スタイルを設定します。 列挙値:
| デフォルト | 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&param2=100"/> <to uri="log:bar?param1=bar&param2=200"/>
30.11. Spring Boot Auto-Configuration
Spring Boot でログを使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-log-starter</artifactId> <version>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に記載される 4 のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| 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 | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | ブール値 |
第31章 mail
プロデューサーとコンシューマーの両方がサポート対象
Mail コンポーネントは、Spring の Mail サポートおよび基盤となる JavaMail システムを介して電子メールへのアクセスを提供します。
Maven ユーザーは、このコンポーネントの pom.xml に以下の依存関係を追加する必要があります。
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-mail</artifactId>
<version>3.14.5.redhat-00018</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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
31.3. コンポーネントオプション
Mail コンポーネントは、以下に示す 43 個のオプションをサポートしています。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| closeFolder (コンシューマー) | ポーリング後にコンシューマーがフォルダーを閉じる必要があるかどうか。このオプションを false に設定し、disconnect=false も設定すると、コンシューマーはポーリング間でフォルダーを開いたままにします。 | true | boolean |
| copyTo (コンシューマー) | メールメッセージを処理した後、指定された名前のメールフォルダーにコピーできます。キー copyTo を含むヘッダーを使用して、この設定値をオーバーライドできます。これにより、実行時に設定されたフォルダー名にメッセージをコピーできます。 | String | |
| decodeFilename (consumer) | true に設定すると、MimeUtility.decodeText メソッドを使用してファイル名がデコードされます。これは、JVM システムプロパティー mail.mime.encodefilename の設定に似ています。 | false | boolean |
| delete (コンシューマー) | 処理後にメッセージを削除します。これは、メールメッセージに DELETED フラグを設定することによって行われます。false の場合、代わりに SEEN フラグが設定されます。Camel 2.10 では、メールを削除するかどうかを決定するキー delete でヘッダーを設定することにより、この設定オプションをオーバーライドできます。 | false | boolean |
| disconnect (コンシューマー) | ポーリング後にコンシューマーを切断するかどうか。有効にすると、各ポーリングで Camel が強制的に接続されます。 | false | boolean |
| handleFailedMessage (コンシューマー) | メールコンシューマーが特定のメールメッセージを取得できない場合、このオプションを使用すると、コンシューマーのエラーハンドラーによって発生した例外を処理できます。コンシューマーでブリッジエラーハンドラーを有効にすると、代わりに Camel ルーティングエラーハンドラーが例外を処理できます。デフォルトの動作では、コンシューマーが例外を出力し、バッチからのメールは Camel によってルーティングできません。 | false | boolean |
| mimeDecodeHeaders (コンシューマー) | このオプションは、メールヘッダーの透過的な MIME デコードとデプロイメントを有効にします。 | false | boolean |
| moveTo (コンシューマー) | メールメッセージを処理した後、指定された名前のメールフォルダーに移動できます。キー moveTo を含むヘッダーを使用して、この設定値をオーバーライドできます。これにより、実行時に設定されたフォルダー名にメッセージを移動できます。 | String | |
| peek (コンシューマー) | メールメッセージを処理する前に、javax.mail.Message をピークとしてマークします。これは、IMAPMessage メッセージタイプにのみ適用されます。peek を使用すると、メールはメールサーバー上で SEEN としてマークされません。これにより、Camel でエラー処理が発生した場合にメールメッセージをロールバックできます。 | true | boolean |
| skipFailedMessage (コンシューマー) | メールコンシューマーが特定のメールメッセージを取得できない場合、このオプションを使用すると、メッセージをスキップして次のメールメッセージの取得に進むことができます。デフォルトの動作では、コンシューマーが例外を出力し、バッチからのメールは Camel によってルーティングできません。 | false | boolean |
| unseen (コンシューマー) | 未読メールのみで制限するかどうか。 | true | boolean |
| fetchSize (コンシューマー (上級)) | ポーリング中に消費するメッセージの最大数を設定します。これは、メールボックスフォルダーに大量のメッセージが含まれている場合に、メールサーバーの過負荷を回避するために使用できます。デフォルト値の -1 は、フェッチサイズがなく、すべてのメッセージが消費されることを意味します。値を 0 に設定するのは、Camel がメッセージをまったく消費しない特殊なケースです。 | -1 | int |
| folderName (コンシューマー (上級)) | ポーリングするフォルダー。 | INBOX | String |
| mapMailMessage (コンシューマー (上級)) | Camel が受信したメールメッセージを Camel の本文/ヘッダー/添付ファイルにマップするかどうかを指定します。true に設定すると、メールメッセージの本文は Camel IN メッセージの本文にマップされ、メールヘッダーは IN ヘッダーにマップされ、添付ファイルは Camel IN 添付メッセージにマップされます。このオプションが false に設定されている場合、IN メッセージには生の javax.mail.Message が含まれます。exchange.getIn ().getBody (javax.mail.Message.class) を呼び出して、この生のメッセージを取得できます。 | true | boolean |
| bcc (プロデューサー) | BCC メールアドレスを設定します。複数の電子メールアドレスはコンマで区切ります。 | String | |
| cc (プロデューサー) | CC メールアドレスを設定します。複数の電子メールアドレスはコンマで区切ります。 | String | |
| from (プロデューサー) | 差出人の電子メールアドレス。 | camel@localhost | String |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| replyTo (プロデューサー) | Reply-To 受信者 (応答メールの受信者)。複数のメールアドレスはコンマで区切ります。 | String | |
| subject (プロデューサー) | 送信されるメッセージの件名。注: ヘッダーに件名を設定すると、このオプションよりも優先されます。 | String | |
| to (プロデューサー) | 宛先メールアドレスを設定します。複数の電子メールアドレスはコンマで区切ります。 | String | |
| javaMailSender (プロデューサー (上級)) | メールの送信にカスタム org.apache.camel.component.mail.JavaMailSender を使用するには。 | JavaMailSender | |
| additionalJavaMailProperties (上級) | 他のすべてのオプションに基づいて設定されたデフォルトプロパティーを追加/オーバーライドする追加の Java メールプロパティーを設定します。これは、いくつかの特別なオプションを追加する必要があるが、他のオプションはそのままにしておきたい場合に便利です。 | プロパティー | |
| alternativeBodyHeader (上級) | 代替電子メール本文を含む 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 (上級) | メールメッセージのコンテンツタイプ。HTML メールには text/html を使用します。 | text/plain | String |
| contentTypeResolver (上級) | 添付ファイルの Content-Type を決定するリゾルバー。 | ContentTypeResolver | |
| debugMode (上級) | 基礎となるメールフレームワークでデバッグモードを有効にします。SUN メールフレームワークは、デフォルトでデバッグメッセージを System.out に記録します。 | false | boolean |
| ignoreUnsupportedCharset (上級) | メール送信時にローカル JVM でサポートされていない文字セットを Camel が無視できるようにするオプション。文字セットがサポートされていない場合は、charset=XXX (XXX はサポートされていない文字セットを表す) が content-type から削除され、代わりにプラットフォームのデフォルトに依存します。 | false | boolean |
| ignoreUriScheme (上級) | メール送信時にローカル JVM でサポートされていない文字セットを Camel が無視できるようにするオプション。文字セットがサポートされていない場合は、charset=XXX (XXX はサポートされていない文字セットを表す) が content-type から削除され、代わりにプラットフォームのデフォルトに依存します。 | false | boolean |
| javaMailProperties (advanced) | Java メールオプションを設定します。デフォルトのプロパティーをすべてクリアし、このメソッドに提供されているプロパティーのみを使用します。 | プロパティー | |
| session (上級) | camel がすべてのメールインタラクションに使用するメールセッションを指定します。メールセッションが JavaEE コンテナーなどの他のリソースによって作成および管理されるシナリオで役立ちます。カスタムメールセッションを使用する場合、メールセッションのホスト名とポートが使用されます (セッションで設定されている場合)。 | Session | |
| useInlineAttachments (上級) | ディスポジションインラインまたは添付ファイルを使用するかどうか。 | false | boolean |
| headerFilterStrategy (フィルター) | カスタムの 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 (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| closeFolder (コンシューマー) | ポーリング後にコンシューマーがフォルダーを閉じる必要があるかどうか。このオプションを false に設定し、disconnect=false も設定すると、コンシューマーはポーリング間でフォルダーを開いたままにします。 | true | boolean |
| copyTo (コンシューマー) | メールメッセージを処理した後、指定された名前のメールフォルダーにコピーできます。キー copyTo を含むヘッダーを使用して、この設定値をオーバーライドできます。これにより、実行時に設定されたフォルダー名にメッセージをコピーできます。 | String | |
| decodeFilename (consumer) | true に設定すると、MimeUtility.decodeText メソッドを使用してファイル名がデコードされます。これは、JVM システムプロパティー mail.mime.encodefilename の設定に似ています。 | false | boolean |
| delete (コンシューマー) | 処理後にメッセージを削除します。これは、メールメッセージに DELETED フラグを設定することによって行われます。false の場合、代わりに SEEN フラグが設定されます。Camel 2.10 では、メールを削除するかどうかを決定するキー delete でヘッダーを設定することにより、この設定オプションをオーバーライドできます。 | false | boolean |
| disconnect (コンシューマー) | ポーリング後にコンシューマーを切断するかどうか。有効にすると、各ポーリングで Camel が強制的に接続されます。 | false | boolean |
| handleFailedMessage (コンシューマー) | メールコンシューマーが特定のメールメッセージを取得できない場合、このオプションを使用すると、コンシューマーのエラーハンドラーによって発生した例外を処理できます。コンシューマーでブリッジエラーハンドラーを有効にすると、代わりに Camel ルーティングエラーハンドラーが例外を処理できます。デフォルトの動作では、コンシューマーが例外を出力し、バッチからのメールは Camel によってルーティングできません。 | false | boolean |
| maxMessagesPerPoll (コンシューマー) | ポーリングごとに収集するメッセージの最大数を指定します。デフォルトでは最大値は設定されていません。サーバーの起動時に数千のファイルをダウンロードしないように、たとえば 1000 の制限を設定するために使用できます。このオプションを無効にするには、0 または負の値を設定します。 | int | |
| mimeDecodeHeaders (コンシューマー) | このオプションは、メールヘッダーの透過的な MIME デコードとデプロイメントを有効にします。 | false | boolean |
| moveTo (コンシューマー) | メールメッセージを処理した後、指定された名前のメールフォルダーに移動できます。キー moveTo を含むヘッダーを使用して、この設定値をオーバーライドできます。これにより、実行時に設定されたフォルダー名にメッセージを移動できます。 | String | |
| peek (コンシューマー) | メールメッセージを処理する前に、javax.mail.Message をピークとしてマークします。これは、IMAPMessage メッセージタイプにのみ適用されます。peek を使用すると、メールはメールサーバー上で SEEN としてマークされません。これにより、Camel でエラー処理が発生した場合にメールメッセージをロールバックできます。 | true | boolean |
| sendEmptyMessageWhenIdle (consumer) | ポーリングコンシューマーがファイルをポーリングしなかった場合、このオプションを有効にして、代わりに空のメッセージ (ボディーなし) を送信できます。 | false | boolean |
| skipFailedMessage (コンシューマー) | メールコンシューマーが特定のメールメッセージを取得できない場合、このオプションを使用すると、メッセージをスキップして次のメールメッセージの取得に進むことができます。デフォルトの動作では、コンシューマーが例外を出力し、バッチからのメールは Camel によってルーティングできません。 | false | boolean |
| unseen (コンシューマー) | 未読メールのみで制限するかどうか。 | true | boolean |
| exceptionHandler (コンシューマー (上級)) | コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
| exchangePattern (コンシューマー (上級)) | コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
| fetchSize (コンシューマー (上級)) | ポーリング中に消費するメッセージの最大数を設定します。これは、メールボックスフォルダーに大量のメッセージが含まれている場合に、メールサーバーの過負荷を回避するために使用できます。デフォルト値の -1 は、フェッチサイズがなく、すべてのメッセージが消費されることを意味します。値を 0 に設定するのは、Camel がメッセージをまったく消費しない特殊なケースです。 | -1 | int |
| folderName (コンシューマー (上級)) | ポーリングするフォルダー。 | INBOX | String |
| mailUidGenerator (コンシューマー (上級)) | カスタムロジックを使用してメールメッセージの UUID を生成できるプラグ可能な MailUidGenerator。 | MailUidGenerator | |
| mapMailMessage (コンシューマー (上級)) | Camel が受信したメールメッセージを Camel の本文/ヘッダー/添付ファイルにマップするかどうかを指定します。true に設定すると、メールメッセージの本文は Camel IN メッセージの本文にマップされ、メールヘッダーは IN ヘッダーにマップされ、添付ファイルは Camel IN 添付メッセージにマップされます。このオプションが false に設定されている場合、IN メッセージには生の javax.mail.Message が含まれます。exchange.getIn ().getBody (javax.mail.Message.class) を呼び出して、この生のメッセージを取得できます。 | true | boolean |
| pollStrategy (コンシューマー (上級)) | プラグ可能な org.apache.camel.PollingConsumerPollingStrategy を使用すると、エクスチェンジが作成され、Camel でルーティングされる前に、通常はポーリング操作中に発生するエラー処理を制御するカスタム実装が提供できます。 | PollingConsumerPollStrategy | |
| postProcessAction (consumer (advanced)) | 通常の処理が終了したら、メールボックスで後処理タスクを実行するための MailBoxPostProcessAction を参照します。 | MailBoxPostProcessAction | |
| bcc (プロデューサー) | BCC メールアドレスを設定します。複数の電子メールアドレスはコンマで区切ります。 | String | |
| cc (プロデューサー) | CC メールアドレスを設定します。複数の電子メールアドレスはコンマで区切ります。 | String | |
| from (プロデューサー) | 差出人の電子メールアドレス。 | camel@localhost | String |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| replyTo (プロデューサー) | Reply-To 受信者 (応答メールの受信者)。複数のメールアドレスはコンマで区切ります。 | String | |
| subject (プロデューサー) | 送信されるメッセージの件名。注: ヘッダーに件名を設定すると、このオプションよりも優先されます。 | String | |
| to (プロデューサー) | 宛先メールアドレスを設定します。複数の電子メールアドレスはコンマで区切ります。 | String | |
| javaMailSender (プロデューサー (上級)) | メールの送信にカスタム org.apache.camel.component.mail.JavaMailSender を使用するには。 | JavaMailSender | |
| additionalJavaMailProperties (上級) | 他のすべてのオプションに基づいて設定されたデフォルトプロパティーを追加/オーバーライドする追加の Java メールプロパティーを設定します。これは、いくつかの特別なオプションを追加する必要があるが、他のオプションはそのままにしておきたい場合に便利です。 | プロパティー | |
| alternativeBodyHeader (上級) | 代替電子メール本文を含む IN メッセージヘッダーのキーを指定します。たとえば、メールを text/html 形式で送信し、HTML 以外のメールクライアントに代替メール本文を提供する場合は、このキーをヘッダーとして使用して代替メール本文を設定します。 | CamelMailAlternativeBody | String |
| attachmentsContentTransferEncodingResolver (advanced) | カスタムの AttachmentsContentTransferEncodingResolver を使用して、添付ファイルに使用する content-type-encoding を解決するには。 | AttachmentsContentTransferEncodingResolver | |
| authenticator (上級) | ログインのオーセンティケーター。設定すると、パスワードとユーザー名は無視されます。有効期限が切れる可能性があるため、動的に読み取る必要があるトークンに使用できます。 | MailAuthenticator | |
| binding (上級) | Camel メッセージと Mail メッセージの間の変換に使用されるバインディングを設定します。 | MailBinding | |
| connectionTimeout (上級) | ミリ秒単位の接続タイムアウト。 | 30000 | int |
| contentType (上級) | メールメッセージのコンテンツタイプ。HTML メールには text/html を使用します。 | text/plain | String |
| contentTypeResolver (上級) | 添付ファイルの Content-Type を決定するリゾルバー。 | ContentTypeResolver | |
| debugMode (上級) | 基礎となるメールフレームワークでデバッグモードを有効にします。SUN メールフレームワークは、デフォルトでデバッグメッセージを System.out に記録します。 | false | boolean |
| headerFilterStrategy (上級) | カスタム org.apache.camel.spi.HeaderFilterStrategy を使用してヘッダーをフィルタリングするには。 | HeaderFilterStrategy | |
| ignoreUnsupportedCharset (上級) | メール送信時にローカル JVM でサポートされていない文字セットを Camel が無視できるようにするオプション。文字セットがサポートされていない場合は、charset=XXX (XXX はサポートされていない文字セットを表す) が content-type から削除され、代わりにプラットフォームのデフォルトに依存します。 | false | boolean |
| ignoreUriScheme (上級) | メール送信時にローカル JVM でサポートされていない文字セットを Camel が無視できるようにするオプション。文字セットがサポートされていない場合は、charset=XXX (XXX はサポートされていない文字セットを表す) が content-type から削除され、代わりにプラットフォームのデフォルトに依存します。 | false | boolean |
| javaMailProperties (advanced) | Java メールオプションを設定します。デフォルトのプロパティーをすべてクリアし、このメソッドに提供されているプロパティーのみを使用します。 | プロパティー | |
| session (上級) | camel がすべてのメールインタラクションに使用するメールセッションを指定します。メールセッションが JavaEE コンテナーなどの他のリソースによって作成および管理されるシナリオで役立ちます。カスタムメールセッションを使用する場合、メールセッションのホスト名とポートが使用されます (セッションで設定されている場合)。 | Session | |
| useInlineAttachments (上級) | ディスポジションインラインまたは添付ファイルを使用するかどうか。 | false | boolean |
| idempotentRepository (フィルター) | プラグイン可能なリポジトリー org.apache.camel.spi.IdempotentRepository により、同じメールボックスからのクラスター消費が可能になり、コンシューマーが処理するメールメッセージが有効かどうかをリポジトリーで調整できます。デフォルトでは、リポジトリーは使用されていません。 | IdempotentRepository | |
| idempotentRepositoryRemoveOnCommit (filter) | べき等リポジトリーを使用している場合、メールメッセージが正常に処理されてコミットされると、メッセージ ID がべき等リポジトリーから削除されるか (デフォルト)、リポジトリーに保持されます。デフォルトでは、メッセージ ID は一意であり、リポジトリーに保持する値がないと想定されます。これは、メールメッセージが閲覧済み、移動済み、または削除済みとしてマークされ、再度消費されるのを防ぐためです。したがって、メッセージ ID を冪等リポジトリーに格納してもほとんど価値がありません。ただし、このオプションを使用すると、何らかの理由でメッセージ ID を保存できます。 | true | boolean |
| searchTerm (フィルター) | 件名、本文、送信元、特定の日付以降に送信されたものなどの検索条件に基づいてメールをフィルタリングできる javax.mail.search.SearchTerm を参照します。 | SearchTerm | |
| backoffErrorThreshold (スケジューラー) | backoffMultipler が開始する前に発生する必要がある後続のエラーポーリング (エラーによって失敗した) の数。 | int | |
| backoffIdleThreshold (スケジューラー) | backoffMultipler が開始する前に発生する必要がある後続のアイドルポーリングの数。 | int | |
| backoffMultiplier (スケジューラー) | 後続のアイドル状態/エラーが連続して発生した場合に、スケジュールされたポーリングコンシューマーのバックオフを許可します。乗数は、実際に次の試行が行われる前にスキップされるポーリングの数です。このオプションが使用されている場合は、backoffIdleThreshold や backoffErrorThreshold も設定する必要があります。 | int | |
| delay (スケジューラー) | 次のポーリングまでの時間 (ミリ秒単位)。 | 60000 | long |
| greedy (スケジューラー) | greedy が有効で、以前の実行が 1 つ以上のメッセージをポーリングした場合、ScheduledPollConsumer は即座に再度実行されます。 | false | boolean |
| initialDelay (スケジューラー) | 最初のポーリングが開始されるまでの時間 (ミリ秒単位)。 | 1000 | long |
| repeatCount (スケジューラー) | 実行の最大数を指定します。そのため、これを 1 に設定するとスケジューラーは 1 度だけ実行されます。これを 5 に設定した場合、5 回だけ実行されます。0 または負の値を設定すると、無制限に実行されます。 | 0 | long |
| runLoggingLevel (scheduler) | コンシューマーはポーリング時に開始/完了のログ行を記録します。このオプションを使用すると、ログレベルを設定できます。 列挙値:
| TRACE | LoggingLevel |
| scheduledExecutorService (スケジューラー) | コンシューマーに使用するカスタム/共有スレッドプールを設定できます。デフォルトでは、各コンシューマーに独自の単一スレッドのスレッドプールがあります。 | ScheduledExecutorService | |
| scheduler (スケジューラー) | camel-spring または camel-quartz コンポーネントから cron スケジューラーを使用します。スケジューラーにビルドされた値 spring または quartz を使用。 | none | オブジェクト |
| schedulerProperties (スケジューラー) | カスタムスケジューラーまたは Quartz や Spring ベースのスケジューラーを使用する場合に、追加のプロパティーを設定します。 | マップ | |
| startScheduler (スケジューラー) | スケジューラーを自動起動するかどうか。 | true | boolean |
| timeUnit (スケジューラー) | initialDelay および delay オプションの時間単位。 列挙値:
| MILLISECONDS | TimeUnit |
| useFixedDelay (スケジューラー) | 固定遅延または固定レートを使用するかどうかを制御します。詳細は、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 | デフォルトのポート番号 |
|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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 よりもはるかに限定されていることに注意してください。
- JavaMail POP3 API
- JavaMail IMAP API
- そして、一般的に MAIL フラグ について
31.11. サンプル
JMS キューから受信したメッセージを電子メールとして送信する単純なルートから始めます。電子メールアカウントは mymailserver.com の admin アカウントです。
from("jms://queue:subscription").to("smtp://admin@mymailserver.com?password=secret");次のサンプルでは、毎分 1 回メールボックスをポーリングして新しい電子メールを探します。
from("imap://admin@mymailserver.com?password=secret&unseen=true&delay=60000")
.to("seda://mails");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 の使用
MailEndpoint で searchTerm を設定して、不要なメールを除外することができます。
たとえば、件名または本文に Camel が含まれるようにメールをフィルタリングするには、次のようにします。
<route> <from uri="imaps://mymailseerver?username=foo&password=secret&searchTerm.subjectOrBody=Camel"/> <to uri="bean:myBean"/> </route>
"searchTerm.subjectOrBody" をパラメーターキーとして使用して、"Camel" という単語を含むメールの件名または本文を検索することを示していることに注意してください。
クラス org.apache.camel.component.mail.SimpleSearchTerm には、設定可能な多くのオプションがあります。
または、目に見えない新しいメールを 24 時間さかのぼって取得することもできます。"now-24h" 構文に注意してください。詳細については、下の表を参照してください。
<route> <from uri="imaps://mymailseerver?username=foo&password=secret&searchTerm.fromSentDate=now-24h"/> <to uri="bean:myBean"/> </route>
エンドポイント uri 設定に複数の searchTerm を含めることができます。次に、AND 演算子を使用してそれらを結合します。たとえば、両方の条件が一致する必要があります。たとえば、メールの件名に Camel が含まれる 24 時間前にさかのぼる最後の未読メールを取得するには、次のようにします。
<route> <from uri="imaps://mymailseerver?username=foo&password=secret&searchTerm.subject=Camel&searchTerm.fromSentDate=now-24h"/> <to uri="bean:myBean"/> </route>
SimpleSearchTerm は POJO から簡単に設定できるように設計されているため、XML の <bean> スタイルを使用して設定することもできます。
<bean id="mySearchTerm" class="org.apache.camel.component.mail.SimpleSearchTerm"> <property name="subject" value="Order"/> <property name="to" value="acme-order@acme.com"/> <property name="fromSentDate" value="now"/> </bean>
次に示すように、Camel ルートで #beanId を使用して、この Bean を参照できます。
<route> <from uri="imaps://mymailseerver?username=foo&password=secret&searchTerm=#mySearchTerm"/> <to uri="bean:myBean"/> </route>
Java には、org.apache.camel.component.mail.SearchTermBuilder クラスを使用して複合 SearchTerms を構築するビルダークラスがあります。これにより、次のような複雑な用語を作成できます。
// we just want the unseen mails which is not spam
SearchTermBuilder builder = new SearchTermBuilder();
builder.unseen().body(Op.not, "Spam").subject(Op.not, "Spam")
// which was sent from either foo or bar
.from("foo@somewhere.com").from(Op.or, "bar@somewhere.com");
// .. and we could continue building the terms
SearchTerm term = builder.build();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 Auto-Configuration
Spring Boot で imap を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-mail-starter</artifactId> <version>3.14.5.redhat-00032</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 | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | ブール値 |
| camel.component.mail.cc | CC メールアドレスを設定します。複数の電子メールアドレスはコンマで区切ります。 | String | |
| camel.component.mail.close-folder | ポーリング後にコンシューマーがフォルダーを閉じる必要があるかどうか。このオプションを false に設定し、disconnect=false も設定すると、コンシューマーはポーリング間でフォルダーを開いたままにします。 | 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 | ポーリング後にコンシューマーを切断するかどうか。有効にすると、各ポーリングで 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 | メールコンシューマーが特定のメールメッセージを取得できない場合、このオプションを使用すると、コンシューマーのエラーハンドラーによって発生した例外を処理できます。コンシューマーでブリッジエラーハンドラーを有効にすると、代わりに Camel ルーティングエラーハンドラーが例外を処理できます。デフォルトの動作では、コンシューマーが例外を出力し、バッチからのメールは 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 | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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 | メールコンシューマーが特定のメールメッセージを取得できない場合、このオプションを使用すると、メッセージをスキップして次のメールメッセージの取得に進むことができます。デフォルトの動作では、コンシューマーが例外を出力し、バッチからのメールは 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 | ブール値 |
| 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 | ブール値 |
| camel.dataformat.mime-multipart.enabled | mime-multipart データ形式の自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | ブール値 | |
| camel.dataformat.mime-multipart.headers-inline | MIME-Multipart ヘッダーがメッセージ本文の一部であるか (true)、Camel ヘッダーとして設定されているか (false) を定義します。デフォルトは false です。 | false | ブール値 |
| 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章 マスター
コンシューマーのみがサポートされている
Camel-Master エンドポイントは、クラスター内の単一のコンシューマーのみが特定のエンドポイントから消費するようにする方法を提供します。その 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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
32.4. コンポーネントオプション
マスターコンポーネントは、以下に示す 4 つのオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
| service (上級) | 使用するサービスを注入します。 | CamelClusterService | |
| serviceSelector (上級) | 使用する CamelClusterService を検索するために使用されるサービスセレクターを挿入します。 | セレクター |
32.5. エンドポイントオプション
マスターエンドポイントは、URI 構文を使用して設定されます。
master:namespace:delegateUri
パスおよびクエリーパラメーターを使用します。
32.5.1. パスパラメーター (2 パラメーター)
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| namespace (コンシューマー) | 必須 使用するクラスター名前空間の名前。 | String | |
| delegateUri (コンシューマー) | 必須 マスター/スレーブモードで使用するエンドポイント uri。 | String |
32.5.2. クエリーパラメーター (3 パラメーター)
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| exceptionHandler (コンシューマー (上級)) | コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
| exchangePattern (コンシューマー (上級)) | コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| 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 Auto-Configuration
Spring Boot で master を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-master-starter</artifactId> <version>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に示す 5 個のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| camel.component.master.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | ブール値 |
| camel.component.master.bridge-error-handler | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは 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
プロデューサーとコンシューマーの両方がサポート対象
MLLP コンポーネントは、MLLP プロトコルのニュアンスを処理し、医療機関が MLLP プロトコルを使用して他のシステムと通信するために必要な機能を提供するように特別に設計されています。
MLLP コンポーネントは、単純な設定 URI、自動化された HL7 確認応答生成、および自動確認応答問い合わせを提供します。
MLLP プロトコルは、通常、多数の同時 TCP 接続を使用しません。通常、1 つのアクティブな TCP 接続が使用されます。したがって、MLLP コンポーネントは、標準の Java ソケットに基づく単純な接続ごとのスレッドモデルを使用します。これにより、実装がシンプルに保たれ、Camel 自体への依存関係のみが排除されます。
コンポーネントは以下をサポートします。
- TCP サーバーを使用する Camel コンシューマー
- TCP クライアントを使用する Camel プロデューサー
MLLP コンポーネントは byte[] ペイロードを使用し、Camel 型変換に依存して byte[] を他の型に変換します。
Maven ユーザーは、このコンポーネントの pom.xml に以下の依存関係を追加する必要があります。
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-mllp</artifactId>
<version>3.14.5.redhat-00018</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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
33.2. コンポーネントオプション
MLLP コンポーネントは、以下に示す 30 のオプションをサポートしています。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| autoAck (共通) | MLLP 確認応答 MLLP コンシューマーのみの自動生成を有効または無効にします。 | true | boolean |
| charsetName (共通) | 使用するデフォルトの文字セットを設定します。 | String | |
| configuration (共通) | MLLP エンドポイントの作成時に使用する既定の設定を設定します。 | MllpConfiguration | |
| hl7Headers (共通) | HL7 メッセージ MLLP コンシューマーのみからのメッセージヘッダーの自動生成を有効または無効にします。 | 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 (共通) | HL7 ペイロードの検証を有効/無効にする 有効にすると、外部システムから受信した HL7 ペイロードが検証されます (検証の詳細については、Hl7Util.generateInvalidPayloadExceptionMessage を参照してください)。無効なペイロードが検出された場合、MllpInvalidMessageException (コンシューマーの場合) または MllpInvalidAcknowledgementException が出力されます。 | false | boolean |
| acceptTimeout (consumer) | TCP 接続の待機中のタイムアウト (ミリ秒単位) TCP サーバーのみ。 | 60000 | int |
| backlog (コンシューマー) | 着信接続指示 (接続要求) の最大キュー長は、backlog パラメーターに設定されます。キューがいっぱいのときに接続指示が到着すると、接続は拒否されます。 | 5 | Integer |
| bindRetryInterval (consumer) | TCP サーバーのみ - バインド試行間で待機するミリ秒数。 | 5000 | int |
| bindTimeout (コンシューマー) | TCP サーバーのみ - サーバーポートへのバインドを再試行するミリ秒数。 | 30000 | int |
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。無効にすると、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外を WARN または ERROR レベルでログに記録し、無視することで例外を処理します。 | true | boolean |
| lenientBind (コンシューマー) | TCP サーバーのみ - TCP ServerSocket がバインドされる前にエンドポイントを開始できるようにします。一部の環境では、TCP ServerSocket がバインドされる前にエンドポイントを開始できるようにすることが望ましい場合があります。 | false | boolean |
| maxConcurrentConsumers (コンシューマー) | 許可される同時 MLLP コンシューマー接続の最大数。新しい接続が受信され、最大数がすでに確立されている場合、新しい接続はすぐにリセットされます。 | 5 | int |
| reuseAddress (コンシューマー) | SO_REUSEADDR ソケットオプションを有効/無効にします。 | false | ブール値 |
| exchangePattern (コンシューマー (上級)) | コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| InOut | ExchangePattern |
| connectTimeout (プロデューサー) | TCP 接続を確立するためのタイムアウト (ミリ秒単位)。TCP クライアントのみ。 | 30000 | int |
| idleTimeoutStrategy (プロデューサー) | アイドルタイムアウトが発生したときに実行するアクションを決定します。可能な値は次のとおりです : RESET: SO_LINGER を 0 に設定し、ソケットをリセットします。CLOSE: ソケットを適切に閉じます。デフォルトは RESET です。 列挙値:
| リセット | MllpIdleTimeoutStrategy |
| keepAlive (プロデューサー) | SO_KEEPALIVE ソケットオプションを有効/無効にします。 | true | ブール値 |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| tcpNoDelay (プロデューサー) | TCP_NODELAY ソケットオプションを有効/無効にします。 | true | ブール値 |
| autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
| defaultCharset (上級) | バイトから文字列への変換に使用するデフォルトの文字セットを設定します。 | ISO-8859-1 | String |
| logPhi (上級) | PHI をログに記録するかどうか。 | true | ブール値 |
| logPhiMaxBytes (上級) | ログエントリーに記録される PHI の最大バイト数を設定します。 | 5120 | Integer |
| readTimeout (上級) | MLLP フレームの開始後に使用される SO_TIMEOUT 値 (ミリ秒単位) が受信されました。 | 5000 | int |
| receiveBufferSize (上級) | SO_RCVBUF オプションを指定された値 (バイト単位) に設定します。 | 8192 | Integer |
| receiveTimeout (上級) | MLLP フレームの開始を待機するときに使用される SO_TIMEOUT 値 (ミリ秒単位)。 | 15000 | int |
| sendBufferSize (上級) | SO_SNDBUF オプションを指定された値 (バイト単位) に設定します。 | 8192 | Integer |
| idleTimeout (tcp) | クライアント TCP 接続がリセットされるまでに許容されるおおよそのアイドル時間。null 値またはゼロ以下の値は、アイドルタイムアウトを無効にします。 | Integer |
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 コンシューマーのみの自動生成を有効または無効にします。 | true | boolean |
| charsetName (共通) | 使用するデフォルトの文字セットを設定します。 | String | |
| hl7Headers (共通) | HL7 メッセージ MLLP コンシューマーのみからのメッセージヘッダーの自動生成を有効または無効にします。 | 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 (共通) | HL7 ペイロードの検証を有効/無効にする 有効にすると、外部システムから受信した HL7 ペイロードが検証されます (検証の詳細については、Hl7Util.generateInvalidPayloadExceptionMessage を参照してください)。無効なペイロードが検出された場合、MllpInvalidMessageException (コンシューマーの場合) または MllpInvalidAcknowledgementException が出力されます。 | false | boolean |
| acceptTimeout (consumer) | TCP 接続の待機中のタイムアウト (ミリ秒単位) TCP サーバーのみ。 | 60000 | int |
| backlog (コンシューマー) | 着信接続指示 (接続要求) の最大キュー長は、backlog パラメーターに設定されます。キューがいっぱいのときに接続指示が到着すると、接続は拒否されます。 | 5 | Integer |
| bindRetryInterval (consumer) | TCP サーバーのみ - バインド試行間で待機するミリ秒数。 | 5000 | int |
| bindTimeout (コンシューマー) | TCP サーバーのみ - サーバーポートへのバインドを再試行するミリ秒数。 | 30000 | int |
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。無効にすると、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外を WARN または ERROR レベルでログに記録し、無視することで例外を処理します。 | true | boolean |
| lenientBind (コンシューマー) | TCP サーバーのみ - TCP ServerSocket がバインドされる前にエンドポイントを開始できるようにします。一部の環境では、TCP ServerSocket がバインドされる前にエンドポイントを開始できるようにすることが望ましい場合があります。 | false | boolean |
| maxConcurrentConsumers (コンシューマー) | 許可される同時 MLLP コンシューマー接続の最大数。新しい接続が受信され、最大数がすでに確立されている場合、新しい接続はすぐにリセットされます。 | 5 | int |
| reuseAddress (コンシューマー) | SO_REUSEADDR ソケットオプションを有効/無効にします。 | false | ブール値 |
| exceptionHandler (コンシューマー (上級)) | コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
| exchangePattern (コンシューマー (上級)) | コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| InOut | ExchangePattern |
| connectTimeout (プロデューサー) | TCP 接続を確立するためのタイムアウト (ミリ秒単位)。TCP クライアントのみ。 | 30000 | int |
| idleTimeoutStrategy (プロデューサー) | アイドルタイムアウトが発生したときに実行するアクションを決定します。可能な値は次のとおりです : RESET: SO_LINGER を 0 に設定し、ソケットをリセットします。CLOSE: ソケットを適切に閉じます。デフォルトは RESET です。 列挙値:
| リセット | MllpIdleTimeoutStrategy |
| keepAlive (プロデューサー) | SO_KEEPALIVE ソケットオプションを有効/無効にします。 | true | ブール値 |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| tcpNoDelay (プロデューサー) | 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 コンシューマー
MLLP コンシューマーは、MLLP フレームメッセージの受信と HL7 確認応答の送信をサポートします。MLLP コンシューマーは、HL7 確認応答 (HL7 アプリケーション確認応答のみ - AA、AE、および AR) を自動的に生成するか、CamelMllpAcknowledgement 交換プロパティーを使用して確認応答を指定できます。さらに、生成される確認応答のタイプは、CamelMllpAcknowledgementType 交換プロパティーを設定することで制御できます。自動受信確認が無効で、交換パターンが InOnly の場合、MLLP コンシューマーは HL7 受信確認を送信せずにメッセージを読み取ることができます。
33.4.1. メッセージヘッダー
MLLP コンシューマーは、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 コンシューマーが生成する確認応答のタイプと 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 | ブール値 | autoAck クエリーパラメーターをオーバーライドします |
| CamelMllpCloseConnectionBeforeSend | ブール値 | true の場合、データを送信する前にソケットが閉じられます |
| CamelMllpResetConnectionBeforeSend | ブール値 | true の場合、データを送信する前にソケットがリセットされます |
| CamelMllpCloseConnectionAfterSend | ブール値 | true の場合、Socket はデータ送信直後に閉じられます |
| CamelMllpResetConnectionAfterSend | ブール値 | true の場合、データを送信した直後にソケットがリセットされます |
33.5. MLLP プロデューサー
MLLP Producer は、MLLP フレームメッセージの送信と HL7 確認応答の受信をサポートしています。MLLP プロデューサーは HL7 確認応答を調べ、否定応答を受信した場合は例外を発生させます。受信した確認応答が調査され、否定応答の場合は例外が発生します。MLLP プロデューサーは、InOnly 交換パターンで設定されている場合、確認応答を無視できます。
33.5.1. メッセージヘッダー
MLLP プロデューサーは、Camel メッセージに次のヘッダーを追加します。
| キー | 説明 |
|---|---|
| CamelMllpLocalAddress | ソケットのローカル TCP アドレス |
| CamelMllpRemoteAddress | ソケットのリモート TCP アドレス |
| CamelMllpAcknowledgement | 受信した HL7 確認バイト[] |
| CamelMllpAcknowledgementString | 受信した HL7 確認応答を文字列に変換 |
33.5.2. エクスチェンジプロパティー
TCP ソケットの状態は、Camel 交換の次のプロパティーによって制御できます。
| キー | タイプ | 説明 |
|---|---|---|
| CamelMllpCloseConnectionBeforeSend | ブール値 | true の場合、データを送信する前にソケットが閉じられます |
| CamelMllpResetConnectionBeforeSend | ブール値 | true の場合、データを送信する前にソケットがリセットされます |
| CamelMllpCloseConnectionAfterSend | ブール値 | true の場合、Socket はデータ送信直後に閉じられます |
| CamelMllpResetConnectionAfterSend | ブール値 | true の場合、データを送信した直後にソケットがリセットされます |
33.6. Spring Boot Auto-Configuration
Spring Boot で mllp を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-mllp-starter</artifactId> <version>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に記載される 31 のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| camel.component.mllp.accept-timeout | TCP 接続の待機中のタイムアウト (ミリ秒単位) TCP サーバーのみ。 | 60000 | Integer |
| camel.component.mllp.auto-ack | MLLP 確認応答 MLLP コンシューマーのみの自動生成を有効または無効にします。 | 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 | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。無効にすると、コンシューマーは 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 | コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。 | ExchangePattern | |
| camel.component.mllp.hl7-headers | HL7 メッセージ MLLP コンシューマーのみからのメッセージヘッダーの自動生成を有効または無効にします。 | 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 | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | ブール値 |
| camel.component.mllp.lenient-bind | TCP サーバーのみ - TCP ServerSocket がバインドされる前にエンドポイントを開始できるようにします。一部の環境では、TCP ServerSocket がバインドされる前にエンドポイントを開始できるようにすることが望ましい場合があります。 | false | ブール値 |
| camel.component.mllp.log-phi | PHI をログに記録するかどうか。 | true | ブール値 |
| camel.component.mllp.log-phi-max-bytes | ログエントリーに記録される PHI の最大バイト数を設定します。 | 5120 | Integer |
| camel.component.mllp.max-concurrent-consumers | 許可される同時 MLLP コンシューマー接続の最大数。新しい接続が受信され、最大数がすでに確立されている場合、新しい接続はすぐにリセットされます。 | 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 (コンシューマーの場合) または MllpInvalidAcknowledgementException が出力されます。 | false | ブール値 |
第34章 Mock
producer のみサポート対象
分散処理と非同期処理のテストは、非常に難しいことで知られています。Mock、Test、および Dataset エンドポイントは Camel テストフレームワークとうまく連携し、エンタープライズ統合パターン と Camel の幅広いコンポーネントを強力な Bean 統合 と共に使用して、ユニットと統合のテストを簡素化します。
モックコンポーネントは強力な宣言型テストメカニズムを提供します。これは、テスト開始前に任意のモックエンドポイントで宣言型期待値を作成できるという点で jMock に似ています。次に、テストが実行され、通常は 1 つ以上のエンドポイントにメッセージが送信されます。最後に、システムが期待どおりに機能することを確認するために、テストケースで期待値をアサートできます。
これにより、次のようなさまざまなことをテストできます。
モックエンドポイントである テストエンドポイント もありますが、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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
34.3. コンポーネントオプション
Mock コンポーネントは、以下に示す 4 個のオプションをサポートしています。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| log (プロデューサー) | モックが着信メッセージを受信したときにロギングをオンにします。これは、着信メッセージの 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 (プロデューサー) | 暫定的なアサーションがまだ有効であることを確認するために、モックエンドポイントが再アサートするまでの猶予期間を設定します。これは、たとえば、正確な数のメッセージが到着したことをアサートするために使用されます。たとえば、expectedMessageCount (int) が 5 に設定されている場合、5 つ以上のメッセージが到着するとアサーションが満たされます。正確に 5 つのメッセージが到着するようにするには、それ以上メッセージが到着しないように少し待つ必要があります。これが、このメソッドを使用できるものです。デフォルトでは、この期間は無効になっています。 | long | |
| expectedCount (プロデューサー) | このエンドポイントが受信するメッセージ交換の予想数を指定します。注意: 0 のメッセージを期待したい場合は、特別な注意が必要です。0 はテストの開始時に一致するため、アサート期間を設定して、テストをしばらく実行し、まだメッセージが到着していないことを確認する必要があります。;そのためには setAssertPeriod (long) を使用します。別の方法として、NotifyBuilder を使用し、モックで assertIsSatisfied () メソッドを呼び出す前に、NotifyBuilder を使用して、Camel がいくつかのメッセージのルーティングを完了したことを知ることができます。これにより、固定アサート期間を使用せずにテスト時間を短縮できます。正確に n 番目のメッセージがこのモックエンドポイントに到着することをアサートする場合は、詳細について setAssertPeriod (long) メソッドも参照してください。 | -1 | int |
| failFast (プロデューサー) | assertIsSatisfied () が最初に検出された失敗した期待で高速に失敗する必要があるかどうかを設定しますが、それ以外の場合は、期待されるすべてのメッセージが到着するのを待ってから、期待の検証を実行します。デフォルトでは true です。Camel 2.x のような動作を使用するには、false に設定します。 | false | boolean |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| log (プロデューサー) | モックが着信メッセージを受信したときにロギングをオンにします。これは、着信メッセージの INFO レベルで 1 回だけログに記録されます。より詳細なログを取得するには、ロガーを org.apache.camel.component.mock.MockEndpoint クラスの DEBUG レベルに設定します。 | false | boolean |
| reportGroup (producer) | サイズのグループに基づいてスループットログを有効にするために使用される数値。 | int | |
| resultMinimumWaitTime (producer) | ラッチが満たされるまで assertIsSatisfied () が待機する最小予想時間 (ミリ秒単位) を設定します。 | long | |
| resultWaitTime (プロデューサー) | ラッチが満たされるまで assertIsSatisfied () が待機する最大時間 (ミリ秒単位) を設定します。 | long | |
| retainFirst (プロデューサー) | 受信した Exchange の最初の n 番目の数だけを保持するように指定します。これは、ビッグデータでテストするときに使用され、このモックエンドポイントが受信するすべての Exchange のコピーを保存しないことでメモリー消費を削減します。重要: この制限を使用する場合、getReceivedCounter() は受信した Exchange の実際の数を返します。たとえば、5000 の交換を受信し、最初の 10 の交換のみを保持するように設定した場合、getReceivedCounter () は引き続き 5000 を返しますが、getExchanges () および getReceivedExchanges () メソッドには最初の 10 の交換しかありません。このメソッドを使用する場合、他の期待値メソッドの一部はサポートされません。たとえば、expectedBodiesReceived(Object…) は、受信した最初の数のボディに期待値を設定します。setRetainFirst(int) メソッドと setRetainLast(int) メソッドの両方を設定して、最初と最後の受信の両方を制限できます。 | -1 | int |
| retainLast (プロデューサー) | 受信した 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 から、期待値を設定するために使用できるさまざまなヘルパーメソッドを確認できます。主な方法は次のとおりです。
| メソッド | 説明 |
|---|---|
| エンドポイントで予想されるメッセージ数を定義します。 | |
| エンドポイントで予想されるメッセージの最小数を定義します。 | |
| 受信する必要があると予想される本文を (順番に) 定義します。 | |
| 受信する必要があるヘッダーを定義するには | |
| 指定された式を使用してメッセージを比較し、メッセージが順番に受信されるという期待を追加します。 | |
| 指定された式を使用してメッセージを比較し、メッセージが順番に受信されるという期待を追加します。 | |
|
重複したメッセージが受信されないという期待を追加するには;式を使用して、各メッセージの一意の識別子を計算します。これは、JMS を使用している場合は |
別の例を次に示します。
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 ルートで既存のエンドポイントを自動的にモックできるようになりました。
使い方
エンドポイントはまだ動作中です。異なるのは、モック エンドポイントが挿入され、最初にメッセージを受信してから、メッセージをターゲットエンドポイントに委任することです。これは、一種のインターセプトおよびデリゲートまたはエンドポイントリスナーと見なすことができます。
以下の特定のルートがあるとします。
ルート
@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. 保持するメッセージの数を制限する
モック エンドポイント は、デフォルトで、受信したすべての Exchange のコピーを保持します。したがって、大量のメッセージでテストすると、メモリーが消費されます。
最初または最後の Exchange の N 番目のみを保持するように指定するために使用できる、retainFirst と retainLast の 2 つのオプションを導入しました。
たとえば、以下のコードでは、モックが受信した最初の 5 回と最後の 5 回の Exchange のコピーのみを保持したいと考えています。
MockEndpoint mock = getMockEndpoint("mock:data");
mock.setRetainFirst(5);
mock.setRetainLast(5);
mock.expectedMessageCount(2000);
mock.assertIsSatisfied();
これを使用するには、いくつかの制限があります。MockEndpoint の getExchanges() および getReceivedExchanges () メソッドは、Exchange の保持されたコピーのみを返します。したがって、上記の例では、リストには 10 の Exchange が含まれます。最初の 5 つと最後の 5 つ。retainFirst オプションと retainLast オプションにも、使用できる期待値メソッドに関する制限があります。たとえば、メッセージの本文やヘッダーなどで動作する expectedXXX メソッドは、保持されたメッセージでのみ動作します。上記の例では、保持された 10 個のメッセージに対する期待のみをテストできます。
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 は milliseconds と minutes も提供しています。
34.15. Spring Boot 自動設定
Spring Boot で mock を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-mock-starter</artifactId> <version>3.14.5.redhat-00032</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 | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | ブール値 |
| camel.component.mock.log | モックが着信メッセージを受信したときにロギングをオンにします。これは、着信メッセージの INFO レベルで 1 回だけログに記録されます。より詳細なログを取得するには、ロガーを org.apache.camel.component.mock.MockEndpoint クラスの DEBUG レベルに設定します。 | false | ブール値 |
第35章 MongoDB
プロデューサーとコンシューマーの両方がサポート対象
ウィキペディアによると、NoSQL は、リレーショナルデータベースと ACID 保証の長い歴史を破る、大まかに定義された非リレーショナルデータストアのクラスを促進する運動です。 ここ数年、NoSQL ソリューションの人気が高まっており、Facebook、LinkedIn、Twitter などの非常によく使用される主要なサイトやサービスは、スケーラビリティとアジリティを実現するために NoSQL ソリューションを広く使用することが知られています。
基本的に、NoSQL ソリューションは従来の RDBMS (リレーショナルデータベース管理システム) とは異なり、SQL をクエリー言語として使用せず、一般に ACID のようなトランザクション動作やリレーショナルデータを提供しません。代わりに、それらは柔軟なデータ構造とスキーマ (つまり、固定スキーマを持つデータベーステーブルの従来の概念が削除されたもの)、コモディティハードウェアでの極端なスケーラビリティ、および超高速処理の概念に基づいて設計されています。
MongoDB は非常に人気のある NoSQL ソリューションであり、camel-mongodb コンポーネントは Camel を MongoDB と統合し、MongoDB コレクションをプロデューサー (コレクションに対して操作を実行する) とコンシューマー (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>3.14.5.redhat-00018</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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
35.3. コンポーネントオプション
MongoDB コンポーネントは、以下に示す 4 つのオプションをサポートしています。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| mongoConnection (共通) | 接続に使用される Autowired 共有クライアント。コンポーネントから生成されたすべてのエンドポイントは、この接続クライアントを共有します。 | MongoClient | |
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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 (共通) | コレクションが存在しない場合は、初期化中にコレクションを作成します。デフォルトは true です。 | true | boolean |
| database (共通) | ターゲットに設定する MongoDB データベースの名前を設定します。 | String | |
| hosts (共通) | host:port 形式の mongodb サーバーのホストアドレス。ホストのコンマ区切りリストとして、複数のアドレスを使用することもできます: host1:port1,host2:port2。hosts パラメーターが指定されている場合、指定された connectionBean は無視されます。 | String | |
| mongoConnection (共通) | データベースに接続するためのクライアントとして使用される接続 Bean を設定します。 | MongoClient | |
| operation (共通) | このエンドポイントが MongoDB に対して実行する操作を設定します。 列挙値:
| MongoDbOperation | |
| outputType (共通) | プロデューサの出力を選択したタイプ (DocumentList Document または MongoIterable) に変換します。DocumentList または MongoIterable は、findAll および aggregate に適用されます。ドキュメントは、他のすべての操作に適用されます。 列挙値:
| MongoDbOutputType | |
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| consumerType (コンシューマー) | コンシューマータイプ。 | String | |
| exceptionHandler (コンシューマー (上級)) | コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
| exchangePattern (コンシューマー (上級)) | コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| cursorRegenerationDelay (上級) | MongoDB の Tailable カーソルは、新しいデータが到着するまでブロックされます。新しいデータが挿入されない場合、しばらくするとカーソルが自動的に解放され、MongoDB サーバーによって閉じられます。クライアントは、必要に応じてカーソルを再生成する必要があります。この値は、新しいカーソルのフェッチを試行するまでの待機時間と、試行が失敗した場合に次の試行が行われるまでの時間を指定します。デフォルト値は 1000ms です。 | 1000 | long |
| dynamicity (上級) | このエンドポイントが受信 Exchange プロパティーからターゲットデータベースとコレクションを動的に解決しようとするかどうかを設定します。それ以外の場合は静的なエンドポイント URI で指定されたデータベースとコレクションを実行時にオーバーライドするために使用できます。パフォーマンスを向上させるために、デフォルトでは無効になっています。有効にすると、パフォーマンスへの影響は最小限に抑えられます。 | false | boolean |
| readPreference (上級) | MongoDB クライアントが読み取り操作をレプリカセットのメンバーにルーティングする方法を設定します。可能な値は、PRIMARY、PRIMARY_PREFERRED、SECONDARY、SECONDARY_PREFERRED、または NEAREST です。 列挙値:
| PRIMARY | String |
| writeConcern (上級) | スタンドアロンの mongod、レプリカセット、またはクラスターへの書き込み操作のために MongoDB から要求された確認応答のレベルで接続 Bean を設定します。可能な値は、ACKNOWLEDGED、W1、W2、W3、UNACKNOWLEDGED、JOURNALED、または MAJORITY です。 列挙値:
| ACKNOWLEDGED | String |
| writeResultAsHeader (advanced) | 書き込み操作では、OUT メッセージのボディとして WriteResult を返す代わりに、IN メッセージを OUT に転送し、WriteResult をヘッダーとして添付するかどうかを決定します。 | false | boolean |
| streamFilter (changeStream) | 変更ストリームコンシューマーのフィルター条件。 | String | |
| password (セキュリティー) | mongodb 接続のユーザーパスワード。 | String | |
| username (セキュリティー) | mongodb 接続のユーザー名。 | String | |
| persistentId (tail) | 1 つのテールトラッキングコレクションで、複数のテーラブルコンシューマー用に多数のトラッカーをホストできます。それらを分離しておくために、各トラッカーには独自の固有の 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}&collection=${mongodb.collection}&operation=getDbStats" />
<to uri="direct:result" />
</route>35.7. MongoDB 操作 - プロデューサーエンドポイント
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 ドキュメントから抜粋) | 想定されるタイプ |
|---|---|---|---|
|
|
| カーソルの先頭にある指定された数の要素を破棄します。 | int/Integer |
|
|
| 返される要素の数を制限します。 | int/Integer |
|
|
| 1 つのバッチで返される要素の数を制限します。通常、カーソルは結果オブジェクトのバッチをフェッチし、ローカルに保存します。batchSize が正の場合、取得されたオブジェクトの各バッチのサイズを表します。パフォーマンスを最適化し、データ転送を制限するように調整できます。batchSize が負の場合、最大バッチサイズ制限 (通常は 4MB) 内に収まる数のオブジェクトが返され、カーソルが閉じられます。たとえば、batchSize が -10 の場合、サーバーは最大 10 個のドキュメントを 4MB に収まる数だけ返し、カーソルを閉じます。この機能は、ドキュメントが最大サイズ内に収まる必要があるという点で limit() とは異なり、サーバー側でカーソルを閉じる要求を送信する必要がないことに注意してください。バッチサイズは、カーソルが反復された後でも変更できます。その場合、設定は次のバッチ取得に適用されます。 | int/Integer |
|
|
| allowDiskUse MongoDB フラグを設定します。これは、MongoDB Server 4.3.1 以降でサポートされています。このヘッダーを古い MongoDB サーバーバージョンで使用すると、クエリーが失敗する可能性があります。 | boolean/Boolean |
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 ドキュメントから抜粋) | データのタイプ |
|---|---|---|---|
|
|
| クエリーに一致するオブジェクトの数。これは、制限/スキップを考慮していません。 | int/Integer |
|
|
| クエリーに一致するオブジェクトの数。これは、制限/スキップを考慮していません。 | 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 の作成を簡素化する例です。_id と boringField を除くすべてのフィールドを取得します。
// route: from("direct:findAll").to("mongodb:myDb?database=flights&collection=tickets&operation=findAll")
Bson fieldProjection = Projection.exclude("_id", "boringField");
Object result = template.requestBodyAndHeader("direct:findAll", ObjectUtils.NULL, MongoDbConstants.FIELDS_PROJECTION, fieldProjection);
これは、MongoDB の Projections を使用して Bson の作成を簡素化する例です。_id と boringField を除くすべてのフィールドを取得します。
// route: from("direct:findAll").to("mongodb:myDb?database=flights&collection=tickets&operation=findAll")
Bson fieldProjection = Projection.exclude("_id", "boringField");
Object result = template.requestBodyAndHeader("direct:findAll", ObjectUtils.NULL, MongoDbConstants.FIELDS_PROJECTION, fieldProjection);35.7.1.8. ソート句の指定
Bson の作成を簡素化するために、MongoDB の Sorts を使用する特定のフィールドによるソートに基づいて、コレクションから最小/最大レコードを取得する必要があることがよくあります。_id と boringField を除くすべてのフィールドを取得します。
// route: from("direct:findAll").to("mongodb:myDb?database=flights&collection=tickets&operation=findAll")
Bson sorts = Sorts.descending("_id");
Object result = template.requestBodyAndHeader("direct:findAll", ObjectUtils.NULL, MongoDbConstants.SORT_BY, sorts);
Camel ルートでは、SORT_BY ヘッダーを findOneByQuery 操作で使用して、同じ結果を得ることができます。FIELDS_PROJECTION ヘッダーも指定されている場合、操作は、別のコンポーネント (たとえば、パラメーター化された MyBatis SELECT クエリー) に直接渡すことができる単一のフィールド/値のペアを返します。この例では、コレクションから一時的に最新のドキュメントをフェッチし、結果を documentTimestamp フィールドに基づいて 1 つのフィールドに削減する方法を示します。
.from("direct:someTriggeringEvent")
.setHeader(MongoDbConstants.SORT_BY).constant(Sorts.descending("documentTimestamp"))
.setHeader(MongoDbConstants.FIELDS_PROJECTION).constant(Projection.include("documentTimestamp"))
.setBody().constant("{}")
.to("mongodb:myDb?database=local&collection=myDemoCollection&operation=findOneByQuery")
.to("direct:aMyBatisParameterizedSelect");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() がすでに呼び出されているかどうかが決まります。書き込み操作の最終的な結果にアクセスする場合は、WriteResult で getLastError() または getCachedLastError() を呼び出して CommandResult を取得する必要があります。次に、CommandResult.ok()、CommandResult.getErrorMessage() および/または CommandResult.getException() を呼び出して結果を確認できます。
新しいオブジェクトの _id はコレクション内で一意である必要があることに注意してください。値を指定しない場合、MongoDB が自動的に値を生成します。ただし、指定しても一意でない場合、挿入操作は失敗します (Camel が気付くには、invokeGetLastError を有効にするか、書き込み結果を待機する WriteConcern を設定する必要があります)。
これはコンポーネントの制限ではありませんが、MongoDB でより高いスループットを実現する方法です。カスタム _id を使用している場合は、アプリケーションレベルで一意であることを確認する必要があります (これも良い方法です)。
挿入されたレコードの OID は、CamelMongoOid キー (MongoDbConstants.OID 定数) の下のメッセージヘッダーに格納されます。保存される値は、単一の挿入の場合は org.bson.types.ObjectId、複数のレコードが挿入された場合は java.util.List<org.bson.types.ObjectId> です。
MongoDB Java Driver 3.x では、insertOne および insertMany オペレーションは void を返します。Camel 挿入操作は、挿入されたドキュメントまたはドキュメントのリストを返します。必要に応じて、各ドキュメントが新しい OID によって更新されることに注意してください。
35.7.2.2. save
保存操作は upsert (UPdate、inSERT) 操作と同等で、レコードが更新され、レコードが存在しない場合は挿入されます。これらはすべて 1 つのアトミック操作で行われます。MongoDB は _id フィールドに基づいてマッチングを実行します。
更新の場合、オブジェクトは完全に置き換えられ、MongoDB の $modifiers の使用は許可されないことに注意してください。したがって、オブジェクトがすでに存在する場合にそのオブジェクトを操作する場合は、次の 2 つのオプションがあります。
- 最初にオブジェクト全体とそのすべてのフィールドを取得するためのクエリーを実行し (効率的でない場合があります)、Camel 内で変更してから保存します。
- $modifiers で更新操作を使用すると、代わりにサーバー側で更新が実行されます。upsert フラグを有効にできます。この場合、挿入が必要な場合、MongoDB は $modifiers をフィルタークエリーオブジェクトに適用し、結果を挿入します。
保存するドキュメントに _id 属性が含まれていない場合、操作は挿入になり、作成された新しい _id が CamelMongoOid ヘッダーに配置されます。
以下に例を示します。
from("direct:insert")
.to("mongodb:myDb?database=flights&collection=tickets&operation=save");// route: from("direct:insert").to("mongodb:myDb?database=flights&collection=tickets&operation=save");
org.bson.Document docForSave = new org.bson.Document();
docForSave.put("key", "value");
Object result = template.requestBody("direct:insert", docForSave);35.7.2.3. update
コレクションの 1 つまたは複数のレコードを更新します。フィルタークエリーと更新ルールが必要です。
MongoDBConstants.CRITERIA ヘッダーを使用してフィルターを Bson として定義し、更新ルールを本文で Bson として定義できます。
エンリッチ後の更新Bson として MongoDBConstants.CRITERIA ヘッダーを使用してフィルターを定義し、更新前に mongodb にクエリーを実行する際に、集約ストラテジーでエンリッチパターンを使用してから mongodb 更新を適用する場合に、集約中に結果の camel エクスチェンジからフィルターを削除する必要があることに注意してください。集約中にこのヘッダーを削除しない場合、および/または camel エクスチェンジを mongodb プロデューサーエンドポイントに送信する前に MongoDBConstants.CRITERIA ヘッダーを再定義しない場合、mongodb の更新中に無効なcamel エクスチェンジペイロードが発生する可能性があります。
2 番目の方法は、正確に 2 つの要素を含む IN メッセージボディーとして List<Bson> を要求します。
- 要素 1 (インデックス 0) ⇒ フィルタークエリー ⇒ 通常のクエリーオブジェクトと同じように、影響を受けるオブジェクトを決定します
- 要素 2 (インデックス 1) ⇒ 更新ルール ⇒ 一致したオブジェクトがどのように更新されるか。MongoDB からのすべての 修飾子操作 がサポートされています。
Multiupdates
デフォルトでは、MongoDB は、複数のオブジェクトがフィルタークエリーに一致する場合でも、1 つのオブジェクトのみを更新します。一致する すべての レコードを更新するように MongoDB に指示するには、CamelMongoDbMultiUpdate IN メッセージヘッダーを true に設定します。
キー CamelMongoDbRecordsAffected を持つヘッダーが返されます (MongoDbConstants.RECORDS_AFFECTED 定数) 更新されたレコードの数 (WriteResult.getN() からコピーされます)。
次の IN メッセージヘッダーをサポートします。
| ヘッダーのキー | クイック定数 | 説明 (MongoDB API ドキュメントから抜粋) | 想定されるタイプ |
|---|---|---|---|
|
|
| 一致するすべてのオブジェクトに更新を適用する必要がある場合。http://www.mongodb.org/display/DOCS/Atomic+Operations を参照してください。 | boolean/Boolean |
|
|
| 存在しない場合にデータベースが要素を作成する必要があるかどうか | boolean/Boolean |
たとえば、次の例では、"scientist" フィールドの値を "Darwin" に設定することで、filterField フィールドが true に等しい すべての レコードを更新します。
// route: from("direct:update").to("mongodb:myDb?database=science&collection=notableScientists&operation=update");
List<Bson> body = new ArrayList<>();
Bson filterField = Filters.eq("filterField", true);
body.add(filterField);
BsonDocument updateObj = new BsonDocument().append("$set", new BsonDocument("scientist", new BsonString("Darwin")));
body.add(updateObj);
Object result = template.requestBodyAndHeader("direct:update", body, MongoDbConstants.MULTIUPDATE, true);// route: from("direct:update").to("mongodb:myDb?database=science&collection=notableScientists&operation=update");
Maps<String, Object> headers = new HashMap<>(2);
headers.add(MongoDbConstants.MULTIUPDATE, true);
headers.add(MongoDbConstants.FIELDS_FILTER, Filters.eq("filterField", true));
String updateObj = Updates.set("scientist", "Darwin");;
Object result = template.requestBodyAndHeaders("direct:update", updateObj, headers);// route: from("direct:update").to("mongodb:myDb?database=science&collection=notableScientists&operation=update");
String updateObj = "[{\"filterField\": true}, {\"$set\", {\"scientist\", \"Darwin\"}}]";
Object result = template.requestBodyAndHeader("direct:update", updateObj, MongoDbConstants.MULTIUPDATE, true);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 ドキュメントから抜粋) | 想定されるタイプ |
|---|---|---|---|
|
|
| 順序付きまたは順序なしの操作実行を実行します。デフォルトは 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 ドキュメントから抜粋) | 想定されるタイプ |
|---|---|---|---|
|
|
| バッチごとに返すドキュメントの数を設定します。 | int/Integer |
|
|
| 集約パイプラインステージを有効にして、データを一時ファイルに書き込みます。 | boolean/Boolean |
デフォルトでは、すべての結果のリストが返されます。結果のサイズによっては、これはメモリーを大量に消費する可能性があります。より安全な代替手段は、outputType=MongoIterable を設定することです。次の Processor は、メッセージ本文に iterable を表示し、結果を 1 つずつ処理できるようにします。したがって、バッチサイズを設定して iterable を返すと、結果の効率的な取得と処理が可能になります。
例は次のようになります。
List<Bson> aggregate = Arrays.asList(match(or(eq("scientist", "Darwin"), eq("scientist",
group("$scientist", sum("count", 1)));
from("direct:aggregate")
.setHeader(MongoDbConstants.BATCH_SIZE).constant(10)
.setBody().constant(aggregate)
.to("mongodb:myDb?database=science&collection=notableScientists&operation=aggregate&outputType=MongoIterable")
.split(body())
.streaming()
.to("mock:resultAggregate");
.split (body ()) を呼び出すだけでエントリーを 1 つずつルートに送信できますが、最初にすべてのエントリーをメモリーにロードすることに注意してください。したがって、データをバッチでメモリーにロードするには、.streaming() を呼び出す必要があります。
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
コンシューマーにはいくつかのタイプがあります。
- Tailable カーソルコンシューマー
- Change Streams コンシューマー
35.8.1. Tailable カーソルコンシューマー
MongoDB は、*nix システムの tail -f コマンドのようにカーソルを開いたままにすることで、コレクションから進行中のデータを瞬時に消費するメカニズムを提供します。このメカニズムは、クライアントがスケジュールされた間隔で ping を返して新しいデータを取得するのではなく、新しいデータが利用可能になったときにサーバーがクライアントにプッシュするため、スケジュールされたポーリングよりもはるかに効率的です。また、冗長なネットワークトラフィックも削減されます。
tailable カーソルを使用するための必要条件は 1 つだけです。つまり、コレクションは " 上限付きコレクション " である必要があります。これは、N 個のオブジェクトのみを保持することを意味し、制限に達すると、MongoDB は最初に挿入されたのと同じ順序で古いオブジェクトをフラッシュします。詳細は、http://www.mongodb.org/display/DOCS/Tailable+Cursors を参照してください。
Camel MongoDB コンポーネントは、tailable カーソルコンシューマーを実装しているため、この機能を Camel ルートで使用できるようになります。新しいオブジェクトが挿入されると、MongoDB はそれらを Document として自然な順序で tailable カーソルコンシューマーにプッシュします。tailable カーソルコンシューマーはそれらをエクスチェンジに変換し、ルートロジックをトリガーします。
35.9. tailable カーソルコンシューマーの仕組み
カーソルを tailable カーソルに変えるには、最初にカーソルを生成するときに、いくつかの特別なフラグを MongoDB に通知する必要があります。作成されると、カーソルは開いたままになり、新しいデータが到着するまで MongoCursor.next() メソッドを呼び出すとブロックされます。ただし、MongoDB サーバーは、不確定な期間が経過しても新しいデータが表示されない場合、カーソルを強制終了する権利を留保します。新しいデータを引き続き使用する場合は、カーソルを再生成する必要があります。そのためには、中断した位置を覚えておく必要があります。そうしないと、もう一度最初から消費し始めます。
Camel MongoDB テーラブルカーソルコンシューマーは、これらすべてのタスクを処理します。タイムスタンプ、シーケンシャル ID など、再生成されるたびにカーソルを配置するマーカーとして機能する、増加する性質のデータ内のフィールドにキーを提供するだけで済みます。MongoDB でサポートされている任意のデータ型にすることができます。日付、文字列、および整数がうまく機能することがわかっています。このコンポーネントのコンテキストでは、このメカニズムをテールトラッキングと呼びます。
コンシューマーはこのフィールドの最後の値を記憶し、カーソルが再生成されるたびに、次のようなフィルターを使用してクエリーを実行します。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 カーソルコンシューマーは再び先頭から消費を開始し、ルートに重複レコードを送信する可能性が非常に高くなります。
この状況を克服するために、永続的なテール追跡 機能を有効にして、MongoDB データベース内の特別なコレクションで最後に消費された増加値を追跡することもできます。コンシューマーが再び初期化されると、最後に追跡された値が復元され、何も起こらなかったかのように続行されます。
最後に読み取られた値は、カーソルが再生成されるたびとコンシューマーがシャットダウンするときの 2 つの場合に保持されます。需要があれば、堅牢性を高めるために、将来的には定期的な間隔 (5 秒ごとにフラッシュ) で永続化することも検討する可能性があります。この機能をリクエストするには、Camel JIRA でチケットを開いてください。
35.11. 永続的なテールトラッキングを有効にする
この機能を有効にするには、エンドポイント URI で少なくとも次のオプションを設定します。
-
persistentTailTrackingオプションをtrueに設定 -
このコンシューマーの一意の識別子に
persistentIdオプションを追加して、同じコレクションを多くのコンシューマーで再利用できるようにします
さらに、tailTrackDb、tailTrackCollection、および tailTrackField オプションを設定して、ランタイム情報が保存される場所をカスタマイズできます。各オプションの説明については、このページの上部にあるエンドポイントオプションの表を参照してください。
たとえば、次のルートは、departureTime を増加フィールドとして使用し、デフォルトの再生成カーソル遅延を 1000 ミリ秒に設定して、永続的なテールトラッキングをオンにし、cancellationsTracker の下で永続化して、flights.cancellations キャップコレクションから消費します。flights.camelTailTracking の id で、最後に処理された値を lastTrackingValue フィールドに格納します (camelTailTracking と lastTrackingValue はデフォルトです)。
from("mongodb:myDb?database=flights&collection=cancellations&tailTrackIncreasingField=departureTime&persistentTailTracking=true" +
"&persistentId=cancellationsTracker")
.id("tailableCursorConsumer2")
.autoStartup(false)
.to("mock:test");以下は、上記と同じ別の例ですが、永続的なテールトラッキングランタイム情報が trackers.camelTrackers コレクションの lastProcessedDepartureTime フィールドに格納されます。
from("mongodb:myDb?database=flights&collection=cancellations&tailTrackIncreasingField=departureTime&persistentTailTracking=true" +
"&persistentId=cancellationsTracker&tailTrackDb=trackers&tailTrackCollection=camelTrackers" +
"&tailTrackField=lastProcessedDepartureTime")
.id("tailableCursorConsumer3")
.autoStartup(false)
.to("mock:test");35.11.1. Change Streams コンシューマー
変更ストリームを使用すると、MongoDB oplog を追跡する複雑さやリスクなしに、アプリケーションはリアルタイムのデータ変更にアクセスできます。アプリケーションは変更ストリームを使用して、コレクションのすべてのデータ変更をサブスクライブし、すぐに対応できます。変更ストリームは集約フレームワークを使用するため、アプリケーションは特定の変更をフィルタリングしたり、通知を自由に変換したりすることもできます。交換本体には、変更の完全なドキュメントが含まれます。
Change Streams Consumer を設定するには、consumerType、database、collection、およびオプションの JSON プロパティー streamFilter を指定して、イベントをフィルタリングする必要があります。その JSON プロパティーは、MongoDB の標準的な $match 集計です。XML DSL 設定を使用して簡単に指定できます。
<route id="filterConsumer">
<from uri="mongodb:myDb?consumerType=changeStreams&database=flights&collection=tickets&streamFilter={ '$match':{'$or':[{'fullDocument.stringValue': 'specificValue'}]} }"/>
<to uri="mock:test"/>
</route>Java 設定:
from("mongodb:myDb?consumerType=changeStreams&database=flights&collection=tickets&streamFilter={ '$match':{'$or':[{'fullDocument.stringValue': 'specificValue'}]} }")
.to("mock:test");streamFilter 値をプロパティープレースホルダーに外部化することで、エンドポイント URI パラメーターを よりクリーン で読みやすくすることができます。
changeStreams コンシューマータイプは、次の OUT ヘッダーも返します。
| ヘッダーのキー | クイック定数 | 説明 (MongoDB API ドキュメントから抜粋) | データのタイプ |
|---|---|---|---|
|
|
| 発生した操作のタイプ。値は、insert、delete、replace、update、drop、rename、dropDatabase、invalidate のいずれかです。 | String |
|
|
| 挿入、置換、削除、更新操作 (つまり、CRUD 操作) によって作成または変更されたドキュメントの _id を含むドキュメント。シャードコレクションの場合、ドキュメントの完全なシャードキーも表示されます。_id フィールドは、すでにシャードキーの一部である場合は繰り返されません。 | ObjectId |
35.12. 型変換
camel-mongodb コンポーネントに含まれる MongoDbBasicConverters 型コンバーターは、次の変換を提供します。
| Name | タイプから | 入力し | どのように変更を加えればよいですか ? |
|---|---|---|---|
| fromMapToDocument |
|
|
|
| fromDocumentToMap |
|
|
|
| fromStringToDocument |
|
|
|
| fromStringToObjectId |
|
|
|
| fromFileToDocument |
|
|
内部で |
| fromInputStreamToDocument |
|
|
入力ストリームのバイトを |
| fromStringToList |
|
|
|
この型コンバーターは自動検出されるため、手動で設定する必要はありません。
35.13. Spring Boot 自動設定
Spring Boot で mongodb を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-mongodb-starter</artifactId> <version>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に示す 5 個のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| camel.component.mongodb.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | ブール値 |
| camel.component.mongodb.bridge-error-handler | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | ブール値 |
| camel.component.mongodb.enabled | mongodb コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | ブール値 | |
| camel.component.mongodb.lazy-start-producer | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | ブール値 |
| camel.component.mongodb.mongo-connection | 接続に使用される共有クライアント。コンポーネントから生成されたすべてのエンドポイントは、この接続クライアントを共有します。オプションは com.mongodb.client.MongoClient タイプです。 | MongoClient |
第36章 Netty
プロデューサーとコンシューマーの両方がサポート対象
Camel の Netty コンポーネントは、Netty プロジェクトバージョン 4 に基づくソケット通信コンポーネントです。
Netty は、プロトコルサーバーやクライアントなどの networkServerInitializerFactory アプリケーションの迅速かつ簡単な開発を可能にする NIO クライアントサーバーフレームワークです。
Netty は、TCP や UDP ソケットサーバーなどのネットワークプログラミングを大幅に簡素化および合理化します。
この camel コンポーネントは、プロデューサーエンドポイントとコンシューマーエンドポイントの両方をサポートします。
Netty コンポーネントにはいくつかのオプションがあり、多数の TCP/UDP 通信パラメーター (バッファーサイズ、keepAlive、tcpNoDelay など) をきめ細かく制御し、Camel ルートでの In-Only 通信と In-Out 通信の両方を容易にします。
Maven ユーザーは、このコンポーネントの pom.xml に以下の依存関係を追加する必要があります。
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-netty</artifactId>
<version>3.14.5.redhat-00018</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 の両方のプロデューサーエンドポイントとコンシューマーエンドポイントをサポートします。
36.2. オプションの設定
Camel コンポーネントは、以下の 2 つのレベルで設定されます。
- コンポーネントレベル
- エンドポイントレベル
36.2.1. コンポーネントオプションの設定
コンポーネントレベルは、エンドポイントによって継承される一般的な設定を保持する最上位レベルです。たとえば、コンポーネントにはセキュリティー設定、認証用の認証情報、ネットワーク接続の URL などが含まれます。
コンポーネントによってはオプションが少ししかないものもあれば、多くのオプションを持つものもあります。コンポーネントには通常、一般的に使用されるデフォルトが事前設定されているため、コンポーネントにいくつかのオプションを設定するだけで済みます。あるいは、全く何も設定しない場合もあります。
コンポーネントの設定は、Component DSL、設定ファイル(application.properties|yaml)、または直接 Java コードで実行できます。
36.2.2. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定する タイプセーフ 方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
36.3. コンポーネントオプション
Netty コンポーネントは、以下に示す 73 個のオプションをサポートしています。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| configuration (共通) | エンドポイントの作成時に NettyConfiguration を設定として使用するには。 | NettyConfiguration | |
| disconnect (共通) | 使用直後に Netty Channel を切断 (クローズ) するかどうか。コンシューマーとプロデューサーの両方に使用できます。 | false | boolean |
| keepAlive (共通) | 非アクティブのためにソケットが閉じられないようにするための設定。 | true | boolean |
| reuseAddress (共通) | ソケットの多重化を容易にするための設定。 | true | boolean |
| reuseChannel (共通) | このオプションにより、プロデューサとコンシューマー (クライアントモード) は、エクスチェンジを処理するライフサイクルで同じ Netty チャネルを再利用できます。これは、Camel ルートでサーバーを複数回呼び出す必要があり、同じネットワーク接続を使用したい場合に便利です。これを使用すると、チャネルはエクスチェンジが完了するまで接続プールに返されません。または、切断オプションが true に設定されている場合は切断されます。再利用されたチャネルは、キー NettyConstants#NETTY_CHANNEL を持つエクスチェンジプロパティーとしてエクスチェンジに保存されます。これにより、ルーティング中にチャネルを取得して使用することもできます。 | false | boolean |
| sync (共通) | エンドポイントを一方向または要求応答として設定する設定。 | true | boolean |
| tcpNoDelay (共通) | TCP プロトコルのパフォーマンスを向上させるための設定。 | true | boolean |
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| broadcast (コンシューマー) | UDP 経由のマルチキャストを選択するための設定。 | false | boolean |
| clientMode (コンシューマー) | clientMode が true の場合、netty コンシューマーはアドレスを TCP クライアントとして接続します。 | false | boolean |
| reconnect (コンシューマー) | コンシューマーの clientMode でのみ使用されます。これが有効になっている場合、コンシューマーは切断時に再接続を試みます。 | true | boolean |
| reconnectInterval (コンシューマー) | 再接続し、clientMode が有効になっている場合に使用されます。再接続を試みる間隔 (ミリ秒)。 | 10000 | int |
| backlog (コンシューマー (上級)) | netty コンシューマー (サーバー) のバックログを設定できます。バックログは、OS によってはベストエフォートであることに注意してください。このオプションを 200、500、1000 などの値に設定すると、TCP スタックに受け入れキューの長さが通知されます。このオプションが設定されていない場合、バックログは OS の設定に依存します。 | int | |
| bossCount (コンシューマー (上級)) | netty が nio モードで動作する場合、Netty のデフォルトの BossCount パラメーターである 1 を使用します。ユーザーはこのオプションを使用して、Netty のデフォルトの BossCount をオーバーライドできます。 | 1 | int |
| bossGroup (コンシューマー (上級)) | NettyEndpoint を介してサーバー側の新しい接続を処理するために使用できる BossGroup を設定します。 | EventLoopGroup | |
| disconnectOnNoReply (コンシューマー (上級)) | 同期が有効になっている場合、このオプションは、返信がない場合に NettyConsumer を切断するかどうかを指定します。 | true | boolean |
| executorService (コンシューマー (上級)) | 指定された EventExecutorGroup を使用します。 | EventExecutorGroup | |
| maximumPoolSize (コンシューマー (上級)) | netty コンシューマーが注文したスレッドプールの最大スレッドプールサイズを設定します。デフォルトのサイズは 2 x cpu_core プラス 1 です。この値をたとえば 10 に設定すると、2 x cpu_core に 1 を加えた値がより高い値でない限り、10 スレッドが使用され、オーバーライドされて使用されます。たとえば、8 つのコアがある場合、コンシューマースレッドプールは 17 になります。このスレッドプールは、Netty から受信したメッセージを Camel がルーティングするために使用されます。メッセージの順序を確認するために別のスレッドプールを使用します。また、一部のメッセージがブロックされた場合に備えて、nettys ワーカースレッド (イベントループ) は影響を受けません。 | int | |
| nettyServerBootstrapFactory (コンシューマー (上級)) | カスタム NettyServerBootstrapFactory を使用するには。 | NettyServerBootstrapFactory | |
| networkInterface (コンシューマー (上級)) | UDP を使用する場合、このオプションを使用してネットワークインターフェイスをその名前で指定できます (マルチキャストグループに参加するための eth0 など)。 | String | |
| noReplyLogLevel (consumer (advanced)) | 同期が有効になっている場合、このオプションは NettyConsumer がログに記録するときに使用するログレベルを決定し、返信する応答がありません。 列挙値:
| WARN | LoggingLevel |
| serverClosedChannelExceptionCaughtLogLevel (consumer (advanced)) | サーバー (NettyConsumer) が java.nio.channels.ClosedChannelException をキャッチすると、このログレベルを使用してログに記録されます。これは、クローズドチャネル例外のログ記録を回避するために使用されます。これは、クライアントが突然切断され、Netty サーバーでクローズド例外のフラッドが発生する可能性があるためです。 列挙値:
| DEBUG | LoggingLevel |
| serverExceptionCaughtLogLevel (consumer (advanced)) | サーバー (NettyConsumer) が例外をキャッチすると、このログレベルを使用してログに記録されます。 列挙値:
| WARN | LoggingLevel |
| serverInitializerFactory (コンシューマー (上級)) | カスタム ServerInitializerFactory を使用するには。 | ServerInitializerFactory | |
| usingExecutorService (コンシューマー (上級)) | 順序付けられたスレッドプールを使用して、イベントが同じチャネルで順番に処理されるかどうか。 | true | boolean |
| connectTimeout (プロデューサー) | ソケット接続が使用可能になるまで待機する時間。値はミリ秒単位です。 | 10000 | int |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| requestTimeout (プロデューサー) | リモートサーバーを呼び出すときに、Netty プロデューサーのタイムアウトを使用できるようにします。デフォルトでは、タイムアウトは使用されていません。値はミリ秒単位なので、たとえば 30000 は 30 秒です。requestTimeout は、Netty の ReadTimeoutHandler を使用してタイムアウトをトリガーしています。 | long | |
| clientInitializerFactory (プロデューサー (上級)) | カスタム ClientInitializerFactory を使用するには。 | ClientInitializerFactory | |
| correlationManager (プロデューサー (上級)) | カスタム相関マネージャーを使用して、netty プロデューサーで要求/応答を使用するときに、要求メッセージと応答メッセージがどのようにマップされるかを管理します。これは、要求メッセージと応答メッセージの両方に相関 ID がある場合など、要求を応答と一緒にマップする方法がある場合にのみ使用してください。これは、netty の同じチャネル (別名接続) で同時メッセージを多重化したい場合に使用できます。これを行う場合、リクエストメッセージと応答メッセージを相互に関連付ける方法が必要です。これにより、継続してルーティングされる前に、進行中の Camel エクスチェンジに正しい応答を格納できます。カスタム相関マネージャーを作成するときは、TimeoutCorrelationManagerSupport を拡張することをお勧めします。これにより、タイムアウトや他の方法で実装する必要があるその他の複雑さもサポートされます。詳細については、producerPoolEnabled オプションも参照してください。 | NettyCamelStateCorrelationManager | |
| lazyChannelCreation (producer (advanced)) | Camel プロデューサーの起動時にリモートサーバーが稼働していない場合は、例外を回避するためにチャネルを遅延作成できます。 | true | boolean |
| producerPoolEnabled (プロデューサー (上級)) | プロデューサープールが有効かどうか。重要: これをオフにすると、リクエスト/リプライを実行している場合にも、単一の共有接続がプロデューサーに使用されます。つまり、返信が順不同で戻ってきた場合、インタリーブされた応答に問題が生じる可能性があります。したがって、Camel でメッセージの処理を継続するロールを持つ Camel コールバックに応答を適切に関連付けることができるように、要求メッセージと応答メッセージの両方に相関 ID が必要です。これを行うには、NettyCamelStateCorrelationManager を相関マネージャーとして実装し、correlationManager オプションを介して設定する必要があります。詳細は、correlationManager オプションも参照してください。 | true | boolean |
| producerPoolMaxIdle (プロデューサー (上級)) | プール内のアイドルインスタンス数の上限を設定します。 | 100 | int |
| producerPoolMaxTotal (プロデューサー (上級)) | 特定の時間にプールによって割り当てられる (クライアントにチェックアウトされるか、チェックアウトを待機するアイドル) オブジェクトの数に上限を設定します。無制限の場合は負の値を使用します。 | -1 | int |
| producerPoolMinEvictableIdle (producer (advanced)) | アイドル状態のオブジェクト Evictor によるエビクションの対象となる前に、オブジェクトがプール内でアイドル状態になる最小時間 (ミリ単位の値) を設定します。 | 300000 | long |
| producerPoolMinIdle (producer (advanced)) | evictor スレッド (アクティブな場合) が新しいオブジェクトを生成する前に、プロデューサープールで許可されるインスタンスの最小数を設定します。 | int | |
| udpConnectionlessSending (プロデューサー (上級)) | このオプションは接続のない UDP 送信をサポートします。接続された udp send は、受信ポートでリッスンしている人がいない場合、PortUnreachableException を受け取ります。 | false | boolean |
| useByteBuf (プロデューサー (上級)) | useByteBuf が true の場合、netty プロデューサーはメッセージ本文を送信する前に ByteBuf に変換します。 | false | boolean |
| ホスト名検証 (セキュリティー) | SSLEngine でのホスト名検証を有効または無効にします。 | false | boolean |
| allowSerializedHeaders (上級) | transferExchange が true の場合にのみ TCP に使用されます。true に設定すると、ヘッダーとプロパティーのシリアル化可能なオブジェクトが交換に追加されます。そうしないと、Camel はシリアル化できないオブジェクトを除外し、WARN レベルでログに記録します。 | false | boolean |
| autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
| channelGroup (上級) | 明示的な ChannelGroup を使用するには。 | ChannelGroup | |
| nativeTransport (上級) | NIO の代わりにネイティブトランスポートを使用するかどうか。ネイティブトランスポートはホストオペレーティングシステムを利用し、一部のプラットフォームでのみサポートされます。使用しているホストオペレーティングシステムの netty JAR を追加する必要があります。詳細については、を参照してください。 | false | boolean |
| options (上級) | オプションを使用して、追加の netty オプションを設定できます。接頭辞として。たとえば、netty オプション child.keepAlive=false を設定するには、option.child.keepAlive=false とします。使用可能なオプションについては、Netty のドキュメントを参照してください。 | マップ | |
| receiveBufferSize (上級) | インバウンド通信中に使用される TCP/UDP バッファーサイズ。サイズはバイトです。 | 65536 | int |
| receiveBufferSizePredictor (上級) | バッファーサイズプレディクターを設定します。詳細は、Jetty のドキュメントとこのメールスレッドを参照してください。 | int | |
| sendBufferSize (上級) | アウトバウンド通信中に使用される TCP/UDP バッファーサイズ。サイズはバイトです。 | 65536 | int |
| transferExchange (上級) | TCP にのみ使用されます。ボディーだけでなく、ネットワーク経由でエクスチェンジを転送することができます。In body、Out body、fault body、In ヘッダー、Out ヘッダー、Fault ヘッダー、exchange プロパティー、exchange 例外フィールドが転送されます。これには、オブジェクトがシリアライズ可能である必要があります。Camel はシリアル化できないオブジェクトを除外し、WARN レベルでログに記録します。 | false | boolean |
| udpByteArrayCodec (advanced) | UDP 専用です。Java シリアライゼーションプロトコルの代わりにバイト配列コーデックの使用を有効にした場合。 | false | boolean |
| workerCount (上級) | netty が nio モードで動作する場合、Netty のデフォルトの workerCount パラメーター (cpu_core_threads x 2) を使用します。ユーザーはこのオプションを使用して、Netty のデフォルトの workerCount をオーバーライドできます。 | int | |
| workerGroup (上級) | ボススレッドプールとして明示的な EventLoopGroup を使用するには。たとえば、スレッドプールを複数のコンシューマーまたはプロデューサーと共有する場合などです。デフォルトでは、各コンシューマーまたはプロデューサーには、2 x CPU カウントのコアスレッドを備えた独自のワーカープールがあります。 | EventLoopGroup | |
| allowDefaultCodec (codec) | netty コンポーネントは、encoder/decoder が null で textline が false の場合、デフォルトのコーデックをインストールします。allowDefaultCodec を false に設定すると、netty コンポーネントがデフォルトコーデックをフィルターチェーンの最初の要素としてインストールするのを防ぎます。 | true | boolean |
| autoAppendDelimiter (codec) | テキストラインコーデックを使用して送信するときに、不足している終了区切り文字を自動追加するかどうか。 | true | boolean |
| decoderMaxLineLength (codec) | テキストラインコーデックに使用する行の最大長。 | 1024 | int |
| decoders (codec) | 使用するデコーダーのリスト。コンマで区切られた値を持つ文字列を使用して、値をレジストリーで検索することができます。Camel がルックアップする必要があることを認識できるように、値の前に # を付けることを忘れないでください。 | リスト | |
| delimiter (codec) | テキストラインコーデックに使用する区切り文字。可能な値は LINE と NULL です。 列挙値:
| LINE | TextLineDelimiter |
| encoders (codec) | 使用するエンコーダーのリスト。コンマで区切られた値を持つ文字列を使用して、値をレジストリーで検索することができます。Camel がルックアップする必要があることを認識できるように、値の前に # を付けることを忘れないでください。 | リスト | |
| encoding (codec) | テキスト行コーデックに使用するエンコーディング (文字セット名)。指定しない場合、Camel は JVM のデフォルトの文字セットを使用します。 | String | |
| textline (codec) | TCP にのみ使用されます。コーデックが指定されていない場合、このフラグを使用して、テキスト行ベースのコーデックを示すことができます。指定されていない場合、または値が false の場合、オブジェクトのシリアル化は TCP 経由であると想定されますが、デフォルトでシリアル化できるのは文字列のみです。 | false | boolean |
| enabledProtocols (セキュリティー) | SSL を使用するときに有効にするプロトコル。 | TLSv1,TLSv1.1,TLSv1.2 | String |
| keyStoreFile (セキュリティー) | 暗号化に使用されるクライアント側の証明書キーストア。 | File | |
| keyStoreFormat (セキュリティー) | ペイロードの暗号化に使用されるキーストア形式。設定されていない場合、デフォルトで JKS になります。 | String | |
| keyStoreResource (セキュリティー) | 暗号化に使用されるクライアント側の証明書キーストア。デフォルトではクラスパスからロードされますが、classpath:、file:、または http: をプレフィックとして指定して、異なるシステムからリソースをロードすることもできます。 | String | |
| needClientAuth (セキュリティー) | SSL の使用時にサーバーがクライアント認証を必要とするかどうかを設定します。 | false | boolean |
| パスフレーズ (セキュリティー) | SSH を使用して送信されたペイロードを暗号化/復号化するために使用するパスワード設定。 | String | |
| securityProvider (セキュリティー) | ペイロードの暗号化に使用するセキュリティープロバイダー。設定されていない場合、デフォルトは SunX509 です。 | String | |
| ssl (セキュリティー) | このエンドポイントに SSL 暗号化を適用するかどうかを指定する設定。 | false | boolean |
| sslClientCertHeaders (security) | 有効で SSL モードの場合、Netty コンシューマーは、サブジェクト名、発行者名、シリアル番号、有効な日付範囲などのクライアント証明書に関する情報を含むヘッダーで Camel メッセージを強化します。 | false | boolean |
| sslContextParameters (security) | SSLContextParameters を使用してセキュリティーを設定する場合。 | SSLContextParameters | |
| sslHandler (セキュリティー) | SSL ハンドラーを返すために使用できるクラスへの参照。 | SslHandler | |
| trustStoreFile (セキュリティー) | 暗号化に使用されるサーバー側の証明書キーストア。 | File | |
| trustStoreResource (セキュリティー) | 暗号化に使用されるサーバー側の証明書キーストア。デフォルトではクラスパスからロードされますが、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 の使用するプロトコル。 列挙値:
| String | |
| host (共通) | 必須 ホスト名。コンシューマーの場合、ホスト名は localhost または 0.0.0.0 です。プロデューサーの場合、ホスト名は接続先のリモートホストです。 | String | |
| port (共通) | 必須 ホストのポート番号。 | int |
36.4.2. クエリーパラメーター (71 パラメーター)
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| disconnect (共通) | 使用直後に Netty Channel を切断 (クローズ) するかどうか。コンシューマーとプロデューサーの両方に使用できます。 | false | boolean |
| keepAlive (共通) | 非アクティブのためにソケットが閉じられないようにするための設定。 | true | boolean |
| reuseAddress (共通) | ソケットの多重化を容易にするための設定。 | true | boolean |
| reuseChannel (共通) | このオプションにより、プロデューサとコンシューマー (クライアントモード) は、エクスチェンジを処理するライフサイクルで同じ Netty チャネルを再利用できます。これは、Camel ルートでサーバーを複数回呼び出す必要があり、同じネットワーク接続を使用したい場合に便利です。これを使用すると、チャネルはエクスチェンジが完了するまで接続プールに返されません。または、切断オプションが true に設定されている場合は切断されます。再利用されたチャネルは、キー NettyConstants#NETTY_CHANNEL を持つエクスチェンジプロパティーとしてエクスチェンジに保存されます。これにより、ルーティング中にチャネルを取得して使用することもできます。 | false | boolean |
| sync (共通) | エンドポイントを一方向または要求応答として設定する設定。 | true | boolean |
| tcpNoDelay (共通) | TCP プロトコルのパフォーマンスを向上させるための設定。 | true | boolean |
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| broadcast (コンシューマー) | UDP 経由のマルチキャストを選択するための設定。 | false | boolean |
| clientMode (コンシューマー) | clientMode が true の場合、netty コンシューマーはアドレスを TCP クライアントとして接続します。 | false | boolean |
| reconnect (コンシューマー) | コンシューマーの clientMode でのみ使用されます。これが有効になっている場合、コンシューマーは切断時に再接続を試みます。 | true | boolean |
| reconnectInterval (コンシューマー) | 再接続し、clientMode が有効になっている場合に使用されます。再接続を試みる間隔 (ミリ秒)。 | 10000 | int |
| backlog (コンシューマー (上級)) | netty コンシューマー (サーバー) のバックログを設定できます。バックログは、OS によってはベストエフォートであることに注意してください。このオプションを 200、500、1000 などの値に設定すると、TCP スタックに受け入れキューの長さが通知されます。このオプションが設定されていない場合、バックログは OS の設定に依存します。 | int | |
| bossCount (コンシューマー (上級)) | netty が nio モードで動作する場合、Netty のデフォルトの BossCount パラメーターである 1 を使用します。ユーザーはこのオプションを使用して、Netty のデフォルトの BossCount をオーバーライドできます。 | 1 | int |
| bossGroup (コンシューマー (上級)) | NettyEndpoint を介してサーバー側の新しい接続を処理するために使用できる BossGroup を設定します。 | EventLoopGroup | |
| disconnectOnNoReply (コンシューマー (上級)) | 同期が有効になっている場合、このオプションは、返信がない場合に NettyConsumer を切断するかどうかを指定します。 | true | boolean |
| exceptionHandler (コンシューマー (上級)) | コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
| exchangePattern (コンシューマー (上級)) | コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
| nettyServerBootstrapFactory (コンシューマー (上級)) | カスタム NettyServerBootstrapFactory を使用するには。 | NettyServerBootstrapFactory | |
| networkInterface (コンシューマー (上級)) | UDP を使用する場合、このオプションを使用してネットワークインターフェイスをその名前で指定できます (マルチキャストグループに参加するための eth0 など)。 | String | |
| noReplyLogLevel (consumer (advanced)) | 同期が有効になっている場合、このオプションは NettyConsumer がログに記録するときに使用するログレベルを決定し、返信する応答がありません。 列挙値:
| WARN | LoggingLevel |
| serverClosedChannelExceptionCaughtLogLevel (consumer (advanced)) | サーバー (NettyConsumer) が java.nio.channels.ClosedChannelException をキャッチすると、このログレベルを使用してログに記録されます。これは、クローズドチャネル例外のログ記録を回避するために使用されます。これは、クライアントが突然切断され、Netty サーバーでクローズド例外のフラッドが発生する可能性があるためです。 列挙値:
| DEBUG | LoggingLevel |
| serverExceptionCaughtLogLevel (consumer (advanced)) | サーバー (NettyConsumer) が例外をキャッチすると、このログレベルを使用してログに記録されます。 列挙値:
| WARN | LoggingLevel |
| serverInitializerFactory (コンシューマー (上級)) | カスタム ServerInitializerFactory を使用するには。 | ServerInitializerFactory | |
| usingExecutorService (コンシューマー (上級)) | 順序付けられたスレッドプールを使用して、イベントが同じチャネルで順番に処理されるかどうか。 | true | boolean |
| connectTimeout (プロデューサー) | ソケット接続が使用可能になるまで待機する時間。値はミリ秒単位です。 | 10000 | int |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| requestTimeout (プロデューサー) | リモートサーバーを呼び出すときに、Netty プロデューサーのタイムアウトを使用できるようにします。デフォルトでは、タイムアウトは使用されていません。値はミリ秒単位なので、たとえば 30000 は 30 秒です。requestTimeout は、Netty の ReadTimeoutHandler を使用してタイムアウトをトリガーしています。 | long | |
| clientInitializerFactory (プロデューサー (上級)) | カスタム ClientInitializerFactory を使用するには。 | ClientInitializerFactory | |
| correlationManager (プロデューサー (上級)) | カスタム相関マネージャーを使用して、netty プロデューサーで要求/応答を使用するときに、要求メッセージと応答メッセージがどのようにマップされるかを管理します。これは、要求メッセージと応答メッセージの両方に相関 ID がある場合など、要求を応答と一緒にマップする方法がある場合にのみ使用してください。これは、netty の同じチャネル (別名接続) で同時メッセージを多重化したい場合に使用できます。これを行う場合、リクエストメッセージと応答メッセージを相互に関連付ける方法が必要です。これにより、継続してルーティングされる前に、進行中の Camel エクスチェンジに正しい応答を格納できます。カスタム相関マネージャーを作成するときは、TimeoutCorrelationManagerSupport を拡張することをお勧めします。これにより、タイムアウトや他の方法で実装する必要があるその他の複雑さもサポートされます。詳細については、producerPoolEnabled オプションも参照してください。 | NettyCamelStateCorrelationManager | |
| lazyChannelCreation (producer (advanced)) | Camel プロデューサーの起動時にリモートサーバーが稼働していない場合は、例外を回避するためにチャネルを遅延作成できます。 | true | boolean |
| producerPoolEnabled (プロデューサー (上級)) | プロデューサープールが有効かどうか。重要: これをオフにすると、リクエスト/リプライを実行している場合にも、単一の共有接続がプロデューサーに使用されます。つまり、返信が順不同で戻ってきた場合、インタリーブされた応答に問題が生じる可能性があります。したがって、Camel でメッセージの処理を継続するロールを持つ Camel コールバックに応答を適切に関連付けることができるように、要求メッセージと応答メッセージの両方に相関 ID が必要です。これを行うには、NettyCamelStateCorrelationManager を相関マネージャーとして実装し、correlationManager オプションを介して設定する必要があります。詳細は、correlationManager オプションも参照してください。 | true | boolean |
| producerPoolMaxIdle (プロデューサー (上級)) | プール内のアイドルインスタンス数の上限を設定します。 | 100 | int |
| producerPoolMaxTotal (プロデューサー (上級)) | 特定の時間にプールによって割り当てられる (クライアントにチェックアウトされるか、チェックアウトを待機するアイドル) オブジェクトの数に上限を設定します。無制限の場合は負の値を使用します。 | -1 | int |
| producerPoolMinEvictableIdle (producer (advanced)) | アイドル状態のオブジェクト Evictor によるエビクションの対象となる前に、オブジェクトがプール内でアイドル状態になる最小時間 (ミリ単位の値) を設定します。 | 300000 | long |
| producerPoolMinIdle (producer (advanced)) | evictor スレッド (アクティブな場合) が新しいオブジェクトを生成する前に、プロデューサープールで許可されるインスタンスの最小数を設定します。 | int | |
| udpConnectionlessSending (プロデューサー (上級)) | このオプションは接続のない UDP 送信をサポートします。接続された udp send は、受信ポートでリッスンしている人がいない場合、PortUnreachableException を受け取ります。 | false | boolean |
| useByteBuf (プロデューサー (上級)) | useByteBuf が true の場合、netty プロデューサーはメッセージ本文を送信する前に ByteBuf に変換します。 | false | boolean |
| ホスト名検証 (セキュリティー) | SSLEngine でのホスト名検証を有効または無効にします。 | false | boolean |
| allowSerializedHeaders (上級) | transferExchange が true の場合にのみ TCP に使用されます。true に設定すると、ヘッダーとプロパティーのシリアル化可能なオブジェクトが交換に追加されます。そうしないと、Camel はシリアル化できないオブジェクトを除外し、WARN レベルでログに記録します。 | false | boolean |
| channelGroup (上級) | 明示的な ChannelGroup を使用するには。 | ChannelGroup | |
| nativeTransport (上級) | NIO の代わりにネイティブトランスポートを使用するかどうか。ネイティブトランスポートはホストオペレーティングシステムを利用し、一部のプラットフォームでのみサポートされます。使用しているホストオペレーティングシステムの netty JAR を追加する必要があります。詳細については、を参照してください。 | false | boolean |
| options (上級) | オプションを使用して、追加の netty オプションを設定できます。接頭辞として。たとえば、netty オプション child.keepAlive=false を設定するには、option.child.keepAlive=false とします。使用可能なオプションについては、Netty のドキュメントを参照してください。 | マップ | |
| receiveBufferSize (上級) | インバウンド通信中に使用される TCP/UDP バッファーサイズ。サイズはバイトです。 | 65536 | int |
| receiveBufferSizePredictor (上級) | バッファーサイズプレディクターを設定します。詳細は、Jetty のドキュメントとこのメールスレッドを参照してください。 | int | |
| sendBufferSize (上級) | アウトバウンド通信中に使用される TCP/UDP バッファーサイズ。サイズはバイトです。 | 65536 | int |
| synchronous (上級) | 同期処理を厳密に使用するかどうかを設定します。 | false | boolean |
| transferExchange (上級) | TCP にのみ使用されます。ボディーだけでなく、ネットワーク経由でエクスチェンジを転送することができます。In body、Out body、fault body、In ヘッダー、Out ヘッダー、Fault ヘッダー、exchange プロパティー、exchange 例外フィールドが転送されます。これには、オブジェクトがシリアライズ可能である必要があります。Camel はシリアル化できないオブジェクトを除外し、WARN レベルでログに記録します。 | false | boolean |
| udpByteArrayCodec (advanced) | UDP 専用です。Java シリアライゼーションプロトコルの代わりにバイト配列コーデックの使用を有効にした場合。 | false | boolean |
| workerCount (上級) | netty が nio モードで動作する場合、Netty のデフォルトの workerCount パラメーター (cpu_core_threads x 2) を使用します。ユーザーはこのオプションを使用して、Netty のデフォルトの workerCount をオーバーライドできます。 | int | |
| workerGroup (上級) | ボススレッドプールとして明示的な EventLoopGroup を使用するには。たとえば、スレッドプールを複数のコンシューマーまたはプロデューサーと共有する場合などです。デフォルトでは、各コンシューマーまたはプロデューサーには、2 x CPU カウントのコアスレッドを備えた独自のワーカープールがあります。 | EventLoopGroup | |
| allowDefaultCodec (codec) | netty コンポーネントは、encoder/decoder が null で textline が false の場合、デフォルトのコーデックをインストールします。allowDefaultCodec を false に設定すると、netty コンポーネントがデフォルトコーデックをフィルターチェーンの最初の要素としてインストールするのを防ぎます。 | true | boolean |
| autoAppendDelimiter (codec) | テキストラインコーデックを使用して送信するときに、不足している終了区切り文字を自動追加するかどうか。 | true | boolean |
| decoderMaxLineLength (codec) | テキストラインコーデックに使用する行の最大長。 | 1024 | int |
| decoders (codec) | 使用するデコーダーのリスト。コンマで区切られた値を持つ文字列を使用して、値をレジストリーで検索することができます。Camel がルックアップする必要があることを認識できるように、値の前に # を付けることを忘れないでください。 | リスト | |
| delimiter (codec) | テキストラインコーデックに使用する区切り文字。可能な値は LINE と NULL です。 列挙値:
| LINE | TextLineDelimiter |
| encoders (codec) | 使用するエンコーダーのリスト。コンマで区切られた値を持つ文字列を使用して、値をレジストリーで検索することができます。Camel がルックアップする必要があることを認識できるように、値の前に # を付けることを忘れないでください。 | リスト | |
| encoding (codec) | テキスト行コーデックに使用するエンコーディング (文字セット名)。指定しない場合、Camel は JVM のデフォルトの文字セットを使用します。 | String | |
| textline (codec) | TCP にのみ使用されます。コーデックが指定されていない場合、このフラグを使用して、テキスト行ベースのコーデックを示すことができます。指定されていない場合、または値が false の場合、オブジェクトのシリアル化は TCP 経由であると想定されますが、デフォルトでシリアル化できるのは文字列のみです。 | false | boolean |
| enabledProtocols (セキュリティー) | SSL を使用するときに有効にするプロトコル。 | TLSv1,TLSv1.1,TLSv1.2 | String |
| keyStoreFile (セキュリティー) | 暗号化に使用されるクライアント側の証明書キーストア。 | File | |
| keyStoreFormat (セキュリティー) | ペイロードの暗号化に使用されるキーストア形式。設定されていない場合、デフォルトで JKS になります。 | String | |
| keyStoreResource (セキュリティー) | 暗号化に使用されるクライアント側の証明書キーストア。デフォルトではクラスパスからロードされますが、classpath:、file:、または http: をプレフィックとして指定して、異なるシステムからリソースをロードすることもできます。 | String | |
| needClientAuth (セキュリティー) | SSL の使用時にサーバーがクライアント認証を必要とするかどうかを設定します。 | false | boolean |
| パスフレーズ (セキュリティー) | SSH を使用して送信されたペイロードを暗号化/復号化するために使用するパスワード設定。 | String | |
| securityProvider (セキュリティー) | ペイロードの暗号化に使用するセキュリティープロバイダー。設定されていない場合、デフォルトは SunX509 です。 | String | |
| ssl (セキュリティー) | このエンドポイントに SSL 暗号化を適用するかどうかを指定する設定。 | false | boolean |
| sslClientCertHeaders (security) | 有効で SSL モードの場合、Netty コンシューマーは、サブジェクト名、発行者名、シリアル番号、有効な日付範囲などのクライアント証明書に関する情報を含むヘッダーで Camel メッセージを強化します。 | false | boolean |
| sslContextParameters (security) | SSLContextParameters を使用してセキュリティーを設定する場合。 | SSLContextParameters | |
| sslHandler (セキュリティー) | SSL ハンドラーを返すために使用できるクラスへの参照。 | SslHandler | |
| trustStoreFile (セキュリティー) | 暗号化に使用されるサーバー側の証明書キーストア。 | File | |
| trustStoreResource (セキュリティー) | 暗号化に使用されるサーバー側の証明書キーストア。デフォルトではクラスパスからロードされますが、classpath:、file:、または http: をプレフィックとして指定して、異なるシステムからリソースをロードすることもできます。 | String |
36.5. レジストリーベースのオプション
コーデックハンドラーと SSL キーストアは、Spring XML ファイルなどのレジストリーに登録できます。渡すことができる値は次のとおりです。
| Name | 説明 |
|---|---|
|
| SSH を使用して送信されたペイロードを暗号化/復号化するために使用するパスワード設定 |
|
| ペイロードの暗号化に使用されるキーストア形式。設定されていない場合、デフォルトは JKS |
|
| ペイロードの暗号化に使用するセキュリティープロバイダー。設定されていない場合、デフォルトは SunX509 です。 |
|
| 非推奨: 暗号化に使用されるクライアント側の証明書キーストア |
|
| 非推奨: 暗号化に使用されるサーバー側の証明書キーストア |
|
|
暗号化に使用されるクライアント側の証明書キーストア。デフォルトではクラスパスからロードされますが、 |
|
|
暗号化に使用されるサーバー側の証明書キーストア。デフォルトではクラスパスからロードされますが、 |
|
| SSL ハンドラーを返すために使用できるクラスへの参照 |
|
|
送信ペイロードの特別なマーシャリングを実行するために使用できるカスタム |
|
| 使用するエンコーダーのリスト。コンマで区切られた値を持つ文字列を使用して、値をレジストリーで検索することができます。Camel がルックアップする必要があることを認識できるように、値の前に # を付けることを忘れないでください。 |
|
|
受信ペイロードの特別なマーシャリングを実行するために使用できるカスタム |
|
| 使用するデコーダーのリスト。コンマで区切られた値を持つ文字列を使用して、値をレジストリーで検索することができます。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 モードでは、コンポーネントは、TCP または UDP プロトコル (オプションの SSL サポート付き) を使用してペイロードをソケットエンドポイントに送信する機能を提供します。
プロデューサーモードは、一方向および要求/応答ベースの操作の両方をサポートします。
36.6.2. Netty コンシューマー
コンシューマーモードでは、コンポーネントは次の機能を提供します。
- TCP または UDP プロトコル (オプションの SSL サポート付き) を使用して、指定されたソケットでリッスンします。
- text/xml、バイナリーおよびシリアライズされたオブジェクトベースのペイロードを使用してソケットでリクエストを受信し、
- メッセージ交換としてルートに沿ってそれらを送信します。
コンシューマーモードは、一方向および要求/応答ベースの操作の両方をサポートします。
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 コンシューマーエンドポイント
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 コンシューマーエンドポイント
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&sync=false"/>
</route>
<route>
<from uri="netty:tcp://0.0.0.0:5150?decoders=#length-decoder,#string-decoder&sync=false"/>
<to uri="mock:multiple-codec"/>
</route>
</camelContext>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 など) を介してコンテキストに登録する必要があります。
カスタムパイプラインファクトリーは、次のように構築する必要があります。
-
プロデューサーにリンクされたチャネルパイプラインファクトリーは、抽象クラス
ClientPipelineFactoryを拡張する必要があります。 -
コンシューマーリンクチャネルパイプラインファクトリーは、抽象クラス
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 コンシューマーとプロデューサーにはプライベートスレッドプールがあります。複数のコンシューマーまたはプロデューサー間でこれらのスレッドプールを再利用する場合は、スレッドプールを作成してレジストリーに登録する必要があります。
たとえば、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 コンシューマー用の org.apache.camel.component.netty.NettyServerBossPoolBuilder ビルダーと、Netty プロデューサー用の org.apache.camel.component.netty.NettyClientBossPoolBuilder があります。
次に、Camel ルートで、以下に示すように URI で workerPool オプションを設定することにより、このワーカープールを参照できます。
<route> <from uri="netty:tcp://0.0.0.0:5021?textline=true&sync=true&workerPool=#sharedPool&usingExecutorService=false"/> <to uri="log:result"/> ... </route>
別のルートがある場合は、共有ワーカープールを参照できます。
<route> <from uri="netty:tcp://0.0.0.0:5022?textline=true&sync=true&workerPool=#sharedPool&usingExecutorService=false"/> <to uri="log:result"/> ... </route>
などがあります。
36.11. リクエスト/リプライによる単一接続での同時メッセージの多重化
netty プロデューサーを介した要求/応答メッセージングに 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>3.14.5.redhat-00032</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 コンシューマー (サーバー) のバックログを設定できます。バックログは、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 | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは 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 コンシューマーはアドレスを 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 プロデューサーで要求/応答を使用するときに、要求メッセージと応答メッセージがどのようにマップされるかを管理します。これは、要求メッセージと応答メッセージの両方に相関 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 を切断 (クローズ) するかどうか。コンシューマーとプロデューサーの両方に使用できます。 | 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 プロデューサーの起動時にリモートサーバーが稼働していない場合は、例外を回避するためにチャネルを遅延作成できます。 | true | ブール値 |
| camel.component.netty.lazy-start-producer | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | ブール値 |
| camel.component.netty.maximum-pool-size | netty コンシューマーが注文したスレッドプールの最大スレッドプールサイズを設定します。デフォルトのサイズは 2 x cpu_core プラス 1 です。この値をたとえば 10 に設定すると、2 x cpu_core に 1 を加えた値がより高い値でない限り、10 スレッドが使用され、オーバーライドされて使用されます。たとえば、8 つのコアがある場合、コンシューマースレッドプールは 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 | プロデューサープールが有効かどうか。重要: これをオフにすると、リクエスト/リプライを実行している場合にも、単一の共有接続がプロデューサーに使用されます。つまり、返信が順不同で戻ってきた場合、インタリーブされた応答に問題が生じる可能性があります。したがって、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 スレッド (アクティブな場合) が新しいオブジェクトを生成する前に、プロデューサープールで許可されるインスタンスの最小数を設定します。 | Integer | |
| camel.component.netty.receive-buffer-size | インバウンド通信中に使用される TCP/UDP バッファーサイズ。サイズはバイトです。 | 65536 | Integer |
| camel.component.netty.receive-buffer-size-predictor | バッファーサイズプレディクターを設定します。詳細は、Jetty のドキュメントとこのメールスレッドを参照してください。 | Integer | |
| camel.component.netty.reconnect | コンシューマーの clientMode でのみ使用されます。これが有効になっている場合、コンシューマーは切断時に再接続を試みます。 | true | ブール値 |
| camel.component.netty.reconnect-interval | 再接続し、clientMode が有効になっている場合に使用されます。再接続を試みる間隔 (ミリ秒)。 | 10000 | Integer |
| camel.component.netty.request-timeout | リモートサーバーを呼び出すときに、Netty プロデューサーのタイムアウトを使用できるようにします。デフォルトでは、タイムアウトは使用されていません。値はミリ秒単位なので、たとえば 30000 は 30 秒です。requestTimeout は、Netty の ReadTimeoutHandler を使用してタイムアウトをトリガーしています。 | Long | |
| camel.component.netty.reuse-address | ソケットの多重化を容易にするための設定。 | true | ブール値 |
| camel.component.netty.reuse-channel | このオプションにより、プロデューサとコンシューマー (クライアントモード) は、エクスチェンジを処理するライフサイクルで同じ 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 コンシューマーは、サブジェクト名、発行者名、シリアル番号、有効な日付範囲などのクライアント証明書に関する情報を含むヘッダーで 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 プロデューサーはメッセージ本文を送信する前に 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 を使用するには。たとえば、スレッドプールを複数のコンシューマーまたはプロデューサーと共有する場合などです。デフォルトでは、各コンシューマーまたはプロデューサーには、2 x CPU カウントのコアスレッドを備えた独自のワーカープールがあります。オプションは io.netty.channel.EventLoopGroup タイプです。 | EventLoopGroup |
第37章 Paho
プロデューサーとコンシューマーの両方がサポート対象
Paho コンポーネントは、Eclipse Paho ライブラリー を使用して MQTT メッセージングプロトコルのコネクターを提供します。Paho は最も人気のある MQTT ライブラリーの 1 つであるため、これを Java プロジェクトに統合したい場合は、Camel Paho コネクターが最適です。
Maven ユーザーは、このコンポーネントの pom.xml に以下の依存関係を追加する必要があります。
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-paho</artifactId>
<version>3.14.5.redhat-00018</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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。
つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
37.3. コンポーネントオプション
Paho コンポーネントは、以下に示す 31 個のオプションをサポートしています。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| automaticReconnect (共通) | 接続が失われた場合に、クライアントがサーバーへの再接続を自動的に試行するかどうかを設定します。false に設定すると、クライアントは、接続が失われた場合にサーバーへの自動再接続を試行しません。true に設定すると、接続が失われた場合に、クライアントはサーバーへの再接続を試みます。再接続を試行する前に、最初は 1 秒待機します。再接続の試行が失敗するたびに、遅延が 2 分になるまで遅延が 2 倍になり、その時点で遅延は 2 分のままになります。 | true | boolean |
| brokerUrl (共通) | 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 (共通) | 使用するクライアントの永続性 - メモリーまたはファイル。 列挙値:
| MEMORY | PahoPersistence |
| qos (共通) | クライアントのサービス品質レベル (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 (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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 (共通) | 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 (共通) | 使用するクライアントの永続性 - メモリーまたはファイル。 列挙値:
| MEMORY | PahoPersistence |
| qos (共通) | クライアントのサービス品質レベル (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 (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| exceptionHandler (コンシューマー (上級)) | コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
| exchangePattern (コンシューマー (上級)) | コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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 | コンシューマー | String | トピックの名前。 |
| CamelMqttQoS | PahoConstants.MQTT_QOS | コンシューマー | Integer | 受信メッセージの QualityOfService |
| CamelPahoOverrideTopic | PahoConstants.CAMEL_PAHO_OVERRIDE_TOPIC | プロデューサー | 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>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に記載される 32 のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| 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 | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは 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 | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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
プロデューサーとコンシューマーの両方がサポート対象
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>3.14.5.redhat-00018</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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (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 (共通) | 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 (共通) | 使用するクライアントの永続性 - メモリーまたはファイル。 列挙値:
| 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 (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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 (共通) | 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 (共通) | 使用するクライアントの永続性 - メモリーまたはファイル。 列挙値:
| 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 (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| exceptionHandler (コンシューマー (上級)) | コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
| exchangePattern (コンシューマー (上級)) | コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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 | コンシューマー | String | トピックの名前。 |
| CamelMqttQoS | PahoConstants.MQTT_QOS | コンシューマー | Integer | 受信メッセージの QualityOfService |
| CamelPahoOverrideTopic | PahoConstants.CAMEL_PAHO_OVERRIDE_TOPIC | プロデューサー | 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>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に記載される 33 のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| 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 | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは 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 | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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
コンシューマーのみがサポートされている
Quartz コンポーネントは、Quartz Scheduler 2.x を使用してスケジュールされたメッセージ配信を提供します。各エンドポイントは異なるタイマーを表します (Quartz 用語では、Trigger と JobDetail)。
Maven ユーザーは、このコンポーネントの pom.xml に以下の依存関係を追加する必要があります。
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-quartz</artifactId>
<version>3.14.5.redhat-00018</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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
39.3. コンポーネントオプション
Quartz コンポーネントは、以下にリストされている 13 のオプションをサポートしています。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| enableJmx (コンシューマー) | JMX から Quartz スケジューラーを管理できるようにする Quartz JMX を有効にするかどうか。このオプションのデフォルトは true です。 | true | boolean |
| prefixInstanceName (コンシューマー) | Quartz Scheduler インスタンス名の前に CamelContext 名を付けるかどうか。これはデフォルトで有効になっており、各 CamelContext がデフォルトで独自の Quartz スケジューラーインスタンスを使用できるようになっています。このオプションを false に設定すると、複数の CamelContext 間で Quartz スケジューラーインスタンスを再利用できます。 | true | boolean |
| prefixJobNameWithEndpointId (consumer) | Quartz ジョブにエンドポイント ID の接頭辞を付けるかどうか。このオプションのデフォルトは false です。 | false | boolean |
| properties (コンシューマー) | Quartz スケジューラーを設定するためのプロパティー。 | マップ | |
| propertiesFile (コンシューマー) | クラスパスからロードするプロパティーのファイル名。 | String | |
| propertiesRef (コンシューマー) | 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 (コンシューマー) | 使用する Quartz グループ名。グループ名とトリガー名の組み合わせは一意である必要があります。 | Camel | String |
| triggerName (コンシューマー) | 必須 使用する quartz トリガー名。グループ名とトリガー名の組み合わせは一意である必要があります。 | String |
39.4.2. クエリーパラメーター (17 パラメーター)
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| cron (コンシューマー) | トリガーするタイミングを定義する cron 式を指定します。 | String | |
| deleteJob (コンシューマー) | true に設定すると、ルートが停止したときにトリガーが自動的に削除されます。それ以外の場合は、false に設定すると、スケジューラーに残ります。false に設定すると、ユーザーがキャメル Uri で事前設定されたトリガーを再利用できることも意味します。名前が一致していることを確認してください。deleteJob と pauseJob の両方を true に設定することはできないことに注意してください。 | true | boolean |
| durableJob (コンシューマー) | ジョブが孤立した後もジョブを保存したままにするかどうか (それを指すトリガーはありません)。 | false | boolean |
| pauseJob (コンシューマー) | true に設定すると、ルートが停止したときにトリガーが自動的に一時停止します。それ以外の場合は、false に設定すると、スケジューラーに残ります。false に設定すると、ユーザーがキャメル Uri で事前設定されたトリガーを再利用できることも意味します。名前が一致していることを確認してください。deleteJob と pauseJob の両方を true に設定することはできないことに注意してください。 | false | boolean |
| recoverableJob (コンシューマー) | リカバリーまたはフェイルオーバー状況が発生した場合に、ジョブを再実行するかどうかをスケジューラーに指示します。 | false | boolean |
| stateful (コンシューマー) | デフォルトのジョブの代わりに、Quartz PersistJobDataAfterExecution および DisallowConcurrentExecution を使用します。 | false | boolean |
| exceptionHandler (コンシューマー (上級)) | コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
| exchangePattern (コンシューマー (上級)) | コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
| customCalendar (上級) | 特定の日付範囲を避けるカスタムカレンダーを指定します。 | カレンダー | |
| jobParameters (上級) | ジョブの追加オプションを設定するには。 | マップ | |
| prefixJobNameWithEndpointId (advanced) | ジョブ名の前にエンドポイント ID を付けるかどうか。 | false | boolean |
| triggerParameters (上級) | トリガーの追加オプションを設定します。 | マップ | |
| 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 コンポーネントでは、プロパティーを設定することもできます。
| パラメーター | デフォルト | タイプ | 説明 |
|---|---|---|---|
|
|
|
|
|
|
|
|
| クラスパスからロードするプロパティーのファイル名。 |
これを行うには、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.export を true 値に設定することです。
このオプションは、明示的に無効にしない限り、デフォルトで 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 実行コンテキストからのゲッターをヘッダー値として追加します。次のヘッダーが 追加されます。カレンダー、fireTime、jobDetail、jobInstance、jobRuntTime、mergedJobDataMap、nextFireTime、previousFireTime、refireCount、Result、scheduledFireTime、scheduler、、trigger NametriggerGroup。
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 オプションを設定する必要があります。
次のオプションがサポートされています。
| パラメーター | デフォルト | タイプ | 説明 |
|---|---|---|---|
|
|
|
| カスタム Quartz スケジューラーを使用するには。何も設定しない場合、コンポーネントの共有スケジューラーが使用されます。 |
|
|
|
| 必須: ポーリングをトリガーするための cron 式を定義します。 |
|
|
|
| トリガー ID を指定します。何も指定されていない場合は、UUID が生成されて使用されます。 |
|
|
|
| トリガーグループを指定します。 |
|
|
|
| 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>3.14.5.redhat-00018</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>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に記載される 14 のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| camel.component.quartz.auto-start-scheduler | スケジューラーを自動起動するかどうか。このオプションのデフォルトは true です。 | true | ブール値 |
| camel.component.quartz.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | ブール値 |
| camel.component.quartz.bridge-error-handler | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは 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
プロデューサーとコンシューマーの両方がサポート対象
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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
40.3. コンポーネントオプション
Ref コンポーネントは、以下に示す 3 つのオプションをサポートしています。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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 (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| exceptionHandler (コンシューマー (上級)) | コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
| exchangePattern (コンシューマー (上級)) | コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に記載される 4 のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| camel.component.ref.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | ブール値 |
| camel.component.ref.bridge-error-handler | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | ブール値 |
| camel.component.ref.enabled | ref コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | ブール値 | |
| camel.component.ref.lazy-start-producer | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | ブール値 |
第41章 REST
プロデューサーとコンシューマーの両方がサポート対象
REST コンポーネントを使用すると、Rest DSL を使用して REST エンドポイント (コンシューマー) を定義して、REST トランスポートとして他の Camel コンポーネントにプラグインできます。
REST コンポーネントは、REST サービスを呼び出すクライアント (プロデューサー) としても使用できます。
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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
41.3. コンポーネントオプション
REST コンポーネントは、以下に示す 8 個のオプションをサポートしています。
| 名前 | 説明 | デフォルト | タイプ |
|---|---|---|---|
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| consumerComponentName (consumer) | (コンシューマー) REST トランスポート (jetty、servlet、undertow など) に使用する Camel Rest コンポーネント。コンポーネントが明示的に設定されていない場合、Rest DSL と統合する Camel コンポーネントがある場合、または org.apache.camel.spi.RestConsumerFactory がレジストリーに登録されている場合、Camel はルックアップします。いずれかが見つかった場合は、それが使用されています。 | String | |
| apiDoc (プロデューサー) | 使用する swagger api doc リソース。リソースはデフォルトでクラスパスからロードされ、JSON 形式である必要があります。 | String | |
| componentName (プロデューサー) | 非推奨 http、undertowなどの REST トランスポートに使用する Camel Rest コンポーネント (プロデューサー) です。コンポーネントが明示的に設定されていないと、Rest DSL と統合する Camel コンポーネントがある場合、または org.apache.camel.spi.RestProducerFactory がレジストリーに登録されている場合は、Camel がルックアップします。いずれかが見つかった場合は、それが使用されています。 | String | |
| host (プロデューサー) | 使用する HTTP サービスのホストとポート (swagger スキーマでホストをオーバーライドします)。 | String | |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| producerComponentName (producer) | http、undertow などの REST トランスポート (プロデューサー) に使用する 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 メソッド。 列挙値:
| 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 (共通) | この REST サービスが返す text/xml または application/json などのメディアタイプ。 | String | |
| routeId (共通) | この REST サービスが作成するルートの名前。 | String | |
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| consumerComponentName (consumer) | (コンシューマー) REST トランスポート (jetty、servlet、undertow など) に使用する Camel Rest コンポーネント。コンポーネントが明示的に設定されていない場合、Rest DSL と統合する Camel コンポーネントがある場合、または org.apache.camel.spi.RestConsumerFactory がレジストリーに登録されている場合、Camel はルックアップします。いずれかが見つかった場合は、それが使用されています。 | String | |
| description (コンシューマー) | この REST サービスを文書化する人間による説明。 | String | |
| exceptionHandler (コンシューマー (上級)) | コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
| exchangePattern (コンシューマー (上級)) | コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
| apiDoc (プロデューサー) | 使用する openapi api doc リソース。リソースはデフォルトでクラスパスからロードされ、JSON 形式である必要があります。 | String | |
| bindingMode (プロデューサー) | プロデューサーのバインディングモードを設定します。off 以外に設定されている場合、プロデューサは着信メッセージの本文を inType から json または xml に変換し、json または xml からの応答を outType に変換しようとします。 列挙値:
| RestBindingMode | |
| host (プロデューサー) | 使用する HTTP サービスのホストとポート (openapi スキーマでホストをオーバーライドします)。 | String | |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| producerComponentName (producer) | http、undertow などの REST トランスポート (プロデューサー) に使用する Camel Rest コンポーネント。コンポーネントが明示的に設定されていないと、Rest DSL と統合する Camel コンポーネントがある場合、または org.apache.camel.spi.RestProducerFactory がレジストリーに登録されている場合は、Camel がルックアップします。いずれかが見つかった場合は、それが使用されています。 | String | |
| queryParameters (プロデューサー) | 呼び出す HTTP サービスのクエリーパラメーター。クエリーパラメーターには、foo=123&bar=456 のように、アンパサンドで区切られた複数のパラメーターを含めることができます。 | String |
41.5. サポートされている残りのコンポーネント
次のコンポーネントは、残りのコンシューマー (Rest DSL) をサポートしています。
- camel-servlet
次のコンポーネントは、rest プロデューサーをサポートしています。
- 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 プロデューサーの例
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 プロデューサーは、次のようにホストオプションを使用して設定できる 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 プロデューサーバーインディング
REST プロデューサーは、rest-dsl と同様に JSON または XML を使用したバインディングをサポートします。
たとえば、json バインディングモードをオンにして jetty を使用するには、残りの構成でこれを設定できます。
restConfiguration().component("jetty").host("localhost").port(8080).bindingMode(RestBindingMode.json);
from("direct:start")
.to("rest:post:user");次に、rest プロデューサーを使用して 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>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に記載される 12 のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| camel.component.rest-api.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | ブール値 |
| camel.component.rest-api.bridge-error-handler | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは 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 | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | ブール値 |
| camel.component.rest.consumer-component-name | (コンシューマー) 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 | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | ブール値 |
| camel.component.rest.producer-component-name | http、undertow などの REST トランスポート (プロデューサー) に使用する Camel Rest コンポーネント。コンポーネントが明示的に設定されていないと、Rest DSL と統合する Camel コンポーネントがある場合、または org.apache.camel.spi.RestProducerFactory がレジストリーに登録されている場合は、Camel がルックアップします。いずれかが見つかった場合は、それが使用されています。 | String | |
| camel.component.rest.component-name | 非推奨 http、undertowなどの REST トランスポートに使用する Camel Rest コンポーネント (プロデューサー) です。コンポーネントが明示的に設定されていないと、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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
42.3. コンポーネントオプション
Saga コンポーネントは、以下に示す 2 個のオプションをサポートしています。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| autowiredEnabled (上級) | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | boolean |
42.4. エンドポイントオプション
Saga エンドポイントは、URI 構文を使用して設定されます。
saga:action
パスおよびクエリーパラメーターを使用します。
42.4.1. パスパラメーター(1 パラメーター)
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| action (プロデューサー) | 実行するために 必要な アクション (完了または補正)。 列挙値:
| SagaEndpointAction |
42.4.2. クエリーパラメーター (1 パラメーター)
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
42.5. Spring Boot 自動設定
Spring Boot で saga を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-saga-starter</artifactId> <version>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に記載される 3 つのオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| camel.component.saga.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | ブール値 |
| camel.component.saga.enabled | saga コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | ブール値 | |
| camel.component.saga.lazy-start-producer | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | ブール値 |
第43章 Salesforce
プロデューサーとコンシューマーの両方がサポート対象
このコンポーネントは、Java DTO を使用して Salesforce と通信するプロデューサーエンドポイントとコンシューマーエンドポイントをサポートします。
これらの DTO を生成する付属の maven プラグイン Camel Salesforce Plugin があります (以下を参照)。
Maven ユーザーは、このコンポーネントの pom.xml に以下の依存関係を追加する必要があります。
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-salesforce</artifactId>
<version>3.14.5.redhat-00018</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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (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 (共通) | CometD 自動再接続を超えた失敗に対するストリーミング接続の再起動を試みるバックオフ間隔の増分。 | 1000 | long |
| batchId (共通) | Bulk API バッチ ID。 | String | |
| contentType (共通) | Bulk API コンテンツタイプ。XML、CSV、ZIP_XML、ZIP_CSV のいずれかです。 列挙値:
| ContentType | |
| defaultReplayId (共通) | initialReplayIdMap に値が見つからない場合のデフォルトの replayId 設定。 | -1 | Long |
| fallBackReplayId (common) | Invalid Replay Id レスポンスの後にフォールバックする ReplayId。 | -1 | Long |
| format (共通) | Salesforce API 呼び出しに使用するペイロード形式 (JSON または XML) のデフォルトは JSON です。Camel 3.12 以降、このオプションは Raw 操作にのみ適用されます。 列挙値:
| PayloadFormat | |
| httpClient (共通) | 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 です。 | ブール値 | |
| initialReplayIdMap (共通) | チャンネル名ごとに開始する Replay ID。 | マップ | |
| instanceId (共通) | Salesforce1 Analytics レポート実行インスタンス ID。 | String | |
| jobId (共通) | Bulk API ジョブ ID。 | String | |
| limit (共通) | 返されるレコード数の制限。一部の 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 | NotFoundBehaviour |
| notifyForFields (共通) | フィールドの通知、オプションは ALL、REFERENCED、SELECT、WHERE です。 列挙値:
| NotifyForFieldsEnum | |
| notifyForOperationCreate (共通) | 作成操作を通知します。デフォルトは false (API バージョン = 29.0) です。 | ブール値 | |
| notifyForOperationDelete (共通) | 削除操作を通知します。デフォルトは false (API バージョン = 29.0) です。 | ブール値 | |
| notifyForOperations (共通) | 操作を通知します。オプションは ALL、CREATE、EXTENDED、UPDATE (API バージョン 29.0) です。 列挙値:
| NotifyForOperationsEnum | |
| notifyForOperationUndelete (common) | 削除取り消し操作を通知します。デフォルトは false (API バージョン = 29.0) です。 | ブール値 | |
| notifyForOperationUpdate (common) | 更新操作を通知します。デフォルトは false (API バージョン = 29.0) です。 | ブール値 | |
| objectMapper (共通) | 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 (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| allOrNone (プロデューサー) | 失敗したレコードがある場合にすべてのレコードをロールバックすることを示す複合 API オプション。 | false | boolean |
| apexUrl (producer) | APEX メソッドの URL。 | String | |
| compositeMethod (プロデューサー) | 複合 (raw) 方式。 | String | |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| rawHttpHeaders (プロデューサー) | Raw 操作の HTTP パラメーターとして含めるメッセージヘッダーのコンマ区切りリスト。 | String | |
| rawMethod (プロデューサー) | Raw 操作に使用する HTTP メソッド。 | String | |
| rawPath (プロデューサー) | ドメイン名の後のエンドポイント 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 コンポーネントは、プロパティーセットから使用する認証方法を自動決定できます。このプロパティーを設定してあいまいさを排除します。 列挙値:
| AuthenticationType | |
| clientId (セキュリティー) | Salesforce インスタンス設定で設定された接続アプリケーションの 必須 OAuth コンシューマーキー。通常、接続アプリケーションを設定する必要がありますが、パッケージをインストールすることで提供できます。 | String | |
| clientSecret (セキュリティー) | Salesforce インスタンス設定で設定された接続アプリケーションの OAuth コンシューマーシークレット。 | 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 | |
| キーストア (セキュリティー) | OAuth JWT フローで使用する KeyStore パラメーター。KeyStore には、秘密鍵と証明書を含むエントリーを 1 つだけ含める必要があります。Salesforce は証明書チェーンを検証しないため、これは簡単に自己署名証明書になる可能性があります。対応する接続アプリケーションに証明書をアップロードしていることを確認してください。 | KeyStoreParameters | |
| lazyLogin (セキュリティー) | true に設定すると、コンポーネントの開始時にコンポーネントが Salesforce に対して認証されなくなります。通常、これを (デフォルトの) false に設定し、早期に認証して、認証の問題をすぐに認識します。 | false | boolean |
| loginConfig (セキュリティー) | 1 つのネストされた Bean 内のすべての認証設定、そこに設定されたすべてのプロパティーは、コンポーネントでも直接設定できます。 | SalesforceLoginConfig | |
| loginUrl (セキュリティー) | 認証に使用される Salesforce インスタンスの 必須 URL。デフォルトでは https://login.salesforce.com に設定されています。 | String | |
| password (セキュリティー) | アクセストークンにアクセスするために 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) | 使用する操作。 列挙値:
| OperationName | |
| topicName (コンシューマー) | 使用するトピック/チャネルの名前 | String |
43.3.2. クエリーパラメーター (57 パラメーター)
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| apexMethod (共通) | APEX メソッド名。 | String | |
| apexQueryParams (common) | APEX メソッドのクエリーパラメーター。 | マップ | |
| apiVersion (共通) | Salesforce API バージョン。 | 53.0 | String |
| backoffIncrement (共通) | CometD 自動再接続を超えた失敗に対するストリーミング接続の再起動を試みるバックオフ間隔の増分。 | 1000 | long |
| batchId (共通) | Bulk API バッチ ID。 | String | |
| contentType (共通) | Bulk API コンテンツタイプ。XML、CSV、ZIP_XML、ZIP_CSV のいずれかです。 列挙値:
| ContentType | |
| defaultReplayId (共通) | initialReplayIdMap に値が見つからない場合のデフォルトの replayId 設定。 | -1 | Long |
| fallBackReplayId (common) | Invalid Replay Id レスポンスの後にフォールバックする ReplayId。 | -1 | Long |
| format (共通) | Salesforce API 呼び出しに使用するペイロード形式 (JSON または XML) のデフォルトは JSON です。Camel 3.12 以降、このオプションは Raw 操作にのみ適用されます。 列挙値:
| PayloadFormat | |
| httpClient (共通) | Salesforce への接続に使用するカスタム Jetty Http クライアント。 | SalesforceHttpClient | |
| includeDetails (共通) | Salesforce1 Analytics レポートに詳細を含めます。デフォルトは false です。 | ブール値 | |
| initialReplayIdMap (共通) | チャンネル名ごとに開始する Replay ID。 | マップ | |
| instanceId (共通) | Salesforce1 Analytics レポート実行インスタンス ID。 | String | |
| jobId (共通) | Bulk API ジョブ ID。 | String | |
| limit (共通) | 返されるレコード数の制限。一部の 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 | NotFoundBehaviour |
| notifyForFields (共通) | フィールドの通知、オプションは ALL、REFERENCED、SELECT、WHERE です。 列挙値:
| NotifyForFieldsEnum | |
| notifyForOperationCreate (共通) | 作成操作を通知します。デフォルトは false (API バージョン = 29.0) です。 | ブール値 | |
| notifyForOperationDelete (共通) | 削除操作を通知します。デフォルトは false (API バージョン = 29.0) です。 | ブール値 | |
| notifyForOperations (共通) | 操作を通知します。オプションは ALL、CREATE、EXTENDED、UPDATE (API バージョン 29.0) です。 列挙値:
| NotifyForOperationsEnum | |
| notifyForOperationUndelete (common) | 削除取り消し操作を通知します。デフォルトは false (API バージョン = 29.0) です。 | ブール値 | |
| notifyForOperationUpdate (common) | 更新操作を通知します。デフォルトは false (API バージョン = 29.0) です。 | ブール値 | |
| objectMapper (共通) | 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 (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| replayId (コンシューマー) | サブスクライブ時に使用する replayId 値。 | Long | |
| exceptionHandler (コンシューマー (上級)) | コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
| exchangePattern (コンシューマー (上級)) | コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
| allOrNone (プロデューサー) | 失敗したレコードがある場合にすべてのレコードをロールバックすることを示す複合 API オプション。 | false | boolean |
| apexUrl (producer) | APEX メソッドの URL。 | String | |
| compositeMethod (プロデューサー) | 複合 (raw) 方式。 | String | |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| rawHttpHeaders (プロデューサー) | Raw 操作の HTTP パラメーターとして含めるメッセージヘッダーのコンマ区切りリスト。 | String | |
| rawMethod (プロデューサー) | Raw 操作に使用する HTTP メソッド。 | String | |
| rawPath (プロデューサー) | ドメイン名の後のエンドポイント URL の部分。例: /services/data/v52.0/sobjects/Account/。 | String | |
| rawQueryParameters (producer) | Raw 操作のクエリーパラメーターとして含めるメッセージヘッダーのコンマ区切りリスト。これは自動的に行われるため、値を URL エンコードしないでください。 | String |
43.4. Salesforce への認証
このコンポーネントは、次の 3 つの OAuth 認証フローをサポートしています。
フローごとに、異なるプロパティーセットを設定する必要があります。
表43.1 表 1.認証フローごとに設定するプロパティー
| プロパティー | Salesforce のどこで見つけることができますか | フロー |
|---|---|---|
| clientId | 接続されたアプリケーション、コンシューマーキー | すべてのフロー |
| clientSecret | コネクテッドアプリ、コンシューマーシークレット | ユーザー名 - パスワード、リフレッシュトークン |
| userName | Salesforce ユーザーのユーザー名 | ユーザー名 - パスワード、JWT ベアラートークン |
| password | Salesforce ユーザーのパスワード | Username-Password |
| refreshToken | OAuth フローコールバックから | トークンの更新 |
| keystore | 接続アプリケーション、デジタル証明書 | JWT ベアラートークン |
コンポーネントは、設定しようとしているフローを自動的に判断し、あいまいさを取り除くために authenticationType プロパティーを設定します。
本番環境でユーザー名とパスワードのフローを使用することはお勧めしません。
JWT ベアラートークンフローで使用される証明書は、自己署名証明書にすることができます。証明書と秘密鍵を保持する KeyStore には、証明書と秘密鍵のエントリーを 1 つだけ含める必要があります。
43.5. URI 形式
ストリーミングイベントを受信するコンシューマーとして使用する場合、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 をサポートしています
プロデューサーエンドポイントは、次の 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 - リクエストをセールスフォースに送信し、エンドポイント、パラメーター、本文などを完全に未加工で制御します.
たとえば、次のプロデューサーエンドポイントは 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
プロデューサーエンドポイントは、次の 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 : レポートの実行結果が含まれます。
たとえば、次のプロデューサーエンドポイントは、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
コンシューマーエンドポイントは、ストリーミングエンドポイントに次の構文を使用して、作成/更新時に Salesforce 通知を受信できます。
トピックを作成してサブスクライブするには
from("salesforce:CamelTestTopic?notifyForFields=ALL¬ifyForOperations=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/) を付けたコンシューマーエンドポイントを使用します (例: 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 ヘッダーは、CREATE、UPDATE、DELETE または 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 つのレコードを送信するには、次を使用します。
指定した経路:
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 を返します。これには、Id、Name、および 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 null43.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 オプションでオーバーライドできます。
| パラメーター | タイプ | 説明 | デフォルト | 必須 |
|---|---|---|---|---|
| 要求のボディー |
| HTTP リクエストの本文 | ||
| rawPath |
| ドメイン名の後のエンドポイント URL の部分 (/services/data/v51.0/sobjects/Account/など) | x | |
| rawMethod |
| HTTP メソッド | x | |
| rawQueryParameters |
| クエリーパラメーターとして含めるメッセージヘッダーのコンマ区切りリストこれは自動的に行われるため、値を URL エンコードしないでください。 | ||
| rawHttpHeaders |
| 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 way43.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 |
| x | |
| sObjectClass | String | レスポンスの逆シリアル化に使用する DTO クラスの完全修飾クラス名 |
|
43.17.2. compositeCreateSObjectCollections
最大 200 レコードを追加して、SaveSObjectResult オブジェクトのリストを返します。混合 SObject タイプがサポートされています。
| パラメーター | タイプ | 説明 | デフォルト | 必須 |
|---|---|---|---|---|
| 要求のボディー |
| 作成する SObject のリスト | x | |
| allOrNone | boolean | いずれかのオブジェクトの作成が失敗したときにリクエスト全体をロールバックするか (true)、リクエスト内の他のオブジェクトの独立した作成を続行するかを示します。 | false |
43.17.3. compositeUpdateSObjectCollections
SaveSObjectResult オブジェクトのリストを返し、最大 200 件のレコードを更新します。混合 SObject タイプがサポートされています。
| パラメーター | タイプ | 説明 | デフォルト | 必須 |
|---|---|---|---|---|
| 要求のボディー |
| 更新する SObject のリスト | x | |
| allOrNone | boolean | いずれかのオブジェクトの更新が失敗した場合 (true)、要求全体をロールバックするか、要求内の他のオブジェクトの独立した更新を続行するかを示します。 | false |
43.17.4. compositeUpsertSObjectCollections
UpsertSObjectResult オブジェクトのリストを返し、外部 ID フィールドに基づいて最大 200 のレコードを作成または更新 (アップサート) します。混合 SObject タイプはサポートされていません。
| パラメーター | タイプ | 説明 | デフォルト | 必須 |
|---|---|---|---|---|
| 要求のボディー |
| アップサートする SObject のリスト | x | |
| allOrNone | boolean | いずれかのオブジェクトの upsert が失敗したときにリクエスト全体をロールバックするか (true)、リクエスト内の他のオブジェクトの独立した upsert を続行するかを示します。 | false | |
| sObjectName | String |
| x | |
| sObjectIdName | String | 外部 ID フィールドの名前 | x |
43.17.5. compositeDeleteSObjectCollections
最大 200 件のレコードを削除し、DeleteSObjectResult オブジェクトのリストを返します。混合 SObject タイプがサポートされています。
| パラメーター | タイプ | 説明 | デフォルト | 必須 |
|---|---|---|---|---|
|
| 文字列またはコンマ区切り文字列のリスト | 削除するオブジェクトの最大 200 ID のリスト。 | x | |
|
| 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>3.14.5.redhat-00032</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 | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | ブール値 |
| camel.component.salesforce.client-id | Salesforce インスタンス設定で設定された接続アプリケーションの OAuth コンシューマーキー。通常、接続アプリケーションを設定する必要がありますが、パッケージをインストールすることで提供できます。 | String | |
| camel.component.salesforce.client-secret | Salesforce インスタンス設定で設定された接続アプリケーションの OAuth コンシューマーシークレット。 | 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 | ブール値 |
| 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 | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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 | ブール値 |
| 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章 スケジューラー
コンシューマーのみがサポートされている
スケジューラーコンポーネントは、スケジューラーの起動時にメッセージ交換を生成するために使用されます。このコンポーネントは 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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
44.3. コンポーネントオプション
Scheduler コンポーネントは、以下に示す 3 つのオプションをサポートしています。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは 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 (コンシューマー) | 必須 スケジューラーの名前。 | String |
44.4.2. クエリーパラメーター (21 パラメーター)
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| sendEmptyMessageWhenIdle (consumer) | ポーリングコンシューマーがファイルをポーリングしなかった場合、このオプションを有効にして、代わりに空のメッセージ (ボディーなし) を送信できます。 | false | boolean |
| exceptionHandler (コンシューマー (上級)) | コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
| exchangePattern (コンシューマー (上級)) | コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
| pollStrategy (コンシューマー (上級)) | プラグ可能な org.apache.camel.PollingConsumerPollingStrategy を使用すると、エクスチェンジが作成され、Camel でルーティングされる前に、通常はポーリング操作中に発生するエラー処理を制御するカスタム実装が提供できます。 | PollingConsumerPollStrategy | |
| synchronous (上級) | 同期処理を厳密に使用するかどうかを設定します。 | false | boolean |
| backoffErrorThreshold (スケジューラー) | backoffMultipler が開始する前に発生する必要がある後続のエラーポーリング (エラーによって失敗した) の数。 | int | |
| backoffIdleThreshold (スケジューラー) | backoffMultipler が開始する前に発生する必要がある後続のアイドルポーリングの数。 | int | |
| backoffMultiplier (スケジューラー) | 後続のアイドル状態/エラーが連続して発生した場合に、スケジュールされたポーリングコンシューマーのバックオフを許可します。乗数は、実際に次の試行が行われる前にスキップされるポーリングの数です。このオプションが使用されている場合は、backoffIdleThreshold や backoffErrorThreshold も設定する必要があります。 | int | |
| delay (スケジューラー) | 次のポーリングまでの時間 (ミリ秒単位)。 | 500 | long |
| greedy (スケジューラー) | greedy が有効で、以前の実行が 1 つ以上のメッセージをポーリングした場合、ScheduledPollConsumer は即座に再度実行されます。 | false | boolean |
| initialDelay (スケジューラー) | 最初のポーリングが開始されるまでの時間 (ミリ秒単位)。 | 1000 | long |
| poolSize (スケジューラー) | スケジューリングスレッドプールによって使用されるスレッドプール内のコアスレッドの数。デフォルトでは、単一のスレッドを使用します。 | 1 | int |
| repeatCount (スケジューラー) | 実行の最大数を指定します。そのため、これを 1 に設定するとスケジューラーは 1 度だけ実行されます。これを 5 に設定した場合、5 回だけ実行されます。0 または負の値を設定すると、無制限に実行されます。 | 0 | long |
| runLoggingLevel (scheduler) | コンシューマーはポーリング時に開始/完了のログ行を記録します。このオプションを使用すると、ログレベルを設定できます。 列挙値:
| TRACE | LoggingLevel |
| scheduledExecutorService (スケジューラー) | コンシューマーに使用するカスタム/共有スレッドプールを設定できます。デフォルトでは、各コンシューマーに独自の単一スレッドのスレッドプールがあります。 | ScheduledExecutorService | |
| scheduler (スケジューラー) | camel-spring または camel-quartz コンポーネントから cron スケジューラーを使用します。スケジューラーにビルドされた値 spring または quartz を使用。 | none | オブジェクト |
| schedulerProperties (スケジューラー) | カスタムスケジューラーまたは Quartz や Spring ベースのスケジューラーを使用する場合に、追加のプロパティーを設定します。 | マップ | |
| startScheduler (スケジューラー) | スケジューラーを自動起動するかどうか。 | true | boolean |
| timeUnit (スケジューラー) | initialDelay および delay オプションの時間単位。 列挙値:
| MILLISECONDS | TimeUnit |
| useFixedDelay (スケジューラー) | 固定遅延または固定レートを使用するかどうかを制御します。詳細は、JDK の ScheduledExecutorService を参照してください。 | true | boolean |
44.5. 補足情報
このコンポーネントはスケジューラーの ポーリングコンシューマー であり、上記のオプションに関する詳細情報と、ポーリングコンシューマー ページで例を見つけることができます。
44.6. エクスチェンジプロパティー
タイマーが起動すると、次の情報がプロパティーとして Exchange に追加されます。
| Name | タイプ | 説明 |
|---|---|---|
|
|
|
|
|
|
| コンシューマーが起動した時刻。 |
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 のブール値に設定する必要があります。これにより、コンシューマーは、ポーリングされたメッセージがなかったことを示します。
それ以外の場合、コンシューマーは、デフォルトで、コンシューマーがエクスチェンジの処理を完了するたびに、スケジューラーにポーリングされた 1 つのメッセージを返します。
44.10. Spring Boot 自動設定
Spring Boot で scheduler を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-scheduler-starter</artifactId> <version>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に記載される 4 のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| camel.component.scheduler.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | ブール値 |
| camel.component.scheduler.bridge-error-handler | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | ブール値 |
| camel.component.scheduler.enabled | スケジューラーコンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | ブール値 | |
| camel.component.scheduler.pool-size | スケジューリングスレッドプールによって使用されるスレッドプール内のコアスレッドの数。デフォルトでは、単一のスレッドを使用します。 | 1 | Integer |
第45章 SEDA
プロデューサーとコンシューマーの両方がサポート対象
SEDA コンポーネントは非同期 SEDA 動作を提供するため、BlockingQueue でメッセージがエクスチェンジされ、プロデューサーとは別のスレッドでコンシューマーが呼び出されます。
キューは 単一の 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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
45.3. コンポーネントオプション
SEDA コンポーネントは、以下に示す 10 個のオプションをサポートしています。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| concurrentConsumers (コンシューマー) | 交換を処理する同時スレッドのデフォルト数を設定します。 | 1 | int |
| defaultPollTimeout (consumer (advanced)) | ポーリング時に使用されるタイムアウト (ミリ秒単位)。タイムアウトが発生すると、コンシューマーは実行を継続できるかどうかを確認できます。値を低く設定すると、シャットダウン時にコンシューマーがより迅速に対応できるようになります。 | 1000 | int |
| defaultBlockWhenFull (producer) | 満杯の SEDA キューにメッセージを送信するスレッドが、キューの容量がなくなるまでブロックするかどうか。デフォルトでは、キューがいっぱいであることを示す例外が出力されます。このオプションを有効にすると、呼び出しスレッドは代わりにブロックされ、メッセージが受け入れられるまで待機します。 | false | boolean |
| defaultDiscardWhenFull (producer) | 満杯の SEDA キューにメッセージを送信するスレッドを破棄するかどうか。デフォルトでは、キューがいっぱいであることを示す例外が出力されます。このオプションを有効にすると、呼び出しスレッドは送信を中止して続行します。つまり、メッセージは SEDA キューに送信されませんでした。 | false | boolean |
| defaultOfferTimeout (プロデューサー) | 満杯の SEDA キューにメッセージを送信するスレッドが、キューの容量がなくなるまでブロックするかどうか。デフォルトでは、キューがいっぱいであることを示す例外が出力されます。このオプションを有効にすると、設定されたタイムアウトをブロックケースに追加できます。下線部の Java キューの .offer(timeout) メソッドを利用します。 | long | |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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 (共通) | SEDA キューの最大容量 (つまり、保持できるメッセージの数)。デフォルトでは、SEDA コンポーネントに設定された defaultSize を使用します。 | 1000 | int |
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| concurrentConsumers (コンシューマー) | エクスチェンジを処理する同時スレッドの数。 | 1 | int |
| exceptionHandler (コンシューマー (上級)) | コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
| exchangePattern (コンシューマー (上級)) | コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
| limitConcurrentConsumers (コンシューマー (上級)) | concurrentConsumers の数を最大 500 に制限するかどうか。デフォルトでは、エンドポイントがより大きな数で設定されている場合、例外が出力されます。このチェックを無効にするには、このオプションをオフにします。 | true | boolean |
| multipleConsumers (コンシューマー (上級)) | 複数のコンシューマーを許可するかどうかを指定します。有効にすると、Publish-Subscribe メッセージングに SEDA を使用できます。つまり、メッセージを SEDA キューに送信し、各コンシューマーにメッセージのコピーを受信させることができます。有効にすると、このオプションはすべてのコンシューマーエンドポイントで指定する必要があります。 | false | boolean |
| pollTimeout (コンシューマー (上級)) | ポーリング時に使用されるタイムアウト (ミリ秒単位)。タイムアウトが発生すると、コンシューマーは実行を継続できるかどうかを確認できます。値を低く設定すると、シャットダウン時にコンシューマーがより迅速に対応できるようになります。 | 1000 | int |
| purgeWhenStopping (コンシューマー (上級)) | コンシューマー/ルートを停止するときにタスクキューをパージするかどうか。これにより、キューに保留中のメッセージが破棄されるため、より迅速に停止できます。 | false | boolean |
| blockWhenFull (プロデューサー) | 満杯の SEDA キューにメッセージを送信するスレッドが、キューの容量がなくなるまでブロックするかどうか。デフォルトでは、キューがいっぱいであることを示す例外が出力されます。このオプションを有効にすると、呼び出しスレッドは代わりにブロックされ、メッセージが受け入れられるまで待機します。 | false | boolean |
| discardIfNoConsumers (プロデューサー) | アクティブなコンシューマーのないキューに送信するときに、プロデューサーがメッセージを破棄する (メッセージをキューに追加しない) かどうか。discardIfNoConsumers オプションと failIfNoConsumers オプションのうち、同時に有効にできるのは 1 つだけです。 | false | boolean |
| discardWhenFull (producer) | 満杯の SEDA キューにメッセージを送信するスレッドを破棄するかどうか。デフォルトでは、キューがいっぱいであることを示す例外が出力されます。このオプションを有効にすると、呼び出しスレッドは送信を中止して続行します。つまり、メッセージは SEDA キューに送信されませんでした。 | false | boolean |
| failIfNoConsumers (プロデューサー) | アクティブなコンシューマーのないキューに送信するときに、プロデューサーが例外を出力して失敗するかどうか。discardIfNoConsumers オプションと failIfNoConsumers オプションのうち、同時に有効にできるのは 1 つだけです。 | false | boolean |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| offerTimeout (プロデューサー) | キューがいっぱいの場合、オファータイムアウト (ミリ秒単位) をブロックケースに追加できます。0 または負の値を使用して、タイムアウトを無効にすることができます。 | long | |
| timeout (プロデューサー) | SEDA プロデューサーが非同期タスクの完了の待機を停止するまでのタイムアウト (ミリ秒単位)。0 または負の値を使用して、タイムアウトを無効にすることができます。 | 30000 | long |
| waitForTaskToComplete (プロデューサー) | 続行する前に呼び出し元が非同期タスクの完了を待つかどうかを指定するオプション。次の 3 つのオプションがサポートされています: Always、Never、または IfReplyExpected。最初の 2 つの値は一目瞭然です。最後の値 IfReplyExpected は、メッセージが Request Reply ベースの場合にのみ待機します。デフォルトのオプションは IfReplyExpected です。 列挙値:
| IfReplyExpected | WaitForTaskToComplete |
| queue (上級) | エンドポイントで使用されるキューインスタンスを定義します。 | 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 コンポーネントは、呼び出し元が Async ルートが完了するまで待機する 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 キューのコンシューマーが完了すると、応答を元のメッセージ応答にコピーします。
45.7. 同時利用者
デフォルトでは、SEDA エンドポイントは単一のコンシューマースレッドを使用しますが、コンシューマースレッドを同時に使用するように設定できます。したがって、スレッドプールの代わりに次を使用できます。
from("seda:stageName?concurrentConsumers=5").process(...)この 2 つの違いについては、スレッドプールは 実行時に負荷に応じて動的に増減できますが、同時コンシューマーの数は常に固定されていることに注意してください。
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 つのコンシューマーを定義しました。
@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 つのコンシューマーに、一種の 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>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に記載される 11 のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| camel.component.seda.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | ブール値 |
| camel.component.seda.bridge-error-handler | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは 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 | ポーリング時に使用されるタイムアウト (ミリ秒単位)。タイムアウトが発生すると、コンシューマーは実行を継続できるかどうかを確認できます。値を低く設定すると、シャットダウン時にコンシューマーがより迅速に対応できるようになります。 | 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 | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | ブール値 |
| camel.component.seda.queue-size | SEDA キューのデフォルトの最大容量 (つまり、保持できるメッセージの数) を設定します。 | 1000 | Integer |
第46章 Servlet
コンシューマーのみがサポートされている
サーブレットコンポーネントは、公開されたサーブレットにバインドされた HTTP エンドポイントに到着する HTTP 要求を消費するための HTTP ベースのエンドポイントを提供します。
Maven ユーザーは、このコンポーネントの pom.xml に以下の依存関係を追加する必要があります。
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-servlet</artifactId>
<version>3.14.5.redhat-00018</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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定する タイプセーフ 方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
46.3. コンポーネントオプション
Servlet コンポーネントは、以下に示す 11 個のオプションをサポートしています。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| muteException (コンシューマー) | 有効にすると、エクスチェンジがコンシューマー側で処理に失敗した場合、レスポンスの本文には例外のスタックトレースが含まれません。 | false | boolean |
| servletName (コンシューマー) | 使用するサーブレットのデフォルト名。デフォルト名は CamelServlet です。 | CamelServlet | String |
| attachmentMultipartBinding (コンシューマー (上級)) | Camel エクスチェンジで multipart/form-data を添付ファイルとして自動的にバインドするかどうか。オプション attachmentMultipartBinding=true と disableStreamCache=false は一緒に使用できません。AttachmentMultipartBinding を使用するには、disableStreamCache を削除します。サーブレットの使用時にこれを有効にするには、サーブレット固有の設定が必要になる場合があるため、これはデフォルトでオフになっています。 | false | boolean |
| fileNameExtWhitelist(コンシューマー (上級)) | アップロードされたファイルを受け入れるための受け入れられたファイル名拡張子のホワイトリスト。複数の拡張子は、txt、xml のようにコンマで区切ることができます。 | String | |
| httpRegistry (コンシューマー (上級)) | カスタム 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 (上級) | 共有 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 (コンシューマー) | このオプションが false の場合、サーブレットは HTTP ストリーミングを無効にし、応答に content-length ヘッダーを設定します。 | true | boolean |
| disableStreamCache (共通) | サーブレットからの生の入力ストリームがキャッシュされるかどうかを決定します (Camel はストリームをメモリー内/ファイルへのオーバーフロー、ストリームキャッシュに読み込みます)。デフォルトでは、Camel はサーブレット入力ストリームをキャッシュして複数回の読み取りをサポートし、Camel がストリームからすべてのデータを取得できるようにします。ただし、ファイルやその他の永続ストアに直接ストリーミングするなど、生のストリームにアクセスする必要がある場合は、このオプションを true に設定できます。ストリームの複数回の読み取りをサポートするためにこのオプションが false の場合、DefaultHttpBinding は要求入力ストリームをストリームキャッシュにコピーし、それをメッセージ本文に入れます。サーブレットを使用してエンドポイントをブリッジ/プロキシーする場合、メッセージペイロードを複数回読み取る必要がない場合は、このオプションを有効にしてパフォーマンスを向上させることを検討してください。http プロデューサーは、デフォルトで応答本文ストリームをキャッシュします。このオプションを true に設定すると、プロデューサーは応答本文ストリームをキャッシュせず、応答ストリームをそのままメッセージ本文として使用します。 | false | boolean |
| headerFilterStrategy (共通) | カスタムの HeaderFilterStrategy を使用して、Camel メッセージとの間でヘッダーをフィルタリングします。 | HeaderFilterStrategy | |
| httpBinding (common (上級)) | カスタム HttpBinding を使用して、Camel メッセージと HttpClient との間のマッピングを制御します。 | HttpBinding | |
| async (コンシューマー) | 非同期モードで動作するようにコンシューマーを設定します。 | false | boolean |
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| httpMethodRestrict (コンシューマー) | GET/POST/PUT など、HttpMethod が一致する場合にのみ消費を許可するために使用されます。複数のメソッドをコンマで区切って指定できます。 | String | |
| matchOnUriPrefix (コンシューマー) | 完全に一致するものが見つからない場合に、コンシューマーが URI 接頭辞を照合してターゲットコンシューマーを見つけようとするかどうか。 | false | boolean |
| muteException (コンシューマー) | 有効にすると、エクスチェンジがコンシューマー側で処理に失敗した場合、レスポンスの本文には例外のスタックトレースが含まれません。 | false | boolean |
| responseBufferSize (コンシューマー) | javax.servlet.ServletResponse. | Integer | |
| servletName (コンシューマー) | 使用するサーブレットの名前。 | CamelServlet | String |
| transferException (コンシューマー) | 有効にすると、エクスチェンジがコンシューマー側で処理に失敗し、発生した例外が application/x-java-serialized-object コンテンツタイプとして応答でシリアライズされた場合に、例外がシリアライズされました。プロデューサー側では、例外がデシリアライズされ、HttpOperationFailedException ではなくそのまま出力されます。原因となった例外はシリアライズする必要があります。これは、デフォルトでオフになっています。これを有効にすると、Java が受信データをリクエストから Java にデシリアライズし、セキュリティー上のリスクが生じる可能性があることに注意してください。 | false | boolean |
| attachmentMultipartBinding (コンシューマー (上級)) | Camel エクスチェンジで multipart/form-data を添付ファイルとして自動的にバインドするかどうか。オプション attachmentMultipartBinding=true と disableStreamCache=false は一緒に使用できません。AttachmentMultipartBinding を使用するには、disableStreamCache を削除します。サーブレットの使用時にこれを有効にするには、サーブレット固有の設定が必要になる場合があるため、これはデフォルトでオフになっています。 | false | boolean |
| eagerCheckContentAvailable (コンシューマー (上級)) | content-length ヘッダーが 0 または存在しない場合に、HTTP リクエストにコンテンツがあるかどうかを積極的にチェックするかどうか。これは、HTTP クライアントがストリーミングデータを送信しない場合に有効にすることができます。 | false | boolean |
| exceptionHandler (コンシューマー (上級)) | コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
| exchangePattern (コンシューマー (上級)) | コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
| fileNameExtWhitelist(コンシューマー (上級)) | アップロードされたファイルを受け入れるための受け入れられたファイル名拡張子のホワイトリスト。複数の拡張子は、txt、xml のようにコンマで区切ることができます。 | String | |
| mapHttpMessageBody (コンシューマー (上級)) | このオプションが true の場合、交換の IN exchange ボディは HTTP ボディにマップされます。これを false に設定すると、HTTP マッピングが回避されます。 | true | boolean |
| mapHttpMessageFormUrlEncodedBody (consumer (advanced)) | このオプションが true の場合、交換の IN exchange Form Encoded ボディは HTTP にマップされます。これを false に設定すると、HTTP Form Encoded ボディマッピングが回避されます。 | true | boolean |
| mapHttpMessageHeaders (コンシューマー (上級)) | このオプションが true の場合、交換の IN exchange ヘッダーは HTTP ヘッダーにマップされます。これを false に設定すると、HTTP ヘッダーのマッピングが回避されます。 | true | boolean |
| optionsEnabled (コンシューマー (上級)) | このサーブレットコンシューマーに対して HTTP OPTIONS を有効にするかどうかを指定します。デフォルトでは、OPTIONS はオフになっています。 | false | boolean |
| traceEnabled (コンシューマー (上級)) | このサーブレットコンシューマーに対して 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>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に記載される 15 のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| camel.component.servlet.allow-java-serialized-object | リクエストが context-type=application/x-java-serialized-object を使用する場合に Java シリアル化を許可するかどうか。これは、デフォルトでオフになっています。これを有効にすると、Java が受信データをリクエストから Java にデシリアライズし、セキュリティー上のリスクが生じる可能性があることに注意してください。 | false | ブール値 |
| 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 | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | ブール値 |
| 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 | 有効にすると、エクスチェンジがコンシューマー側で処理に失敗した場合、レスポンスの本文には例外のスタックトレースが含まれません。 | 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
プロデューサーとコンシューマーの両方がサポート対象
Slack コンポーネントを使用すると、Slack のインスタンスに接続し、事前に確立された Slack 着信 Webhook を介してメッセージ本文に含まれるメッセージを配信できます。
Maven ユーザーは、このコンポーネントの pom.xml に以下の依存関係を追加する必要があります。
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-slack</artifactId>
<version>3.14.5.redhat-00018</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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
47.3. コンポーネントオプション
Slack コンポーネントは、以下に示す 5 個のオプションをサポートしています。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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 (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| conversationType (consumer) | 会話の種類。 列挙値:
| PUBLIC_CHANNEL | ConversationType |
| maxResults (コンシューマー) | 投票の最大結果。 | 10 | String |
| naturalOrder (コンシューマー) | 自然な順序 (古いものから新しいものへ) でエクスチェンジを作成するか、そうでないか。 | false | boolean |
| sendEmptyMessageWhenIdle (consumer) | ポーリングコンシューマーがファイルをポーリングしなかった場合、このオプションを有効にして、代わりに空のメッセージ (ボディーなし) を送信できます。 | false | boolean |
| serverUrl (コンシューマー) | Slack インスタンスのサーバー URL。 | String | |
| exceptionHandler (コンシューマー (上級)) | コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
| exchangePattern (コンシューマー (上級)) | コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
| pollStrategy (コンシューマー (上級)) | プラグ可能な org.apache.camel.PollingConsumerPollingStrategy を使用すると、エクスチェンジが作成され、Camel でルーティングされる前に、通常はポーリング操作中に発生するエラー処理を制御するカスタム実装が提供できます。 | PollingConsumerPollStrategy | |
| iconEmoji (producer) | 非推奨 Slack 絵文字をアバターとして使用します。 | String | |
| iconUrl (producer) | 非推奨 チャネルまたはユーザーにメッセージを送信するときにコンポーネントが使用するアバター。 | String | |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| username (プロデューサー) | 非推奨 これは、チャネルまたはユーザーにメッセージを送信するときにボットが持つユーザー名です。 | String | |
| webhookUrl (producer) | 着信 Webhook URL。 | String | |
| backoffErrorThreshold (スケジューラー) | backoffMultipler が開始する前に発生する必要がある後続のエラーポーリング (エラーによって失敗した) の数。 | int | |
| backoffIdleThreshold (スケジューラー) | backoffMultipler が開始する前に発生する必要がある後続のアイドルポーリングの数。 | int | |
| backoffMultiplier (スケジューラー) | 後続のアイドル状態/エラーが連続して発生した場合に、スケジュールされたポーリングコンシューマーのバックオフを許可します。乗数は、実際に次の試行が行われる前にスキップされるポーリングの数です。このオプションが使用されている場合は、backoffIdleThreshold や backoffErrorThreshold も設定する必要があります。 | int | |
| delay (スケジューラー) | 次のポーリングまでの時間 (ミリ秒単位)。 | 500 | long |
| greedy (スケジューラー) | greedy が有効で、以前の実行が 1 つ以上のメッセージをポーリングした場合、ScheduledPollConsumer は即座に再度実行されます。 | false | boolean |
| initialDelay (スケジューラー) | 最初のポーリングが開始されるまでの時間 (ミリ秒単位)。 | 1000 | long |
| repeatCount (スケジューラー) | 実行の最大数を指定します。そのため、これを 1 に設定するとスケジューラーは 1 度だけ実行されます。これを 5 に設定した場合、5 回だけ実行されます。0 または負の値を設定すると、無制限に実行されます。 | 0 | long |
| runLoggingLevel (scheduler) | コンシューマーはポーリング時に開始/完了のログ行を記録します。このオプションを使用すると、ログレベルを設定できます。 列挙値:
| TRACE | LoggingLevel |
| scheduledExecutorService (スケジューラー) | コンシューマーに使用するカスタム/共有スレッドプールを設定できます。デフォルトでは、各コンシューマーに独自の単一スレッドのスレッドプールがあります。 | ScheduledExecutorService | |
| scheduler (スケジューラー) | camel-spring または camel-quartz コンポーネントから cron スケジューラーを使用します。スケジューラーにビルドされた値 spring または quartz を使用。 | none | オブジェクト |
| schedulerProperties (スケジューラー) | カスタムスケジューラーまたは Quartz や Spring ベースのスケジューラーを使用する場合に、追加のプロパティーを設定します。 | マップ | |
| startScheduler (スケジューラー) | スケジューラーを自動起動するかどうか。 | true | boolean |
| timeUnit (スケジューラー) | initialDelay および delay オプションの時間単位。 列挙値:
| MILLISECONDS | TimeUnit |
| useFixedDelay (スケジューラー) | 固定遅延または固定レートを使用するかどうかを制御します。詳細は、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:&username=CamelTest"/>
</route>
</camelContext>
</blueprint>47.7. プロデューサー
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. コンシューマー
チャネル内のメッセージのコンシューマーも使用できます。
from("slack://general?token=RAW(<YOUR_TOKEN>)&maxResults=1")
.to("mock:result");このようにして、一般チャネルから最後のメッセージを取得します。コンシューマーは、消費された最後のメッセージのタイムスタンプを追跡し、次のポーリングでそのタイムスタンプからチェックします。
Slack アプリケーションを作成してワークスペースで使用する必要があります。
ボットユーザー OAuth アクセストークンをコンシューマーエンドポイントのトークンとして使用します。
対応する履歴 (channels:history または groups:history または mpim:history または im:history) および読み取り (channels:read または groups:read または mpim:read または im:read) ユーザートークンスコープをアプリケーションに追加して、パーミッションを付与します。対応するチャネルでメッセージを表示します。conversationType オプションを使用して設定する必要があります (PUBLIC_CHANNEL、PRIVATE_CHANNEL、MPIM、IM)
naturalOrder オプションを使用すると、古いものから新しいものへとメッセージを消費できます。本来なら最新のものを先に取得し、逆方向に消費します (メッセージ 3 ⇒ メッセージ 2 ⇒ メッセージ 1)
conversationType オプションを使用して、公開されているだけではないチャネル (PUBLIC_CHANNEL、PRIVATE_CHANNEL、MPIM、IM) から履歴とメッセージを読み取ることができます。
47.9. Spring Boot 自動設定
Spring Boot で slack を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-slack-starter</artifactId> <version>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に示す 6 つのオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| camel.component.slack.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | ブール値 |
| camel.component.slack.bridge-error-handler | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | ブール値 |
| camel.component.slack.enabled | slack コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | ブール値 | |
| camel.component.slack.lazy-start-producer | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | ブール値 |
| camel.component.slack.token | 使用するトークン。 | String | |
| camel.component.slack.webhook-url | 着信 Webhook URL。 | String |
第48章 SQL
プロデューサーとコンシューマーの両方がサポート対象
SQL コンポーネントでは、JDBC クエリーを使用してデータベースを操作することができます。このコンポーネントと JDBC コンポーネントの相違点は、SQL の場合、クエリーがエンドポイントのプロパティーであり、クエリーに渡されるパラメーターとしてメッセージペイロードを使用ことです。
このコンポーネントは、実際の SQL 処理のために舞台裏で spring-jdbc を使用します。
Maven ユーザーは、このコンポーネントの pom.xml に以下の依存関係を追加する必要があります。
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-sql</artifactId>
<version>3.14.5.redhat-00018</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 は指定された優先順位で名前を検索します。
-
java.util.Mapの場合はメッセージ本文から - メッセージヘッダーから
名前付きパラメーターを解決できない場合は、例外が出力されます。
次のように、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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
48.3. コンポーネントオプション
SQL コンポーネントは、以下に示す 5 個のオプションをサポートしています。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| dataSource (共通) | Autowired データベースとの通信に使用する DataSource を設定します。 | DataSource | |
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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 (共通) | クエリーで名前付きパラメーターの使用を許可するかどうか。 | true | boolean |
| dataSource (共通) | Autowired エンドポイントレベルでデータベースと通信するために使用する DataSource を設定します。 | DataSource | |
| outputClass (共通) | outputType=SelectOne の場合、変換として使用する完全なパッケージとクラス名を指定します。 | String | |
| outputHeader (共通) | メッセージ本文ではなく、ヘッダーにクエリー結果を格納します。デフォルトでは、outputHeader == null で、クエリー結果はメッセージ本文に格納され、メッセージ本文の既存のコンテンツは破棄されます。outputHeader が設定されている場合、値はクエリー結果を格納するヘッダーの名前として使用され、元のメッセージ本文は保持されます。 | String | |
| outputType (共通) | 以下の方法で、コンシューマーまたはプロデューサの出力を Map のリストとして SelectList、または単一の Java オブジェクトとして SelectOne にします。a) クエリーが単一の列を持っている場合、その JDBC 列オブジェクトが返されます。(SELECT COUNT( ) FROM PROJECT のような場合、Long オブジェクトを返します。) b) クエリーが複数の列を持つ場合、その結果の Map を返します。c) 出力クラスが設定されている場合、列名に一致するすべてのセッターを呼び出して、クエリーの結果を Java Bean オブジェクトに変換します。クラスには、インスタンスを作成するためのデフォルトのコンストラクターがあると想定されます。d) クエリーの結果が複数の行になった場合、一意でない結果の例外が出力されます。StreamList は、Iterator を使用してクエリーの結果をストリーミングします。これは、ストリーミング方式で ResultSet を処理するために、ストリーミングモードでスプリッタ EIP とともに使用できます。 列挙値:
| SelectList | SqlOutputType |
| separator (共通) | パラメーター値がメッセージ本文 (本文が文字列型の場合) から取得されるときに使用するセパレーターで、# プレースホルダーに挿入されます。名前付きパラメーターを使用する場合は、代わりに Map タイプが使用されることに注意してください。デフォルト値は、コンマです。 | , | char |
| breakBatchOnConsumeFail (コンシューマー) | onConsume が失敗した場合にバッチを中断するかどうかを設定します。 | false | boolean |
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| expectedUpdateCount (consumer) | onConsume を使用するときに検証する予想更新カウントを設定します。 | -1 | int |
| maxMessagesPerPoll (コンシューマー) | ポーリングするメッセージの最大数を設定します。 | int | |
| onConsume (コンシューマー) | 各行を処理した後、エクスチェンジが正常に処理された場合、たとえば行を処理済みとしてマークするために、このクエリーを実行できます。クエリーにはパラメーターを含めることができます。 | String | |
| onConsumeBatchComplete (コンシューマー) | バッチ全体を処理した後、このクエリーを実行して行などを一括更新できます。クエリーにパラメーターを含めることはできません。 | String | |
| onConsumeFailed (コンシューマー) | 各行を処理した後、エクスチェンジが失敗した場合、たとえば、行を失敗としてマークするために、このクエリーを実行できます。クエリーにはパラメーターを含めることができます。 | String | |
| routeEmptyResultSet (consumer) | 空の結果セットを次のホップに送信できるようにするかどうかを設定します。デフォルトは false です。したがって、空の結果セットは除外されます。 | false | boolean |
| sendEmptyMessageWhenIdle (consumer) | ポーリングコンシューマーがファイルをポーリングしなかった場合、このオプションを有効にして、代わりに空のメッセージ (ボディーなし) を送信できます。 | false | boolean |
| transacted (コンシューマー) | トランザクションを有効または無効にします。有効にした場合、エクスチェンジの処理が失敗した場合、コンシューマーはそれ以上のエクスチェンジの処理を中断して、ロールバックイーガーを引き起こします。 | false | boolean |
| useIterator (コンシューマー) | 結果セットをルートに配信する方法を設定します。リストまたは個々のオブジェクトとして配信を示します。デフォルトは真です。 | true | boolean |
| exceptionHandler (コンシューマー (上級)) | コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
| exchangePattern (コンシューマー (上級)) | コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
| pollStrategy (コンシューマー (上級)) | プラグ可能な org.apache.camel.PollingConsumerPollingStrategy を使用すると、エクスチェンジが作成され、Camel でルーティングされる前に、通常はポーリング操作中に発生するエラー処理を制御するカスタム実装が提供できます。 | PollingConsumerPollStrategy | |
| processingStrategy (コンシューマー (上級)) | コンシューマーが行/バッチを処理したときに、カスタム org.apache.camel.component.sql.SqlProcessingStrategy を使用してクエリーを実行するプラグインを許可します。 | SqlProcessingStrategy | |
| batch (プロデューサー) | バッチモードを有効または無効にします。 | false | boolean |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| noop (プロデューサー) | 設定されている場合、SQL クエリーの結果を無視し、既存の IN メッセージを OUT メッセージとして使用して処理を続行します。 | false | boolean |
| useMessageBodyForSql (producer) | メッセージ本文を SQL として使用し、次にパラメーターのヘッダーを使用するかどうか。このオプションを有効にすると、URI の SQL は使用されません。メッセージ本文のクエリーパラメーターは、# 記号ではなく疑問符で表されることに注意してください。 | false | boolean |
| alwaysPopulateStatement (上級) | 有効にすると、org.apache.camel.component.sql.SqlPrepareStatementStrategy の populateStatement メソッドが常に呼び出されます。また、準備する必要のあるパラメーターがない場合も同様です。これが false の場合、populateStatement は、1 つ以上の予期されるパラメーターが設定される場合にのみ呼び出されます。たとえば、これにより、パラメーターのない SQL クエリーのメッセージ本文/ヘッダーの読み取りが回避されます。 | false | boolean |
| parametersCount (上級) | 0 より大きい値を設定すると、Camel は JDBC メタデータ API を介してクエリーを実行する代わりに、このパラメーターのカウント値を使用して置き換えます。これは、JDBC ベンダーが正しいパラメーター数を返すことができず、ユーザーが代わりにオーバーライドできる場合に役立ちます。 | int | |
| placeholder (上級) | SQL クエリーで置換される文字を指定します。これは単純な String.replaceAll() 操作であり、SQL 解析が含まれていないことに注意してください (引用符で囲まれた文字列も変更されます)。 | # | String |
| prepareStatementStrategy (上級) | プラグインでカスタム org.apache.camel.component.sql.SqlPrepareStatementStrategy を使用して、クエリーと準備済みステートメントの準備を制御できるようにします。 | SqlPrepareStatementStrategy | |
| templateOptions (上級) | マップからのキー/値を使用して Spring JdbcTemplate を設定します。 | マップ | |
| usePlaceholder (上級) | SQL クエリーでプレースホルダーを使用し、すべてのプレースホルダー文字を符号に置き換えるかどうかを設定します。 | true | boolean |
| backoffErrorThreshold (スケジューラー) | backoffMultipler が開始する前に発生する必要がある後続のエラーポーリング (エラーによって失敗した) の数。 | int | |
| backoffIdleThreshold (スケジューラー) | backoffMultipler が開始する前に発生する必要がある後続のアイドルポーリングの数。 | int | |
| backoffMultiplier (スケジューラー) | 後続のアイドル状態/エラーが連続して発生した場合に、スケジュールされたポーリングコンシューマーのバックオフを許可します。乗数は、実際に次の試行が行われる前にスキップされるポーリングの数です。このオプションが使用されている場合は、backoffIdleThreshold や backoffErrorThreshold も設定する必要があります。 | int | |
| delay (スケジューラー) | 次のポーリングまでの時間 (ミリ秒単位)。 | 500 | long |
| greedy (スケジューラー) | greedy が有効で、以前の実行が 1 つ以上のメッセージをポーリングした場合、ScheduledPollConsumer は即座に再度実行されます。 | false | boolean |
| initialDelay (スケジューラー) | 最初のポーリングが開始されるまでの時間 (ミリ秒単位)。 | 1000 | long |
| repeatCount (スケジューラー) | 実行の最大数を指定します。そのため、これを 1 に設定するとスケジューラーは 1 度だけ実行されます。これを 5 に設定した場合、5 回だけ実行されます。0 または負の値を設定すると、無制限に実行されます。 | 0 | long |
| runLoggingLevel (scheduler) | コンシューマーはポーリング時に開始/完了のログ行を記録します。このオプションを使用すると、ログレベルを設定できます。 列挙値:
| TRACE | LoggingLevel |
| scheduledExecutorService (スケジューラー) | コンシューマーに使用するカスタム/共有スレッドプールを設定できます。デフォルトでは、各コンシューマーに独自の単一スレッドのスレッドプールがあります。 | ScheduledExecutorService | |
| scheduler (スケジューラー) | camel-spring または camel-quartz コンポーネントから cron スケジューラーを使用します。スケジューラーにビルドされた値 spring または quartz を使用。 | none | オブジェクト |
| schedulerProperties (スケジューラー) | カスタムスケジューラーまたは Quartz や Spring ベースのスケジューラーを使用する場合に、追加のプロパティーを設定します。 | マップ | |
| startScheduler (スケジューラー) | スケジューラーを自動起動するかどうか。 | true | boolean |
| timeUnit (スケジューラー) | initialDelay および delay オプションの時間単位。 列挙値:
| MILLISECONDS | TimeUnit |
| useFixedDelay (スケジューラー) | 固定遅延または固定レートを使用するかどうかを制御します。詳細は、JDK の ScheduledExecutorService を参照してください。 | true | boolean |
48.5. メッセージボディーの扱い
SQL コンポーネントは、メッセージボディーを java.util.Iterator 型のオブジェクトに変換しようとし、この反復子を使用してクエリーパラメーターを入力します (各クエリーパラメーターは、エンドポイント URI の # 記号 (または設定されたプレースホルダー) で表されます)。.メッセージ本文が配列でもコレクションでもない場合、変換の結果は、本文自体である 1 つのオブジェクトのみを反復処理する反復子になります。
たとえば、メッセージ本文が java.util.List のインスタンスである場合、リストの最初の項目は SQL クエリーで最初に出現する # に置換され、リストの 2 番目の項目は 2 番目に出現する # などに置換されます
batch が true に設定されている場合、受信メッセージ本文の解釈がわずかに変更されます。コンポーネントは、パラメーターのイテレーターではなく、パラメーターの反復子を含む反復子を期待します。外側の反復子のサイズによってバッチサイズが決まります。
メッセージ本文を SQL ステートメントとして使用できるようにするオプション useMessageBodyForSql を使用できます。次に、SQL パラメーターをキー SqlConstants.SQL_PARAMETERS を使用してヘッダーに指定する必要があります。これにより、SQL クエリーがメッセージ本文からのものであるため、SQL コンポーネントがより動的に動作できるようになります。テンプレート (Velocity、Freemarker など) を条件付き処理に使用します。たとえば、クエリーパラメーターの存在に応じて 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 の使用
プロデューサーは、反復子を使用してクエリーの出力をストリーミングする 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 コンポーネントは更新カウントを次のメッセージヘッダーに格納します。
| ヘッダー | 説明 |
|---|---|
|
|
|
|
|
|
|
|
実行するクエリー。このクエリーは、エンドポイント URI で指定されたクエリーよりも優先されます。ヘッダーのクエリーパラメータは # 記号の代わりに |
insert 操作を実行すると、SQL コンポーネントは、生成されたキーとこれらの行の数を含む行を次のメッセージヘッダーに格納します。
| ヘッダー | 説明 |
|---|---|
| CamelSqlGeneratedKeysRowCount | 生成されたキーを含むヘッダー内の行数。 |
| CamelSqlGeneratedKeyRows | 生成されたキー (キーのマップのリスト) を含む行。 |
48.9. 生成されたキー
SQL INSERT を使用してデータを挿入する場合、RDBMS は自動生成されたキーをサポートしている可能性があります。生成されたキーをヘッダーで返すように SQL プロデューサーに指示できます。
これを行うには、ヘッダー CamelSqlRetrieveGeneratedKeys=true を設定します。次に、生成されたキーは、上記の表にリストされているキーを含むヘッダーとして提供されます。
生成されたどの列を取得するかを指定するには、ヘッダー CamelSqlGeneratedColumns を String または 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. コンシューマーでの式パラメーターの使用
SQL コンポーネントをコンシューマーとして使用する場合、式パラメーター (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 がないことに注意してください。したがって、コンシューマーで使用できる単純な式は、この例のように Bean メソッドを呼び出すのに最も役立ちます。
48.13. 動的な値での IN クエリーの使用
SQL プロデューサーでは、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 型は、固定長のバイナリー文字列型です。DATE、TIME、または TIMESTAMP のいずれの JDBC 時刻型にもマップされません。
同時コンシューマーと連携する場合、列の 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 つのパラメーターを取ります。この最初のものはプロセッサー名 ( |
| insertString | INSERT INTO CAMEL_MESSAGEPROCESSED (processorName, messageId, createdAt) VALUES (?, ?, ?) |
エントリーをテーブルに追加するために使用されるステートメント。3 つのパラメーターを取ります。1 つ目はプロセッサー名 ( |
| deleteString | DELETE FROM CAMEL_MESSAGEPROCESSED WHERE processorName = ?AND messageId = ? |
データベースからエントリーを削除するために使用されるステートメント。2 つのパラメーターを取ります。この最初のものはプロセッサー名 ( |
オプション 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 ベースの集約リポジトリーの使用
JdbcAggregationRepository は AggregationRepository であり、その場で集約されたメッセージを永続化します。デフォルトのアグリゲーターはメモリー内のみの AggregationRepository を使用するため、これによりメッセージが失われないことが保証されます。JdbcAggregationRepository を使用すると、Camel と一緒に Aggregator の永続的なサポートを提供できます。
エクスチェンジが正常に処理された場合にのみ、AggregationRepository で confirm メソッドが呼び出されたときに完了としてマークされます。これは、同じエクスチェンジが再び失敗した場合、成功するまで再試行されることを意味します。
オプション 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 つのヘッダー companyName と accountName は次の 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.PostgresAggregationRepository は JdbcAggregationRepository を拡張し、楽観的なロック動作を提供する特別な 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>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に記載される 8 個のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| 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 | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | ブール値 |
| camel.component.sql.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | ブール値 |
| camel.component.sql.bridge-error-handler | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | ブール値 |
| camel.component.sql.enabled | sql コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | ブール値 | |
| camel.component.sql.lazy-start-producer | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | ブール値 |
| camel.component.sql.use-placeholder | SQL クエリーでプレースホルダーを使用し、すべてのプレースホルダー文字を符号に置き換えるかどうかを設定します。このオプションのデフォルトは true です。 | true | ブール値 |
第49章 Stub
プロデューサーとコンシューマーの両方がサポート対象
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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
49.3. コンポーネントオプション
Stub コンポーネントは、以下に示す 10 個のオプションをサポートしています。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| concurrentConsumers (コンシューマー) | 交換を処理する同時スレッドのデフォルト数を設定します。 | 1 | int |
| defaultPollTimeout (consumer (advanced)) | ポーリング時に使用されるタイムアウト (ミリ秒単位)。タイムアウトが発生すると、コンシューマーは実行を継続できるかどうかを確認できます。値を低く設定すると、シャットダウン時にコンシューマーがより迅速に対応できるようになります。 | 1000 | int |
| defaultBlockWhenFull (producer) | 満杯の SEDA キューにメッセージを送信するスレッドが、キューの容量がなくなるまでブロックするかどうか。デフォルトでは、キューがいっぱいであることを示す例外が出力されます。このオプションを有効にすると、呼び出しスレッドは代わりにブロックされ、メッセージが受け入れられるまで待機します。 | false | boolean |
| defaultDiscardWhenFull (producer) | 満杯の SEDA キューにメッセージを送信するスレッドを破棄するかどうか。デフォルトでは、キューがいっぱいであることを示す例外が出力されます。このオプションを有効にすると、呼び出しスレッドは送信を中止して続行します。つまり、メッセージは SEDA キューに送信されませんでした。 | false | boolean |
| defaultOfferTimeout (プロデューサー) | 満杯の SEDA キューにメッセージを送信するスレッドが、キューの容量がなくなるまでブロックするかどうか。デフォルトでは、キューがいっぱいであることを示す例外が出力されます。このオプションを有効にすると、設定されたタイムアウトをブロックケースに追加できます。下線部の Java キューの .offer(timeout) メソッドを利用します。 | long | |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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 (共通) | SEDA キューの最大容量 (つまり、保持できるメッセージの数)。デフォルトでは、SEDA コンポーネントに設定された defaultSize を使用します。 | 1000 | int |
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| concurrentConsumers (コンシューマー) | エクスチェンジを処理する同時スレッドの数。 | 1 | int |
| exceptionHandler (コンシューマー (上級)) | コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
| exchangePattern (コンシューマー (上級)) | コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
| limitConcurrentConsumers (コンシューマー (上級)) | concurrentConsumers の数を最大 500 に制限するかどうか。デフォルトでは、エンドポイントがより大きな数で設定されている場合、例外が出力されます。このチェックを無効にするには、このオプションをオフにします。 | true | boolean |
| multipleConsumers (コンシューマー (上級)) | 複数のコンシューマーを許可するかどうかを指定します。有効にすると、Publish-Subscribe メッセージングに SEDA を使用できます。つまり、メッセージを SEDA キューに送信し、各コンシューマーにメッセージのコピーを受信させることができます。有効にすると、このオプションはすべてのコンシューマーエンドポイントで指定する必要があります。 | false | boolean |
| pollTimeout (コンシューマー (上級)) | ポーリング時に使用されるタイムアウト (ミリ秒単位)。タイムアウトが発生すると、コンシューマーは実行を継続できるかどうかを確認できます。値を低く設定すると、シャットダウン時にコンシューマーがより迅速に対応できるようになります。 | 1000 | int |
| purgeWhenStopping (コンシューマー (上級)) | コンシューマー/ルートを停止するときにタスクキューをパージするかどうか。これにより、キューに保留中のメッセージが破棄されるため、より迅速に停止できます。 | false | boolean |
| blockWhenFull (プロデューサー) | 満杯の SEDA キューにメッセージを送信するスレッドが、キューの容量がなくなるまでブロックするかどうか。デフォルトでは、キューがいっぱいであることを示す例外が出力されます。このオプションを有効にすると、呼び出しスレッドは代わりにブロックされ、メッセージが受け入れられるまで待機します。 | false | boolean |
| discardIfNoConsumers (プロデューサー) | アクティブなコンシューマーのないキューに送信するときに、プロデューサーがメッセージを破棄する (メッセージをキューに追加しない) かどうか。discardIfNoConsumers オプションと failIfNoConsumers オプションのうち、同時に有効にできるのは 1 つだけです。 | false | boolean |
| discardWhenFull (producer) | 満杯の SEDA キューにメッセージを送信するスレッドを破棄するかどうか。デフォルトでは、キューがいっぱいであることを示す例外が出力されます。このオプションを有効にすると、呼び出しスレッドは送信を中止して続行します。つまり、メッセージは SEDA キューに送信されませんでした。 | false | boolean |
| failIfNoConsumers (プロデューサー) | アクティブなコンシューマーのないキューに送信するときに、プロデューサーが例外を出力して失敗するかどうか。discardIfNoConsumers オプションと failIfNoConsumers オプションのうち、同時に有効にできるのは 1 つだけです。 | false | boolean |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| offerTimeout (プロデューサー) | キューがいっぱいの場合、オファータイムアウト (ミリ秒単位) をブロックケースに追加できます。0 または負の値を使用して、タイムアウトを無効にすることができます。 | long | |
| timeout (プロデューサー) | SEDA プロデューサーが非同期タスクの完了の待機を停止するまでのタイムアウト (ミリ秒単位)。0 または負の値を使用して、タイムアウトを無効にすることができます。 | 30000 | long |
| waitForTaskToComplete (プロデューサー) | 続行する前に呼び出し元が非同期タスクの完了を待つかどうかを指定するオプション。次の 3 つのオプションがサポートされています: Always、Never、または IfReplyExpected。最初の 2 つの値は一目瞭然です。最後の値 IfReplyExpected は、メッセージが Request Reply ベースの場合にのみ待機します。デフォルトのオプションは IfReplyExpected です。 列挙値:
| IfReplyExpected | WaitForTaskToComplete |
| queue (上級) | エンドポイントで使用されるキューインスタンスを定義します。 | 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>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に記載される 11 のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| camel.component.stub.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | ブール値 |
| camel.component.stub.bridge-error-handler | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは 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 | ポーリング時に使用されるタイムアウト (ミリ秒単位)。タイムアウトが発生すると、コンシューマーは実行を継続できるかどうかを確認できます。値を低く設定すると、シャットダウン時にコンシューマーがより迅速に対応できるようになります。 | 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 | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | ブール値 |
| camel.component.stub.queue-size | SEDA キューのデフォルトの最大容量 (つまり、保持できるメッセージの数) を設定します。 | 1000 | Integer |
第50章 Telegram
プロデューサーとコンシューマーの両方がサポート対象
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>3.14.5.redhat-00018</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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
50.3. コンポーネントオプション
Telegram コンポーネントは、以下に示す 7 つのオプションをサポートしています。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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 (共通) | 必須 エンドポイントのタイプ。現在、ボットタイプのみがサポートされています。 列挙値:
| String |
50.4.2. クエリーパラメーター (30 パラメーター)
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| limit (コンシューマー) | 1 回のポーリングリクエストで受信できる更新の数を制限します。 | 100 | Integer |
| sendEmptyMessageWhenIdle (consumer) | ポーリングコンシューマーがファイルをポーリングしなかった場合、このオプションを有効にして、代わりに空のメッセージ (ボディーなし) を送信できます。 | false | boolean |
| timeout (コンシューマー) | ロングポーリングのタイムアウト (秒単位)。ショートポーリングの場合は 0 を、ロングポーリングの場合はより大きな数を入力します。ポーリングが長いと、応答時間が短くなります。 | 30 | Integer |
| exceptionHandler (コンシューマー (上級)) | コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
| exchangePattern (コンシューマー (上級)) | コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
| pollStrategy (コンシューマー (上級)) | プラグ可能な org.apache.camel.PollingConsumerPollingStrategy を使用すると、エクスチェンジが作成され、Camel でルーティングされる前に、通常はポーリング操作中に発生するエラー処理を制御するカスタム実装が提供できます。 | PollingConsumerPollStrategy | |
| chatId (プロデューサー) | 生成されたメッセージを受け取るチャットの識別子。チャット ID は、最初に着信メッセージから取得できます (たとえば、テレグラムユーザーがボットとの会話を開始すると、そのクライアントはチャット ID を含む/start メッセージを自動的に送信します)。チャット ID は送信メッセージごとに (本文またはヘッダーを使用して) 動的に設定できるため、オプションのパラメーターです。 | String | |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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 | TelegramProxyType |
| backoffErrorThreshold (スケジューラー) | backoffMultipler が開始する前に発生する必要がある後続のエラーポーリング (エラーによって失敗した) の数。 | int | |
| backoffIdleThreshold (スケジューラー) | backoffMultipler が開始する前に発生する必要がある後続のアイドルポーリングの数。 | int | |
| backoffMultiplier (スケジューラー) | 後続のアイドル状態/エラーが連続して発生した場合に、スケジュールされたポーリングコンシューマーのバックオフを許可します。乗数は、実際に次の試行が行われる前にスキップされるポーリングの数です。このオプションが使用されている場合は、backoffIdleThreshold や backoffErrorThreshold も設定する必要があります。 | int | |
| delay (スケジューラー) | 次のポーリングまでの時間 (ミリ秒単位)。 | 500 | long |
| greedy (スケジューラー) | greedy が有効で、以前の実行が 1 つ以上のメッセージをポーリングした場合、ScheduledPollConsumer は即座に再度実行されます。 | false | boolean |
| initialDelay (スケジューラー) | 最初のポーリングが開始されるまでの時間 (ミリ秒単位)。 | 1000 | long |
| repeatCount (スケジューラー) | 実行の最大数を指定します。そのため、これを 1 に設定するとスケジューラーは 1 度だけ実行されます。これを 5 に設定した場合、5 回だけ実行されます。0 または負の値を設定すると、無制限に実行されます。 | 0 | long |
| runLoggingLevel (scheduler) | コンシューマーはポーリング時に開始/完了のログ行を記録します。このオプションを使用すると、ログレベルを設定できます。 列挙値:
| TRACE | LoggingLevel |
| scheduledExecutorService (スケジューラー) | コンシューマーに使用するカスタム/共有スレッドプールを設定できます。デフォルトでは、各コンシューマーに独自の単一スレッドのスレッドプールがあります。 | ScheduledExecutorService | |
| scheduler (スケジューラー) | camel-spring または camel-quartz コンポーネントから cron スケジューラーを使用します。スケジューラーにビルドされた値 spring または quartz を使用。 | none | オブジェクト |
| schedulerProperties (スケジューラー) | カスタムスケジューラーまたは Quartz や Spring ベースのスケジューラーを使用する場合に、追加のプロパティーを設定します。 | マップ | |
| startScheduler (スケジューラー) | スケジューラーを自動起動するかどうか。 | true | boolean |
| timeUnit (スケジューラー) | initialDelay および delay オプションの時間単位。 列挙値:
| MILLISECONDS | TimeUnit |
| useFixedDelay (スケジューラー) | 固定遅延または固定レートを使用するかどうかを制御します。詳細は、JDK の ScheduledExecutorService を参照してください。 | true | boolean |
| authorizationToken (セキュリティー) | 必須 ボットを使用するための認証トークン (BotFather に問い合わせてください)。 | String |
50.4.3. メッセージヘッダー
| Name | 説明 |
|---|---|
|
|
このヘッダーは、メッセージを受信するチャット ID を解決するためにプロデューサーエンドポイントによって使用されます。受信者のチャット ID は、メッセージ本文、 |
|
|
このヘッダーは、送信メッセージが純粋なバイナリーデータで設定されている場合にメディアタイプを識別するために使用されます。可能な値は、 |
|
| このヘッダーは、発信バイナリーメッセージのキャプションまたはタイトルを提供するために使用されます。 |
|
|
このヘッダーは、HTML または Markdown を使用してテキストメッセージをフォーマットするために使用されます ( |
50.5. 用途
Telegram コンポーネントは、コンシューマーエンドポイントとプロデューサーエンドポイントの両方をサポートします。また、リアクティブチャットボットモード で使用することもできます (メッセージを消費してから生成するため)。
50.6. プロデューサーの例
以下は、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 オプションを指定せずにプロデューサーエンドポイントを使用すると、メッセージの本文またはヘッダーに含まれる情報を使用してターゲットチャットが識別されます。次のメッセージ本文はプロデューサーエンドポイントで許可されます (タイプ OutgoingXXXMessage のメッセージはパッケージ org.apache.camel.component.telegram.model に属します)
| Java タイプ | 説明 |
|---|---|
|
| チャットにテキストメッセージを送信するには |
|
| 写真 (JPG、PNG) をチャットに送信するには |
|
| mp3 オーディオをチャットに送信するには |
|
| mp4 ビデオをチャットに送信するには |
|
| チャットにファイルを送信するには (任意のメディアタイプ) |
|
| スタンプをチャットに送信するには (WEBP) |
|
| インラインクエリーに回答を送信するには |
|
| テキストとゲームメッセージを編集するには (editMessageText) |
|
| メッセージのキャプションを編集するには (editMessageCaption) |
|
| アニメーション、オーディオ、ドキュメント、写真、またはビデオメッセージを編集するため。(編集メッセージメディア) |
|
| メッセージの返信マークアップのみを編集します。(編集メッセージ返信マークアップ) |
|
| サービスメッセージを含むメッセージを削除するには。(メッセージを削除) |
|
| 場所を送信するには (setSendLocation) |
|
| 変更をライブロケーションに送信するには (editMessageLiveLocation) |
|
| live_period が期限切れになる前に、ボットまたはボット (インラインボットの場合) を介して送信されたライブロケーションメッセージの更新を停止するには (stopMessageLiveLocation) |
|
| venue に関する情報を送信するには (sendVenue) |
|
|
サポートされている任意のメディアタイプを送信します。 |
|
|
チャットにテキストメッセージを送信します。自動的に |
50.7. コンシューマーの例
以下は、テレグラムユーザーが設定済みボットに送信するすべてのメッセージを受信する方法の基本的な例です。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 タイプ | 説明 |
|---|---|
|
| 着信メッセージの完全なオブジェクト表現 |
|
| メッセージの内容 (テキストメッセージのみ) |
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-http を pom.xml ファイルに追加できます。
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-netty-http</artifactId>
<version>3.14.5.redhat-00018</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>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に記載される 8 個のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| 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 | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは 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 | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | ブール値 |
第51章 Timer
コンシューマーのみがサポートされている
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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
51.3. コンポーネントオプション
Timer コンポーネントは、以下に示す 2 個のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは 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 (コンシューマー) | 必須 タイマーの名前。 | String |
51.4.2. クエリーパラメーター (13 パラメーター)
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| delay (コンシューマー) | 最初のイベントがトリガーされるまでの遅延。 | 1000 | long |
| fixedRate (コンシューマー) | イベントは、指定された期間で区切られたほぼ一定の間隔で発生します。 | false | boolean |
| includeMetadata (コンシューマー) | 起動時間、タイマー名、タイマーカウントなどのメタデータを交換に含めるかどうか。この情報はデフォルトで含まれています。 | true | boolean |
| period (コンシューマー) | 0 より大きい場合、周期ごとに定期的なイベントを生成します。 | 1000 | long |
| repeatCount (コンシューマー) | 実行の最大数を指定します。したがって、1 に設定すると、タイマーは 1 回だけ起動します。これを 5 に設定した場合、5 回だけ実行されます。0 または負の値を設定すると、無制限に実行されます。 | long | |
| exceptionHandler (コンシューマー (上級)) | コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
| exchangePattern (コンシューマー (上級)) | コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| ExchangePattern | |
| daemon (上級) | タイマーエンドポイントに関連付けられたスレッドがデーモンとして実行されるかどうかを指定します。デフォルト値は true です。 | true | boolean |
| pattern (上級) | URI 構文を使用して時間オプションを設定するために使用するカスタムの日付パターンを指定できます。 | String | |
| synchronous (上級) | 同期処理を厳密に使用するかどうかを設定します。 | false | boolean |
| time (上級) | 最初のイベントが生成される java.util.Date。URI を使用する場合、予想されるパターンは次のとおりです: yyyy-MM-dd HH:mm:ss または yyyy-MM-dd'T'HH:mm:ss。 | 日付 | |
| timer (上級) | カスタムタイマーを使用するには。 | Timer |
51.5. エクスチェンジプロパティー
タイマーが起動すると、次の情報がプロパティーとして Exchange に追加されます。
| Name | タイプ | 説明 |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| コンシューマーが起動した時刻。 |
|
|
| 現在の火災カウンター。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&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>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に記載される 3 つのオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| camel.component.timer.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | ブール値 |
| camel.component.timer.bridge-error-handler | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは 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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
52.3. コンポーネントオプション
Validator コンポーネントは、以下に示す 3 個のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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 (プロデューサー) | メッセージボディーではなくヘッダーに対して検証します。 | String | |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| errorHandler (上級) | カスタム org.apache.camel.processor.validation.ValidatorErrorHandler を使用するには。デフォルトのエラーハンドラーはエラーをキャプチャし、例外を出力します。 | ValidatorErrorHandler | |
| resourceResolver (上級) | カスタム LSResourceResolver を使用するには。resourceResolverFactory と一緒に使用しないでください。 | LSResourceResolver | |
| resourceResolverFactory (上級) | 動的エンドポイントリソース URI に依存するカスタム LSResourceResolver を使用するには。デフォルトのリソースリゾルバーファクトリーは、クラスパスとファイルシステムからファイルを読み取ることができるリソースリゾルバーを返します。resourceResolver と一緒に使用しないでください。 | ValidatorResourceResolverFactory | |
| schemaFactory (上級) | カスタム javax.xml.validation.SchemaFactory を使用するには。 | SchemaFactory | |
| schemaLanguage (上級) | W3C XML スキーマの namespace URI を設定します。 | 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>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に記載される 4 のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| camel.component.validator.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | ブール値 |
| camel.component.validator.enabled | validator コンポーネントの自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | ブール値 | |
| camel.component.validator.lazy-start-producer | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | ブール値 |
| camel.component.validator.resource-resolver-factory | 動的エンドポイントリソース URI に依存するカスタム LSResourceResolver を使用するには。オプションは org.apache.camel.component.validator.ValidatorResourceResolverFactory タイプです。 | ValidatorResourceResolverFactory |
第53章 Webhook
コンシューマーのみがサポートされている
Webhook メタコンポーネントを使用すると、他の Camel コンポーネントがリモート Webhook プロバイダーで Webhook を設定し、それらをリッスンできます。
現在、次のコンポーネントが Webhook エンドポイントを提供しています。
- Telegram
Maven ユーザーは、このコンポーネントの pom.xml に次の依存関係を追加できます。
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-webhook</artifactId>
<version>3.14.5.redhat-00018</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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
53.3. コンポーネントオプション
Webhook コンポーネントは、以下に示す 8 つのオプションをサポートしています。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| bridgeErrorHandler (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| webhookAutoRegister (コンシューマー) | 起動時に Webhook を自動的に登録し、シャットダウン時に登録解除します。 | true | boolean |
| webhookBasePath (コンシューマー) | Webhook が公開される最初の (ベース) パス要素。権限のない第三者が推測できないように、ランダムな文字列に設定することをお勧めします。 | String | |
| webhookComponentName (consumer) | netty-http などの REST トランスポートに使用する Camel Rest コンポーネント。 | String | |
| webhookExternalUrl (consumer) | Webhook プロバイダーから見た現在のサービスの URL。 | String | |
| webhookPath (コンシューマー) | 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 (コンシューマー) | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは org.apache.camel.spi.ExceptionHandler を使用して例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | false | boolean |
| webhookAutoRegister (コンシューマー) | 起動時に Webhook を自動的に登録し、シャットダウン時に登録解除します。 | true | boolean |
| webhookBasePath (コンシューマー) | Webhook が公開される最初の (ベース) パス要素。権限のない第三者が推測できないように、ランダムな文字列に設定することをお勧めします。 | String | |
| webhookComponentName (consumer) | netty-http などの REST トランスポートに使用する Camel Rest コンポーネント。 | String | |
| webhookExternalUrl (consumer) | Webhook プロバイダーから見た現在のサービスの URL。 | String | |
| webhookPath (コンシューマー) | Webhook エンドポイントが公開されるパス (存在する場合は、basePath に対する相対パス)。 | String | |
| exceptionHandler (コンシューマー (上級)) | コンシューマーによるカスタム ExceptionHandler の使用を許可します。bridgeErrorHandler オプションが有効な場合は、このオプションは使用されないことに注意してください。デフォルトでは、コンシューマーは例外に対応し、WARN または ERROR レベルでログに記録され、無視されます。 | ExceptionHandler | |
| exchangePattern (コンシューマー (上級)) | コンシューマーがエクスチェンジを作成する際に交換パターンを設定します。 列挙値:
| 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>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
このコンポーネントは、以下に示す 9 のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| camel.component.webhook.autowired-enabled | 自動ワイヤリングが有効になっているかどうか。これは、コンポーネントで設定される一致するタイプのインスタンスが 1 つあるかどうかを検出するためにレジストリーを検索することで、自動ワイアリングオプションに使用されます (オプションは自動ワイアとマーク付けされる必要があります)。これは、JDBC データソース、JMS 接続ファクトリー、AWS クライアントなどの自動設定に使用できます。 | true | ブール値 |
| camel.component.webhook.bridge-error-handler | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは 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. エンドポイントオプションの設定
多くの場合、エンドポイントには多数のオプションがあり、最も多くの設定を行うのがエンドポイントであるため、エンドポイントで行う必要があることを設定できます。オプションは、エンドポイントがコンシューマー (from) またはプロデューサー (to) として使用されるか、または両方に使用されるかにも分類されます。
エンドポイントの設定は、多くの場合パスおよびクエリーパラメーターとしてエンドポイント URI で直接行われます。エンドポイントを設定するタイプセーフ方法として Endpoint DSL を使用することもできます。
オプションを設定する際の良い方法は、URL、ポート番号、機密情報などの設定をハードコーディングしないようにする Property Placeholders を使用することです。つまり、プレースホルダーを使用すると、コードから設定を外部化でき、柔軟性および再利用性が向上します。
以下の 2 つのセクションでは、最初にコンポーネント、次にエンドポイントのすべてのオプションを一覧表示します。
54.3. コンポーネントオプション
XSLT コンポーネントは、以下に示す 7 個のオプションをサポートしています。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| contentCache (プロデューサー) | ロード時のリソースコンテンツ (スタイルシートファイル) のキャッシュ。false に設定すると、Camel は各メッセージ処理でスタイルシートファイルをリロードします。これは開発に適しています。キャッシュされたスタイルシートは、clearCachedStylesheet 操作を使用して、JMX 経由で実行時に強制的に再読み込みできます。 | true | boolean |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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 (プロデューサー) | ロード時のリソースコンテンツ (スタイルシートファイル) のキャッシュ。false に設定すると、Camel は各メッセージ処理でスタイルシートファイルをリロードします。これは開発に適しています。キャッシュされたスタイルシートは、clearCachedStylesheet 操作を使用して、JMX 経由で実行時に強制的に再読み込みできます。 | true | boolean |
| deleteOutputFile (producer) | output=file を指定した場合、このオプションは、エクスチェンジの処理が完了したときに出力ファイルを削除するかどうかを指定します。たとえば、出力ファイルが一時ファイルである場合、使用後に削除することをお勧めします。 | false | boolean |
| failOnNullBody (producer) | 入力本文が null の場合に例外を出力するかどうか。 | true | boolean |
| lazyStartProducer (producer) | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | false | boolean |
| output (プロデューサー) | 使用する出力タイプを指定するオプション。可能な値は次のとおりです: 文字列、バイト、DOM、ファイル。最初の 3 つのオプションはすべてメモリーベースであり、ファイルは直接 java.io.File にストリーミングされます。ファイルの場合、キー Exchange.XSLT_FILE_NAME を使用して IN ヘッダーにファイル名を指定する必要があります。これは CamelXsltFileName でもあります。また、ファイル名につながるパスは事前に作成する必要があります。そうしないと、実行時に例外が出力されます。 列挙値:
| string | XsltOutput |
| transformerCacheSize (プロデューサー) | Template.newTransformer() の呼び出しを避けるため、再利用のためにキャッシュされる javax.xml.transform.Transformer オブジェクトの数。 | 0 | int |
| entityResolver (上級) | javax.xml.transform.sax.SAXSource でカスタム org.xml.sax.EntityResolver を使用するには。 | EntityResolver | |
| errorListener (上級) | カスタム javax.xml.transform.ErrorListener を使用するように設定できます。これを行うときは、エラーまたは致命的なエラーをキャプチャし、プロパティーとして Exchange に情報を格納するデフォルトのエラーリスナが使用されていないことに注意してください。したがって、このオプションは特別なユースケースにのみ使用してください。 | ErrorListener | |
| resultHandlerFactory (上級) | カスタム 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_ERROR、Exchange.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>3.14.5.redhat-00032</version> <!-- use the same version as your Camel core version --> </dependency>
コンポーネントは、以下に記載される 8 個のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| 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 | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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>3.14.5.redhat-00018</version>
<!-- use the same version as your Camel core version -->
</dependency>Maven、ant などを使用して、スキーマから簡単にクラスを生成できます。詳細には、Apache Avro のドキュメント を参照してください。
55.1. Avro データ形式オプション
Avro データ形式は、以下にリストされている 1 つのオプションをサポートしています。
| Name | デフォルト | Java タイプ | 説明 |
|---|---|---|---|
| instanceClassName |
| マーシャリングとアンマーシャリングに使用するクラス名。 |
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>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に記載される 2 つのオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| 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 のオプションをサポートしています。
| Name | デフォルト | Java タイプ | 説明 |
|---|---|---|---|
| objectMapper |
| Jackson を使用する場合は、指定された ID で既存の ObjectMapper を検索して使用します。 | |
| useDefaultObjectMapper |
| レジストリーからデフォルトの Jackson ObjectMapper を検索して使用するかどうか。 | |
| unmarshalType |
| アンマーシャリング時に使用する Java 型のクラス名。 | |
| jsonView |
| POJO を JSON にマーシャリングする際に、JSON 出力から特定のフィールドを除外する場合があります。Jackson では、JSON ビューを使用してこれを実現できます。このオプションは、JsonView アノテーションを持つクラスを参照するためのものです。 | |
| include |
| pojo を JSON にマーシャリングする必要があり、pojo に null 値を持つフィールドがいくつかある場合。これらの null 値をスキップする場合は、このオプションを NON_NULL に設定できます。 | |
| allowJmsType |
| JMS ユーザーが JMS 仕様の JMSType ヘッダーを使用して、アンマーシャリングに使用する FQN クラス名を指定できるようにするために使用されます。 | |
| collectionType |
| 使用するレジストリーを参照するカスタムコレクションタイプを参照します。このオプションはあまり使用しないでください。ただし、デフォルトとして java.util.Collection に基づくものとは異なるコレクションタイプを使用できます。 | |
| useList |
| Map の List または Pojo の List にアンマーシャリングします。 | |
| moduleClassNames |
| カスタム Jackson モジュール com.fasterxml.jackson.databind.Module を使用するには、FQN クラス名を持つ文字列として指定します。複数のクラスはコンマで区切ることができます。 | |
| moduleRefs |
| Camel レジストリーから参照されるカスタム Jackson モジュールを使用します。複数のモジュールはコンマで区切ることができます。 | |
| enableFeatures |
| Jackson com.fasterxml.jackson.databind.ObjectMapper で有効にする機能のセット。機能は、com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature、または com.fasterxml.jackson.databind.MapperFeature の列挙型と一致する名前である必要があります。複数の機能はコンマで区切ることができます。 | |
| disableFeatures |
| 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 |
| 設定されている場合、Jackson はマーシャリング/アンマーシャリング時にタイムゾーンを使用します。 | |
| autoDiscoverObjectMapper |
| true に設定すると、Jackson は objectMapper をレジストリーで検索します。 | |
| contentTypeHeader |
| データ形式が Content-Type ヘッダーにデータ形式のタイプを設定する必要があるかどうか。たとえば、XML にマーシャリングするデータ形式の場合は application/xml、JSON にマーシャリングするデータ形式の場合は application/json です。 | |
| schemaResolver |
| 転送中のデータのスキーマを検索するために使用されるオプションのスキーマリゾルバー。 | |
| 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>3.14.5.redhat-00018</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>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に記載される 19 のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| 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 数値の場合、精度と小数点またはグループ区切り記号も定義できます。
| 型 | フォーマットの種類 | パターン例 | リンク |
|---|---|---|---|
| 日付 |
|
| https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/text/SimpleDateFormat.html |
| Decimal* |
|
| https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/text/DecimalFormat.html |
Decimal には Double、Integer、Float、Short、Long を指定できます。
対応フォーマット
この最初のリリースでは、コンマ区切りの値フィールドとキーと値のペアフィールド (例: FIX メッセージ) のみがサポートされています。
camel-bindy を使用するには、最初にモデルをパッケージ (例: com.acme.model) で定義し、モデルクラス (例: Order、Client、Instrument など) ごとに必要なアノテーション (後述) をクラスまたはフィールドに追加する必要があります。
複数のモデル
パッケージ名の代わりにクラス名を使用して bindy を設定すると、複数のモデルを同じパッケージに入れることができます。
57.1. オプション
Bindy データ形式は、以下に示す 5 つのオプションをサポートしています。
| Name | デフォルト | Java タイプ | 説明 |
|---|---|---|---|
| type |
| 必須: Csv、Fixed、KeyValue のいずれを使用できます。 列挙値:
| |
| classType |
| 使用するモデルクラスの名前。 | |
| locale |
| 米国の 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 にマーシャリングして引用符を使用する場合は、以下に示すように @CsvRecord の quote 属性を使用して、使用する引用符を指定する必要があることに注意してください。
@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;
}| __ |
|
57.2.2. 2.リンク
リンクアノテーションを使用すると、オブジェクトを相互にリンクできます。
| アノテーション名 | レコードの種類 | レベル |
|---|---|---|
| リンク | all | クラスとプロパティー |
| パラメーター名 | タイプ | 必須 | デフォルト値 | Info |
|---|---|---|---|---|
| linkType | LinkType | OneToOne | クラス間の関係を識別するリンクのタイプ |
現在のバージョンでは、1 対 1 の関係のみが許可されています。
例: モデルクラス Client が Order クラスにリンクされている場合には、次のように Order クラスでアノテーション Link を使用します。
プロパティーリンク
@CsvRecord(separator = ",")
public class Order {
@DataField(pos = 1)
private int orderNr;
@Link
private Client client;
}クラス Client の場合:
クラスリンク
@Link
public class Client {
}57.2.3. 3.DataField
DataField アノテーションは、フィールドのプロパティーを定義します。各データフィールドは、レコード内の位置、タイプ(文字列、int、日付など)、およびオプションでパターンで識別されます。
| アノテーション名 | レコードの種類 | レベル |
|---|---|---|
| DataField | all | プロパティー |
| パラメーター名 | タイプ | 必須 | デフォルト値 | Info |
|---|---|---|---|---|
| pos | int | ✓ | 入力レコード内のデータの位置。1 から開始する必要があります (必須)。位置パラメーターを参照してください。 | |
| align | String | R | テキストを右または左に揃えます。値 <tt>R</tt> または <tt>L</tt> を使用します。 | |
| clip | boolean | false | 固定長の使用時に許容される長さを超える場合は、フィールド内のデータを切り取ることを示します。 | |
| columnName | String |
ヘッダー列の名前 (オプション)。プロパティーの名前をデフォルトとして使用します。 | ||
| 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 | クラス | 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 と組み合わせて使用する場合に非常に役立ちます。
| アノテーション名 | レコードの種類 | レベル |
|---|---|---|
| メッセージ | キーと値のペア。 | クラス |
| パラメーター名 | タイプ | 必須 | デフォルト値 | 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 は、タグ(= キー)とそれに関連付けられた値、タイプ(文字列、int、日付など)、任意となるパターン、およびフィールドが必要な場合で識別されます。
| アノテーション名 | レコードの種類 | レベル |
|---|---|---|
| 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 | クラス |
| パラメーター名 | タイプ | 必須 | デフォルト値 | 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
- ブール値
- 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>3.14.5.redhat-00018</version> </dependency>
57.7. Spring Boot 自動設定
Spring Boot で bindy-csv を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-bindy-starter</artifactId> <version>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に記載される 18 のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| 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 メッセージ を操作するために使用されます。
このコンポーネントは以下をサポートします。
Maven ユーザーは、このコンポーネントの pom.xml に以下の依存関係を追加する必要があります。
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-hl7</artifactId>
<version>3.14.5.redhat-00018</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 コーデックは、次のように設定できます。
| Name | デフォルト値 | 説明 |
|---|---|---|
|
|
| HL7 ペイロードにまたがる開始バイト。 |
|
|
| HL7 ペイロードにまたがる最初のエンドバイト。 |
|
|
| HL7 ペイロードにまたがる 2 番目のエンドバイト。 |
|
| JVM デフォルト | コーデックに使用するエンコーディング (文字セット名)。指定しない場合、Camel は JVM のデフォルトの文字セット を使用します。 |
|
|
| true の場合、コーデックは定義された文字セットを使用して文字列を作成します。false の場合、コーデックはプレーンバイト配列をルートに送信し、HL7 データ形式で HL7 メッセージコンテンツからの実際の文字セットを判別できるようにします。 |
|
|
|
HL7 が |
58.1.1. Mina を使用した HL7 リスナーの公開
Spring XML ファイルでは、ポート 8888 で TCP を使用して HL7 リクエストをリッスンするように mina エンドポイントを設定します。
<endpoint id="hl7MinaListener" uri="mina:tcp://localhost:8888?sync=true&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 をルートでコンシューマーとして使用できます。
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&encoders=#hl7encoder&decoders=#hl7decoder"/>
sync=true は、このリスナーが同期的であるため、HL7 応答を呼び出し元に返すことを示します。HL7 コーデックは、encoders=#hl7encoder*and*decoders=#hl7decoder で設定されます。hl7encoder と hl7decoder は単なる 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 をコンシューマーとしてルートで使用できます。
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
byte、String、またはその他の単純なオブジェクト形式を操作する必要がないため、これは 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 つのオプションをサポートしています。
| Name | デフォルト | 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 フィールド | 例 |
|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| `` |
|
|
|
|
|
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>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に記載される 4 のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| 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 のオプションをサポートしています。
| Name | デフォルト | Java タイプ | 説明 |
|---|---|---|---|
| xmlMapper |
| 指定された ID を持つ既存の XmlMapper を検索して使用します。 | |
| prettyPrint | false |
| 適切にフォーマットされたきれいな印刷出力を有効にします。デフォルトでは false です。 |
| unmarshalType |
| アンマーシャリング時に使用する Java 型のクラス名。 | |
| jsonView |
| POJO を JSON にマーシャリングする際に、JSON 出力から特定のフィールドを除外する場合があります。Jackson では、JSON ビューを使用してこれを実現できます。このオプションは、JsonView アノテーションを持つクラスを参照するためのものです。 | |
| include |
| pojo を JSON にマーシャリングする必要があり、pojo に null 値を持つフィールドがいくつかある場合。これらの null 値をスキップする場合は、このオプションを NON_NULL に設定できます。 | |
| allowJmsType |
| JMS ユーザーが JMS 仕様の JMSType ヘッダーを使用して、アンマーシャリングに使用する FQN クラス名を指定できるようにするために使用されます。 | |
| collectionType |
| 使用するレジストリーを参照するカスタムコレクションタイプを参照します。このオプションはあまり使用しないでください。ただし、デフォルトとして java.util.Collection に基づくものとは異なるコレクションタイプを使用できます。 | |
| useList |
| Map の List または Pojo の List にアンマーシャリングします。 | |
| enableJaxbAnnotationModule |
| jackson の使用時に JAXB アノテーションモジュールを有効にするかどうか。有効にすると、Jackson によって JAXB アノテーションを使用できます。 | |
| moduleClassNames |
| カスタム Jackson モジュール com.fasterxml.jackson.databind.Module を使用するには、FQN クラス名を持つ文字列として指定します。複数のクラスはコンマで区切ることができます。 | |
| moduleRefs |
| Camel レジストリーから参照されるカスタム Jackson モジュールを使用します。複数のモジュールはコンマで区切ることができます。 | |
| enableFeatures |
| Jackson com.fasterxml.jackson.databind.ObjectMapper で有効にする機能のセット。機能は、com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature、または com.fasterxml.jackson.databind.MapperFeature の列挙型と一致する名前である必要があります。複数の機能はコンマで区切ることができます。 | |
| disableFeatures |
| 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);
unmarshalType、jsonView などの他の設定と組み合わせて 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>3.14.5.redhat-00018</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>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に記載される 16 のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| camel.dataformat.jacksonxml.allow-jms-type | JMS ユーザーが JMS 仕様の JMSType ヘッダーを使用して、アンマーシャリングに使用する FQN クラス名を指定できるようにするために使用されます。 | false | ブール値 |
| 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 | ブール値 |
| 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 | ブール値 |
| camel.dataformat.jacksonxml.xml-mapper | 指定された ID を持つ既存の XmlMapper を検索して使用します。 | String |
第60章 JAXB
JAXB は、Java 6 に含まれている JAXB2 XML マーシャリング標準を使用して、XML ペイロードを Java オブジェクトにアンマーシャリングするか、Java オブジェクトを XML ペイロードにマーシャリングするデータ形式です。
60.1. オプション
JAXB データ形式は、以下にリストされているオプションを 19 個サポートしています。
| Name | デフォルト | Java タイプ | 説明 |
|---|---|---|---|
| contextPath |
| 必須 JAXB クラスが配置されているパッケージ名。 | |
| contextPathIsClassName |
| これを true に設定すると、contextPath がパッケージ名ではなくクラス名を参照していることを示すことができます。 | |
| schema |
| 既存のスキーマに対して検証します。接頭辞 classpath:、file:、または http: を使用して、リソースの解決方法を指定できます。「,」文字を使用して、複数のスキーマファイルを区切ることができます。 | |
| schemaSeverityLevel |
| スキーマに対して検証するときに使用するスキーマの重大度レベルを設定します。このレベルは、重大度が最小のエラーを判断し、JAXB をトリガーして解析の続行を停止します。デフォルト値の 0 (警告) は、エラー (警告、エラー、または致命的なエラー) によって JAXB が停止することを意味します。0=警告、1=エラー、2=致命的なエラーという 3 つのレベルがあります。 列挙値:
| |
| prettyPrint |
| 適切にフォーマットされたきれいな印刷出力を有効にします。デフォルトでは false です。 | |
| objectFactory |
| マーシャリング中に ObjectFactory クラスを使用して POJO クラスを作成できるようにするかどうか。これは、JAXB でアノテーションが付けられておらず、jaxb.index 記述子ファイルを提供していない POJO クラスにのみ適用されます。 | |
| ignoreJAXBElement |
| JAXBElement 要素を無視するかどうか。非常に特殊なユースケースでのみ false に設定する必要があります。 | |
| mustBeJAXBElement |
| マーシャリングが JAXB アノテーション付きの Java オブジェクトでなければならないかどうか。そうでない場合は失敗します。このオプションを false に設定すると、データがすでに XML 形式になっている場合など、設定が緩和されます。 | |
| filterNonXmlChars |
| xml 以外の文字を無視し、空白に置き換えます。 | |
| encoding |
| 特定のエンコーディングを無効にして使用します。 | |
| fragment |
| XML フラグメントツリーのマーシャリングをオンにします。デフォルトでは、JAXB は指定されたクラスの XmlRootElement アノテーションを探して、XML ツリー全体を操作します。これは便利ですが、常に有用であるわけではありません。たとえば、生成されたコードに XmlRootElement アノテーションがない場合や、ツリーの一部だけを非整列化する必要がある場合などが挙げられます。その場合、部分的なアンマーシャリングを使用できます。この動作を有効にするには、プロパティー partClass を設定する必要があります。Camel は、このクラスを JAXB のアンマーシャラーに渡します。 | |
| partClass |
| フラグメント解析に使用されるクラスの名前。詳細については、フラグメントオプションを参照してください。 | |
| partNamespace |
| フラグメントの解析に使用する XML 名前空間。詳細については、フラグメントオプションを参照してください。 | |
| namespacePrefixRef |
| JAXB または SOAP を使用してマーシャリングする場合、JAXB 実装は、ns2、ns3、ns4 などの名前空間接頭辞を自動的に割り当てます。このマッピングを制御するために、Camel では目的のマッピングを含むマップを参照できます。 | |
| xmlStreamWriterWrapper |
| カスタム xml ストリームライターを使用します。 | |
| schemaLocation |
| スキーマの場所を定義します。 | |
| noNamespaceSchemaLocation |
| 名前空間のないスキーマの場所を定義します。 | |
| jaxbProviderProperties |
| カスタム 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.5 | JDK 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 などの名前空間接頭辞を自動的に割り当てます。このマッピングを制御するために、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>3.14.5.redhat-00018</version> </dependency>
60.14. Spring Boot 自動設定
Spring Boot で jaxb を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-jaxb-starter</artifactId> <version>3.14.5.redhat-00032</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 | ブール値 |
| camel.dataformat.jaxb.fragment | XML フラグメントツリーのマーシャリングをオンにします。デフォルトでは、JAXB は指定されたクラスの XmlRootElement アノテーションを探して、XML ツリー全体を操作します。これは便利ですが、常に有用であるわけではありません。たとえば、生成されたコードに XmlRootElement アノテーションがない場合や、ツリーの一部だけを非整列化する必要がある場合などが挙げられます。その場合、部分的なアンマーシャリングを使用できます。この動作を有効にするには、プロパティー partClass を設定する必要があります。Camel は、このクラスを JAXB のアンマーシャラーに渡します。 | false | ブール値 |
| camel.dataformat.jaxb.ignore-j-a-x-b-element | JAXBElement 要素を無視するかどうか。非常に特殊なユースケースでのみ false に設定する必要があります。 | false | ブール値 |
| 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 | ブール値 |
| 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 | ブール値 |
| camel.dataformat.jaxb.part-class | フラグメント解析に使用されるクラスの名前。詳細については、フラグメントオプションを参照してください。 | String | |
| camel.dataformat.jaxb.part-namespace | フラグメントの解析に使用する XML 名前空間。詳細については、フラグメントオプションを参照してください。 | String | |
| camel.dataformat.jaxb.pretty-print | 適切にフォーマットされたきれいな印刷出力を有効にします。デフォルトでは false です。 | false | ブール値 |
| 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 |
| アンマーシャリング時に使用する 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>3.14.5.redhat-00018</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>3.14.5.redhat-00032</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 |
| Jackson を使用する場合は、指定された ID で既存の ObjectMapper を検索して使用します。 | |
| useDefaultObjectMapper |
| レジストリーからデフォルトの Jackson ObjectMapper を検索して使用するかどうか。 | |
| prettyPrint |
| 適切にフォーマットされたきれいな印刷出力を有効にします。デフォルトでは false です。 | |
| unmarshalType |
| アンマーシャリング時に使用する Java 型のクラス名。 | |
| jsonView |
| POJO を JSON にマーシャリングする際に、JSON 出力から特定のフィールドを除外する場合があります。Jackson では、JSON ビューを使用してこれを実現できます。このオプションは、JsonView アノテーションを持つクラスを参照するためのものです。 | |
| include |
| pojo を JSON にマーシャリングする必要があり、pojo に null 値を持つフィールドがいくつかある場合。これらの null 値をスキップする場合は、このオプションを NON_NULL に設定できます。 | |
| allowJmsType |
| JMS ユーザーが JMS 仕様の JMSType ヘッダーを使用して、アンマーシャリングに使用する FQN クラス名を指定できるようにするために使用されます。 | |
| collectionType |
| 使用するレジストリーを参照するカスタムコレクションタイプを参照します。このオプションはあまり使用しないでください。ただし、デフォルトとして java.util.Collection に基づくものとは異なるコレクションタイプを使用できます。 | |
| useList |
| Map の List または Pojo の List にアンマーシャリングします。 | |
| moduleClassNames |
| カスタム Jackson モジュール com.fasterxml.jackson.databind.Module を使用するには、FQN クラス名を持つ文字列として指定します。複数のクラスはコンマで区切ることができます。 | |
| moduleRefs |
| Camel レジストリーから参照されるカスタム Jackson モジュールを使用します。複数のモジュールはコンマで区切ることができます。 | |
| enableFeatures |
| Jackson com.fasterxml.jackson.databind.ObjectMapper で有効にする機能のセット。機能は、com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature、または com.fasterxml.jackson.databind.MapperFeature の列挙型と一致する名前である必要があります。複数の機能はコンマで区切ることができます。 | |
| disableFeatures |
| 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 |
| 設定されている場合、Jackson はマーシャリング/アンマーシャリング時にタイムゾーンを使用します。このオプションは、gson、fastjson、xstream など、他の Json DataFormat には影響を与えません。 | |
| autoDiscoverObjectMapper |
| true に設定すると、Jackson は objectMapper をレジストリーで検索します。 | |
| contentTypeHeader |
| データ形式が Content-Type ヘッダーにデータ形式のタイプを設定する必要があるかどうか。たとえば、XML にマーシャリングするデータ形式の場合は application/xml、JSON にマーシャリングするデータ形式の場合は application/json です。 | |
| schemaResolver |
| 転送中のデータのスキーマを検索するために使用されるオプションのスキーマリゾルバー。 | |
| autoDiscoverSchemaResolver |
| 無効にしない場合、SchemaResolver はレジストリーで検索されます。 | |
| namingStrategy |
| 設定されている場合、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>3.14.5.redhat-00018</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>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に記載される 21 のオプションをサポートします。
| 名前 | 説明 | デフォルト | タイプ |
|---|---|---|---|
| camel.dataformat.json-jackson.allow-jms-type | JMS ユーザーが JMS 仕様の JMSType ヘッダーを使用して、アンマーシャリングに使用する FQN クラス名を指定できるようにするために使用されます。 | false | ブール値 |
| 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 | ブール値 |
| 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 個のオプションをサポートしています。
| Name | デフォルト | Java タイプ | 説明 |
|---|---|---|---|
| contentTypeHeader |
| データ形式が Content-Type ヘッダーにデータ形式のタイプを設定する必要があるかどうか。たとえば、XML にマーシャリングするデータ形式の場合は application/xml、JSON にマーシャリングするデータ形式の場合は application/json です。 | |
| objectMapper |
| Jackson を使用する場合は、指定された ID で既存の ObjectMapper を検索して使用します。 | |
| useDefaultObjectMapper |
| レジストリーからデフォルトの Jackson ObjectMapper を検索して使用するかどうか。 | |
| unmarshalType |
| アンマーシャリング時に使用する Java 型のクラス名。 | |
| jsonView |
| POJO を JSON にマーシャリングする際に、JSON 出力から特定のフィールドを除外する場合があります。Jackson では、JSON ビューを使用してこれを実現できます。このオプションは、JsonView アノテーションを持つクラスを参照するためのものです。 | |
| include |
| pojo を JSON にマーシャリングする必要があり、pojo に null 値を持つフィールドがいくつかある場合。これらの null 値をスキップする場合は、このオプションを NON_NULL に設定できます。 | |
| allowJmsType |
| JMS ユーザーが JMS 仕様の JMSType ヘッダーを使用して、アンマーシャリングに使用する FQN クラス名を指定できるようにするために使用されます。 | |
| collectionType |
| 使用するレジストリーを参照するカスタムコレクションタイプを参照します。このオプションはあまり使用しないでください。ただし、デフォルトとして java.util.Collection に基づくものとは異なるコレクションタイプを使用できます。 | |
| useList |
| Map の List または Pojo の List にアンマーシャリングします。 | |
| moduleClassNames |
| カスタム Jackson モジュール com.fasterxml.jackson.databind.Module を使用するには、FQN クラス名を持つ文字列として指定します。複数のクラスはコンマで区切ることができます。 | |
| moduleRefs |
| Camel レジストリーから参照されるカスタム Jackson モジュールを使用します。複数のモジュールはコンマで区切ることができます。 | |
| enableFeatures |
| Jackson com.fasterxml.jackson.databind.ObjectMapper で有効にする機能のセット。機能は、com.fasterxml.jackson.databind.SerializationFeature, com.fasterxml.jackson.databind.DeserializationFeature、または com.fasterxml.jackson.databind.MapperFeature の列挙型と一致する名前である必要があります。複数の機能はコンマで区切ることができます。 | |
| disableFeatures |
| 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 |
| 設定されている場合、Jackson はマーシャリング/アンマーシャリング時にタイムゾーンを使用します。 | |
| autoDiscoverObjectMapper |
| true に設定すると、Jackson は objectMapper をレジストリーで検索します。 | |
| schemaResolver |
| 転送中のデータのスキーマを検索するために使用されるオプションのスキーマリゾルバー。 | |
| 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>3.14.5.redhat-00018</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>3.14.5.redhat-00032</version> <!-- use the same version as your Camel core version --> </dependency>
コンポーネントは、以下に記載される 19 のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| 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 |
| 必須 JAXB クラスが配置されているパッケージ名。 | |
| encoding |
| 特定のエンコーディングを無効にして使用します。 | |
| elementNameStrategyRef |
| レジストリーから検索する要素ストラテジーを参照します。要素名ストラテジーは 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 |
| SOAP バージョンは 1.1 または 1.2 のいずれかである必要があります。デフォルトは 1.1 です。 | |
| namespacePrefixRef |
| JAXB または SOAP を使用してマーシャリングする場合、JAXB 実装は、ns2、ns3、ns4 などの名前空間接頭辞を自動的に割り当てます。このマッピングを制御するために、Camel では目的のマッピングを含むマップを参照できます。 | |
| schema |
| 既存のスキーマに対して検証します。接頭辞 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>3.14.5.redhat-00018</version> </dependency>
64.7. Spring Boot 自動設定
Spring Boot で soapjaxb を使用する場合は、自動設定をサポートするために、次の Maven 依存関係を必ず使用してください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-soap-starter</artifactId> <version>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に記載される 7 のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| 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 つのオプションをサポートしています。
| Name | デフォルト | Java タイプ | 説明 |
|---|---|---|---|
| usingIterator |
| zip ファイルに複数のエントリーがある場合には、このオプションを true に設定すると、スプリッター EIP を使用して、ストリーミングモードで反復子を使用してデータを分割できます。 | |
| allowEmptyDirectory |
| zip ファイルに複数のエントリーがある場合、このオプションを true に設定すると、ディレクトリーが空であっても反復子を取得できます。 | |
| preservePathElements |
| ファイル名にパス要素が含まれている場合、このオプションを true に設定すると、zip ファイルでパスを維持できます。 | |
| maxDecompressedSize |
| 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 メッセージヘッダーがない場合 (ファイルコンポーネントがコンシューマーでない場合など)、メッセージ 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>3.14.5.redhat-00018</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>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に示す 5 個のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| camel.dataformat.zipfile.allow-empty-directory | zip ファイルに複数のエントリーがある場合、このオプションを true に設定すると、ディレクトリーが空であっても反復子を取得できます。 | false | ブール値 |
| 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 | ブール値 |
| camel.dataformat.zipfile.using-iterator | zip ファイルに複数のエントリーがある場合には、このオプションを true に設定すると、スプリッター EIP を使用して、ストリーミングモードで反復子を使用してデータを分割できます。 | false | ブール値 |
第66章 Constant
定数式言語は、実際には定数値またはオブジェクトを使用する方法にすぎません。
これは、ルートの開始時に一度だけ設定される固定定数値 (またはオブジェクト) であるため、ルーティング中に動的な値が必要な場合は、この値は使用しないでください。
66.1. Constant オプション
Constant 言語は、以下に示す 2 つのオプションをサポートしています。
| Name | デフォルト | Java タイプ | 説明 |
|---|---|---|---|
| resultType |
| 定数型のクラス名を設定します。 | |
| 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>3.14.5.redhat-00032</version> <!-- use the same version as your Camel core version --> </dependency>
コンポーネントは、以下に記載される 147 のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| 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 トランスポート (コンシューマー) に使用する Camel Rest コンポーネント。コンポーネントが明示的に設定されていない場合、Rest DSL と統合する Camel コンポーネントがある場合、または org.apache.camel.spi.RestConsumerFactory がレジストリーに登録されている場合、Camel はルックアップします。いずれかが見つかった場合は、それが使用されています。 | String | |
| camel.rest.component-property | 使用中の残りのコンポーネントの追加プロパティーをできるだけ多く設定できます。 | マップ | |
| camel.rest.consumer-property | 使用中の残りのコンシューマーの追加プロパティーをできるだけ多く設定できます。 | マップ | |
| 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 プロデューサーが REST uri を検証するために使用する API ドキュメント (swagger api) の場所を設定し、API ドキュメントに応じてクエリーパラメーターが有効です。これには、クラスパスに camel-swagger-java を追加する必要があり、設定に誤りがあると、Camel が起動時に失敗し、エラーが報告されます。API ドキュメントの場所はデフォルトでクラスパスから読み込まれますが、file: または http: を使用してリソースを参照し、ファイルまたは http url から読み込むことができます。 | String | |
| camel.rest.producer-component | REST プロデューサーとして使用する 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
C Simple 言語は、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 言語には、Collection、Map、または配列型を操作する一般的なユースケースをサポートするための追加関数がいくつか含まれています。次の関数 bodyAsIndex、headerAsIndex、および exchangePropertyAsIndex は、これらのユースケースに入力されたとおりに使用されます。
| 機能 | タイプ | 説明 |
|---|---|---|
| bodyAsIndex(type, index) | タイプ |
既存の |
| mandatoryBodyAsIndex(type, index) | タイプ |
既存の |
| headerAsIndex(key, type, index) | タイプ |
既存の |
| mandatoryHeaderAsIndex(key, type, index) | タイプ |
既存の |
| exchangePropertyAsIndex(key, type, index) | タイプ |
既存の |
| mandatoryExchangePropertyAsIndex(key, type, index) | タイプ |
既存の |
たとえば、次の 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 Examples の camel-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>3.14.5.redhat-00032</version> </dependency>
pom.xml ファイルに Maven プラグインを追加する必要はありません。
jOOR コンパイラーを使用する Camel Examples の camel-example-csimple-joor の例を参照してください。
67.3. CSimple 言語オプション
CSimple 言語は、次に示す 2 つのオプションをサポートしています。
| Name | デフォルト | Java タイプ | 説明 |
|---|---|---|---|
| resultType |
| 結果の型 (出力からの型) のクラス名を設定します。 | |
| trim |
| 値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。 |
67.4. 制限事項
現在、csimple 言語は以下をサポート していません。
- ネストされた関数 (別名、関数内の関数)
-
null セーフな 演算子 (
?)。
たとえば、次のスクリプトはコンパイルできません。
Hello ${bean:greeter(${body}, ${header.counter})} ${bodyAs(MyUser)?.address?.zip} > 1000067.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>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に記載される 147 のオプションをサポートします。
| Name | 説明 | デフォルト | タイプ |
|---|---|---|---|
| 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 トランスポート (コンシューマー) に使用する Camel Rest コンポーネント。コンポーネントが明示的に設定されていない場合、Rest DSL と統合する Camel コンポーネントがある場合、または org.apache.camel.spi.RestConsumerFactory がレジストリーに登録されている場合、Camel はルックアップします。いずれかが見つかった場合は、それが使用されています。 | String | |
| camel.rest.component-property | 使用中の残りのコンポーネントの追加プロパティーをできるだけ多く設定できます。 | マップ | |
| camel.rest.consumer-property | 使用中の残りのコンシューマーの追加プロパティーをできるだけ多く設定できます。 | マップ | |
| 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 プロデューサーが REST uri を検証するために使用する API ドキュメント (swagger api) の場所を設定し、API ドキュメントに応じてクエリーパラメーターが有効です。これには、クラスパスに camel-swagger-java を追加する必要があり、設定に誤りがあると、Camel が起動時に失敗し、エラーが報告されます。API ドキュメントの場所はデフォルトでクラスパスから読み込まれますが、file: または http: を使用してリソースを参照し、ファイルまたは http url から読み込むことができます。 | String | |
| camel.rest.producer-component | REST プロデューサーとして使用する 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>3.14.5.redhat-00032</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 トランスポート (コンシューマー) に使用する Camel Rest コンポーネント。コンポーネントが明示的に設定されていない場合、Rest DSL と統合する Camel コンポーネントがある場合、または org.apache.camel.spi.RestConsumerFactory がレジストリーに登録されている場合、Camel はルックアップします。いずれかが見つかった場合は、それが使用されています。 | String | |
| camel.rest.component-property | 使用中の残りのコンポーネントの追加プロパティーをできるだけ多く設定できます。 | マップ | |
| camel.rest.consumer-property | 使用中の残りのコンシューマーの追加プロパティーをできるだけ多く設定できます。 | マップ | |
| 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 プロデューサーが REST uri を検証するために使用する API ドキュメント (swagger api) の場所を設定し、API ドキュメントに応じてクエリーパラメーターが有効です。これには、クラスパスに camel-swagger-java を追加する必要があり、設定に誤りがあると、Camel が起動時に失敗し、エラーが報告されます。API ドキュメントの場所はデフォルトでクラスパスから読み込まれますが、file: または http: を使用してリソースを参照し、ファイルまたは http url から読み込むことができます。 | String | |
| camel.rest.producer-component | REST プロデューサーとして使用する 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 関連の機能が追加されています。これらの機能は、ファイルパスと名前を操作する一般的なユースケースに関連しています。目標は、式をコンシューマーとプロデューサーの両方に
動的ファイルパターンを設定するためのコンポーネントと合わせて使用することです。
File 言語は言語に統合されているので、Simple 言語内ですべてのファイル構文を直接使用できます。
69.1. File 言語オプション
File 言語は、以下に示す 2 つのオプションをサポートしています。
| 名前 | デフォルト | Java タイプ | 説明 |
|---|---|---|---|
| resultType |
| 結果の型 (出力からの型) のクラス名を設定します。 | |
| trim |
| 値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。 |
69.2. 構文
この言語は、言語の 拡張 であるため、構文も適用されます。したがって、以下の表には、追加のファイル関連機能のみがリストされています。
すべての File トークンは、java.io.File オブジェクトのメソッドと同じ式名を使用します。たとえば、file:absolute は java.io.File.getAbsolute () メソッドを参照します。すべての式が現在の Exchange でサポートされているわけではないことに注意してください。たとえば、コンポーネントは一部のオプションをサポートしますが、File コンポーネントはすべてのオプションをサポートします。
| 式 | タイプ | ファイルコンシューマー | ファイルプロデューサー | FTP コンシューマー | FTP プロデューサー | 説明 |
|---|---|---|---|---|---|---|
| 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 | ブール値 | はい | いいえ | いいえ | いいえ | ファイルが絶対パスまたは相対パスと見なされるかどうかを示します。 |
| file:absolute.path | String | はい | いいえ | いいえ | いいえ | 絶対ファイルパスを指します。 |
| file:length | Long | はい | いいえ | はい | いいえ | Long 型として返されるファイルの長さを参照します |
| file:size | Long | はい | いいえ | はい | いいえ | Long 型として返されるファイルの長さを参照します |
| file:modified | 日付 | はい | いいえ | はい | いいえ | 日付型として返された最終変更ファイルを指します。 |
| date:_command:pattern_ | String | はい | はい | はい | はい |
|
69.3. File トークンの例
69.3.1. 相対パス
相対 ディレクトリー (.\filelanguage\test) にファイル hello.txt の java.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.txt の java.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"
ファイルコンシューマーを使用してファイルを読み取り、読み取ったファイルを移動して、現在の日付をサブフォルダーとして持つバックアップフォルダーに移動するとします。これは、次のような式を使用して実行できます。
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>3.14.5.redhat-00032</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 トランスポート (コンシューマー) に使用する Camel Rest コンポーネント。コンポーネントが明示的に設定されていない場合、Rest DSL と統合する Camel コンポーネントがある場合、または org.apache.camel.spi.RestConsumerFactory がレジストリーに登録されている場合、Camel はルックアップします。いずれかが見つかった場合は、それが使用されています。 | String | |
| camel.rest.component-property | 使用中の残りのコンポーネントの追加プロパティーをできるだけ多く設定できます。 | マップ | |
| camel.rest.consumer-property | 使用中の残りのコンシューマーの追加プロパティーをできるだけ多く設定できます。 | マップ | |
| 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 プロデューサーが REST uri を検証するために使用する API ドキュメント (swagger api) の場所を設定し、API ドキュメントに応じてクエリーパラメーターが有効です。これには、クラスパスに camel-swagger-java を追加する必要があり、設定に誤りがあると、Camel が起動時に失敗し、エラーが報告されます。API ドキュメントの場所はデフォルトでクラスパスから読み込まれますが、file: または http: を使用してリソースを参照し、ファイルまたは http url から読み込むことができます。 | String | |
| camel.rest.producer-component | REST プロデューサーとして使用する 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>3.14.5.redhat-00032</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 トランスポート (コンシューマー) に使用する Camel Rest コンポーネント。コンポーネントが明示的に設定されていない場合、Rest DSL と統合する Camel コンポーネントがある場合、または org.apache.camel.spi.RestConsumerFactory がレジストリーに登録されている場合、Camel はルックアップします。いずれかが見つかった場合は、それが使用されています。 | String | |
| camel.rest.component-property | 使用中の残りのコンポーネントの追加プロパティーをできるだけ多く設定できます。 | マップ | |
| camel.rest.consumer-property | 使用中の残りのコンシューマーの追加プロパティーをできるだけ多く設定できます。 | マップ | |
| 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 プロデューサーが REST uri を検証するために使用する API ドキュメント (swagger api) の場所を設定し、API ドキュメントに応じてクエリーパラメーターが有効です。これには、クラスパスに camel-swagger-java を追加する必要があり、設定に誤りがあると、Camel が起動時に失敗し、エラーが報告されます。API ドキュメントの場所はデフォルトでクラスパスから読み込まれますが、file: または http: を使用してリソースを参照し、ファイルまたは http url から読み込むことができます。 | String | |
| camel.rest.producer-component | REST プロデューサーとして使用する 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 |
| 結果の型 (出力からの型) のクラス名を設定します。 | |
| suppressExceptions |
| PathNotFoundException などの例外を抑制するかどうか。 | |
| allowSimple |
| JSONPath 式でインライン化された Simple 例外を許可するかどうか。 | |
| allowEasyPredicate |
| 簡単な述語パーサーを使用して述語を事前解析できるようにするかどうか。 | |
| writeAsString |
| 各行/要素の出力をマップ/POJO 値ではなく JSON 文字列値として書き込むかどうか。 | |
| headerName |
| メッセージボディーの代わりに入力として使用するヘッダーの名前。 | |
| option |
| JSONPath で追加のオプションを設定するします。複数の値はコンマで区切ることができます。 列挙値:
| |
| 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 < 10)]</jsonpath>
<to uri="mock:cheap"/>
</when>
<when>
<jsonpath>$.store.book[?(@.price < 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 |
|---|---|
|
| ファイルからの読み込み |
|
| プレーンテキスト |
|
|
|
|
|
|
|
|
任意 Jackson がクラスパス上にある場合、camel-jsonpath は Jackson を使用してメッセージボディーを POJO から |
|
|
上記のタイプがどれも一致しない場合、Camel はメッセージボディーを |
メッセージボディーがサポートされないタイプの場合は、デフォルトでは例外が出力されますが、JSonPath の設定で例外を抑止できます (以下を参照)。
71.5. 例外の抑制
デフォルトでは、設定された jsonpath 式に従って json ペイロードに有効なパスがない場合には、jsonpath は例外を出力します。ユースケースによっては、json ペイロードにオプションのデータが含まれている時にはこれを無視する場合があります。したがって、以下に示すように、オプション suppressExceptions を true に設定して、これを無視できます。
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 < ${header.cheap})]</jsonpath>
<to uri="mock:cheap"/>
</when>
<when>
<jsonpath>$.store.book[?(@.price < ${header.average})]</jsonpath>
<to uri="mock:average"/>
</when>
<otherwise>
<to uri="mock:expensive"/>
</otherwise>
</choice>
</route>
次のように、オプション allowSimple を false に設定して、インライン化された Simple 式のサポートを無効にすることができます。
.when().jsonpath("$.store.book[?(@.price < 10)]", false, false)そして XML DSL では:
<jsonpath allowSimple="false">$.store.book[?(@.price < 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>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に記載される 8 個のオプションをサポートします。
| 名前 | 説明 | デフォルト | タイプ |
|---|---|---|---|
| camel.language.jsonpath.allow-easy-predicate | 簡単な述語パーサーを使用して述語を事前解析できるようにするかどうか。 | true | ブール値 |
| camel.language.jsonpath.allow-simple | JSONPath 式でインライン化された Simple 例外を許可するかどうか。 | true | ブール値 |
| camel.language.jsonpath.enabled | jsonpath 言語の自動設定を有効にするかどうか。これはデフォルトで有効になっています。 | ブール値 | |
| camel.language.jsonpath.header-name | メッセージボディーの代わりに入力として使用するヘッダーの名前。 | String | |
| camel.language.jsonpath.option | JSONPath で追加のオプションを設定するします。複数の値はコンマで区切ることができます。 | String | |
| camel.language.jsonpath.suppress-exceptions | PathNotFoundException などの例外を抑制するかどうか。 | false | ブール値 |
| camel.language.jsonpath.trim | 値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。 | true | ブール値 |
| camel.language.jsonpath.write-as-string | 各行/要素の出力をマップ/POJO 値ではなく JSON 文字列値として書き込むかどうか。 | false | ブール値 |
第72章 Ref
Ref Expression Language (Ref 式言語) は、実際には、カスタムの Expression または Predicate を Registry から検索する方法です。
これは特に 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>3.14.5.redhat-00032</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 トランスポート (コンシューマー) に使用する Camel Rest コンポーネント。コンポーネントが明示的に設定されていない場合、Rest DSL と統合する Camel コンポーネントがある場合、または org.apache.camel.spi.RestConsumerFactory がレジストリーに登録されている場合、Camel はルックアップします。いずれかが見つかった場合は、それが使用されています。 | String | |
| camel.rest.component-property | 使用中の残りのコンポーネントの追加プロパティーをできるだけ多く設定できます。 | マップ | |
| camel.rest.consumer-property | 使用中の残りのコンシューマーの追加プロパティーをできるだけ多く設定できます。 | マップ | |
| 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 プロデューサーが REST uri を検証するために使用する API ドキュメント (swagger api) の場所を設定し、API ドキュメントに応じてクエリーパラメーターが有効です。これには、クラスパスに camel-swagger-java を追加する必要があり、設定に誤りがあると、Camel が起動時に失敗し、エラーが報告されます。API ドキュメントの場所はデフォルトでクラスパスから読み込まれますが、file: または http: を使用してリソースを参照し、ファイルまたは http url から読み込むことができます。 | String | |
| camel.rest.producer-component | REST プロデューサーとして使用する 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 |
| 結果タイプ (出力からのタイプ) のクラス名を設定します。デフォルトの結果タイプは NodeSet です。 | |
| headerName |
| メッセージボディーの代わりに入力として使用するヘッダーの名前。 | |
| configurationRef |
| xquery に使用するレジストリー内の saxon 設定インスタンスへの参照 (camel-saxon が必要)。これは、カスタム関数を saxon 設定に追加する時に必要になる場合があるため、これらのカスタム関数を xquery 式で使用できます。 | |
| trim |
| 値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。 |
73.2. 変数
メッセージボディーは contextItem として設定されます。また、次の変数も使用できます。
| 変数 | タイプ | 説明 |
|---|---|---|
| exchange | エクスチェンジ | 現在のエクスチェンジ |
| in.body | オブジェクト | メッセージボディー |
| out.body | オブジェクト | 非推奨 OUT メッセージボディー (存在する場合) |
| in.headers.* | オブジェクト | 名前が in.headers.foo の変数を使用して、キー foo で exchange.in.headers の値を使用できます。 |
| out.headers.* | オブジェクト | deprecated 名前が out.headers.foo 変数である変数を使用して、キー foo で exchange.out.headers の値を使用できます。 |
| キー名 | オブジェクト |
exchange.properties と exchange.in.headers および |
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 ルートタグ (または camelContext、routes、route タグの 1 つ) で名前空間を設定するため、異なります。
以下の XML の例では、Spring XML を使用します。この名前空間は、ルートタグ beans の xmlns: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 については、以下のチュートリアルを試してください。
- Mike Kay の XQuery 入門
- W3Schools XQuery チュートリアル
73.7. 依存関係
camel ルートで XQuery を使用するには、XQuery 言語を実装する camel-saxon に依存関係を追加する必要があります。
maven を使用する場合は、pom.xml に以下を追加し、最新バージョンのバージョン番号を置き換えます(最新バージョンのダウンロードページを参照してください)。
<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-saxon</artifactId> <version>3.14.5.redhat-00018</version> </dependency>
73.8. Spring Boot 自動設定
Spring Boot で xquery を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-saxon-starter</artifactId> <version>3.14.5.redhat-00032</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 | コンシューマーの Camel ルーティングエラーハンドラーへのブリッジを許可します。よって、コンシューマーが受信メッセージなどの取得を試行している間に発生した例外は、メッセージとして処理され、ルーティングエラーハンドラーによって処理されます。デフォルトでは、コンシューマーは 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 | 最初のメッセージでプロデューサーをレイジーに起動すべきかどうか。レイジーに起動することで、起動時にプロデューサーが失敗し、それによりルートが失敗する可能性がある状況で、CamelContext およびルートの起動を許可します。レイジーな起動を延期すると、Camel のルーティングエラーハンドラー経由でメッセージのルーティング中に起動の失敗を処理できます。最初のメッセージが処理されるときに、プロデューサーの作成および起動に若干時間がかかり、合計処理時間が長くなる可能性があることに注意してください。 | 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 | ブール値 |
| 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 |
| 結果の型 (出力からの型) のクラス名を設定します。 | |
| trim |
| 値をトリミングして、先頭および末尾の空白と改行を削除するかどうか。 |
74.2. 変数
| 変数 | タイプ | 説明 |
|---|---|---|
| camelId | String | CamelContext 名 |
| camelContext.OGNL | オブジェクト | Camel OGNL 式を使用して呼び出された CamelContext。 |
| exchange | エクスチェンジ | Exchange |
| exchange.OGNL | オブジェクト | Camel OGNL 式を使用して呼び出された Exchange。 |
| exchangeId | String | エクスチェンジ ID |
| id | String | メッセージ ID |
| messageTimestamp | String | このメッセージの発信元のメッセージタイムスタンプ (Epoc からのミリ秒)。JMS、Kafka、AWS などの一部のシステムでは、Camel が受信したイベント/メッセージにタイムスタンプがあります。タイムスタンプが存在する場合、このメソッドはタイムスタンプを返します。メッセージのタイムスタンプと作成されたエクスチェンジは同じではありません。エクスチェンジには必ず、作成されたタイムスタンプがあります。これは、Camel がエクスチェンジを作成したときのローカルタイムスタンプです。メッセージのタイムスタンプは、コンシューマーがソースイベントからタイムスタンプを抽出できる場合にのみ、一部の 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 に例外がある場合は、フォールバックしてキャッチされた例外 ( |
| exception.OGNL | オブジェクト | Camel OGNL 式オブジェクトを使用して呼び出された exchange 例外を参照します。 |
| exception.message | String |
エクスチェンジの exception.message を参照してください。エクスチェンジに例外が設定されていない場合は null です。Exchange に例外がある場合は、フォールバックしてキャッチされた例外 ( |
| exception.stacktrace | String |
エクスチェンジの exception.stracktrace を参照してください。エクスチェンジに例外が設定されていない場合は null です。Exchange に例外がある場合は、フォールバックしてキャッチされた例外 ( |
| date:_command_ | 日付 | Date オブジェクトに対して評価されます。サポートされているコマンドは次のとおりです。現在のタイムスタンプの now、現在のエクスチェンジが作成されたときのタイムスタンプの exchangeCreated、キーが xxx の Long/Date オブジェクトヘッダーを使用する header.xxx。exchangeProperty.xxx を使用して、キーが xxx の exchange プロパティーで Long/Date オブジェクトを使用します。ファイルの最終変更タイムスタンプの file (ファイルコンシューマーで利用可能)。コマンドは、now-24h または header.xxx+1h または now+1h30m-100 などを使用できます。 |
| date:_command:pattern_ | String |
|
| date-with-timezone:_command:timezone:pattern_ | String |
|
| bean:_bean expression_ | オブジェクト |
言語を使用して Bean 式を呼び出します。メソッド名を指定するには、区切り文字としてドットを使用する必要があります。コンポーネントで使用される ?method=methodname 構文もサポートしています。Camel はデフォルトで、指定された名前で Bean を検索します。ただし、Bean クラスを参照する必要がある場合 (静的メソッドの呼び出しなど) は、 |
|
| String | 指定されたキーでプロパティーを検索します。キーが存在しないか値がない場合は、オプションのデフォルト値を指定できます。 |
| routeId | String | Exchange がルーティングされている現在のルートの ID を返します。 |
| stepId | String | Exchange がルーティングされている現在のステップの ID を返します。 |
| threadName | String | 現在のスレッドの名前を返します。ロギング目的で使用できます。 |
| hostname | String | ローカルホスト名を返します (解決できない場合は空である可能性があります)。 |
| ref:xxx | オブジェクト | 指定された ID でレジストリーから Bean を検索します。 |
| type:name.field | オブジェクト |
タイプまたはフィールドをその FQN 名で参照します。フィールドを参照するには、.FIELD_NAME を追加できます。たとえば、Exchange の定数フィールドを |
| 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 |
左辺が数値として定義された値の範囲内にある場合に照合するため ( |
| !range |
左辺が数値として定義された値の範囲内にない場合に照合するため ( |
| startsWith | 左辺の文字列が右辺の文字列で開始するかどうかをテストします |
| starts with | startsWith 演算子と同じです。 |
| endsWith | 左辺の文字列が右辺の文字列で終了するかどうかをテストします |
| ends with | endWith 演算子と同じです。 |
また、次の単項演算子を使用できます。
| Operator | 説明 |
|---|---|
| ++ | 数値を 1 ずつ増やします。左辺は関数でなければならず、それ以外の場合はリテラルとして解析されます。 |
| — | 数値を 1 つ減らします。左辺は関数でなければならず、それ以外の場合はリテラルとして解析されます。 |
| \n | 改行文字を使用します。 |
| \t | タブ文字を使用します。 |
| \r | キャリッジリターン文字を使用します。 |
| \} | } 文字をテキストとして使用します。これは、Simple 言語で JSON 構造を構築するときに必要になる場合があります。 |
また、次の論理演算子を使用して式をグループ化できます。
| Operator | 説明 |
|---|---|
| && | and 論理演算子は、2 つの式のグループ化に使用されます。 |
| or 論理演算子は、2 つの式のグループ化に使用されます。 |
AND の構文は次のとおりです。
${leftValue} OP rightValue && ${leftValue} OP rightValueOR の構文は次のとおりです。
${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>3.14.5.redhat-00032</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 トランスポート (コンシューマー) に使用する Camel Rest コンポーネント。コンポーネントが明示的に設定されていない場合、Rest DSL と統合する Camel コンポーネントがある場合、または org.apache.camel.spi.RestConsumerFactory がレジストリーに登録されている場合、Camel はルックアップします。いずれかが見つかった場合は、それが使用されています。 | String | |
| camel.rest.component-property | 使用中の残りのコンポーネントの追加プロパティーをできるだけ多く設定できます。 | マップ | |
| camel.rest.consumer-property | 使用中の残りのコンシューマーの追加プロパティーをできるだけ多く設定できます。 | マップ | |
| 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 プロデューサーが REST uri を検証するために使用する API ドキュメント (swagger api) の場所を設定し、API ドキュメントに応じてクエリーパラメーターが有効です。これには、クラスパスに camel-swagger-java を追加する必要があり、設定に誤りがあると、Camel が起動時に失敗し、エラーが報告されます。API ドキュメントの場所はデフォルトでクラスパスから読み込まれますが、file: または http: を使用してリソースを参照し、ファイルまたは http url から読み込むことができます。 | String | |
| camel.rest.producer-component | REST プロデューサーとして使用する 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 |
| 必須 Tokenizer として使用する (開始) トークン。たとえば、改行トークンを使用できます。Simple 言語をトークンとして使用して、動的トークンをサポートできます。 | |
| endToken |
| 開始/終了トークンのペアを使用する場合に Tokenizer として使用する終了トークン。Simple 言語をトークンとして使用して、動的トークンをサポートできます。 | |
| inheritNamespaceTagName |
| XML の使用時にルート/親タグ名から名前空間を継承するにはタグ名として Simple 言語を使用して、動的な名前をサポートできます。 | |
| headerName |
| メッセージボディーを使用する代わりにトークン化するヘッダーの名前。 | |
| regex |
| トークンが正規表現パターンの場合。デフォルト値は false です。 | |
| xml |
| 入力が XML メッセージかどうか。XML ペイロードを使用する場合は、このオプションを true に設定する必要があります。 | |
| includeTokens |
| ペアを使用するときにトークンをパーツに含めるかどうか。デフォルト値は false です。 | |
| group |
| たとえば、大きなファイルを 1000 行のチャンクに分割するなど、N 個のパーツをグループ化します。グループとして Simple 言語を使用して、動的なグループサイズをサポートできます。 | |
| groupDelimiter |
| グループ化時に使用する区切り文字を設定します。これが設定されていない場合は、トークンが区切り文字として使用されます。 | |
| 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>3.14.5.redhat-00032</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 トランスポート (コンシューマー) に使用する Camel Rest コンポーネント。コンポーネントが明示的に設定されていない場合、Rest DSL と統合する Camel コンポーネントがある場合、または org.apache.camel.spi.RestConsumerFactory がレジストリーに登録されている場合、Camel はルックアップします。いずれかが見つかった場合は、それが使用されています。 | String | |
| camel.rest.component-property | 使用中の残りのコンポーネントの追加プロパティーをできるだけ多く設定できます。 | マップ | |
| camel.rest.consumer-property | 使用中の残りのコンシューマーの追加プロパティーをできるだけ多く設定できます。 | マップ | |
| 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 プロデューサーが REST uri を検証するために使用する API ドキュメント (swagger api) の場所を設定し、API ドキュメントに応じてクエリーパラメーターが有効です。これには、クラスパスに camel-swagger-java を追加する必要があり、設定に誤りがあると、Camel が起動時に失敗し、エラーが報告されます。API ドキュメントの場所はデフォルトでクラスパスから読み込まれますが、file: または http: を使用してリソースを参照し、ファイルまたは http url から読み込むことができます。 | String | |
| camel.rest.producer-component | REST プロデューサーとして使用する 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 |
| メッセージボディーを使用する代わりにトークン化するヘッダーの名前。 | |
| mode |
| 抽出モード。使用可能な抽出モードは次のとおりです。i は、抽出されたトークンにコンテキスト名前空間バインディングを注入します (デフォルト)。w は抽出されたトークンをその祖先コンテキストにラップします。u は抽出されたトークンをその子コンテンツにラップ解除します。t は指定された要素のテキストコンテンツを抽出します。 列挙値:
| |
| group |
| 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>3.14.5.redhat-00032</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 |
| ドキュメントタイプのクラスの名前。デフォルト値は org.w3c.dom.Document です。 | |
| resultType |
| 結果タイプ (出力からのタイプ) のクラス名を設定します。デフォルトの結果タイプは NodeSet です。 列挙値:
| |
| saxon |
| Saxon を使用するかどうか。 | |
| factoryRef |
| レジストリーを検索するためのカスタム XPathFactory を参照します。 | |
| objectModel |
| 使用する XPath オブジェクトモデル。 | |
| logNamespaces |
| トラブルシューティング時に役立つ名前空間をログに記録するかどうか。 | |
| headerName |
| メッセージボディーの代わりに入力として使用するヘッダーの名前。 | |
| 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 | ローカルの部分 | タイプ | 説明 |
|---|---|---|---|
| in | メッセージ | メッセージ | |
| out | メッセージ | 廃止: 出力メッセージは廃止されたため使用しないでください。 | |
| 関数 | オブジェクト | 追加機能 | |
| env | オブジェクト | OS 環境変数 | |
| system | オブジェクト | Java System プロパティー | |
| オブジェクト | 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 ルートタグ (または camelContext、routes、route タグの 1 つ) で名前空間を設定するため、異なります。
以下の XML の例では、Spring XML を使用します。この名前空間は、ルートタグ beans の xmlns: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 XPathFactoryApache 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>3.14.5.redhat-00032</version> </dependency>
77.16. Spring Boot 自動設定
Spring Boot で xpath を使用する場合は、次の Maven 依存関係を使用して自動設定をサポートしてください。
<dependency> <groupId>org.apache.camel.springboot</groupId> <artifactId>camel-xpath-starter</artifactId> <version>3.14.5.redhat-00018</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>3.14.5.redhat-00032</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 で直接設定する場合は、enableCORS、host,contextPath、dsl などの適切なメソッドを使用します。api.xxx のオプションは、apiProperty dsl を使用して設定されます。
| オプション | タイプ | 説明 |
|---|---|---|
| cors | ブール値 | 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 は実行時に絶対ベースパスを計算します ( |
| api.path | String |
API が利用可能なパスを設定します (例:/api-docs)。パスは相対パス (例: http/https で始まらない) であり、camel-openapi-java は実行時に絶対ベースパスを計算します。このパスは |
| 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-cdi と camel-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>3.14.5.redhat-00032</version> <!-- Use your Camel Spring Boot version --> </dependency>
コンポーネントは、以下に記載される 1 のオプションをサポートします。
| 名前 | 説明 | デフォルト | タイプ |
|---|---|---|---|
| camel.openapi.enabled | Camel Rest DSL がその OpenAPI (例: swagger doc) を Spring Boot に自動的に登録できるようにすることで、SpringDoc などのツールを Camel と統合できます。 | true | ブール値 |