具有多个 JsonSerializer 映射的 DefaultKafkaProducerFactory

DefaultKafkaProducerFactory with multiple JsonSerializer mappings

我正在查看 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 可以吗?

否;这个

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

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

当使用 DefaultKafkaConsumerFactoryDefaultKafkaProducerFactory 构造函数直接获取完全构建的 serializer/deserializer 对象时,您必须自己配置反序列化器。

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

(序列化程序也类似)。