Зависимость, автоматически подключенная в конструкторе, впоследствии автоматически обнуляется для того же объекта Service с KafkaListener - PullRequest
0 голосов
/ 12 февраля 2019
@EnableKafka
@Configuration
public class KafkaConfiguration {
@Bean
public ConsumerFactory<String, String> consumerFactory() {
   //configurations
    return new DefaultKafkaConsumerFactory<>(config);
}

@Bean
public ConcurrentKafkaListenerContainerFactory<String, String> kafkaListenerContainerFactory() {
    ConcurrentKafkaListenerContainerFactory<String, String> factory = new ConcurrentKafkaListenerContainerFactory();
    factory.setConsumerFactory(consumerFactory());
    return factory;
}
}

@Service
public class KafkaConsumer {
private Dep dependency;

@Autowired
public KafkaConsumer(Dep dep){
this.dependency = dep;
}

@KafkaListener(topics = "Kafka_Example", containerFactory = "kafkaListenerContainerFactory")
public void consume(String message) {
    System.out.println("Consumed message: " + message);//dependency null here
}

Зависимость правильно подключается автоматически при вызове конструктора.Но позже, когда метод take вызывается слушателем spring kafka, зависимость становится нулевой.Оба раза объект потребителя Кафки один и тот же.Dep - это класс @Service с базовым методом печати. ​​
Как это возможно?
Но когда я добавляю другой метод провайдера контейнерного фактора, он работает, и зависимость не равна нулю.

@Bean
public ConcurrentKafkaListenerContainerFactory<String, String> customKafkaListenerContainerFactory() {
    ConcurrentKafkaListenerContainerFactory<String, String> factory = new ConcurrentKafkaListenerContainerFactory();
    factory.setConsumerFactory(consumerFactory());
    return factory;
}

с использованием этого как containerFactory работает.

Что изменилось?

...