第 20 章 Avro Component
从 Camel 版本 2.10 开始提供
此组件为 avro 提供 dataformat,允许使用 Apache Avro 的二进制 dataformat 来序列化和解序列化消息。此外,它还通过为使用 avro over netty 或 http 提供制作者和消费者端点来支持 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>
20.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 或 primitive/String 类用于参数和结果类型。以下是与上述模式对应的类示例:
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 (请参阅以下),不能采用数据格式。