对于最新稳定版本,请使用Spring for Apache Kafka 4.0.4spring-doc.cadn.net.cn

访问配送尝试

要访问阻塞和非阻塞的投递尝试,请在你的 @KafkaListener 方法签名中添加这些头信息:spring-doc.cadn.net.cn

@Header(KafkaHeaders.DELIVERY_ATTEMPT) int blockingAttempts,
@Header(name = RetryTopicHeaders.DEFAULT_HEADER_ATTEMPTS, required = false) Integer nonBlockingAttempts

只有在将 ContainerPropertiesdeliveryAttemptHeader 设置为 true 时,才会提供阻塞的递送尝试。spring-doc.cadn.net.cn

注意在首次投递时,非阻塞尝试的值将为 nullspring-doc.cadn.net.cn

从3.0.10版本开始,提供了一个方便的KafkaMessageHeaderAccessor,以允许更简单的访问这些头信息;监听器方法的访问器可以作为参数提供:spring-doc.cadn.net.cn

@RetryableTopic(backoff = @Backoff(...))
@KafkaListener(id = "dh1", topics = "dh1")
void listen(Thing thing, KafkaMessageHeaderAccessor accessor) {
    ...
}

使用 accessor.getBlockingRetryDeliveryAttempt()accessor.getNonBlockingRetryDeliveryAttempt() 来获取值。 访问器在未启用阻塞重试时会抛出 IllegalStateException;对于非阻塞重试,访问器在初始投递时返回 1spring-doc.cadn.net.cn