1.3. コネクション内のデータへの操作の適用
kamelet とイベントチャネル間で渡されるデータで操作を実行する場合は、kamelet バインディング内の中間ステップとして、アクション kamelets を使用します。たとえば、action kamelet を使用してデータをシリアライズまたはデシリアライズしたり、データをフィルターしたり、フィールドやメッセージヘッダーを挿入したりできます。
アクション kamelets には以下が含まれます。
1.3.1. kamelet バインディングへの操作の追加
アクション kamelet を実装するには、kamelet バインディングファイルの spec
セクションで、ソースセクションとシンクセクションの間に steps
セクションを追加します。
前提条件
- 「Connecting to an event channel」の説明どおりに kamelet バインディングを作成している。
kamelet バインディングに追加するアクション kamelet とアクション kamelet の必須パラメーターを把握している必要があります。
この手順の例では、
predicate-filter-action
kamelet のパラメーターはstring
タイプの式で、コーヒーデータをフィルターして "deep" taste intensity を持つコーヒーだけをログに記録するための JSON パス式を提供します。フィールドのフィルタリングや追加などの操作は、JSON データ (つまり、Content-Type
ヘッダーがapplication/json
に設定されている場合) でのみ機能することに注意してください。predicate-filter-action
kamelet では、kamelet バインディングに Builder トレイト設定プロパティーを設定する必要があります。この例には、イベントデータフォーマットが JSON であるため、この場合はオプションのデシリアライズおよびシリアライズアクションも含まれます。イベントデータが JSON 以外の形式 (Avro または Protocol Buffers など) を使用する場合は、操作アクションおよびその後のシリアライズステップ (例:
protobuf-serialize-action
またはavro-serialize-action
kamelet を参照する) の前にデシリアライズステップ (例:protobuf-deserialize-action
またはavro-deserialize-action
kamelet を参照する) を追加して、データの形式を変換する必要があります。コネクションのデータ形式を変換する方法は、「データ変換 kamelets」を参照してください。
手順
エディターで
KameletBinding
ファイルを開きます。たとえば、
coffee-to-log.yaml
ファイルの内容を以下に示します。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
source
セクションの上にintegration
セクションを追加し、(predicate-filter-action
kamelet で必要とされるように) 以下の Builder トレイト設定プロパティーを指定します。apiVersion: camel.apache.org/v1alpha1 kind: KameletBinding metadata: name: coffee-to-log spec: integration: traits: builder: configuration: properties: - "quarkus.arc.unremovable-types=com.fasterxml. jackson.databind.ObjectMapper" 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
source
セクションとsink
セクションの間にsteps
セクションを追加し、アクション kamelet を定義します。以下に例を示します。apiVersion: camel.apache.org/v1alpha1 kind: KameletBinding metadata: name: coffee-to-log spec: integration: traits: builder: configuration: properties: - "quarkus.arc.unremovable-types=com.fasterxml. jackson.databind.ObjectMapper" source: ref: kind: Kamelet apiVersion: camel.apache.org/v1alpha1 name: coffee-source properties: period: 5000 steps: - ref: kind: Kamelet apiVersion: camel.apache.org/v1alpha1 name: json-deserialize-action - ref: kind: Kamelet apiVersion: camel.apache.org/v1alpha1 name: predicate-filter-action properties: expression: "@.intensifier =~ /.*deep/" - ref: kind: Kamelet apiVersion: camel.apache.org/v1alpha1 name: json-serialize-action sink: ref: kind: Kamelet apiVersion: camel.apache.org/v1alpha1 name: log-sink
- 変更を保存します。
KameletBinding
リソースを更新します。oc apply -f coffee-to-log.yaml
Camel K Operator は、更新された
KameletBinding
リソースを基に生成する Camel K インテグレーションを再生成し、実行します。kamelet binding のステータスを表示するには、次のコマンドを実行します。
oc get kameletbindings
対応するインテグレーションのステータスを表示するには、次のコマンドを実行します。
oc get integrations
ログファイルの出力を表示するには、以下を実行します。
インテグレーションの Pod 名を取得します。
oc get pods
インテグレーションの Pod のログを表示します。
oc logs <podname of the integration>
たとえば、Pod 名が
example-7885bdb9-84ht8
の場合、以下のコマンドを実行します。oc logs example-7885bdb9-84ht8
インテグレーションを停止するには、kamelet バインディングを削除します。
oc delete kameletbindings/<kameletbinding-name>
以下に例を示します。
oc delete kameletbindings/coffee-to-log