Флоу
1.1. Создать listener/subscriber, словить сам событие (симфонивское или свое кастомное)
1.2. В хендлере события создать месседж с данными о нотификейшене (если нужно сохранять данные для другой обработки, то записывать в энтити, а в месседж дублировать), кидать месседж в шину
2. Создать хендлер месседжа
3. Настроить асинхронную обработку этих мессенджев в конфигах messenger
В документации есть очень похожий пример -
creating-a-message-handler
В messenger есть отдельная
конфигурация для retry.
Я не делала точно такую же систему, у меня были нотификейшены на другом фреймворке, а в курсе по symfonycasts о Messenger было много примеров по настройке этого дела) Думаю что стоит уточнить с заказчиком/менеджером точный флоу всех этих времен повторной отправки, хранения данных, подтверждения успешной отправки, потому что что-то может быть критически важно, а что-то второстепенно.