如何使用spring boot和spring cloud stream在kafka制作者上设置avro内容类型

时间:2017-03-09 11:56:33

标签: spring-cloud-stream

尝试使用spring boot,spring cloud stream schema registry,kafka binder构建avro消息生产者,kafka和avro消费者的工作示例。我在尝试使用消息时遇到错误:

ERROR 7059 --- [afka-listener-1] oscsbkKafkaMessageChannelBinder:无法使用contentType [application / x-java-object; type = io.igx.android]反序列化[io.igx.android.Sensor]。传感器] java.lang.NullPointerException

我有 spring.cloud.stream.bindings.output.contentType =应用/ +阿夫罗 在消费者方面 spring.cloud.stream.bindings.output.contentType =应用/ +阿夫罗 在生产者方面。

为什么消费者没有看到和使用avro内容类型而不是application / x-java-object。

2 个答案:

答案 0 :(得分:0)

我认为您需要生产者方面的内容类型application/*+avro。 (注意*前缀)。为生产者设置后,您是否可以确认是否仍需要为使用者指定输入contentType。我认为消费者可以根据制作人设定的内容类型推断出它。

答案 1 :(得分:0)

频道名称错误。所以问题是我正在使用 spring.cloud.stream.bindings.input.contentType =应用/ * +阿夫罗

而不是

spring.cloud.stream.bindings。{MY CHANNEL NAME} .contentType = application / * + avro。

当我将{MY CHANNEL NAME}改为我用过魔法的名字时。

即使我没有在消费者方面指定内容类型,它仍然有效。

另外,我需要指定spring.cloud.stream.schemaRegistryClient.endpoint 如果它不是默认的,就像在我的情况下一样,在生产者和消费者方面都是默认的。