|
这个版本仍在开发中,目前尚未被认为是稳定的。要使用最新稳定版本,请使用 Spring for Apache Kafka 4.0.4! |
访问配送尝试
要访问阻塞和非阻塞的投递尝试,请在你的 @KafkaListener 方法签名中添加这些头信息:
@Header(KafkaHeaders.DELIVERY_ATTEMPT) int blockingAttempts,
@Header(name = RetryTopicHeaders.DEFAULT_HEADER_ATTEMPTS, required = false) Integer nonBlockingAttempts
只有在将 ContainerProperties 的 deliveryAttemptHeader 设置为 true 时,才会提供阻塞的递送尝试。
注意在首次投递时,非阻塞尝试的值将为 null。
从3.0.10版本开始,提供了一个方便的KafkaMessageHeaderAccessor,以允许更简单的访问这些头信息;监听器方法的访问器可以作为参数提供:
@RetryableTopic(backoff = @Backoff(...))
@KafkaListener(id = "dh1", topics = "dh1")
void listen(Thing thing, KafkaMessageHeaderAccessor accessor) {
...
}
使用 accessor.getBlockingRetryDeliveryAttempt() 和 accessor.getNonBlockingRetryDeliveryAttempt() 来获取值。
访问器在未启用阻塞重试时会抛出 IllegalStateException;对于非阻塞重试,访问器在初始投递时返回 1。