首页 > 解决方案 > 具有多个 JsonSerializer 映射的 DefaultKafkaProducerFactory

问题描述

我正在浏览 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?我正在寻找更多信息的明确示例。

我的问题是我希望有一个单一的ProducerFactory并且会向 kafka 产生多种类型的消息,kafkatemplate例如Foo,这可能吗?BarCar

标签: javaapache-kafkaspring-kafka

解决方案


不; 这个

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);

(对于序列化程序也是如此)。


推荐阅读