Red Hat Training

A Red Hat training course is available for Red Hat Fuse

第19章 Avro DataFormat

Camel バージョン 2.14 から利用可能

このコンポーネントは、avro のデータ形式を提供します。これにより、Apache Avro のバイナリーデータ形式を使用してメッセージのシリアライズおよびデシリアライズが可能になります。さらに、netty または http を介して avro を使用するためのプロデューサーおよびコンシューマーエンドポイントを提供することで、Apache Avro の rpc に対応します。

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

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-avro</artifactId>
    <version>x.x.x</version>
    <!-- use the same version as your Camel core version -->
</dependency>

19.1. Apache Avro の概要

Avro では、フォーマットなどの json を使用してメッセージタイプとプロトコルを定義し、指定された型およびメッセージの java コードを生成します。スキーマの挙動の例を以下に示します。

{"namespace": "org.apache.camel.avro.generated",
 "protocol": "KeyValueProtocol",

 "types": [
     {"name": "Key", "type": "record",
      "fields": [
          {"name": "key",   "type": "string"}
      ]
     },
     {"name": "Value", "type": "record",
      "fields": [
          {"name": "value",   "type": "string"}
      ]
     }
 ],

 "messages": {
     "put": {
         "request": [{"name": "key", "type": "Key"}, {"name": "value", "type": "Value"} ],
         "response": "null"
     },
     "get": {
         "request": [{"name": "key", "type": "Key"}],
         "response": "Value"
     }
 }
}

Maven やant などを使用して、スキーマからクラスを簡単に生成できます。詳細は Apache Avro のドキュメント を参照してください

ただし、スキーマの最初のアプローチは実施せず、既存のクラスのスキーマを作成できます。2.12 以降、既存のプロトコルインターフェースを使用して RCP 呼び出しを行うことができます。パラメーターおよび結果タイプには、プロトコル自体と POJO Bean またはプリミティブ/文字列クラスにインターフェースを使用する必要があります。以下は、上記のスキーマに対応するクラスの例です。

package org.apache.camel.avro.reflection;

public interface KeyValueProtocol {
    void put(String key, Value value);
    Value get(String key);
}

class Value {
    private String value;
    public String getValue() { return value; }
    public void setValue(String value) { this.value = value; }
}

注記: 既存のクラスは RPC(以下を参照)にのみ使用でき、データ形式では使用できません。