Symfony Messenger 4.3 - 从理论传输中消费消息失败(抛出异常)
Posted
技术标签:
【中文标题】Symfony Messenger 4.3 - 从理论传输中消费消息失败(抛出异常)【英文标题】:Symfony Messenger 4.3 - Consuming messages from doctrine transport fails (exception thrown) 【发布时间】:2019-12-03 18:17:10 【问题描述】: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'));
在控制器中发送消息时,一切都很好。教义传输的表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
中的$routeableBus 是空的,这会导致在实例化Worker 时崩溃。
【问题讨论】:
问题可能是failure_transport
下引用的传输不存在。只需将transport: async
复制为failed
并可能添加队列名称failed: '%env(MESSENGER_TRANSPORT_DSN)%?queue_name=failed'
@dbrumann 很抱歉,这是 Messenger 配置的复制和粘贴错误。我已经在问题中纠正了它。它仍然不起作用。 (同样的例外)
会不会是您不小心在服务配置中错误配置了消息总线?你能运行bin/console debug:container 'Symfony\Component\Messenger\MessageBusInterface'
并检查它实际上是基于MessageBus 的服务吗?
嗯,老实说,我刚刚完成了文档中的步骤。这是我使用调试命令得到的结果:gist.github.com/DenisMir/53a166187768fa252665be07891a68c1 当我正确解释它时,我认为总线配置正确。如果不是这样,我预计调度也会失败。
是的,看起来是正确的。我以前没有遇到过这种情况,但我很少使用 Doctrine 传输。也许我明天有时间看看我是否可以重现这个问题,如果在那之前没有其他人找到解决方案
【参考方案1】:
问题的答案是将symfony/framework-bundle
也更新为4.3.2
。由于框架包的信使组件版本4.3.2
的composer.json
中的错误,未强制执行。当使用较旧版本的symfony/framework-bundle
与信使组件的4.3.2
结合使用时,这会导致默认配置错误。这解释了我的错误,因为我安装了框架包的4.3.0
。
更多关于它的信息可以在 GitHub 问题跟踪器上找到:
https://github.com/symfony/symfony/issues/32738
更新symfony/framework-bundle
后,一切正常。
【讨论】:
以上是关于Symfony Messenger 4.3 - 从理论传输中消费消息失败(抛出异常)的主要内容,如果未能解决你的问题,请参考以下文章
Symfony:我如何在 Messenger 中使用远程过程调用(RPC)?
Symfony Messenger 使用 Apache Kafka 作为队列传输
Symfony messenger 和 mailer:如何添加 binding_key?