Avro

JVM since1.0.0 Native since1.0.0

Serialize and deserialize messages using Apache Avro binary data format.

What’s inside

Please refer to the above link for usage and configuration details.

Maven coordinates

Or add the coordinates to your existing project:

<dependency>
    <groupId>org.apache.camel.quarkus</groupId>
    <artifactId>camel-quarkus-avro</artifactId>
</dependency>

Check the User guide for more information about writing Camel Quarkus applications.

Additional Camel Quarkus configuration

Beyond standard usages known from vanilla Camel, Camel Quarkus adds the possibility to parse the Avro schema at build time both in JVM and Native mode.

Since Camel Quarkus 2.0.0, the preferred approach to generate Avro classes from Avro schema files is the one coined by the quarkus-avro extension. It requires the following:

  1. Store *.avsc files in a resource folder named avro.

  2. In addition to the usual build goal of quarkus-maven-plugin, add the generate-code goal:

    <plugin>
        <groupId>io.quarkus</groupId>
        <artifactId>quarkus-maven-plugin</artifactId>
        <executions>
            <execution>
                <id>generate-code-and-build</id>
                <goals>
                    <goal>generate-code</goal>
                    <goal>build</goal>
                </goals>
            </execution>
        </executions>
    </plugin>

Please see a working configuration in Camel Quarkus Avro integration test and Quarkus Avro integration test.

Deprecated: @BuildTimeAvroDataFormat annotation.

Before Camel Quarkus 2.0.0, the @BuildTimeAvroDataFormat annotation was the preferred way to generate Avro entities from Avro schema files.

In the example below, the user.avsc schema resource is first parsed at build time. Then, an AvroDataFormat instance using the previously parsed schema is injected in the buildTimeAvroDataFormat field at runtime. At the end of the day, the injected data format is used from the configure() method in order to marshal an incoming message.

import org.apache.camel.quarkus.component.avro.BuildTimeAvroDataFormat;
...
@BuildTimeAvroDataFormat("user.avsc")
AvroDataFormat buildTimeAvroDataFormat;

@Override
public void configure() {
  from("direct:marshalUsingBuildTimeAvroDataFormat").marshal(buildTimeAvroDataFormat);
}