Interface SequencingPolicy
- Type Parameters:
T- The type of object representing the processing instruction for the event.
- All Known Implementing Classes:
ExtractionSequencingPolicy,FallbackSequencingPolicy,FullConcurrencyPolicy,HierarchicalSequencingPolicy,MetadataSequencingPolicy,PropertySequencingPolicy,SequentialPerAggregatePolicy,SequentialPolicy
- Functional Interface:
- This is a functional interface and can therefore be used as the assignment target for a lambda expression or method reference.
Interface to a policy definition for concurrent processing, for example event handling.
Some implementations are provided by default:
SequentialPolicy: Requires that all tasks are handled in the order they arrive at the processor. This also means that at most 1 thread is processing tasks for this processor at any time.FullConcurrencyPolicy: Allows each tasks to be handled independently of any other tasks. Tasks processing will typically start in the same order the tasks were scheduled in, although no guarantees can be given about the actual processing order.SequentialPerAggregatePolicy: Default policy. Will force events (only supports Event Handling tasks) generated by the same aggregate to be handled sequentially. At most one thread will be processing events of a single aggregate at any time
- Since:
- 0.3
- Author:
- Allard Buijze
-
Method Summary
Modifier and TypeMethodDescriptiongetSequenceIdentifierFor(EventMessage event, ProcessingContext context) Returns the sequence identifier for the givenevent.
-
Method Details
-
getSequenceIdentifierFor
Optional<Object> getSequenceIdentifierFor(@Nonnull EventMessage event, @Nonnull ProcessingContext context) Returns the sequence identifier for the givenevent. When two events have the same identifier (as defined by their equals method), they will be executed sequentially. AOptional#empty()value indicates that there are no sequencing requirements for the handling of this event.The
Optional#empty()should ONLY be returned when the policy cannot determine a sequence identifier for the given event. This typically happens when the policy is not applicable for the specific event type. WhenOptional#empty()is returned, it is up to the component using this policy to provide a default behavior, use another policy, or throw an exception / react in any other way - as appropriate.- Parameters:
event- The event for which to get the sequencing identifier.context- The processing context in which the event is being handled. This instance of theProcessingContextdoesn't allow you to register phases actions by for exampleProcessingLifecycle.on(org.axonframework.messaging.core.unitofwork.ProcessingLifecycle.Phase, java.util.function.Function<org.axonframework.messaging.core.unitofwork.ProcessingContext, java.util.concurrent.CompletableFuture<?>>)or retrieving components byApplicationContext.component(java.lang.Class<C>).- Returns:
- A sequence identifier for the given event, or
Optional#empty()if this policy cannot determine a sequence identifier for the given event.
-