代码之家  ›  专栏  ›  技术社区  ›  Ryuzaki L

具有多个JSonserializer映射的DefaultKafkaProducerFactory

  •  1
  • Ryuzaki L  · 技术社区  · 6 年前

    我正在浏览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 例如,它向卡夫卡生成多类型的消息 , 酒吧 , Car 有可能吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Gary Russell    6 年前

    不,这个;

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

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