【发布时间】: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 传输。也许我明天有时间看看我是否可以重现这个问题,如果在那之前没有其他人找到解决方案
标签: symfony symfony-4.3 symfony-messenger