ฉันใช้ 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);
}
และฉันได้ Autowired KafkaTemplate bean นี้ในคลาส 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;
}
นี่คือที่มาของข้อผิดพลาด แต่ฉันไม่รู้ว่าจะบอกสปริงไม่ให้มองถั่วนี้ได้อย่างไร และใช้ถั่วที่ฉันกำหนดไว้ ฉันได้ลองใช้คำอธิบายประกอบหลักและรอบคัดเลือกบน bean แล้ว แต่ก็ยังให้ข้อผิดพลาดเดิม อาจมีความเป็นไปได้หรือไม่ที่ bean ที่ฉันกำหนดไว้จะไม่ถูกสร้างขึ้นหรือไม่พบ และ KafkaAutoConfiguration กำลังมองหา bean เริ่มต้นที่ถูกแทนที่โดย avroKafkaTemplate bean วิธีแก้ปัญหานี้อาจมีอะไรบ้าง?