Apache kafka 我们可以在spring boot中使用多个kafka模板吗?

Apache kafka 我们可以在spring boot中使用多个kafka模板吗?,apache-kafka,spring-kafka,kafka-producer-api,Apache Kafka,Spring Kafka,Kafka Producer Api,在我的spring boot kafka publisher应用程序中,我希望提供对以字符串(json)或字节格式发布消息的支持,因为我希望同时支持json和avro。但是SpringBoot中的Kafka模板让我们只定义其中一个模板。有没有一种方法可以同时使用这两个模板,或者以任何其他方式提供对json和avro的支持 KafkaTemplate仅适用于字符串,但我还想发布类似于KafkaTemplate的avro。您可以尝试使用不同的配置创建KafkaTemplate: @Bean publ

在我的spring boot kafka publisher应用程序中,我希望提供对以字符串(json)或字节格式发布消息的支持,因为我希望同时支持json和avro。但是SpringBoot中的Kafka模板让我们只定义其中一个模板。有没有一种方法可以同时使用这两个模板,或者以任何其他方式提供对json和avro的支持


KafkaTemplate
仅适用于字符串,但我还想发布类似于
KafkaTemplate
的avro。您可以尝试使用不同的配置创建KafkaTemplate:

@Bean
public ProducerFactory<String, String> producerFactoryString() {
    Map<String, Object> configProps = new HashMap<>();
    //additional config parameters .... 
    configProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
    configProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
    return new DefaultKafkaProducerFactory<>(configProps);
}

@Bean
public ProducerFactory<String, byte[]> producerFactoryByte() {
    Map<String, Object> configProps = new HashMap<>();
    //additional config parameters ....
    configProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
    configProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, BytesSerializer.class);
    return new DefaultKafkaProducerFactory<>(configProps);
}

@Bean
public KafkaTemplate<String, String> kafkaTemplateString() {
    return new KafkaTemplate<>(producerFactoryString());
}

@Bean
public KafkaTemplate<String, byte[]> kafkaTemplateByte() {
    return new KafkaTemplate<>(producerFactoryByte());
}
@Bean
public ProducerFactory producerFactoryString(){
Map configProps=new HashMap();
//其他配置参数。。。。
configProps.put(ProducerConfig.KEY\u SERIALIZER\u CLASS\u CONFIG,StringSerializer.CLASS);
configProps.put(ProducerConfig.VALUE\u SERIALIZER\u CLASS\u CONFIG,StringSerializer.CLASS);
返回新的DefaultKafkaProducerFactory(configProps);
}
@豆子
公共生产工厂生产工厂字节(){
Map configProps=new HashMap();
//其他配置参数。。。。
configProps.put(ProducerConfig.KEY\u SERIALIZER\u CLASS\u CONFIG,StringSerializer.CLASS);
configProps.put(ProducerConfig.VALUE\u SERIALIZER\u CLASS\u CONFIG,byteserializer.CLASS);
返回新的DefaultKafkaProducerFactory(configProps);
}
@豆子
公共KafkaTemplate kafkaTemplateString(){
返回新的KafkaTemplate(producerFactoryString());
}
@豆子
公共KafkaTemplate kafkaTemplateByte(){
返回新的KafkaTemplate(producerFactoryByte());
}

您可以创建卡夫卡配置。我必须将数据发送到两个不同的服务器

@配置
公共级卡夫卡康菲{
私人最终马赛克卡夫卡夫图马赛克卡夫卡夫卡夫图;
私有最终流Kafkanconfig流Kafkanconfig;
公共卡夫卡图(马赛克卡夫卡图马赛克卡夫卡图,流线型卡夫卡图流线型卡夫卡图){
this.mosaickafkanconfig=mosaickafkanconfig;
this.streamkafkanconfig=streamkafkanconfig;
}
@豆子
公共生产厂卡夫卡生产厂福尔摩沙(){
KafkaProperties KafkaProperties=新的KafkaProperties();
KafkaProperties.Ssl Ssl=KafkaProperties.getSsl();
ResourceLoader ResourceLoader=新的DefaultResourceLoader();
Resource Resource=resourceLoader.getResource(Mosaickafkanconfig.getSslTrustStoreLocation());
ssl.setTrustStoreLocation(资源);
ssl.setTrustStorePassword(mosaickafkanconfig.getSslTrustStorePassword());
ssl.setTrustStoreType(mosaickafkanconfig.getSslTrustStoreType());
Map props=kafkaProperties.getProperties();
put(“sasl.jaas.config”,mosaickafkanconfig.getSaslConfig());
道具放置(“sasl.mechanism”,Mosaickafkanconfig.getSaslMechanism());
props.put(“security.protocol”,mosaickafkanconfig.getsaslecprotocol());
kafkaProperties.getProducer().setValueSerializer(MosaicKafkanconfig.getValaueSerializer());
kafkaProperties.getProducer().setClientId(MosaicKafkanconfig.getClientID());
kafkaProperties.getProducer().setBootstrapServers(MosaicKafkanconfig.getBootstrapServers());
Map configProps=kafkaProperties.buildProducerProperties();
返回新的DefaultKafkaProducerFactory(configProps);
}
@豆子
公共卡夫卡夫卡夫卡夫卡夫卡夫卡夫卡夫卡夫卡夫卡夫卡夫卡夫卡夫卡夫卡夫卡夫卡夫卡夫卡夫卡夫卡夫卡夫卡夫卡夫卡夫卡夫卡夫卡夫卡夫卡夫卡夫卡夫卡夫卡夫卡夫卡夫卡夫卡夫卡夫卡夫{
KafkaTemplate KafkaTemplate=新的KafkaTemplate(kafkaProducerFactoryForMosaic);
返回卡夫卡模板;
}
@豆子
公共生产工厂KafkapproducerFactoryForStream(){
KafkaProperties KafkaProperties=新的KafkaProperties();
KafkaProperties.Ssl Ssl=KafkaProperties.getSsl();
ResourceLoader ResourceLoader=新的DefaultResourceLoader();
Resource Resource=resourceLoader.getResource(streamkafkanconfig.getSslTrustStoreLocation());
ssl.setTrustStoreLocation(资源);
ssl.setTrustStorePassword(streamkafkanconfig.getSslTrustStorePassword());
ssl.setTrustStoreType(streamkafkanconfig.getSslTrustStoreType());
Map props=kafkaProperties.getProperties();
put(“sasl.jaas.config”,streamkafkanconfig.getSaslConfig());
props.put(“sasl.mechanism”,streamkafkanconfig.getSaslMechanism());
props.put(“security.protocol”,streamkafkanconfig.getsaslecprotocol());
kafkaProperties.getProducer().setValueSerializer(streamkafkanconfig.getValaueSerializer());
kafkaProperties.getProducer().setClientId(streamkafkanconfig.getClientID());
kafkaProperties.getProducer().setbootstrapserver(streamkafkanconfig.getbootstrapserver());
Map configProps=kafkaProperties.buildProducerProperties();
返回新的DefaultKafkaProducerFactory(configProps);
}
@豆子
公共KafkatEmplicate KafkatEmplicateForStream(生产厂家KafkapProducerFactoryForStream){
KafkaTemplate KafkaTemplate=新的KafkaTemplate(kafkaProducerFactoryForStream);
返回卡夫卡模板;
}
}

Um..为它创建一个新bean?即使两个bean的类型相同,也可以使用限定符或主(注释)。这根本不是问题。