Я использую springboot и пытаюсь написать KafkaProducer для отправки сообщений в очередь Kafka. Я создал эти методы в классе @Configuration.
@Bean
public KafkaTemplate<String, String> kafkaTemplate(){
return new KafkaTemplate<>(producerFactory());
}
@Bean
public ProducerFactory<String, String> producerFactory() {
Map<String, Object> configProps = new HashMap<>();
configProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapAddress); //bootstrapAddress holds address of kafka server
configProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
configProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
return new DefaultKafkaProducerFactory<>(configProps);
}
И я автоматически подключил этот bean-компонент KafkaTemplate в моем классе KafkaMessageProducer, который заботится об обработке функции отправки KafkaTemplate.
@Autowired
KafkaTemplate<String, String> kafkaTemplate;
Но я сталкиваюсь с этой ошибкой, когда пытаюсь скомпилировать свой код.
Field kafkaTemplate in <pathoffile>.KafkaMessageProducer required a bean of type 'org.springframework.kafka.core.KafkaTemplate' that could not be found.
- Bean method 'kafkaTemplate' in 'KafkaAutoConfiguration' not loaded because @ConditionalOnMissingBean (types: org.springframework.kafka.core.KafkaTemplate; SearchStrategy: all) found bean 'avroKafkaTemplate'
Action:Consider revisiting the conditions above or defining a bean of type 'org.springframework.kafka.core.KafkaTemplate' in your configuration.
Кроме того, если я попытаюсь исключить KafkaAutoConfiguration в моем проекте Spring, я получаю сообщение об ошибке «Не удается загрузить Bean, поскольку KafkaAutoConfiguration отключен». Есть идеи, почему я получаю эту ошибку Bean и какое решение?
РЕДАКТИРОВАТЬ: - Я нашел следующий bean в файле jar, используемом моим проектом
@Bean
@Conditional({EnableQueueCondition.class})
public KafkaTemplate<String, String> kafkaTemplate() {
KafkaTemplate<String, String> kafkaTemplate = new KafkaTemplate(this.producerFactory());
kafkaTemplate.setProducerListener(new ProducerListenerImpl());
return kafkaTemplate;
}
Итак, здесь возникает ошибка, но я не знаю, как сказать Spring не смотреть на этот bean-компонент и использовать bean-компонент, который я определил. Я пробовал использовать аннотации Primary и Qualifier для bean-компонента, но по-прежнему выдает ту же ошибку. Может ли быть вероятность того, что мой определенный bean-компонент не создан или не найден, и KafkaAutoConfiguration затем ищет bean-компонент по умолчанию, который переопределяется bean-компонентом avroKafkaTemplate? Какое может быть решение этой проблемы?