存取傳遞嘗試
若要存取阻塞和非阻塞傳遞嘗試,請將這些標頭新增至您的 @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
,以便更輕鬆地存取這些標頭;可以將 accessor 作為監聽器方法的參數提供
@RetryableTopic(backoff = @Backoff(...)) @KafkaListener(id = "dh1", topics = "dh1") void listen(Thing thing, KafkaMessageHeaderAccessor accessor) { ... }
使用 accessor.getBlockingRetryDeliveryAttempt()
和 accessor.getNonBlockingRetryDeliveryAttempt()
來取得值。如果未啟用阻塞重試,accessor 將擲回 IllegalStateException
;對於非阻塞重試,accessor 會為初始傳遞傳回 1
。