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.


person denis    schedule 25.07.2019    source источник
comment
Вероятно, проблема в том, что ваш транспорт, указанный в failure_transport, не существует. Просто скопируйте transport: async как failed и, возможно, добавьте имя очереди failed: '%env(MESSENGER_TRANSPORT_DSN)%?queue_name=failed'   -  person dbrumann    schedule 25.07.2019
comment
@dbrumann Мне очень жаль, что это была ошибка копирования и вставки конфигурации мессенджера. Я исправил это в вопросе. Это все еще не работает. (то же исключение)   -  person denis    schedule 25.07.2019
comment
Может быть, вы случайно неправильно сконфигурировали шину сообщений в конфигурации вашей службы? Не могли бы вы запустить bin/console debug:container 'Symfony\Component\Messenger\MessageBusInterface' и проверить, действительно ли это служба, основанная на MessageBus?   -  person dbrumann    schedule 25.07.2019
comment
Хм, если честно, я только что выполнил действия, описанные в документации. Вот что я получаю с помощью команды отладки: gist.github.com/DenisMir/ Когда я правильно это интерпретирую, я думаю, что шина настроена правильно. Если бы это было не так, я бы ожидал, что и отправка не удастся.   -  person denis    schedule 25.07.2019
comment
Да, похоже, правильно. Я не сталкивался с этим раньше, но я редко использую транспорт Doctrine. Может быть, завтра у меня будет время посмотреть, смогу ли я воспроизвести эту проблему, если до тех пор никто не найдет решения   -  person dbrumann    schedule 25.07.2019


Ответы (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 все работает как положено.

person denis    schedule 25.07.2019