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 にエラー処理を実装するには、以下を実行します。

  1. エディターで KameletBinding YAML ファイルを開きます。
  2. 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
  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
  1. endpoint には、ref または uri を使用できます。Camel K Operator は、kindapiVersion、および name の値に応じて ref を解釈します。任意の Kamelet、Kafka Topic チャネル、または Knative 宛先を使用できます。
  2. エンドポイントに属するプロパティー(この例では error-handler という名前の Kamelet へ)。
  3. 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