Php Prooph,我如何通过本地命令总线路由一些消息,而通过消息生成器路由其他消息
我已经让命令总线启动并运行了一段时间,并开发了很多应用程序。现在,我希望异步处理它们的一些命令。我添加了制作人,这一切似乎都起作用了。我只想将窗帘命令发送到异步总线,其余命令在本地处理 这是可能的,我怎么做呢。 我已经编写了一个命令路由器,但是在命令总线处理完消息之后Php Prooph,我如何通过本地命令总线路由一些消息,而通过消息生成器路由其他消息,php,cqrs,prooph,Php,Cqrs,Prooph,我已经让命令总线启动并运行了一段时间,并开发了很多应用程序。现在,我希望异步处理它们的一些命令。我添加了制作人,这一切似乎都起作用了。我只想将窗帘命令发送到异步总线,其余命令在本地处理 这是可能的,我怎么做呢。 我已经编写了一个命令路由器,但是在命令总线处理完消息之后 谢谢你我不知道如何使用prooph实现这一点(特别是因为你没有提供任何代码示例),但一般来说:可以在Mathias Noback的MessageBus存储库中找到一种很好的方法 您可以创建一个中间件来检查,例如标记接口(如上面链接
谢谢你我不知道如何使用prooph实现这一点(特别是因为你没有提供任何代码示例),但一般来说:可以在Mathias Noback的MessageBus存储库中找到一种很好的方法 您可以创建一个中间件来检查,例如标记接口(如上面链接的示例所示): 然后,只需标记命令,让它实现正确的接口,并在命令总线的正确位置添加中间件 如果您有多个命令总线,如您的问题所示。然后,您可能希望使用某种CommandResolver来匹配命令,例如,通过命令的类名与相应的命令总线进行匹配。再次查看Mathias Noback的文档,尤其是同一文档中的部分,以及 如果要设置一个总线来异步处理所有消息,可以通过将一个Prooph\ServiceBus\Plugin\MessageProducerPlugin(使用所选消息生成器初始化)连接到消息总线来实现 让我们看一个使用psb zeromq生成器的简单示例
//app bootstrap
$container = new Container;
$container['config'] = [
'prooph' => [
'zeromq_producer' => [
'dsn' => 'tcp://127.0.0.1:5555', // ZMQ Server Address.
'persistent_id' => 'example', // ZMQ Persistent ID to keep connections alive between requests.
'rpc' => false, // Use as Query Bus.
]
]
];
$factory = \Prooph\ServiceBus\Message\ZeroMQ\Container\ZeroMQMessageProducerFactory;
$zmqProducer = $factory($container);
$commandBus = new \Prooph\ServiceBus\CommandBus();
$messageProducerForwarder = new \Prooph\ServiceBus\Plugin\MessageProducerPlugin($zmqProducer);
$commandBus->utilize($messageProducerForwarder);
$echoText = new ExampleCommand('It works');
$commandBus->dispatch($echoText);
您还可以使用消息路由器插件将单个消息路由到消息生产者
注意:如果您希望异步处理特定命名空间的所有消息,那么Prooph\ServiceBus\Plugin\Router\RegexRouter是一个不错的选择。Prooph-CQRS框架的行为与SimpleBus稍有不同。我想知道我是否可以在它上公交车之前就对它进行布线,但也许在它上公交车之后进行布线可以工作。1)您使用prooph组件的框架是什么?2) 你想把它放在同一个代码库中吗?我正在用Symfony3写这个项目,你怎么说是同一个代码库?我添加了代码,通过使用消息路由器将单个消息重定向到消息生成器。这一切都可以工作,但它随后退出并尝试使用默认处理程序,即使在
$actionEvent->setParam(MessageBus::EVENT\u PARAM\u MESSAGE\u HANDLED,true)之后也是如此代码>如何停止处理ActionEvent?
//app bootstrap
$container = new Container;
$container['config'] = [
'prooph' => [
'zeromq_producer' => [
'dsn' => 'tcp://127.0.0.1:5555', // ZMQ Server Address.
'persistent_id' => 'example', // ZMQ Persistent ID to keep connections alive between requests.
'rpc' => false, // Use as Query Bus.
]
]
];
$factory = \Prooph\ServiceBus\Message\ZeroMQ\Container\ZeroMQMessageProducerFactory;
$zmqProducer = $factory($container);
$commandBus = new \Prooph\ServiceBus\CommandBus();
$messageProducerForwarder = new \Prooph\ServiceBus\Plugin\MessageProducerPlugin($zmqProducer);
$commandBus->utilize($messageProducerForwarder);
$echoText = new ExampleCommand('It works');
$commandBus->dispatch($echoText);