Symfony Messenger 4.3 - сбой при получении сообщений от транспорта доктрин (исключение выдается)
Версия Symfony: 4.3.2
PHP: 7.2.20
Я пытаюсь использовать компонент мессенджера с транспортом доктрины асинхронно. Я установил мессенджер через composer require messenger
с помощью Symfony Flex.
Я активировал доктрину транспорта MESSENGER_TRANSPORT_DSN=doctrine://default
в .env.local
, В конфигурации мессенджера транспорт также настроен:
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
Таким образом, $routableBus в Symfony\Component\Messenger\Command\ConsumeMessagesCommand
пусто, что приводит к сбою при создании экземпляра Worker.
1 ответ
Ответ на вопрос заключается в обновлении 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
все работает как положено.