第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(以下を参照)にのみ使用でき、データ形式では使用できません。