event-engine/prooph-v7-event-store

事件引擎 Prooph V7 事件存储集成

v0.10.2 2023-08-30 13:41 UTC

README

事件引擎 Prooph V7 事件存储绑定

安装

composer require event-engine/prooph-v7-event-store

Prooph 绑定

待定

内存事件存储

待定

文件系统事件存储

包含一个兼容 prooph v7 的 FilesystemEventStore。它仅用于演示目的(例如在研讨会中)。

//Basic set up that's able to handle Prooph\Common\Messaging\DomainEvent
$filesystemEventStore = new \EventEngine\Prooph\V7\EventStore\FilesystemEventStore(
    'data/prooph.event_store.json', 
    \JSON_PRETTY_PRINT
    // optional MessageFactory -> defaults to FQCNMessageFactory
    // optional MessageConverter -> defaults to NoOpMessageConverter
);

//Create an empty stream
$filesystemEventStore->create(
    new \Prooph\EventStore\Stream(
        new \Prooph\EventStore\StreamName('event_stream'), 
        new ArrayIterator()
    )
);

//Can also be used together with an InMemoryProjectionManager
$projectionManager = new \EventEngine\Prooph\V7\EventStore\Projecting\InMemory\InMemoryProjectionManager(
    $filesystemEventStore,
    new \EventEngine\Persistence\InMemoryConnection()
);

$query = $projectionManager->createQuery();

$query->fromStream('event_stream')
    ->whenAny(function (array $state, \Prooph\Common\Messaging\DomainEvent $event) {
        echo "{$event->messageName()} stored in event_stream\n";
    });

$query->run();

请注意:FilesystemEventStore 和 InMemoryProjectionManager 的组合有一个缺点,即投影只能看到在运行投影时位于事件存储中的事件。如果其他 PHP 进程向存储添加事件,则这些事件在重启 PHP 进程并再次运行投影后才会对投影可见。如果需要,我们可能会在未来添加一个 FilesystemProjectionManager。