java - 如何根据 Kafka SeekToCurrentErrorHandler 中的异常类型设置更改重试次数?
问题描述
我有一个 Spring Boot 应用程序,我正在尝试创建一个 Kafka 重试侦听器,其中根据异常类型我需要更改重试尝试。
例如:
如果异常类型为 A,则重试次数应为 5
如果异常类型为 B,则重试次数应为 10
谁能推荐如何在 Spring Kafka 中做到这一点?
以下是我的 ListenerFactory。我正在使用 SeekToCurrentErrorHandler
Bean
public ConcurrentKafkaListenerContainerFactory<String, test> retryListenerContainerFactory() {
ConcurrentKafkaListenerContainerFactory<String, test> factory = new ConcurrentKafkaListenerContainerFactory<>();
factory.setConsumerFactory(consumerFactory());
factory.getContainerProperties().setAckMode(AckMode.MANUAL_IMMEDIATE);
SeekToCurrentErrorHandler errorHandler = new SeekToCurrentErrorHandler((record, exception) -> {
System.out.println(
"RetryPolicy** limit has been exceeded! You should really handle this better." + record.key());
}, new FixedBackOff(0L, 3L));
errorHandler.addNotRetryableException(IllegalArgumentException.class);
errorHandler.setCommitRecovered(true);
factory.setErrorHandler(errorHandler);
// to keep the consumers alive the failure gets reported to broker so that
// consumers remain alive
factory.setStatefulRetry(true);
factory.setConcurrency(2);
return factory;
}
解决方案
从 2.6 版开始,您可以添加一个函数来BackOff
根据消费者记录和/或异常来确定要使用的函数:
/**
* Set a function to dynamically determine the {@link BackOff} to use, based on the
* consumer record and/or exception. If null is returned, the default BackOff will be
* used.
* @param backOffFunction the function.
* @since 2.6
*/
public void setBackOffFunction(BiFunction<ConsumerRecord<?, ?>, Exception, BackOff> backOffFunction) {
this.failureTracker.setBackOffFunction(backOffFunction);
}
仅当此记录没有当前记录时才调用此方法BackOff
(即,它对您的其他问题没有帮助)。
推荐阅读
- ffmpeg - FFMpeg - 将所有音频流从 MKV 转换为 MP4
- performance - X86 Broadwell 上的吞吐量 FMA 和乘法
- jakarta-ee - 无法解决 Wildfly 远程容器的“ArquillianServletRunner 未找到错误”
- python - 未定义画布绑定键
- javascript - 打印 javascript 数组中的重复项数
- react-native - 反应原生 | 运行 Expo 时出错 | 未处理的错误事件
- java - 错误:无法找到或加载主类 - .jar 文件执行
- angular-cli - 安装 Angular CLI 的问题
- scala - `transformWith[Array[Byte]]` 中的`Future.failed` 给出编译器错误
- php - 通过php变量从MySQL中选择数据时如何转义单引号