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

php7.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.2composer.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?

Symfony Messenger / RabbitMQ 中的消费者错误处理

Symfony Messenger 不会总是重启

如何在 Symfony Messenger 的中间件上禁用日志“信息”?