Symfony Messenger 4.3 - 从原则传输中获取消息失败(抛出异常)

Symfony Messenger 4.3 - Consuming messages from doctrine transport fails (exception thrown)

Symfony 版本:4.3.2

PHP: 7.2.20

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

我在 .env.local 中通过 MESSENGER_TRANSPORT_DSN=doctrine://default 激活了学说传输。 在 messenger 配置中也配置了传输:

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

在控制器中使用 $this->dispatchMessage(new SomeNotification('some content')); 发送消息时一切正常。学说传输的 table messenger_messages 自动创建,消息正确保存在 table 中。

尝试使用 ./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时崩溃

问题的答案是将 symfony/framework-bundle 也更新为 4.3.2。由于信使组件 composer.json 中的错误,框架包的 4.3.2 版本未强制执行。这会导致在将旧版本的 symfony/framework-bundle 与信使组件的 4.3.2 结合使用时出现默认配置错误。这解释了我的错误,因为我安装了 4.3.0 框架包。

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

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

更新 symfony/framework-bundle 后一切正常。