web-dev-qa-db-ja.com

春のブートでKafkaTemplateを作成する正しい方法

春のブートアプリケーションでApache kafkaを構成してみます私はこれを読みます documentation そしてステップに従います:

1)私はこの行を_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)新しいトピックを作成します。

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

そして今、私はKafkaTemplateを使いたいです:

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

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

しかしIntellij IDEハイライト:

enter image description here

これを修正するには、Beanを作成する必要があります。

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

そして、コンストラクタプロパティ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);
}
_

しかし、ProducerFactoryマニュアルを作成する必要がある場合、application.yamlで設定するポイントは何ですか?

5
ip696

最初は同じ問題がありましたが、実行するとエラーは発生せず、問題なく動作しました。

無視Intellij IDEAの警告、これはIDEAのバグであり、自動配線されたコンポーネントを理解している可能性があります。

0
Jai Gohil

デフォルトでは、KafkaTemplate<Object, Object>はSpring Bootによって KafkaAutoConfiguration class に作成されます。 Springは依存関係の注入時にジェネリック型情報を考慮するため、デフォルトのBeanをKafkaTemplate<String, byte[]>に自動接続することはできません。

0
Karol Dowbecki