1.4. コネクション内でのエラーの処理
イベントデータの送受信時に実行中のインテグレーションで障害が発生した場合に Camel K Operator が実行することを指定するには、任意で以下のエラー処理ポリシーのいずれかを Kamelet Binding に追加します。
- エラーハンドラーなし: インテグレーションで発生する障害を無視します。
- ログエラーハンドラー: ログメッセージを標準出力に送信します。
- デッドレターチャネルエラーハンドラー: 障害のあるイベントを、障害発生イベントで特定のロジックを実行できる別のコンポーネント (サードパーティー URI、キュー、別の Kamelet など) にリダイレクトします。また、デッドレターエンドポイントに送信する前に、複数の回数メッセージエクスチェンジの再配信の試行にも対応しています。
- Bean エラーハンドラー: エラーの処理にカスタム Bean を使用するように指定します。
- Ref エラーハンドラー: エラーの処理に Bean を使用するように指定します。Bean は実行時に Camel レジストリーで利用可能である必要があります。
1.4.1. エラー処理ポリシーの Kamelet Binding への追加
ソースとシンク接続間のイベントデータの送受信時のエラーを処理するには、エラーハンドラーポリシーを Kamelet Binding に追加します。
前提条件
- 使用するエラーハンドラーポリシーのタイプを知っている必要があります。
-
既存の
KameletBinding
YAML ファイルがある。
手順
Kamelet Binding にエラー処理を実装するには、以下を実行します。
-
エディターで
KameletBinding
YAML ファイルを開きます。 sink
定義の後に、エラーハンドラーセクションをspec
セクションに追加します。apiVersion: camel.apache.org/v1alpha1 kind: KameletBinding metadata: name: example-kamelet-binding spec: source: ... sink: ... errorHandler: ...
たとえば、
coffee-to-log
Kamelet Binding で、ログハンドラーを追加して、エラーがログファイルに送信される最大回数を指定します。apiVersion: camel.apache.org/v1alpha1 kind: KameletBinding metadata: name: coffee-to-log spec: source: ref: kind: Kamelet apiVersion: camel.apache.org/v1alpha1 name: coffee-source properties: period: 5000 sink: ref: kind: Kamelet apiVersion: camel.apache.org/v1alpha1 name: log-sink errorHandler: log: parameters: maximumRedeliveries: 3
- ファイルを保存します。
1.4.2. エラーハンドラー
1.4.2.1. エラーハンドラーなし
インテグレーションで発生した失敗を無視する場合は Kamelet Binding に errorHandler
セクションが含まれないようにするか、以下の例に示すように none に設定します。
apiVersion: camel.apache.org/v1alpha1
kind: KameletBinding
metadata:
name: my-kamelet-binding
spec:
source:
...
sink:
...
errorHandler:
none:
1.4.2.2. ログエラーハンドラー
障害を処理するデフォルトの動作では、ログメッセージを標準出力に送信することです。オプションで、以下の例のように、ログエラーハンドラーを使用して再配信や遅延ポリシーなどの他の動作を指定できます。
apiVersion: camel.apache.org/v1alpha1 kind: KameletBinding metadata: name: my-kamelet-binding spec: source: ... sink: ... errorHandler: log: parameters: maximumRedeliveries: 3 redeliveryDelay: 2000
1.4.2.3. デッドレターチャネルエラーハンドラー
デッドレターチャネルを使用すると、以下の例のように、失敗したイベントを、失敗したイベントの処理方法を定義できる他のコンポーネント (サードパーティーの URI、キュー、別の Kamelet など) にリダイレクトすることができます。
apiVersion: camel.apache.org/v1alpha1 kind: KameletBinding metadata: name: my-kamelet-binding spec: source: ... sink: ... errorHandler: dead-letter-channel: endpoint: ref: 1 kind: Kamelet apiVersion: camel.apache.org/v1alpha1 name: error-handler properties: 2 message: "ERROR!" ... parameters: 3 maximumRedeliveries: 1
-
endpoint には、
ref
またはuri
を使用できます。Camel K Operator は、kind
、apiVersion
、およびname
の値に応じてref
を解釈します。任意の Kamelet、Kafka Topic チャネル、または Knative 宛先を使用できます。 -
エンドポイントに属するプロパティー(この例では
error-handler
という名前の Kamelet へ)。 - dead-letter-channel エラーハンドラータイプに属する Parameters。
1.4.2.4. Bean エラーハンドラー
Bean エラーハンドラーでは、エラーを処理するカスタム Bean を指定して、Error Handler の機能を拡張できます。type
には、ErrorHandlerBuilder の完全修飾名 ErrorHandlerBuilder
を指定します。properties
では、type
に仕様した ErrorHandlerBuilder
が必要とするプロパティーを設定します。
apiVersion: camel.apache.org/v1alpha1 kind: KameletBinding metadata: name: my-kamelet-binding spec: source: ... sink: ... errorHandler: bean: type: "org.apache.camel.builder.DeadLetterChannelBuilder" properties: deadLetterUri: log:error
1.4.2.5. Ref エラーハンドラー
Ref エラーハンドラーを使用すると、ランタイム時に Camel レジストリーで利用可能になることが予想される Bean を使用できます。以下の例では、my-custom-builder
は実行時に検索する Bean の名前です。
apiVersion: camel.apache.org/v1alpha1
kind: KameletBinding
metadata:
name: my-kamelet-binding
spec:
source:
...
sink:
...
errorHandler:
ref: my-custom-builder