Spring @KafkaListener execute and poll records after certain interval

后端 未结 3 716
感动是毒
感动是毒 2020-12-17 04:16

We wanted to consume the records after a certain interval (e.g. every 5 minutes). Consumer properties are standard:

@Bean
public KafkaListenerContainerFactor         


        
3条回答
  •  渐次进展
    2020-12-17 04:39

    This feature was introduced in 2.3 version.

    Starting with version 2.3, the ContainerProperties provides an idleBetweenPolls option to let the main loop in the listener container to sleep between KafkaConsumer.poll() calls. An actual sleep interval is selected as the minimum from the provided option and difference between the max.poll.interval.ms consumer config and the current records batch processing time.

    https://docs.spring.io/spring-kafka/reference/html/

    KafkaListenerConfig.java

    package br.com.sicredi.spi.icom.consumer.config;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.kafka.annotation.EnableKafka;
    import org.springframework.kafka.config.ConcurrentKafkaListenerContainerFactory;
    import org.springframework.kafka.core.ConsumerFactory;
    import org.springframework.kafka.core.DefaultKafkaConsumerFactory;
    import java.util.HashMap;
    import java.util.Map;
    
    @EnableKafka
    @Configuration
    public class KafkaListenerConfig {
    
        @Bean
        public ConcurrentKafkaListenerContainerFactory concurrentKafkaListenerContainerFactory() {
            ConcurrentKafkaListenerContainerFactory factory = new ConcurrentKafkaListenerContainerFactory<>();
            factory.setConsumerFactory(consumerFactory());
            
            factory.getContainerProperties().setIdleBetweenPolls(100); // 100 miliseconds
            
            return factory;
        }
    
        private ConsumerFactory consumerFactory() {
            return new DefaultKafkaConsumerFactory<>(consumerConfig());
        }
    
        private Map consumerConfig() {
            Map props = new HashMap<>();
            // ... 
            return props;
        }
    }
    

提交回复
热议问题