发送多种类型消息时,单KafkaTemplate与多KafkaTemplate该如何选择?
发送多种消息类型时,KafkaTemplate的定义推荐方式
当需要发送多种不同类型的消息时,定义KafkaTemplate的推荐方式是什么?是使用一个泛型为Object的KafkaTemplate处理所有消息,还是为每种消息类型分别定义KafkaTemplate?
方式一:使用单泛型为Object的KafkaTemplate
通过定义泛型为<String, Object>的ProducerFactory和KafkaTemplate,统一处理所有消息类型:
// Object类型的ProducerFactory @Bean ProducerFactory<String, Object> producerFactory() { return new DefaultKafkaProducerFactory<>(producerConfiguration()); } @Bean KafkaTemplate<String, Object> kafkaTemplate() { return new KafkaTemplate<>(producerFactory()); }
方式二:为每种消息类型定义独立的KafkaTemplate(含独立ProducerFactory)
为每种消息类型分别创建对应的ProducerFactory和KafkaTemplate Bean:
// Address类型相关Bean @Bean ProducerFactory<String, Address> addressProducerFactory() { return new DefaultKafkaProducerFactory<>(producerConfiguration()); } @Bean KafkaTemplate<String, Address> addressKafkaTemplate() { return new KafkaTemplate<>(addressProducerFactory()); } // Person类型相关Bean @Bean ProducerFactory<String, Person> personProducerFactory() { return new DefaultKafkaProducerFactory<>(producerConfiguration()); } @Bean KafkaTemplate<String, Person> personKafkaTemplate() { return new KafkaTemplate<>(personProducerFactory()); }
疑问:是否必须定义独立的ProducerFactory?
上述方式中为每种消息类型单独定义ProducerFactory会增加额外代码,是否可以省略独立的ProducerFactory Bean,直接通过构造方法创建KafkaTemplate?示例如下:
// Address类型KafkaTemplate @Bean KafkaTemplate<String, Address> addressKafkaTemplate() { return new KafkaTemplate<>(new DefaultKafkaProducerFactory<>(producerConfiguration())); } // Person类型KafkaTemplate @Bean KafkaTemplate<String, Person> personKafkaTemplate() { return new KafkaTemplate<>(new DefaultKafkaProducerFactory<>(producerConfiguration())); }
内容的提问来源于stack exchange,提问作者Mikhail Geyer
相关产品推荐
相关产品推荐

