訪問投遞嘗試
要訪問阻塞和非阻塞投遞嘗試次數,請將這些頭新增到 @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
。