Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用spring在kafka中创建两个producer kafka模板,spring接受不同的数据类型,一个是JsonNode,另一个是Avro?_Java_Apache Kafka_Spring Kafka_Kafka Producer Api - Fatal编程技术网

Java 如何使用spring在kafka中创建两个producer kafka模板,spring接受不同的数据类型,一个是JsonNode,另一个是Avro?

Java 如何使用spring在kafka中创建两个producer kafka模板,spring接受不同的数据类型,一个是JsonNode,另一个是Avro?,java,apache-kafka,spring-kafka,kafka-producer-api,Java,Apache Kafka,Spring Kafka,Kafka Producer Api,我试图开发两个具有不同序列化类型的producer配置类jsonnode,Avro,但是在运行时我只能实例化一个,另一个不起作用 头等舱: @Configuration @EnableKafka public class KafkaProducerConfig extends SomeClassConfig{ @Autowired private SomeClassProps someClassProps ; @Bean public ProducerFactory<Js

我试图开发两个具有不同序列化类型的producer配置类jsonnode,Avro,但是在运行时我只能实例化一个,另一个不起作用

头等舱:

@Configuration
@EnableKafka
public class KafkaProducerConfig extends SomeClassConfig{
@Autowired
    private SomeClassProps someClassProps ;

@Bean
    public ProducerFactory<JsonNode, JsonNode> eventProducerFactory() throws UnknownHostException{
    return new DefaultKafkaProducerFactory<JsonNode, JsonNode>(producerConfigs(someClassProps ));
}

@Bean
public Map<String, Object> producerConfigs(SomeClassProps someClassProps ) throws UnknownHostException{
    Properties props = this.initProps(someClassProps );
    props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, ***.getBootstrapServers());      
    props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.connect.json.JsonSerializer");
    props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,"org.apache.kafka.connect.json.JsonSerializer");
    Map<String, Object> map = new HashMap<>();
    for (final String name: props.stringPropertyNames()) {
        map.put(name, props.getProperty(name));         
    }
    
    return map;
}

@Bean(name="eventProducerKafkaTemplate")
public KafkaTemplate<JsonNode,JsonNode> eventProducerKafkaTemplate() throws UnknownHostException{       
    return new KafkaTemplate<JsonNode,JsonNode>(eventProducerFactory());
}
}

二等舱:

@Configuration("avroKafkaProducerConfig")
@EnableKafka
public class AvroKafkaProducerConfig extends SomeClassConfig{

    //private static final org.slf4j.Logger LOG = LoggerFactory.getLogger(KafkaProducerConfig.class);
        @Autowired
private SomeClassProps someClassProps ;
    
    @Bean(name = KafkaStreamsDefaultConfiguration.DEFAULT_STREAMS_CONFIG_BEAN_NAME)
    public StreamsConfig kafkaStreamsConfig(SomeClassProps someClassProps ) throws UnknownHostException {
        Map<String, Object> props = producerConfigs(someClassProps );
        return new StreamsConfig(props);
    }
    
    @Bean
    public ProducerFactory<SpecificRecord, SpecificRecord> eventProducerFactory() throws UnknownHostException{
        return new DefaultKafkaProducerFactory<SpecificRecord, SpecificRecord>(producerConfigs(someClassProps ));
    }
    
    @Bean
    public Map<String, Object> producerConfigs(SomeClassProps someClassProps ) throws UnknownHostException{
        Properties props = this.initProps(someClassProps );
        props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, ***.getBootstrapServers());      
        props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, io.confluent.kafka.serializers.KafkaAvroSerializer.class);
        props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,io.confluent.kafka.serializers.KafkaAvroSerializer.class);
        Map<String, Object> map = (Map) props;
        System.out.println("Avro"+map.values());
        
        return map;
    }
    
    @Bean(name="eventAvroProducerKafkaTemplate")
    public KafkaTemplate<SpecificRecord,SpecificRecord> eventProducerKafkaTemplate() throws UnknownHostException{       
        return new KafkaTemplate<SpecificRecord,SpecificRecord>(eventProducerFactory());
    }
}

当我试图在控制器类中使用这些kafka模板时,它只是初始化Json序列化程序,而不是avro序列化程序

这就是我在其他类中使用这些卡夫卡模板的方式

@Autowired
    @Qualifier("eventProducerKafkaTemplate")
    private KafkaTemplate<JsonNode, JsonNode> eventProducerKafkaTemplate;

    @Autowired
     @Qualifier("eventAvroProducerKafkaTemplate")
    private KafkaTemplate<SpecificRecord,SpecificRecord> eventAvroProducerKafkaTemplate;


public ReturnTYpe methodName() {

eventProducerKafkaTemplate.send(****, ****, ****);
eventAvroProducerKafkaTemplate.send(****, ****, ****);
}
您必须为2个producerConfigs和2个eventProducerFactory bean指定不同的方法bean名称。否则,一个优先于另一个