n3ttech / messeging
CQRS + ES for php
1.3.5
2019-12-06 05:17 UTC
Requires
- php: >=7.3
- ext-json: *
- n3ttech/valuing: ^1.1
- psr/container: ^1.0
- ramsey/uuid: ^3.8
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.15
- n3ttech/checking: ^1.1
- phpstan/phpstan: ^0.11.19
- phpunit/phpunit: ^8.4
- squizlabs/php_codesniffer: ^3.5
README
## 处理 CQRS 和 ES 的库
- 定义事件总线
use N3tt3ch\Messaging\Event; $eventRouterFactory = new Event\EventRouting\EventRouterFactory(); $eventTransporterFactory = new Event\EventTransporting\EventTransporterFactory( $eventRouterFactory->fromDirectory('path to directory with event map'), new Event\EventSourcing\EventProjectionProvider($container) ); $eventBus = new Event\EventBus($eventTransporterFactory->createDefault());
进一步,我们需要创建事件存储和事件流
use N3tt3ch\Messaging\Event; use N3tt3ch\Messaging\Snapshot; $snapshotStorage = new Snapshot\SnapshotStore\SnapshotStorage($container->get(Snapshot\Persist\SnapshotRepository::class)); $eventStorageFactory = new Event\EventStore\EventStorageFactory($container->get(Event\Persist\EventStreamRepository::class)); $eventStorage = $eventStorageFactory->create($eventBus); $someAggregateRepository = new SomeAggregateRepository($eventStorage, $snapshotStorage);
- 定义命令总线
use N3tt3ch\Messaging\Command; $commandHandlerProvider = new Command\CommandHandling\CommandHandlerProvider($container); $commandRouterFactory = new Command\CommandRouting\CommandRouterFactory($commandHandlerProvider); $commandTransporterFactory = new Command\CommandTransporting\CommandTransporterFactory($commandRouterFactory->createDefault()); $commandBus = new Command\CommandBus($commandTransporterFactory->createDefault());
- 定义查询总线
use N3tt3ch\Messaging\Query; $queryHandlerProvider = new Query\QueryHandling\QueryHandlerProvider($container); $queryRouterFactory = new Query\QueryRouting\QueryRouterFactory($queryHandlerProvider); $queryTransporterFactory = new Query\QueryTransporting\QueryTransporterFactory($queryRouterFactory->createDefault()); $queryBus = new Query\QueryBus($queryTransporterFactory->createDefault());
您可以使用自己的消息传输。您可以使用自己的消息命名策略。
请查看传输和路由工厂。