【问题标题】:How to get spring boot default Kafka consumer object如何获取 Spring Boot 默认的 Kafka 消费者对象
【发布时间】:2021-05-28 06:15:13
【问题描述】:

我对 Kafka 消费者的配置位于 application.yaml 文件中。我知道如果我只有 1 个消费者,我不需要创建一个 consumerFactory bean,它会默认由 spring 设置。 我需要测试我的消费者,所以我需要访问我的测试文件中的消费者对象,并且我不想再次配置它(我想使用 application.yaml 中的默认配置)文件来创建消费者对象。这怎么可能?

【问题讨论】:

  • 为什么需要消费者本身?您通常将侦听器注释附加到组件的使用者方法。
  • 我将它用于集成测试。我向 Kafka 发送了一条消息,并想查看该消息是否存在。

标签: java spring-kafka spring-boot-actuator spring-boot-test


【解决方案1】:

Spring Boot 为 Spring Kafka 提供了足够全面的自动配置:https://docs.spring.io/spring-boot/docs/2.4.3/reference/html/spring-boot-features.html#boot-features-kafka

您可以将这组 bean 注入到您的测试类中:

  • KafkaTemplate<?, ?> kafkaTemplate
  • ProducerListener<Object, Object> kafkaProducerListener
  • ConsumerFactory<?, ?> kafkaConsumerFactory
  • ProducerFactory<?, ?> kafkaProducerFactory
  • KafkaTransactionManager<?, ?> kafkaTransactionManager
  • KafkaJaasLoginModuleInitializer kafkaJaasInitializer
  • KafkaAdmin kafkaAdmin
  • ConcurrentKafkaListenerContainerFactoryConfigurer kafkaListenerContainerFactoryConfigurer
  • ConcurrentKafkaListenerContainerFactory<?, ?> kafkaListenerContainerFactory
  • KafkaStreamsConfiguration defaultKafkaStreamsConfig
  • KafkaStreamsFactoryBeanConfigurer kafkaStreamsFactoryBeanConfigurer

因此,要在您的测试中获得KafkaConsumer,您需要自动装配ConsumerFactory 并调用它的createConsumer(),您将根据配置属性获得一个新实例。

【讨论】:

  • 我已经在 application.yaml 中设置了默认主题:kafka: template: default-topic:events 但是,我仍然收到此错误:java.lang.IllegalStateException: Consumer is not subscribed to any topics或分配任何分区
  • 没错。我假设您知道如何使用 KafkaConsumer...所以,只需订阅您的主题并继续测试!
猜你喜欢
  • 2016-12-09
  • 1970-01-01
  • 1970-01-01
  • 2017-08-24
  • 1970-01-01
  • 2018-02-18
  • 1970-01-01
  • 2019-10-06
  • 1970-01-01
相关资源
最近更新 更多