public class LeveldbReadJournal extends java.lang.Object implements ReadJournal, AllPersistenceIdsQuery, CurrentPersistenceIdsQuery, EventsByPersistenceIdQuery, CurrentEventsByPersistenceIdQuery, EventsByTagQuery, EventsByTagQuery2, CurrentEventsByTagQuery, CurrentEventsByTagQuery2
ReadJournal
implementation for LevelDB.
It is retrieved with:
LeveldbReadJournal queries =
PersistenceQuery.get(system).getReadJournalFor(LeveldbReadJournal.class, LeveldbReadJournal.Identifier());
Corresponding Scala API is in LeveldbReadJournal
.
Configuration settings can be defined in the configuration section with the
absolute path corresponding to the identifier, which is "akka.persistence.query.journal.leveldb"
for the default Identifier()
. See reference.conf
.
Constructor and Description |
---|
LeveldbReadJournal(LeveldbReadJournal scaladslReadJournal) |
Modifier and Type | Method and Description |
---|---|
Source<java.lang.String,NotUsed> |
allPersistenceIds()
allPersistenceIds is used for retrieving all persistenceIds of all
persistent actors. |
Source<EventEnvelope,NotUsed> |
currentEventsByPersistenceId(java.lang.String persistenceId,
long fromSequenceNr,
long toSequenceNr)
Same type of query as
eventsByPersistenceId(java.lang.String, long, long) but the event stream
is completed immediately when it reaches the end of the "result set". |
Source<EventEnvelope,NotUsed> |
currentEventsByTag(java.lang.String tag,
long offset)
Same type of query as
EventsByTagQuery.eventsByTag(java.lang.String, long) but the event stream
is completed immediately when it reaches the end of the "result set". |
Source<EventEnvelope2,NotUsed> |
currentEventsByTag(java.lang.String tag,
Offset offset)
Same type of query as
eventsByTag(java.lang.String, akka.persistence.query.Offset) but the event stream
is completed immediately when it reaches the end of the "result set". |
Source<java.lang.String,NotUsed> |
currentPersistenceIds()
Same type of query as
allPersistenceIds() but the stream
is completed immediately when it reaches the end of the "result set". |
Source<EventEnvelope,NotUsed> |
eventsByPersistenceId(java.lang.String persistenceId,
long fromSequenceNr,
long toSequenceNr)
eventsByPersistenceId is used for retrieving events for a specific
PersistentActor identified by persistenceId . |
Source<EventEnvelope,NotUsed> |
eventsByTag(java.lang.String tag,
long offset)
Query events that have a specific tag.
|
Source<EventEnvelope2,NotUsed> |
eventsByTag(java.lang.String tag,
Offset offset)
eventsByTag is used for retrieving events that were marked with
a given tag, e.g. |
static java.lang.String |
Identifier()
The default identifier for
LeveldbReadJournal to be used with
PersistenceQuery.getReadJournalFor(java.lang.Class<T>, java.lang.String) . |
public LeveldbReadJournal(LeveldbReadJournal scaladslReadJournal)
public static final java.lang.String Identifier()
LeveldbReadJournal
to be used with
PersistenceQuery.getReadJournalFor(java.lang.Class<T>, java.lang.String)
.
The value is "akka.persistence.query.journal.leveldb"
and corresponds
to the absolute path to the read journal configuration entry.
public Source<java.lang.String,NotUsed> allPersistenceIds()
allPersistenceIds
is used for retrieving all persistenceIds
of all
persistent actors.
The returned event stream is unordered and you can expect different order for multiple executions of the query.
The stream is not completed when it reaches the end of the currently used persistenceIds
,
but it continues to push new persistenceIds
when new persistent actors are created.
Corresponding query that is completed when it reaches the end of the currently
currently used persistenceIds
is provided by currentPersistenceIds()
.
The LevelDB write journal is notifying the query side as soon as new persistenceIds
are
created and there is no periodic polling or batching involved in this query.
The stream is completed with failure if there is a failure in executing the query in the backend journal.
allPersistenceIds
in interface AllPersistenceIdsQuery
public Source<java.lang.String,NotUsed> currentPersistenceIds()
allPersistenceIds()
but the stream
is completed immediately when it reaches the end of the "result set". Persistent
actors that are created after the query is completed are not included in the stream.currentPersistenceIds
in interface CurrentPersistenceIdsQuery
public Source<EventEnvelope,NotUsed> eventsByPersistenceId(java.lang.String persistenceId, long fromSequenceNr, long toSequenceNr)
eventsByPersistenceId
is used for retrieving events for a specific
PersistentActor
identified by persistenceId
.
You can retrieve a subset of all events by specifying fromSequenceNr
and toSequenceNr
or use 0L
and Long.MaxValue
respectively to retrieve all events. Note that
the corresponding sequence number of each event is provided in the
EventEnvelope
, which makes it possible to resume the
stream at a later point from a given sequence number.
The returned event stream is ordered by sequence number, i.e. the same order as the
PersistentActor
persisted the events. The same prefix of stream elements (in same order)
are returned for multiple executions of the query, except for when events have been deleted.
The stream is not completed when it reaches the end of the currently stored events,
but it continues to push new events when new events are persisted.
Corresponding query that is completed when it reaches the end of the currently
stored events is provided by currentEventsByPersistenceId(java.lang.String, long, long)
.
The LevelDB write journal is notifying the query side as soon as events are persisted, but for
efficiency reasons the query side retrieves the events in batches that sometimes can
be delayed up to the configured refresh-interval
.
The stream is completed with failure if there is a failure in executing the query in the backend journal.
eventsByPersistenceId
in interface EventsByPersistenceIdQuery
persistenceId
- (undocumented)fromSequenceNr
- (undocumented)toSequenceNr
- (undocumented)public Source<EventEnvelope,NotUsed> currentEventsByPersistenceId(java.lang.String persistenceId, long fromSequenceNr, long toSequenceNr)
eventsByPersistenceId(java.lang.String, long, long)
but the event stream
is completed immediately when it reaches the end of the "result set". Events that are
stored after the query is completed are not included in the event stream.currentEventsByPersistenceId
in interface CurrentEventsByPersistenceIdQuery
persistenceId
- (undocumented)fromSequenceNr
- (undocumented)toSequenceNr
- (undocumented)public Source<EventEnvelope2,NotUsed> eventsByTag(java.lang.String tag, Offset offset)
eventsByTag
is used for retrieving events that were marked with
a given tag, e.g. all events of an Aggregate Root type.
To tag events you create an EventAdapter
that wraps the events
in a Tagged
with the given tags
.
You can retrieve a subset of all events by specifying offset
, or use 0L
to retrieve all
events with a given tag. The offset
corresponds to an ordered sequence number for
the specific tag. Note that the corresponding offset of each event is provided in the
EventEnvelope
, which makes it possible to resume the
stream at a later point from a given offset.
In addition to the offset
the EventEnvelope
also provides persistenceId
and sequenceNr
for each event. The sequenceNr
is the sequence number for the persistent actor with the
persistenceId
that persisted the event. The persistenceId
+ sequenceNr
is an unique
identifier for the event.
The returned event stream is ordered by the offset (tag sequence number), which corresponds to the same order as the write journal stored the events. The same stream elements (in same order) are returned for multiple executions of the query. Deleted events are not deleted from the tagged event stream.
The stream is not completed when it reaches the end of the currently stored events,
but it continues to push new events when new events are persisted.
Corresponding query that is completed when it reaches the end of the currently
stored events is provided by currentEventsByTag(java.lang.String, akka.persistence.query.Offset)
.
The LevelDB write journal is notifying the query side as soon as tagged events are persisted, but for
efficiency reasons the query side retrieves the events in batches that sometimes can
be delayed up to the configured refresh-interval
.
The stream is completed with failure if there is a failure in executing the query in the backend journal.
eventsByTag
in interface EventsByTagQuery2
tag
- (undocumented)offset
- (undocumented)public Source<EventEnvelope,NotUsed> eventsByTag(java.lang.String tag, long offset)
EventsByTagQuery
The consumer can keep track of its current position in the event stream by storing the
offset
and restart the query from a given offset
after a crash/restart.
The exact meaning of the offset
depends on the journal and must be documented by the
read journal plugin. It may be a sequential id number that uniquely identifies the
position of each event within the event stream. Distributed data stores cannot easily
support those semantics and they may use a weaker meaning. For example it may be a
timestamp (taken when the event was created or stored). Timestamps are not unique and
not strictly ordered, since clocks on different machines may not be synchronized.
The returned event stream should be ordered by offset
if possible, but this can also be
difficult to fulfill for a distributed data store. The order must be documented by the
read journal plugin.
The stream is not completed when it reaches the end of the currently stored events,
but it continues to push new events when new events are persisted.
Corresponding query that is completed when it reaches the end of the currently
stored events is provided by CurrentEventsByTagQuery.currentEventsByTag(java.lang.String, long)
.
eventsByTag
in interface EventsByTagQuery
tag
- (undocumented)offset
- (undocumented)public Source<EventEnvelope2,NotUsed> currentEventsByTag(java.lang.String tag, Offset offset)
eventsByTag(java.lang.String, akka.persistence.query.Offset)
but the event stream
is completed immediately when it reaches the end of the "result set". Events that are
stored after the query is completed are not included in the event stream.currentEventsByTag
in interface CurrentEventsByTagQuery2
tag
- (undocumented)offset
- (undocumented)public Source<EventEnvelope,NotUsed> currentEventsByTag(java.lang.String tag, long offset)
CurrentEventsByTagQuery
EventsByTagQuery.eventsByTag(java.lang.String, long)
but the event stream
is completed immediately when it reaches the end of the "result set". Events that are
stored after the query is completed are not included in the event stream.currentEventsByTag
in interface CurrentEventsByTagQuery
tag
- (undocumented)offset
- (undocumented)