Skip to main content

nexus-persistence

Core persistence abstractions for Nexus actors: event sourcing, durable state, effects, recovery, and in-memory stores for testing.

What's in this package

Event-sourced actors (Monadial\Nexus\Persistence\EventSourced\)

Durable-state actors (Monadial\Nexus\Persistence\State\)

Store interfaces

RecoveryReplayFilter, ReplayFilterMode (Fail, Warn, RepairByDiscardOld, Off)

ExceptionsRecoveryException, ConcurrentModificationException, WriterConflictException

Install

composer require nexus-actors/persistence

Quick example

src/Actor/OrderActor.php
use Monadial\Nexus\Persistence\EventSourced\EventSourcedBehavior;
use Monadial\Nexus\Persistence\EventSourced\Effect;
use Monadial\Nexus\Persistence\EventSourced\SnapshotStrategy;
use Monadial\Nexus\Persistence\InMemoryEventStore;
use Monadial\Nexus\Persistence\PersistenceId;

$behavior = EventSourcedBehavior::create(
PersistenceId::of('Order', $orderId),
new OrderState(),
commandHandler: fn($state, $cmd) => match(true) {
$cmd instanceof PlaceOrder => Effect::persist(new OrderPlaced($cmd->id)),
default => Effect::unhandled(),
},
eventHandler: fn($state, $event) => $state->apply($event),
)
->withEventStore(new InMemoryEventStore())
->withSnapshotStrategy(SnapshotStrategy::everyN(10))
->toBehavior();

See also