多个公共汽车
编辑该页面警告:你浏览的文档欧宝官网下载appob娱乐下载Symfony 4.1,不再维护。
读这个页面的更新版本Symfob娱乐下载ony 6.2(当前的稳定版本)。
多个公共汽车
常见的体系结构在构建应用程序是独立的命令从查询。命令的行动做一些和查询获取数据。这叫做CQRS(命令查询责任隔离)。看到马丁篇关于CQRS要学习更多的知识。这种架构可以用信使一起组件通过定义多个公共汽车。
一个命令总线从一个有点不同查询公共汽车。例如,命令公交车通常不提供任何结果和查询公交车很少是异步的。您可以配置这些公共汽车和他们的规则,利用中间件。
它还可能是一个好主意从反应通过引入一个单独行动事件总线。事件总线可以有零个或多个订阅者。
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
框架:信使:#公共汽车就是注射时注射MessageBusInterfacedefault_bus:messenger.bus.commands公共汽车:messenger.bus.commands:中间件:- - - - - -验证- - - - - -doctrine_transactionmessenger.bus.queries:中间件:- - - - - -验证messenger.bus.events:中间件:- - - - - -allow_no_handler- - - - - -验证
这将生成messenger.bus.commands
,messenger.bus.queries
和messenger.bus.events
服务,您可以将您的服务。
类型提示和连接
连接是一个很好的特性,允许您以减少所需的配置创建服务容器。通过使用MessageBusInterface
作为参数typehint服务,默认配置总线将被注入(即messenger.bus.commands
在上面的例子中)。
在处理多个公共汽车时,你可以使用DependencyInjection
组件的绑定功能来澄清哪个总线将被注入基于参数的名称:
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9
#配置/ services.yaml服务:_defaults:#……绑定:$ commandBus:“@messenger.bus.commands”$ queryBus:“@messenger.bus.queries”$ eventBus:“@messenger.bus.events”
限制每辆车处理程序
默认情况下,每个处理程序将被用于处理消息所有你的巴士。防止调度消息错了公共汽车没有一个错误,您可以限制每个处理程序到一个特定的总线使用的信使。message_handler的标签:
- YAML
- XML
- PHP
1 2 3 4
#配置/ services.yaml服务:应用MessageHandler \ \ SomeCommandHandler:标签:[{名称:messenger.message_handler,总线:messenger.bus.commands})
这种方式,应用MessageHandler \ \ SomeCommandHandler
处理程序才会知道的messenger.bus.commands
公共汽车。
你也可以自动添加这个标签类遵循命名约定和注册的所有处理程序服务的名字与正确的标签:
- YAML
- XML
- PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14
#配置/ services.yaml#把这个‘应用’行后注册你所有的服务command_handlers:名称空间:应用MessageHandler \ \资源:' % kernel.project_dir MessageHandler % / src / / * CommandHandler.php”标签:- - - - - -{名称:messenger.message_handler,总线:messenger.bus.commands}query_handlers:名称空间:应用MessageHandler \ \资源:' % kernel.project_dir MessageHandler % / src / / * QueryHandler.php”标签:- - - - - -{名称:messenger.message_handler,总线:messenger.bus.queries}