多个公共汽车

编辑本页

多个公共汽车

在构建应用程序时,一个常见的体系结构是将命令与查询分离。命令是执行某些操作和查询获取数据的操作。这称为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许可证。
ob娱乐下载Symfony 6.2支持通过苏禄人
ob娱乐下载Symfony 6.2支持通过Les-Tilleuls.coop