Нужна структура для системы уведомлений/приборной панели?
Мне было предложено внедрить систему уведомлений в приложении Cloud Java. Предпосылка заключается в том, что администраторы или компоненты приложения могут отправлять отдельные сообщения отдельным пользователям или передавать объявления всем пользователям.
Уведомления будут классифицироваться по степени серьезности, типу (отключениям, новым сервисам и т.д.) и соответствующему компоненту.
Пользователи смогут выбирать типы и компоненты, которые им интересны, и как они хотели бы получать эти уведомления (по электронной почте, только что отображаемые на панели мониторинга, SMS и т.д.). Пользователи могут подтвердить или удалить уведомления, поэтому они больше не будут отображаться для этого пользователя.
Хотя я уверен, что это было бы интересно реализовать с нуля, просто кажется, что должна существовать существующая система, проект Apache, коммерческий проект и т.д., который делает именно это и избегает меня, чтобы изобретать велосипед.
Мой вопрос:. Кто-нибудь может рекомендовать инфраструктуру отслеживания уведомлений, которая может быть интегрирована в существующее приложение и автоматически обрабатывать все исходные данные? Коммерческие или с открытым исходным кодом являются прекрасными, если условия лицензирования являются коммерчески доступными (без GPL или LGPL, пожалуйста).
Ответы
Ответ 1
Я предполагаю, что то, что вы ищете, похоже на Amazon Simple Notification Service (SNS). Но сначала позвольте задать некоторые вещи прямо:
- Вы пытаетесь отправить электронную почту /SMS - и обе требуют Infrastructure, а не только фреймворки/библиотеки. Я предполагаю, что ваш клиент (или любой другой клиент) будет иметь сервер электронной почты, который работает где-то, поэтому вы не будете иметь прямого влияния на стоимость. Но отправка SMS-сообщений несет накладные расходы на инфраструктуру.
- У вас не будет готового решения. Поскольку у вас будет дополнительная инфраструктура, вы, по крайней мере, напишите хороший уровень интеграции с этой инфраструктурой.
Помня об этом, вот варианты, перечисленные в порядке сложности:
- Использование Amazon SNS
- Использовать Cloud Message Bus (CMB) - клон с открытым исходным кодом Amazon SNS. Он имеет тот же формат API, что и Amazon SNS, поэтому вы будете использовать его так же, как вы используете Amazon SNS
- Используйте Apache Camel с его различными компонентами электронной почты /SMS. Apache Camel - это инфраструктура маршрутизации предприятия. Он имеет очередь сообщений, в которой разработчики могут вставлять сообщения, а затем имеют разные маршрутизаторы, которые принимают эти сообщения и отправляют их в другом месте. Он имеет маршрутизаторы для отправки Email/SMS из коробки. Сначала вы создадите тему, на которую вы отправляете сообщения. Затем, когда пользователь регистрируется для уведомлений по электронной почте, вы добавите для него/ее конечную точку . И когда они откажутся от электронной почты, вы удалите эту конечную точку. В основном это очень близко к разработке собственного решения - за исключением того, что вам не нужно писать код для отправки SMS/электронной почты, у него есть готовые компоненты для этого, и вам просто нужно написать код интеграции, чтобы добавить те конечных точек, когда пользователь подписывается на уведомления.
- Сканируй свой собственный. Ваше решение будет очень похоже на подход Apache Camel. У вас будет очередь сообщений, у вас будут темы и слушатели. За исключением того, что вы будете писать свой собственный код для отправки всех сообщений /SMS.
Изменить: Незначительные пояснения
Ответ 2
Похоже, ваше требование - это какие-то живые данные в веб-приложении на основе браузера. Если это правильно, в некоторых из HTML 5 apis были особенно заметны успехи, особенно веб-сокеты.
Websockets - это расширение протокола HTTP, обеспечивающего двухканальную связь между клиентом и сервером. Однако есть недостаток. Верьте или нет, поддержка браузера по-прежнему довольно скудна, и некоторые сложности возникают с HTTP-прокси в дикой природе.
Как правило, чтобы обойти отсутствие широко распространенной поддержки, было довольно много фреймворков на стороне javascript/server, которые появились, что кажется действительно многообещающим. Эти структуры типично заботятся о резервной поддержке, когда веб-порты не поддерживаются. Некоторые технологии возврата включают в себя события, отправленные сервером, jsonp, длительный опрос, короткий опрос и т.д.
2 замечательных проекта с открытым исходным кодом приходят на ум:
1). Atmoshphere: https://github.com/Atmosphere/atmosphere
2). Socket-io - http://socket.io/