Class DeadLetterPublishingRecovererFactory

java.lang.Object
org.springframework.kafka.retrytopic.DeadLetterPublishingRecovererFactory

public class DeadLetterPublishingRecovererFactory extends Object
Creates and configures the DeadLetterPublishingRecoverer that will be used to forward the messages using the DestinationTopicResolver.
Since:
2.7
Author:
Tomaz Fernandes, Gary Russell, Soby Chacko
  • Constructor Details

    • DeadLetterPublishingRecovererFactory

      public DeadLetterPublishingRecovererFactory(DestinationTopicResolver destinationTopicResolver)
  • Method Details

    • setHeadersFunction

      public void setHeadersFunction(BiFunction<org.apache.kafka.clients.consumer.ConsumerRecord<?,?>,Exception,org.apache.kafka.common.header.Headers> headersFunction)
      Set a function that creates additional headers for the output record, in addition to the standard retry headers added by this factory.
      Parameters:
      headersFunction - the function.
      Since:
      2.8.4
    • setPartitionResolver

      public void setPartitionResolver(BiFunction<org.apache.kafka.clients.consumer.ConsumerRecord<?,?>,String,Integer> resolver)
      Set a resolver for the partition number to publish to. By default the same partition as the consumer record is used. If the resolver returns null or a negative number, the partition is set to null in the producer record and the KafkaProducer decides which partition to publish to.
      Parameters:
      resolver - the resolver.
      Since:
      2.9.2
    • setRetainAllRetryHeaderValues

      public void setRetainAllRetryHeaderValues(boolean retainAllRetryHeaderValues)
      Set to false to only retain the last value for RetryTopicHeaders; true by default, which retains all the values as the record transitions through topics.
      Parameters:
      retainAllRetryHeaderValues - false to only store the last values.
      Since:
      2.9.6
    • setDeadLetterPublisherCreator

      public void setDeadLetterPublisherCreator(DeadLetterPublishingRecovererFactory.DeadLetterPublisherCreator creator)
      Provide a DeadLetterPublishingRecovererFactory.DeadLetterPublisherCreator; used to create a subclass of the DeadLetterPublishingRecoverer, instead of the default, for example, to modify the published records.
      Parameters:
      creator - the creator,
      Since:
      3.0.9.
    • setDeadLetterPublishingRecovererCustomizer

      public void setDeadLetterPublishingRecovererCustomizer(Consumer<DeadLetterPublishingRecoverer> customizer)
      Set a customizer to customize the default DeadLetterPublishingRecoverer.
      Parameters:
      customizer - the customizer.
      See Also:
    • addNotRetryableException

      public final void addNotRetryableException(Class<? extends Exception> exceptionType)
      Add exception type to the default list. By default, the following exceptions will not be retried: All others will be retried.
      Parameters:
      exceptionType - the exception type.
      Since:
      2.8
      See Also:
    • removeNotRetryableException

      public boolean removeNotRetryableException(Class<? extends Exception> exceptionType)
      Remove an exception type from the configured list. By default, the following exceptions will not be retried: All others will be retried.
      Parameters:
      exceptionType - the exception type.
      Returns:
      true if the removal was successful.
      See Also:
    • neverLogListenerException

      public void neverLogListenerException()
      Never logs the listener exception. The default is logging only after retries are exhausted.
      Since:
      2.7.13
    • alwaysLogListenerException

      public void alwaysLogListenerException()
      Logs the listener exception at each attempt. The default is logging only after retries are exhausted.
      Since:
      2.7.13
    • create

      public DeadLetterPublishingRecoverer create(String mainListenerId)
    • maybeLogListenerException

      protected void maybeLogListenerException(Exception exception, org.apache.kafka.clients.consumer.ConsumerRecord<?,?> consumerRecord, DestinationTopic nextDestination)
      Log the exception before sending the record in error to the retry topic. This method can be overridden by downstream applications to customize how the error is logged.
      Parameters:
      exception - the exception that caused the error
      consumerRecord - the original consumer record
      nextDestination - the next topic where the record goes
      Since:
      3.3.0
    • resolveTopicPartition

      protected org.apache.kafka.common.TopicPartition resolveTopicPartition(org.apache.kafka.clients.consumer.ConsumerRecord<?,?> cr, DestinationTopic nextDestination)
      Creates and returns the TopicPartition, where the original record should be forwarded. By default, it will use the partition same as original record's partition, in the next destination topic.

      DeadLetterPublishingRecoverer.checkPartition(org.apache.kafka.common.TopicPartition, org.apache.kafka.clients.consumer.Consumer<?, ?>) has logic to check whether that partition exists, and if it doesn't it sets -1, to allow the Producer itself to assign a partition to the record.

      Subclasses can inherit from this method to override the implementation, if necessary.

      The destination partition can also be customized using setPartitionResolver(BiFunction).
      Parameters:
      cr - The original ConsumerRecord, which is to be forwarded to DLT
      nextDestination - The next DestinationTopic, where the consumerRecord is to be forwarded
      Returns:
      An instance of TopicPartition, specifying the topic and partition, where the cr is to be sent.
      See Also: