配信試行へのアクセス

ブロッキング配信試行とノンブロッキング配信試行にアクセスするには、@KafkaListener メソッドシグネチャーに次のヘッダーを追加します。

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

配信試行のブロックは、ContainerPropertiesdeliveryAttemptHeader を 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 を返します。