具有多个 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
是什么?我正在寻找包含更多信息的清晰示例。
我的问题是我希望有单个 ProducerFactory
和 kafkatemplate
向 kafka 生成多种类型的消息,例如 Foo
、Bar
、Car
可以吗?
否;这个
senderProps.put(JsonSerializer.TYPE_MAPPINGS, "foo:com.myfoo.Foo, bar:com.mybar.bar");
仅适用于仅使用属性定义反序列化器的情况。
当使用 DefaultKafkaConsumerFactory
和 DefaultKafkaProducerFactory
构造函数直接获取完全构建的 serializer/deserializer 对象时,您必须自己配置反序列化器。
typeMapper = new DefaultJackson2JavaTypeMapper();
typeMapper.setIdClassMapping(myTypeMappingsMap);
deserializer = new JsonDeserializer();
deserlialzer.setTypeMapper(typeMapper);
(序列化程序也类似)。
我正在查看 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
和 kafkatemplate
向 kafka 生成多种类型的消息,例如 Foo
、Bar
、Car
可以吗?
否;这个
senderProps.put(JsonSerializer.TYPE_MAPPINGS, "foo:com.myfoo.Foo, bar:com.mybar.bar");
仅适用于仅使用属性定义反序列化器的情况。
当使用 DefaultKafkaConsumerFactory
和 DefaultKafkaProducerFactory
构造函数直接获取完全构建的 serializer/deserializer 对象时,您必须自己配置反序列化器。
typeMapper = new DefaultJackson2JavaTypeMapper();
typeMapper.setIdClassMapping(myTypeMappingsMap);
deserializer = new JsonDeserializer();
deserlialzer.setTypeMapper(typeMapper);
(序列化程序也类似)。