多个公共汽车
编辑本页多个公共汽车
在构建应用程序时,一个常见的体系结构是将命令与查询分离。命令是执行某些操作和查询获取数据的操作。这称为CQRS(命令查询责任隔离)。参见马丁·福勒的关于CQRS的文章了解更多。该体系结构可以通过定义多个总线与Messenger组件一起使用。
一个命令总线和a有点不同吗查询公共汽车.例如,命令总线通常不提供任何结果,查询总线很少是异步的。您可以使用中间件来配置这些总线及其规则。
将动作和反应分开可能也是一个好主意事件总线.事件总线可以有零个或多个订阅者。
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
框架:信使:#注入MessageBusInterface时将要注入的总线default_bus:command.bus公共汽车:command.bus:中间件:-验证-doctrine_transactionquery.bus:中间件:-验证event.bus:default_middleware:启用:真正的#设置"allow_no_handlers"为true(默认为false#不为该总线配置处理程序而不抛出异常allow_no_handlers:假# set "allow_no_senders"为false(默认为true)抛出异常#如果此总线没有配置发送方allow_no_senders:真正的中间件:-验证
6.2
的allow_no_senders
选项在Symfony 6.2中引入。ob娱乐下载
这将创建三个新的服务:
command.bus
:可自动连接MessageBusInterface输入提示(因为这是default_bus
);query.bus
:可自动连接MessageBusInterface queryBus美元
;event.bus
:可自动连接MessageBusInterface eventBus美元
.
限制每个总线的处理程序
默认情况下,每个处理程序都可用于处理消息所有你的巴士。方法将消息发送到错误的总线而不发生错误,可以将每个处理程序限制为特定的总线messenger.message_handler
标签:
- YAML
- XML
- PHP
1 2 3 4 5 6 7
#配置/ services.yaml服务:应用MessageHandler \ \ SomeCommandHandler:标签:[{名称:messenger.message_handler,总线:command.bus})#防止处理程序被注册两次(或者您可以删除#自动配置的MessageHandlerInterface用于查找处理程序)可以使用autoconfigure:假
这条路,应用MessageHandler \ \ SomeCommandHandler
处理程序只会被command.bus
公共汽车。
类也可以自动将此标记添加到许多类中_instanceof服务配置.使用它,你可以基于实现的接口确定消息总线:
- YAML
- XML
- PHP
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16
#配置/ services.yaml服务:#……_instanceof:#所有实现CommandHandlerInterface的服务#将在命令中注册。公交巴士应用MessageHandler \ \ CommandHandlerInterface:标签:-{名称:messenger.message_handler,总线:command.bus}#而那些实现QueryHandlerInterface的将是#在查询上注册。公交巴士应用MessageHandler \ \ QueryHandlerInterface:标签:-{名称:messenger.message_handler,总线:query.bus}
调试总线
的调试:信使
命令列出每个总线的可用消息和处理程序。您还可以通过提供其名称作为参数,将列表限制为特定的总线。
12 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
$php bin/console debug:messenger messenger =========命令。公共汽车----------- The following messages can be dispatched: --------------------------------------------------------------------------------------- App\Message\DummyCommand handled by App\MessageHandler\DummyCommandHandler App\Message\MultipleBusesMessage handled by App\MessageHandler\MultipleBusesMessageHandler --------------------------------------------------------------------------------------- query.bus --------- The following messages can be dispatched: --------------------------------------------------------------------------------------- App\Message\DummyQuery handled by App\MessageHandler\DummyQueryHandler App\Message\MultipleBusesMessage handled by App\MessageHandler\MultipleBusesMessageHandler ---------------------------------------------------------------------------------------
提示
从Symfoob娱乐下载ny 5.1开始,该命令还将显示消息和处理程序类的PHPDoc描述。
此工作,包括代码示例,是根据创作共用BY-SA 3.0许可证。