Symfony Messenger 4.3-从原理传输中消费消息失败(引发异常)

时间:2019-07-25 12:54:22

标签: symfony symfony-4.3 symfony-messenger

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时导致崩溃。

1 个答案:

答案 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后,一切正常。