Journal plugin
The journal plugin enables storing and loading events for event sourced persistent actors.
Schema
The event_journal
table and event_journal_slice_idx
index need to be created in the configured database, see schema definition in Creating the schema.
The event_journal_slice_idx
index is only needed if the slice based queries are used.
Configuration
To enable the journal plugin to be used by default, add the following line to your Akka application.conf
:
akka.persistence.journal.plugin = "akka.persistence.r2dbc.journal"
It can also be enabled with the journalPluginId
for a specific EventSourcedBehavior
and multiple plugin configurations are supported.
See also Connection configuration.
Reference configuration
The following can be overridden in your application.conf
for the journal specific settings:
sourceakka.persistence.r2dbc {
journal {
class = "akka.persistence.r2dbc.journal.R2dbcJournal"
# name of the table to use for events
table = "event_journal"
# Otherwise it would be a pinned dispatcher, see https://github.com/akka/akka/issues/31058
plugin-dispatcher = "akka.actor.default-dispatcher"
# event replay is using akka.persistence.r2dbc.query.buffer-size
# Enable this to reduce latency of eventsBySlices. The persisted events will be
# published as Akka messages and consumed directly by running eventsBySlices
# queries. Tradeoff is more CPU and network resources that are used. The events
# must still be retrieved from the database, but at a lower polling frequency,
# because delivery of published messages are not guaranteed.
publish-events = off
# replay filter not needed for this plugin
replay-filter.mode = off
}
}
Deletes
The journal supports deletes through hard deletes, which means the journal entries are actually deleted from the database. There is no materialized view with a copy of the event so make sure to not delete events too early if they are used from projections or queries.