Новое в Symfony 4.4: Messenger Middleware для очистки Doctrine Entity Manager

В компоненте 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 решит эту проблему.