20장. Avro DataFormat
Camel 버전 2.14에서 사용 가능
이 구성 요소는 Apache Avro의 바이너리 데이터 형식을 사용하여 메시지의 직렬화 및 역직렬화를 허용하는 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>
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 호출을 수행할 수 있습니다. protocol 자체에 interface를 사용하고 매개변수 및 결과 유형에 대해 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에만 사용할 수 있습니다(아래 참조), 데이터 형식이 아닙니다.