如何使用协议声明定义Camel中的AVRO路由?

时间:2018-03-21 08:34:54

标签: apache-camel avro

我有这样的AVRO协议:

{
  "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"
    }
  }
}

骆驼路线:

import org.apache.camel.builder.RouteBuilder; 
import org.springframework.stereotype.Component;

@Component public class Computations extends RouteBuilder {


    @Override
    public void configure() throws Exception {
        from("avro:http:localhost:12345?protocol=KeyValueProtocol")
                .process(exchange->{
                    System.out.println(exchange);
                })
                .to("log:foo")
                .end();
    } }

并且在编译期间我收到错误:

  

[错误]无法执行目标   org.apache.avro:avro-maven-plugin:1.8.2:项目上的模式(默认)   tradersbook-mt-common-computations:目标的执行默认值   org.apache.avro:avro-maven-plugin:1.8.2:架构失败:没有类型:   {"命名空间":" org.apache.camel.avro.generated""协议":" KeyValueProtocol""&类型#34;:[{"名称":"键""类型":"记录""字段" :[{"名称":"键""类型":"串"}]},{"名称&#34 ;:"值""类型":"记录""字段":[{"名称":& #34;值""类型":"串"}]}],"邮件" {"把":{ "请求":[{"名称":"键""类型":"键"},{& #34;名称":"值""类型":"值"}],"响应":"空"}"获得" {"请求":[{"名称":"键""类型& #34;:"键"}],"响应":"值"}}}    - > [帮助1]

依赖关系:

[INFO] + - org.apache.camel:camel-core:jar:2.18.5:compile

[INFO] + - org.apache.avro:avro:jar:1.8.2:compile

任何建议?

1 个答案:

答案 0 :(得分:0)

在我的情况下,唯一的问题是我的文件有错误的扩展名。 协议不能包含扩展程序'。 avsc '

'的 AVPR '和'。 avdl '使用maven插件正常工作(罚款=='编译期间没有错误')

看起来这个扩展的更改提供了通过插件忽略这些数据。