spring-boot - 在spring kafka中使用SeekToCurrentErrorHandler时如何设置重试间隔时间
问题描述
我在 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 时如何设置重试间隔时间?
解决方案
但是,您可以使用重试模板执行此操作,但总尝试次数将是这两个属性的倍数。
推荐阅读
- python - 我将如何阻止我的播放器“弹射”屏幕外?
- node.js - 是否可以将 Socket.io 与 AWS Websockets Api Gateway 集成?
- python - 使用 sklearn 标准化 pandas 数据框中的一组列
- python - Django rest APITestCase 客户端在单元测试中将 null 布尔值转换为 false
- android - PlatformException(FitKit, 5000: 应用程序需要用户的 OAuth 同意, null, null) 从 Google Fit 获取心率值时
- angular - Angular 表单验证仅在输入时有效,然后删除
- ios - iOS 13.4 日期选择器紧凑型不突出显示当前日期或在显示选择器时更改模糊背景?
- javascript - 下一个服务器不断崩溃
- python - 与不为零的更近的邻居重复值,直到值改变
- python - python中的合并排序