Saya menggunakan springboot dan mencoba menulis KafkaProducer untuk memasukkan pesan dalam antrian Kafka. Saya telah membuat metode ini di kelas @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);
}
Dan saya telah melakukan Autowired kacang KafkaTemplate ini di kelas KafkaMessageProducer saya yang menangani penanganan fungsi kirim KafkaTemplate.
@Autowired
KafkaTemplate<String, String> kafkaTemplate;
Tapi saya menghadapi kesalahan ini ketika saya mencoba mengkompilasi kode saya
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.
Selain itu, jika saya mencoba mengecualikan KafkaAutoConfiguration di proyek Spring saya, saya mendapatkan kesalahan seperti Bean tidak dapat dimuat karena KafkaAutoConfiguration dinonaktifkan'. Adakah yang tahu mengapa saya mendapatkan kesalahan Bean ini dan apa solusinya?
EDIT: - Saya menemukan kacang berikut dalam file jar yang digunakan oleh proyek saya
@Bean
@Conditional({EnableQueueCondition.class})
public KafkaTemplate<String, String> kafkaTemplate() {
KafkaTemplate<String, String> kafkaTemplate = new KafkaTemplate(this.producerFactory());
kafkaTemplate.setProducerListener(new ProducerListenerImpl());
return kafkaTemplate;
}
Jadi, dari sinilah kesalahan itu berasal, tapi saya tidak tahu bagaimana cara memberitahu pegas untuk tidak melihat kacang ini, dan menggunakan kacang yang saya tentukan. Saya telah mencoba menggunakan anotasi Utama dan Kualifikasi pada kacang, masih memberikan kesalahan yang sama. Apakah ada kemungkinan kacang yang saya tentukan tidak dibuat atau ditemukan, dan KafkaAutoConfiguration kemudian mencari kacang default yang ditimpa oleh kacang avroKafkaTemplate? Apa solusi untuk masalah ini?