具有多个JsonSerializer映射的DefaultKafkaProducerFactory

时间:2018-11-29 17:01:59

标签: java apache-kafka spring-kafka

我正在阅读Spring文档,发现我们可以为单个生产者工厂spring-docs

设置多个映射
senderProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, JsonSerializer.class);
senderProps.put(JsonSerializer.TYPE_MAPPINGS, "foo:com.myfoo.Foo, bar:com.mybar.bar");

但是对于我来说,如何创建Producerfactory如下所示尚不清楚

@Bean
public ProducererFactory<Foo, Bar> kafkaProducerFactory(KafkaProperties properties,
JsonSserializer customSerializer) {

return new DefaultKafkaConsumerFactory<>(properties.buildProducerProperties(),
    customSerializer, customSerializer);
}

据我所知,Foo必须是关键,Bar必须是正确的价值?这customSerializer是什么?我正在寻找具有更多信息的清晰示例。

我的问题是我希望有单个ProducerFactorykafkatemplate会向kafka生成多种类型的消息,例如FooBarCar是可能吗?

1 个答案:

答案 0 :(得分:1)

否;这个

senderProps.put(JsonSerializer.TYPE_MAPPINGS, "foo:com.myfoo.Foo, bar:com.mybar.bar");

仅适用于仅在使用属性时定义反序列化器的情况。

在使用直接采用完全构建的序列化器/解串器对象的DefaultKafkaConsumerFactoryDefaultKafkaProducerFactory构造函数时,必须自己配置解串器。

typeMapper = new DefaultJackson2JavaTypeMapper();
typeMapper.setIdClassMapping(myTypeMappingsMap);
deserializer = new JsonDeserializer();
deserlialzer.setTypeMapper(typeMapper);

(以及类似的串行器)。