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

访问传递尝试

要访问阻塞和非阻塞传送尝试,请将这些标头添加到您的方法签名中:@KafkaListenerspring-doc.cn

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

仅当将 的 deliveryAttemptHeader 设置为 时,才会提供阻止投放尝试。ContainerPropertiestruespring-doc.cn

请注意,非阻塞尝试将用于初始投放。nullspring-doc.cn

从版本 3.0.10 开始,提供了一个方便的工具,允许更轻松地访问这些 headers;该访问器可以作为 listener 方法的参数提供:KafkaMessageHeaderAccessorspring-doc.cn

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

使用 和 获取值。 如果未启用阻塞重试,则访问器将引发一个对于非阻塞重试,访问器返回初始传递。accessor.getBlockingRetryDeliveryAttempt()accessor.getNonBlockingRetryDeliveryAttempt()IllegalStateException1spring-doc.cn