rva-vzw / krakboem-bundle
rva-vzw/krakboem 的 Symfony messenger 实现
v0.1.2
2024-01-11 21:29 UTC
Requires
- doctrine/doctrine-bundle: ^2.11
- doctrine/orm: ^2.17
- rva-vzw/krakboem: ^1.0
- symfony/http-kernel: ^6.4
- symfony/messenger: ^6.4
- webmozart/assert: ^1.11
Requires (Dev)
- friendsofphp/php-cs-fixer: ^3.46
- phpstan/phpstan: ^1.10
- vimeo/psalm: ^5.18
This package is not auto-updated.
Last update: 2024-09-19 23:55:31 UTC
README
我尝试创建一个用于 rva-vzw/krakboem 的 Symfony bundle
(c) Johan Vervloet 2023, 2024
许可协议为 AGPL v3 或更高版本,详见 AGPL v3 许可协议
本 bundle 尝试提供我在 rva-vzw/krakboem 中创建的事件源接口的 Symfony 实现。
我使用 symfony messenger 用于消息总线,并使用 doctrine 用于事件存储。(这或许不是最优解。但至少目前可以这样做。)我还尝试将规范化移动到 bundle 中,但尚未成功(也许还未?)
如果您安装此 bundle,它将为您设置服务容器。但由于我尚未找到如何在 bundle 中配置 doctrine 和 messenger 的方法,因此这需要手动完成。
关于此(实验性)bundle 的文档很少。但您可以查看以下项目如何使用它:
安装说明
composer require rva-vzw/krakboem-bundle
配置
messenger
消息总线的配置
# config/packages/messenger.yaml
framework:
messenger:
default_bus: messenger.bus.commands
buses:
messenger.bus.events:
default_middleware: allow_no_handlers
middleware:
- 'RvaVzw\KrakBoemBundle\Messenger\EventStoreMiddleware'
messenger.bus.commands:
messenger.bus.replay:
default_middleware: allow_no_handlers
您还需要标记您的监听器,以便正确的消息总线处理正确的消息
# config/services.yaml:
services:
_instanceof:
RvaVzw\KrakBoem\EventSourcing\EventListener\EventListener:
tags: [{ name: messenger.message_handler, bus: messenger.bus.events }]
RvaVzw\KrakBoem\EventSourcing\Replay\Replayable:
tags: [{ name: messenger.message_handler, bus: messenger.bus.replay }]
RvaVzw\KrakBoem\Cqrs\CommandBus\CommandHandler:
tags: [{ name: messenger.message_handler, bus: messenger.bus.commands }]
doctrine
关于 doctrine,我通常配置两个实体管理器:一个用于事件存储,另一个用于读取模型。这是我为 krakboem 使用的配置。
# config/packages/doctrine.yaml:
doctrine:
dbal:
url: '%env(resolve:DATABASE_URL)%'
# IMPORTANT: You MUST configure your server version,
# either here or in the DATABASE_URL env var (see .env file)
#server_version: '15'
orm:
auto_generate_proxy_classes: true
default_entity_manager: read_model
proxy_dir: '%kernel.build_dir%/doctrine/orm/Proxies'
entity_managers:
read_model:
naming_strategy: doctrine.orm.naming_strategy.underscore
auto_mapping: true
connection: default
mappings:
ReadModel:
is_bundle: false
dir: '%kernel.project_dir%/src/Infrastructure/ReadModel'
prefix: 'App\Infrastructure\ReadModel'
alias: ReadModel
event_store:
naming_strategy: doctrine.orm.naming_strategy.underscore
connection: default
mappings:
EventStore:
is_bundle: false
type: attribute
dir: '%kernel.project_dir%/vendor/rva-vzw/krakboem-bundle/src/Doctrine'
prefix: 'RvaVzw\KrakBoemBundle\Doctrine'
alias: EventStore