public abstract class ReadSideProcessor<Event extends AggregateEvent<Event>> extends Object
Read side processors consume events produced by PersistentEntity
instances, and update some read side
data store that is optimized for queries.
The events they consume must be tagged, and a read side is able to consume events of one or
more tags. Events are usually tagged according to some supertype of event, for example, events
may be tagged as Order
events. They may also be tagged according to a hash of the ID
of the entity associated with the event - this allows read side event handling to be sharded
across many nodes. Tagging is done using AggregateEventTag
.
Read side processors are responsible for tracking what events they have already seen. This is done using offsets, which are sequential values associated with each event. Note that end users typically will not need to handle offsets themselves, this will be provided by Lagom support specific to the read side datastore, and end users can just focus on handling the events themselves.
Modifier and Type | Class and Description |
---|---|
static class |
ReadSideProcessor.ReadSideHandler<Event extends AggregateEvent<Event>>
An read side offset processor.
|
Constructor and Description |
---|
ReadSideProcessor() |
Modifier and Type | Method and Description |
---|---|
abstract org.pcollections.PSequence<AggregateEventTag<Event>> |
aggregateTags()
The tags to aggregate.
|
abstract ReadSideProcessor.ReadSideHandler<Event> |
buildHandler()
Return a
ReadSideProcessor.ReadSideHandler for the given offset type. |
String |
readSideName()
The name of this read side.
|
public abstract ReadSideProcessor.ReadSideHandler<Event> buildHandler()
ReadSideProcessor.ReadSideHandler
for the given offset type.public abstract org.pcollections.PSequence<AggregateEventTag<Event>> aggregateTags()
This must return at least one tag to aggregate. Read side processors will be sharded over the cluster by these tags, so if events are tagged by a shard key, the read side processing load can be distributed across the cluster.
public String readSideName()
This name should be unique among the read sides and entity types of the service. By default it is using the short class name of the concrete `ReadSideProcessor` class. Subclasses may override to define other type names. It is wise to override and retain the original name when the class name is changed because this name is used to identify read sides throughout the cluster.