java - 具有多个 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
,这可能吗?Bar
Car
解决方案
不; 这个
senderProps.put(JsonSerializer.TYPE_MAPPINGS, "foo:com.myfoo.Foo, bar:com.mybar.bar");
仅适用于仅在使用属性时定义反序列化器的情况。
当使用DefaultKafkaConsumerFactory
和DefaultKafkaProducerFactory
直接采用完全构建的序列化器/反序列化器对象的构造函数时,您必须自己配置反序列化器。
typeMapper = new DefaultJackson2JavaTypeMapper();
typeMapper.setIdClassMapping(myTypeMappingsMap);
deserializer = new JsonDeserializer();
deserlialzer.setTypeMapper(typeMapper);
(对于序列化程序也是如此)。
推荐阅读
- orocrm - OroCRM 如何向 api 公开和扩展字段?
- aws-amplify - 使用放大身份验证更新添加其他用户池组?
- javascript - 动态组合数组和对象
- ruby-on-rails - 用于高内存轨应用的应用引擎
- javascript - 聚合物元素表格未提交所有字段
- javascript - ng-multiselect-dropdown-angular7 (onDeSelect) 不工作
- workbox - 更改工作箱运行时的 url
- python - 作为救护车响应/发布分析的一部分,为每个集群(区域)的所有空时间箱填充零
- docker - 如何设置从一个 docker couchDB 到另一个的复制?
- lua - 如何让所有玩家都能看到本地分配的衣服?