Я просматриваю весеннюю документацию и обнаружил, что у нас может быть несколько сопоставлений для одного производителя factory весенние документы
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, которые напрямую принимают полностью построенные объекты сериализатора / десериализатора, вы должны настроить десериализатор самостоятельно.
typeMapper = new DefaultJackson2JavaTypeMapper();
typeMapper.setIdClassMapping(myTypeMappingsMap);
deserializer = new JsonDeserializer();
deserlialzer.setTypeMapper(typeMapper);
(и аналогично для сериализатора).
Это в вашем вопросе: return new DefaultKafkaConsumerFactory<>(properties.buildProducerProperties(), customSerializer, customSerializer); Вы предоставляете сериализатор, а не Kafka. Я предполагаю, что у Потребителя есть опечатка. Свойство используется только в том случае, если Kafka создает сериализатор.
Вот пример здесь. Он использует преобразователь сообщений, а не сериализатор, но применяется тот же метод.
можете указать мне на пример? извините, я действительно плохо разбираюсь в вещах без примера, а
take fully built serializer/deserializerозначает специальный сериализатор / десериализатор?