如果我的kafka消息属于GenericMessage类型,我想知道如何在Spring kafka使用者工厂中使用GenericMessageJacksonDeserializer?
@Bean
public ConsumerFactory<?, GenericMessage> consumerFactory(KafkaProperties kafkaProperties) {
final Map<String, Object> consumerProperties = kafkaProperties.buildConsumerProperties();
final DefaultKafkaConsumerFactory<?, GenericMessage> consumerFactory = new DefaultKafkaConsumerFactory<>(consumerProperties);
consumerFactory.setValueDeserializer(GenericMessageJacksonDeserializer.class);
return consumerFactory;
}
答案 0 :(得分:1)
consumerFactory.setValueDeserializer()
适用于org.apache.kafka.common.serialization.Deserializer
个对象,即使不适用于课程。
我猜你的意思是org.springframework.integration.support.json.GenericMessageJacksonDeserializer
这恰好适用于ObjectMapper
配置。您应该使用JacksonJsonUtils.messagingAwareMapper()
,这是错误的......,我已经真正了解GenericMessageJacksonDeserializer
。
当你得到ObjectMapper
时,你应该将它注入到... custom Deserializer
实现中。已经有人用consumerFactory.setValueDeserializer()
。 messagingAwareMapper
无法按预期与org.springframework.kafka.support.serializer.JsonDeserializer
一起工作,因为这一个确实需要特定类型来进行反序列化。但是我们可以尝试这样的事情:
consumerFactory.setValueDeserializer(new JsonDeserializer(GenericMessage.class, JacksonJsonUtils.messagingAwareMapper()));