首页 > 解决方案 > 如何禁用自动启动的 KAFKA 消费者,而无需进行任何代码更改,包括在 Spring Boot 中设置 autoStartup = "{xyz}"?

问题描述

下面是我的 KAFKA 消费者

@Service
public class Consumer {

    private static final Logger LOGGER = Logger.getLogger(Consumer.class.getName());
    public static Queue<ProductKafka> consumeQueue = new LinkedList<>();

    @KafkaListener(topics = "#{'${spring.kafka.topics}'.split('\\\\ ')}", groupId = "#{'${spring.kafka.groupId}'}")
    public void consume(ProductKafka productKafka) throws IOException {
        consumeQueue.add(productKafka);
        LOGGER.info(String.format("#### -> Logger Consumed message -> %s", productKafka.toString()));
        System.out.printf("#### -> Consumed message -> %s", productKafka.toString());
    }
}

下面是我的“application.properties”文件

spring.kafka.topics=Product
spring.kafka.groupId=Product-Group

我的 KAFKA 消费者正在自动启动。

但是,由于要求,我想禁用自动启动的 KAFKA 消费者,而不必对现有代码进行任何更改,包括在消费者类中设置autoStartup = "{xyz}" 。

我正在寻找一个现有的属性,它会禁用 KAFKA 消费者被自动启动,像这样

spring.kafka.consumer.enable=false

注意:我有多个 KAFKA 消费者,上述属性应该禁用项目中的所有消费者。

我们是否有任何现有属性可以禁用自动启动 KAFKA 消费者而无需对现有代码进行任何更改?

标签: javaapache-kafkaspring-kafka

解决方案


没有标准的开箱即用属性;你必须提供你自己的。

autoStartup="${should.start:true}"

should.start如果属性不存在,将启动容器。

编辑

只需在您的应用程序中添加类似的内容。

@Component
class Customizer {

    Customizer(AbstractKafkaListenerContainerFactory<?, ?, ?> factory,
            @Value("${start.containers:true}") boolean start) {

        factory.setAutoStartup(start);
    }

}
start:
  containers: false

推荐阅读