Class FailedBatchProcessor

  • All Implemented Interfaces:
    DeliveryAttemptAware
    Direct Known Subclasses:
    DefaultErrorHandler

    public abstract class FailedBatchProcessor
    extends FailedRecordProcessor
    Subclass of FailedRecordProcessor that can process (and recover) a batch. If the listener throws a BatchListenerFailedException, the offsets prior to the failed record are committed and the remaining records have seeks performed. When the retries are exhausted, the failed record is sent to the recoverer instead of being included in the seeks. If other exceptions are thrown processing is delegated to the fallback handler.
    Since:
    2.8
    • Constructor Detail

      • FailedBatchProcessor

        public FailedBatchProcessor​(@Nullable
                                    java.util.function.BiConsumer<org.apache.kafka.clients.consumer.ConsumerRecord<?,​?>,​java.lang.Exception> recoverer,
                                    org.springframework.util.backoff.BackOff backOff,
                                    CommonErrorHandler fallbackHandler)
        Construct an instance with the provided properties.
        Parameters:
        recoverer - the recoverer.
        backOff - the back off.
        fallbackHandler - the fall back handler.
      • FailedBatchProcessor

        public FailedBatchProcessor​(@Nullable
                                    java.util.function.BiConsumer<org.apache.kafka.clients.consumer.ConsumerRecord<?,​?>,​java.lang.Exception> recoverer,
                                    org.springframework.util.backoff.BackOff backOff,
                                    @Nullable
                                    BackOffHandler backOffHandler,
                                    CommonErrorHandler fallbackHandler)
        Construct an instance with the provided properties.
        Parameters:
        recoverer - the recoverer.
        backOff - the back off.
        backOffHandler - the BackOffHandler
        fallbackHandler - the fall back handler.
        Since:
        2.9
    • Method Detail

      • setReclassifyOnExceptionChange

        public void setReclassifyOnExceptionChange​(boolean reclassifyOnExceptionChange)
        Set to false to not reclassify the exception if different from the previous failure. If the changed exception is classified as retryable, the existing back off sequence is used; a new sequence is not started. Default true. Only applies when the fallback batch error handler (for exceptions other than BatchListenerFailedException) is the default.
        Parameters:
        reclassifyOnExceptionChange - false to not reclassify.
        Since:
        2.9.7
      • notRetryable

        protected void notRetryable​(java.util.stream.Stream<java.lang.Class<? extends java.lang.Exception>> notRetryable)
        Description copied from class: ExceptionClassifier
        Subclasses can override this to receive notification of configuration of not retryable exceptions.
        Overrides:
        notRetryable in class ExceptionClassifier
        Parameters:
        notRetryable - the not retryable exceptions.
      • setClassifications

        public void setClassifications​(java.util.Map<java.lang.Class<? extends java.lang.Throwable>,​java.lang.Boolean> classifications,
                                       boolean defaultValue)
        Description copied from class: ExceptionClassifier
        Set an exception classifications to determine whether the exception should cause a retry (until exhaustion) or not. If not, we go straight to the recoverer. By default, the following exceptions will not be retried:
        • DeserializationException
        • MessageConversionException
        • MethodArgumentResolutionException
        • NoSuchMethodException
        • ClassCastException
        All others will be retried. When calling this method, the defaults will not be applied.
        Overrides:
        setClassifications in class ExceptionClassifier
        Parameters:
        classifications - the classifications.
        defaultValue - whether or not to retry non-matching exceptions.
        See Also:
        BinaryExceptionClassifier(Map, boolean), ExceptionClassifier.addNotRetryableExceptions(Class...)
      • getFallbackBatchHandler

        protected CommonErrorHandler getFallbackBatchHandler()
        Return the fallback batch error handler.
        Returns:
        the handler.
        Since:
        2.8.8
      • doHandle

        protected void doHandle​(java.lang.Exception thrownException,
                                org.apache.kafka.clients.consumer.ConsumerRecords<?,​?> data,
                                org.apache.kafka.clients.consumer.Consumer<?,​?> consumer,
                                MessageListenerContainer container,
                                java.lang.Runnable invokeListener)
      • handle

        protected <K,​V> org.apache.kafka.clients.consumer.ConsumerRecords<K,​V> handle​(java.lang.Exception thrownException,
                                                                                                  org.apache.kafka.clients.consumer.ConsumerRecords<?,​?> data,
                                                                                                  org.apache.kafka.clients.consumer.Consumer<?,​?> consumer,
                                                                                                  MessageListenerContainer container,
                                                                                                  java.lang.Runnable invokeListener)