在Spring Cloud Stream / Dataflow中创建通用Avro接收器

时间:2017-12-05 12:58:53

标签: java spring avro spring-cloud-stream spring-cloud-dataflow

我正在尝试在Spring Cloud Data Flow中为Avro消息创建一个通用接收器,但我遇到了麻烦。我目前的设置是将输入数据转换为Avro消息并将其推送到接收器的处理器。我正在使用Spring Schema Registry服务器,我可以看到正在POST的架构并成功存储,我也可以看到它是由我的接收器成功从注册表服务器检索的。

如果我将Avro生成的对象从处理器放入接收器应用程序并使用声明的类型配置我的接收器,那么它可以正常工作。

    @StreamListener(Sink.INPUT)
    public void logHandler(DataRecord data) {
       LOGGER.info("data='{}'", data.toString());
    }

但是,我想这样做,以便我的接收器不需要提前知道架构,例如使用架构注册表中的架构并通过data.get(“fieldName”)

访问字段

我希望通过使用Avro GenericRecord来实现这一目标:

@StreamListener(Sink.INPUT)
public void logHandler(GenericRecord data) {
    LOGGER.info("data='{}'", data.toString());
}

但这会在日志中引发异常: 2017-12-05 12:10:15,206 DEBUG -L-2 o.s.w.c.RestTemplate:691 - GET request for "http://192.168.99.100:8990/datarecord/avro/v1" resulted in 200 (null) org.springframework.messaging.converter.MessageConversionException: No schema can be inferred from type org.apache.avro.generic.GenericRecord and no schema has been explicitly configured.

有没有办法完成我想要做的事情?

0 个答案:

没有答案