第18章 Avro コンポーネント
Camel バージョン 2.10 で利用可能
このコンポーネントは、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>
18.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(以下を参照)にのみ使用でき、データ形式では使用できません。