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.

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
    • 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