Здравствуйте! Пользователи магазина генерируют различные события, типа новый заказ, смена статуса заказа, регистрация и т.п. На каждое такое событие нужно уведомить как пользователей, так и менеджеров. Уведомления могут быть разных типов, сейчас почта и смс, но в дальнейшем планируется использование мессенджеров.
У хендлера обрабатывающего смс, есть ограничение - отправка смс с 8 до 23 часов, если сообщение не попадает в этот интервал, то оно дожидается 8 утра и отправляется.
Из похожего по функционалу нашёл только
https://github.com/namshi/notificator, ещё была идея использовать monolog для этого.
В общем виде схема видится такой. Клиентский код создаёт объект сообщения с необходимыми параметрами и передаёт его в менеджер, добавляющий сообщение (серилизующий объект) в очередь. Воркер, получая сообщение отдаёт его хендлеру для обработки.
Вопросы такие:
1. Каким образом правильно реализовать отложенную доставку смс по времени? Откладывать лучше при добавлении в очередь или на этапе отправки?
Есть идея завести отдельную очередь которая бы обрабатывалась только в нужное время. Получается, управление по времени будет осуществляться включением/выключением консьюмера. Размещение сообщения в конкретную очередь происходит на этапе добавления, в менеджере. Такой подход имеет право на существование или есть идеи получше?
2. Вопрос перекликается с предыдущим. На одно событие может быть несколько сообщений одного типа (смс например), но с разными параметрами. Всю логику обработки этих параметров нужно убрать в хэндлер или что-то можно оставить в менеджере (например распределение сообщений по физическим очередям).
3. Как понять, какие параметры должны быть у каждого сообщения в отдельности, а какие можно указать при создании экземлпляра хэндлера? Например, смс сообщение может быть отправлено как в кириллице (utf-8), так и латиницей, но добавляется изначально в кириллице. Параметр о том нужно ли его конвертировать, может быть как у сообщения, так и у самого хэндлера.
Возможно видели готовые решения, решающие похожие задачи, буду благодарен если порекомендуете.