web-dev-qa-db-fra.com

La bonne façon de créer KafkaTemplate dans Spring Boot

J'essaie de configurer Apache kafka dans Spring Boot Application. J'ai lu ceci documentation et j'ai suivi les étapes:

1) J'ajoute ces lignes à aplication.yaml:

spring:
  kafka:
    bootstrap-servers: kafka_Host:9092
    producer:
      key-serializer: org.Apache.kafka.common.serialization.StringDeserializer
      value-serializer: org.Apache.kafka.common.serialization.ByteArraySerializer

2) Je crée un nouveau sujet:

    @Bean
    public NewTopic responseTopic() {
        return new NewTopic("new-topic", 5, (short) 1);
    }

Et maintenant je veux utiliser KafkaTemplate:

private final KafkaTemplate<String, byte[]> kafkaTemplate;

public KafkaEventBus(KafkaTemplate<String, byte[]> kafkaTemplate) {
    this.kafkaTemplate = kafkaTemplate;
}

Mais Intellij IDE met en évidence:

enter image description here

Pour résoudre ce problème, j'ai besoin de créer un bean:

@Bean
public KafkaTemplate<String, byte[]> myMessageKafkaTemplate() {
    return new KafkaTemplate<>(greetingProducerFactory());
}

Et passez aux propriétés du constructeur greetingProducerFactory():

@Bean
public ProducerFactory<String, byte[]> greetingProducerFactory() {
    Map<String, Object> configProps = new HashMap<>();
    configProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "kafka_hist4:9092");
    configProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);
    configProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, ByteArraySerializer.class);
    return new DefaultKafkaProducerFactory<>(configProps);
}

Mais alors quel est le point de réglage dans application.yam l si j'ai besoin de créer un manuel ProducerFactory?

5
ip696

J'ai eu le même problème au début, mais lorsque je l'ai exécuté, il n'a donné aucune erreur et a bien fonctionné.

Ignorer avertissement d'Intellij IDEA, il peut s'agir d'un bug d'IDEA déterminant les composants câblés automatiquement.

0
Jai Gohil

Par défaut KafkaTemplate<Object, Object> est créé par Spring Boot dans KafkaAutoConfiguration class . Étant donné que Spring prend en compte les informations de type générique lors de l'injection de dépendances, le bean par défaut ne peut pas être câblé automatiquement dans KafkaTemplate<String, byte[]>.

0
Karol Dowbecki