1

Symfony 版本:4.3.2

PHP:7.2.20

我正在尝试将信使组件与学说传输异步使用。我在composer require messengerSymfony Flex 的帮助下安装了 Messenger。

我已经MESSENGER_TRANSPORT_DSN=doctrine://default.env.local. 在 messenger 配置中,传输也被配置:

framework:
    messenger:   
        transports:
            async: '%env(MESSENGER_TRANSPORT_DSN)%'
        routing:
            'App\Message\SomeNotification': async

在控制器中发送消息时,$this->dispatchMessage(new SomeNotification('some content'));一切都很好。教义传输表messenger_messages自动创建,消息正确保存在表中。

当尝试使用消息时,./bin/console messenger:consume async我收到以下错误:

 [Symfony\Component\Debug\Exception\FatalThrowableError]                                                                                                                                                                                                               
  Argument 2 passed to Symfony\Component\Messenger\Worker::__construct() must implement interface Symfony\Component\Messenger\MessageBusInterface, string given, called in ..../vendor/symfony/messenger/  
  Command/ConsumeMessagesCommand.php on line 190       

所以里面的 $routeableBusSymfony\Component\Messenger\Command\ConsumeMessagesCommand是空的,这会导致在实例化 Worker 时崩溃。

4

1 回答 1

1

这个问题的答案也是更新symfony/framework-bundle4.3.2。由于框架包composer.json的 messenger 组件版本4.3.2中存在错误,因此未强制执行。symfony/framework-bundle当使用旧版本的4.3.2Messenger 组件时,这会导致默认配置错误。这解释了我的错误,因为我4.3.0安装了框架包。

可以在 GitHub 问题跟踪器上找到更多相关信息:

https://github.com/symfony/symfony/issues/32738

更新后symfony/framework-bundle一切都按预期工作。

于 2019-07-25T14:44:19.270 回答