Spring Boot中DeadLetterPublishingRecoverer抛出过时警告如何处理
问题解答
配置现状说明
你当前的配置功能运行不存在问题,警告只是因为使用了Spring Kafka新版本中标记为过时的API,暂时忽略警告不会影响现有业务运行,但不建议长期保留过时API调用,避免后续Spring Kafka版本升级时出现编译失败问题。
警告原因
Spring Kafka 自2.7版本开始,将DeadLetterPublishingRecoverer(KafkaTemplate<?, ?>, BiFunction<ConsumerRecord<?,?>, Exception, TopicPartition>)构造器标记为过时,官方推荐使用基于DestinationTopic的路由API替代,该API支持更丰富的死信队列配置规则(比如自定义分区策略、重试策略、消息头传递规则等)。
消除警告的修改方案
方案1:替换为非过时构造器(推荐)
将你代码中DeadLetterPublishingRecoverer的实例化逻辑修改为如下写法即可消除警告,原有业务逻辑完全不变:
DeadLetterPublishingRecoverer recoverer = new DeadLetterPublishingRecoverer(KafkaTemplate, record -> new DestinationTopic( record.topic() + "-DLQ", DestinationTopic.NO_PARTITION, DestinationTopic.RetryStrategy.NOT_RETRYABLE ) );
其中DestinationTopic.NO_PARTITION等价于你原有逻辑中的分区值-1,即交给Kafka生产者自动选择死信队列的存储分区。
可选优化:适配更高版本Spring Kafka的错误处理器
如果你使用的是Spring Kafka 2.8及以上版本,代码中用到的SeekToCurrentErrorHandler也已被标记为过时,可同步替换为DefaultErrorHandler,修改后代码如下:
// 替换原有SeekToCurrentErrorHandler初始化逻辑 DefaultErrorHandler errorHandler = new DefaultErrorHandler(recoverer, new FixedBackOff(0L, 3L)); errorHandler.setCommitRecovered(true); factory.setCommonErrorHandler(errorHandler);
额外注意
你代码中存在一处拼写小问题:配置属性trustedPacakges拼写错误,正确拼写应为trustedPackages,建议同步修正避免后续配置绑定失败。
内容的提问来源于stack exchange,提问作者david
相关产品推荐
相关产品推荐

