Avro
Since Camel 2.14
This component provides a dataformat for avro, which allows serialization and deserialization of messages using Apache Avro’s binary dataformat. Since Camel 3.2 rpc functionality was moved into separate camel-avro-rpc component.
There is also camel-jackson-avro which is a more powerful Camel dataformat for using Avro. |
Maven users will need to add the following dependency to their pom.xml for this component:
<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> You can easily generate classes from a schema, using maven, ant etc. More details can be found at the Apache Avro documentation.
Avro Dataformat Options
The Avro dataformat supports the following options which are listed below.
| Name | Default | Java Type | Description |
|---|---|---|---|
| Class name to use for marshal and unmarshalling. | ||
| Comma-separated list of additional packages that contain trusted Avro model classes. Avro 1.12 validates classes resolved from schemas; Camel automatically trusts packages derived from the configured schema or instance class. |
Examples
Avro Data Format usage
Using the avro data format is as easy as specifying that the class that you want to marshal or unmarshal in your route.
AvroDataFormat format = new AvroDataFormat(Value.SCHEMA$);
from("direct:in").marshal(format).to("direct:marshal");
from("direct:back").unmarshal(format).to("direct:unmarshal"); Where Value is an Avro Maven Plugin Generated class.
The same route can be expressed in XML or YAML:
-
Java
-
XML
-
YAML
from("direct:in")
.marshal().avro("org.apache.camel.dataformat.avro.Message")
.to("log:out"); <route>
<from uri="direct:in"/>
<marshal>
<avro instanceClass="org.apache.camel.dataformat.avro.Message" library="ApacheAvro"/>
</marshal>
<to uri="log:out"/>
</route> - route:
from:
uri: direct:in
steps:
- marshal:
avro:
instanceClass: org.apache.camel.dataformat.avro.Message
library: ApacheAvro
- to:
uri: log:out An alternative can be to specify the dataformat inside the context and reference it from your route.
<camelContext id="camel" xmlns="http://camel.apache.org/schema/spring">
<dataFormats>
<avro id="avro" instanceClass="org.apache.camel.dataformat.avro.Message" library="ApacheAvro"/>
</dataFormats>
<route>
<from uri="direct:in"/>
<marshal><custom ref="avro"/></marshal>
<to uri="log:out"/>
</route>
</camelContext> In the same manner, you can unmarshal using the avro data format.