简体   繁体   English

具有多个独立主题处理的@KafkaListener

[英]@KafkaListener with multiples independent topics processing

Software used:使用的软件:

  • Java version: 8 Java版本: 8
  • SpringBoot version: 2.4.0 SpringBoot 版本: 2.4.0
  • SpringKafka version: 2.7.2 SpringKafka 版本: 2.7.2

I have this method in my spring:我在春天有这个方法:

    @KafkaListener(topics="#{consumerSpring.topics}", groupId="#{consumerSpring.consumerId}", concurrency="#{consumerSpring.recommendedConcurrency}")
    public void listenKafkbooiaTopic(@Header(KafkaHeaders.RECEIVED_TOPIC) String topicName, @Payload String message, Acknowledgment ack) throws Exception {
        ConsumerSpring consumer = this.consumerSpring();
        //
        //
        KafkaHandlerReturn handlerReturn = consumer.getKafkaProxy().handleRequest(
                topicName,
                consumer.getConsumerId(),
                message);
        
        if (handlerReturn.equals(KafkaHandlerReturn.SUCCESS) || handlerReturn.equals(KafkaHandlerReturn.FAIL_LOGIC)) {
            ack.acknowledge();
        } else {
            ack.nack(5 * 1000);
        }
    }

#{consumerSpring.topics} returns #{consumerSpring.topics}返回

{"topic1", "topic2", "topic3"}

#{consumerSpring.consumerId} returns: #{consumerSpring.consumerId}返回:

myConsumer

#{consumerSpring.recommendedConcurrency} returns: #{consumerSpring.recommendedConcurrency}返回:

3

OK!好的! This is working fine!这工作正常! But I need isolate these topics, for example:但我需要隔离这些主题,例如:

TopicA is stuck in fatal error and it's calling: TopicA 陷入致命错误,它正在调用:

ack.nack(5 * 1000);

But the topics: TopicB and TopicC aren't stuck.但是主题:TopicB 和 TopicC 并没有被卡住。 Then I need that these topics continue the execution normally.然后我需要这些主题继续正常执行。

Basically I need the same behavior as if I declared two separate structures, example:基本上我需要与声明两个独立结构相同的行为,例如:

    @KafkaListener(topics="topica", groupId="#{consumerSpring.consumerId}")
    public void listenerTopicB(@Header(KafkaHeaders.RECEIVED_TOPIC) String topicName, @Payload String message, Acknowledgment ack) throws Exception {
        ConsumerSpring consumer = this.consumerSpring();
        //
        //
        KafkaHandlerReturn handlerReturn = consumer.getKafkaProxy().handleRequest(
                topicName,
                consumer.getConsumerId(),
                message);
        
        if (handlerReturn.equals(KafkaHandlerReturn.SUCCESS) || handlerReturn.equals(KafkaHandlerReturn.FAIL_LOGIC)) {
            ack.acknowledge();
        } else {
            ack.nack(5 * 1000);
        }
    }
    
    @KafkaListener(topics="topicb", groupId="#{consumerSpring.consumerId}")
    public void listenerTopicA(@Header(KafkaHeaders.RECEIVED_TOPIC) String topicName, @Payload String message, Acknowledgment ack) throws Exception {
        ConsumerSpring consumer = this.consumerSpring();
        //
        //
        KafkaHandlerReturn handlerReturn = consumer.getKafkaProxy().handleRequest(
                topicName,
                consumer.getConsumerId(),
                message);
        
        if (handlerReturn.equals(KafkaHandlerReturn.SUCCESS) || handlerReturn.equals(KafkaHandlerReturn.FAIL_LOGIC)) {
            ack.acknowledge();
        } else {
            ack.nack(5 * 1000);
        }
    }

There is no need for multiple methods.不需要多种方法。

You can put multiple @KafkaListener annotations on a single method and each one will create a separate container.您可以将多个@KafkaListener注释放在一个方法上,每个注释都将创建一个单独的容器。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 yaml 文件中的 KafkaListener 多个主题 - KafkaListener mulitple topics in yaml file 如何将动态主题名称从环境变量传递给@KafkaListener(topics) - How to pass dynamic topic name to @KafkaListener(topics) from environment variable Spring KafkaListener with topicPattern,分配所有主题的所有分区 - Spring KafkaListener with topicPattern, assign all paritions of all topics 什么是最简单的 Spring Kafka @KafkaListener 配置来使用一组压缩主题中的所有记录? - What is the simplest Spring Kafka @KafkaListener configuration to consume all records from a set of compacted topics? KafkaListener 监听多个主题时,能否优先考虑单个主题? - Can you give priority to a single topic when KafkaListener listens to multiple topics? 在 KafkaListener 中使用并发属性创建的每个 kafka 消费者线程的预处理 - Pre-processing for each kafka consumer thread created with concurrency property in KafkaListener 与独立消费者同时处理单个InputStream - Concurrent processing of single InputStream with independent consumers Java中的3和5的倍数,5的倍数和3的倍数 - Multiples of 3 and 5, multiples of 5 and multiples of 3 in Java 带有动态 @KafkaListener 的 Spring Kafka - Spring Kafka with Dynamic @KafkaListener 如何将@Transactional 与@KafkaListener 一起使用? - How to use @Transactional with @KafkaListener?
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM