Symfony版本:4.3.2
PHP:7.2.20
我正在尝试将Messenger组件与理论传输一起异步使用。我已经在Symfony Flex的帮助下通过composer require messenger
安装了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
因此Symfony\Component\Messenger\Command\ConsumeMessagesCommand
中的$ routableBus为空,这在实例化Worker时导致崩溃。
答案 0 :(得分:0)
该问题的答案也是将symfony/framework-bundle
更新为4.3.2
。由于框架束的Messenger组件版本composer.json
的{{1}}中存在错误,因此未强制执行。当结合使用旧版本的4.3.2
和Messenger组件的symfony/framework-bundle
时,这会导致默认配置错误。这是由于安装了4.3.2
个框架捆绑包引起的错误。
有关它的更多信息,可以在GitHub问题跟踪器上找到:
https://github.com/symfony/symfony/issues/32738
更新4.3.0
后,一切正常。