Interface SequencedDeadLetterProcessor<M extends Message>

Type Parameters:
M - an implementation of Message contained in the processed dead letters
All Known Implementing Classes:
DeadLetteringEventHandlingComponent

public interface SequencedDeadLetterProcessor<M extends Message>
Contract describing a component that can process dead letters that it has enqueued.

Should use the SequencedDeadLetterQueue for processing as this ensures dead lettered Messages are kept in sequence. Thus processed in order through this component.

All methods in this interface return CompletableFuture to support asynchronous processing.

Implementations are responsible for creating the appropriate processing context (e.g., a UnitOfWork) for each dead letter being processed. The DeadLetter and its message will be added as resources to the processing context via DeadLetter.RESOURCE_KEY and Message.RESOURCE_KEY respectively. The ProcessingContext that can be passed on process(Predicate, ProcessingContext) and processAny(ProcessingContext) allows for effective resource management to the downstream SequencedDeadLetterQueue and actual dead-letter processing.

Since:
4.6.0
Author:
Steven van Beelen
  • Method Details

    • process

      CompletableFuture<Boolean> process(Predicate<DeadLetter<? extends M>> sequenceFilter)
      Process a sequence of dead letters matching the given sequenceFilter.

      Note that only a single matching sequence is processed! Furthermore, the sequenceFilter is only invoked for the first letter of a sequence, as the first entry blocks the entire sequence.

      Each dead letter is processed in its own processing context (typically a UnitOfWork), which will have the DeadLetter added as a resource (via DeadLetter.RESOURCE_KEY). The message from the dead letter is also added to the context via Message.RESOURCE_KEY.

      Parameters:
      sequenceFilter - a filter for the first dead letter entries of each sequence
      Returns:
      a CompletableFuture with true if at least one dead letter was processed successfully, false otherwise
    • process

      default CompletableFuture<Boolean> process(Predicate<DeadLetter<? extends M>> sequenceFilter, @Nullable ProcessingContext context)
      Process a sequence of dead letters matching the given sequenceFilter.

      The context can be provided optionally to support effective resource management down stream in the SequencedDeadLetterQueue and dead-letter processing task.

      Parameters:
      sequenceFilter - a filter for the first dead letter entries of each sequence
      context - the processing context in which to process the dead letters, if any
      Returns:
      a CompletableFuture with true if at least one dead letter was processed successfully, false otherwise
    • processAny

      default CompletableFuture<Boolean> processAny()
      Process any sequence of dead letters belonging to this component.

      Note that only a single matching sequence is processed!

      Each dead letter is processed in its own processing context (typically a UnitOfWork), which will have the DeadLetter added as a resource (via DeadLetter.RESOURCE_KEY). The message from the dead letter is also added to the context via Message.RESOURCE_KEY.

      Returns:
      a CompletableFuture with true if at least one dead letter was processed successfully, false otherwise
    • processAny

      default CompletableFuture<Boolean> processAny(@Nullable ProcessingContext context)
      Process any sequence of dead letters belonging to this component in the given context.

      The context can be provided optionally to support effective resource management down stream in the SequencedDeadLetterQueue and dead-letter processing task.

      Parameters:
      context - the processing context in which to process the dead letters, if any
      Returns:
      a CompletableFuture with true if at least one dead letter was processed successfully, false otherwise