【问题标题】:How to set Retry Interval time when using SeekToCurrentErrorHandler in spring kafka在spring kafka中使用SeekToCurrentErrorHandler时如何设置重试间隔时间
【发布时间】:2019-08-26 11:43:44
【问题描述】:

我在 spring-boot 应用程序中使用 SeekToCurrentErrorHandler 处理容器侦听器错误。如果发生异常,我想设置重试间隔,它应该等待一段时间并重试,直到最大尝试次数。

我已尝试通过设置备份策略来添加 RetryTemplate。但它并没有例外。当错误发生最大尝试时间时,它将调用 SeekToCurrentErrorHandler 2 次。

@Bean
    public RetryPolicy retryPolicy() {
        SimpleRetryPolicy simpleRetryPolicy = new SimpleRetryPolicy();
        simpleRetryPolicy.setMaxAttempts(retryMaxAttempts);
        return simpleRetryPolicy;
    }


    @Bean
    public BackOffPolicy backOffPolicy() {
        FixedBackOffPolicy backOffPolicy = new FixedBackOffPolicy();
        backOffPolicy.setBackOffPeriod(retryInterval);
        return backOffPolicy;
    }


    @Bean
    public RetryTemplate retryTemplate() {
        RetryTemplate retryTemplate = new RetryTemplate();
        retryTemplate.setRetryPolicy(retryPolicy());
        retryTemplate.setBackOffPolicy(backOffPolicy());
        return retryTemplate;
    }

    @Bean
    public KafkaListenerContainerFactory<ConcurrentMessageListenerContainer<String, String>> kafkaListenerContainerFactory(
            ChainedKafkaTransactionManager<String, String> chainedTM) {
        ConcurrentKafkaListenerContainerFactory<String, String> factory = new ConcurrentKafkaListenerContainerFactory<String, String>();
        factory.setConsumerFactory(consumerFactory());
        factory.setConcurrency(concurrency);
        factory.getContainerProperties().setPollTimeout(pollTimeout);
        factory.getContainerProperties().setSyncCommits(true);
    // ------->>     factory.setRetryTemplate(retryTemplate());
        factory.getContainerProperties().setAckOnError(false);
        factory.getContainerProperties().setTransactionManager(chainedTM);
        SeekToCurrentErrorHandler errorHandler = new SeekToCurrentErrorHandler((record, exception) -> {
        // handle errors 
        }, retryMaxAttempts);
        factory.setErrorHandler(errorHandler);
        log.debug("Kafka Receiver Config kafkaListenerContainerFactory created");
        return factory;
    }


使用SeekToCurrentErrorHandler时如何设置重试间隔时间?

【问题讨论】:

    标签: spring-boot apache-kafka spring-kafka


    【解决方案1】:

    这是new feature in the next release (2.3)

    但是,您可以使用重试模板执行此操作,但总尝试次数将是这两个属性的倍数。

    【讨论】:

    • 谢谢@GaryRussell。我们什么时候可以发布?
    • 现在在 2.3.0.BUILD-SNAPSHOT 中可用;候选版本目前计划在 9 月 5 日发布,2.3.0.RELEASE 目前计划在 9 月 19 日发布。
    • @GaryRussell 是不是RetryTemplateSeekToCurrentErrorHandler 不能同时使用,只能选择其中之一?
    • 是的;既然 STCEH 支持退避和异常分类,它比使用 RetryTemplate 更可取。
    猜你喜欢
    • 2011-11-09
    • 2018-08-01
    • 2014-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-20
    • 2020-06-21
    • 2017-09-06
    相关资源
    最近更新 更多