dinecat/cqrs

提供命令、事件和查询总线及其功能。

v4.0.1 2024-01-07 08:25 UTC

This package is auto-updated.

Last update: 2024-09-07 09:54:34 UTC


README

Symfony Messenger 组件的扩展,提供命令、查询和事件消息总线及相关功能。

在 Symfony 项目中使用

查看: https://symfony.com.cn/doc/current/messenger.html#multiple-buses-command-event-buses

在 config/packages/messenger.php (或 yaml) 中设置总线

$messenger = $framework->messenger();

$commandBus = $messenger->bus('command.bus');
$commandBus->middleware()->id('validation');
$commandBus->middleware()->id('doctrine_transaction');

$queryBus = $messenger->bus('query.bus');
$queryBus->middleware()->id('validation');

$eventBus = $messenger->bus('event.bus');
$eventBus->defaultMiddleware()->enabled(true)->allowNoHandlers(true)->allowNoSenders(true);
framework:
    messenger:
        default_bus: 'command.bus'
        buses:
            command.bus:
                middleware:
                    - 'validation'
            query.bus:
                middleware:
                    - 'validation'
            event.bus:
                default_middleware:
                    enabled: true
                    allow_no_handlers: true
                    allow_no_senders: true
                middleware: []

在 config/services.php (或 yaml) 中限制每个总线的处理器

$services
    ->instanceof(CommandHandlerInterface::class)
        ->tag('messenger.message_handler', ['bus' => 'command.bus']);
$services
    ->instanceof(QueryHandlerInterface::class)
        ->tag('messenger.message_handler', ['bus' => 'query.bus']);
$services
    ->instanceof(EventHandlerInterface::class)
        ->tag('messenger.message_handler', ['bus' => 'event.bus']);
services:
    _instanceof:
        Dinecat\CQRS\CommandBus\CommandHandlerInterface:
            tags:
                - { name: 'messenger.message_handler', bus: 'command.bus' }

        Dinecat\CQRS\QueryBus\QueryHandlerInterface:
            tags:
                - { name: 'messenger.message_handler', bus: 'query.bus' }

        Dinecat\CQRS\EventBus\EventHandlerInterface:
            tags:
                - { name: 'messenger.message_handler', bus: 'event.bus' }