Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Prooph,我如何通过本地命令总线路由一些消息,而通过消息生成器路由其他消息_Php_Cqrs_Prooph - Fatal编程技术网

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);