В компоненте Messenger, middleware используется для настройки того, что происходит при отправке сообщения на message bus. В Symfony 4.4 добавили новый middleware для очистки Doctrine Entity Manager после использования каждого сообщения.
Включите его, добавив messenger.middleware.doctrine_clear_entity_manager
в middleware в bus.
# config/packages/messenger.yaml
framework:
messenger:
buses:
messenger.bus.default:
default_middleware: false
middleware:
# ...
- 'messenger.middleware.doctrine_clear_entity_manager'
Первое преимущество этого middleware заключается в том, что оно позволяет избежать утечек памяти при обработке сообщений. Второе преимущество заключается в том, что он предотвращает неожиданные побочные эффекты. Например, в случае процесса восстановления учетной записи пользователя (когда электронная почта отправляется асинхронно с Messenger и AMQP), если адрес электронной почты обновляется после первой попытки, вторая электронная почта отправляется на старый адрес электронной почты. Использование этого middleware решит эту проблему.