第 21 章 Avro DataFormat


从 Camel 版本 2.14 开始提供

此组件为 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>

21.1. Apache Avro 概述

avro 允许您使用 json 等 json 定义消息类型和协议,然后为指定的类型和消息生成 java 代码。如下为 schema 的示例。

{"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 或原语/字符串类用于参数和结果类型。以下是与上述 schema 对应的类示例:

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 (请参阅以下),而不是数据格式。

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.