使用动态@KafkaListener的Spring Kafka

时间:2019-04-02 20:02:51

标签: java spring spring-boot kafka-consumer-api spring-kafka

我正在使用带有 spring-kafka (不是 spring-integration-kafka )的Spring Boot 2.x

我有多个带有@KafkaListener注释的bean ...每个都消耗一个主题...因此,由于我有12个主题,因此我还需要有12个KafkaConsumers bean ...而且我想知道如果我可以通过编程方式/动态地创建这些bean,...可以使用 KafkaListenerEndpointRegistry 来动态创建使用者容器。

注意:我需要成批使用邮件...所以也许我可以使用 BatchMessageListener

当前代码:

@KafkaListener(
        id = COUNTRY,
        containerFactory = KAFKA_LISTENER_FACTORY_BEAN_NAME,
        topics = {TOPIC},
        groupId = GROUP_ID,
        clientIdPrefix = CLIENT_ID,
        errorHandler = VALIDATION_ERROR_HANDLER_BEAN_NAME
    )
    @Override
    public void consume(final List<MessageDTO> messages,
        @Header(KafkaHeaders.RECEIVED_TOPIC) final List<String> topics,
        @Header(KafkaHeaders.RECEIVED_MESSAGE_KEY) final List<String> messagesKey,
        @Header(KafkaHeaders.RECEIVED_PARTITION_ID) final List<Integer> partitionIds,
        @Header(KafkaHeaders.RECEIVED_TIMESTAMP) final List<Long> timestamps,
        @Header(KafkaHeaders.OFFSET) final List<Long> offsets) {
            (...)
    }

每个主题使用者都有自己的实现,具体取决于主题。你们能给我指出一个博客/伪代码/ git线程/答案吗?

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:0)

如果您的主题有某种模式,您也可以尝试以下一种模式:

      kafka:
        bindings:
            input.consumer.destination-is-pattern: true