如何使用协议声明在 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:schema (default( on project 交易者簿-mt-通用计算:目标的执行默认值 org.apache.avro:avro-maven-plugin:1.8.2:schema failed: no type: {"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"}}} -> [帮助 1]

依赖:

[信息] +- org.apache.camel:camel-core:jar:2.18.5:编译

[信息] +- org.apache.avro:avro:jar:1.8.2:编译

有什么建议吗?

就我而言,唯一的问题是我的文件扩展名错误。协议不能位于扩展名为".AVSC'

'。AVPR"和".avdl' 在 maven 插件中工作正常(罚款 =='编译期间没有错误'(

看起来此扩展的更改可以通过插件忽略此数据。

最新更新