|
центр уведомлений
|
|||
---|---|---|---|
#18+
Здравствуйте. есть БД, есть N пользователей, работающих в БД. Задача: написать на java центр уведомлений пользователей о событиях в БД. Как я понимаю, мне нужно реализовать сервер и клиент, так чтобы сервер был всегда подключен к БД (желательно в один стабильный коннект), а клиенты были бы подключены к серверной части приложения, и получали уведомления только когда им есть что вычитать (callback?), не нагружая при этом сервер. Пожалуйста подскажите, есть ли подобные фреймворки, чтобы не сильно углубляться клиент-серверное взаимодействие и взять готовый шаблон? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2021, 13:56 |
|
центр уведомлений
|
|||
---|---|---|---|
#18+
Есть ряд продуктов, например, debezium, которые фиксируют события в БД (инсерты, апдейты, делеты), используя различные приемы. В частности, обрабатывая журналы транзакций, бинлог и т.д. Все обнаруженные события debezium рассылает в кафку. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2021, 14:33 |
|
центр уведомлений
|
|||
---|---|---|---|
#18+
wolfio, Вас интересует техническое событие insert или бизнес событие "клиент взял кредит"? Первое будет не очень правильной хотелкой. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2021, 15:20 |
|
центр уведомлений
|
|||
---|---|---|---|
#18+
wolfio, Сделайте так: - приложение1 обычное CRUD приложение - приложение2 мониторит бд на события и отправляет по мылу сообщения. Мониторить можно логи сервера чтобы его не нагружать. В результате при нагрузке вы всегда найдете что начинает тормозить из за каллбэков событий - прил1, прил2 или сама бд Подходит паттерн? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2021, 15:29 |
|
центр уведомлений
|
|||
---|---|---|---|
#18+
Например Oracle умеет уведомление слать при изменении указанных объектов. Т.ч. ничего мониторить не нужно Мониторить логи - ну удачи... на мой взгляд это работа не на один человеко-год. Или нужно покупать/брать готовые продукты ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2021, 15:49 |
|
центр уведомлений
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, наверное не совсем четко объяснил задачу. Извините, давайте еще раз попробую. речь не про CRUD или update/insert/delete. есть старая БД, со своим десктоп-клиентом времен динозавров. в нем очень нехватает api для пушей пользователей, когда они запускают хранимки какие-нибудь. При этом они запускают все это по RPC с ожиданием, хотя асинхронно запускать хранимки тоже можно. Но при таком запуске встает вопрос - как уведомить пользователя о том, что его процедура завершилась? Так родилась идея написать на javaFX скромный центр уведомления, который будет поверх окна клиента оповещать его об ошибке/успехе (ну фактически прокидывать текст ошибки/успех из хранимки в пуш (про окна вопросов нет). Для того, чтобы сделать все вышеописанное, мне видится, что нужно сделать: -Приложение 1, которое будет держать коннект в БД и смотреть в очередь/табличку на предмет наличия невычитанных пушей для конкретного клиентского места. При их наличии раздавать Приложению 2 месседжи. -Приложение 2, которое будет непосредственно общаться с Приложением 1, получать от него сообщение, и красиво выводить. я подчеркну мысль, что хотелось бы не просто клиента написать, который напрямую с клиентского рабочего места будет делать коннект к БД (потому что пользователей БД может быть 500+, и нагружать базу не хотелось бы даже), а именно клиент-серверное приложение. и как я понимаю, тут следует использовать callback'и, чтобы Приложение 2 не заваливало Приложением 1 запросами на наличие сообщений для них. Так вот мой вопрос в том - есть ли удобный фреймворк/шаблон/паттерн для создания Приложения 1 и 2 так, чтобы все это не с нуля изучать? уверен, что идея не революционная. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2021, 15:53 |
|
центр уведомлений
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, Логи можно и руками делать. Человеческие))) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2021, 16:00 |
|
центр уведомлений
|
|||
---|---|---|---|
#18+
wolfio, У меня вопрос - как вы планируете узнать что ХП завершилась и как она завершилась, если она была запущена не вами? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2021, 16:03 |
|
центр уведомлений
|
|||
---|---|---|---|
#18+
Тут даже десктоп в вопросе был? Не веб проект?))) ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2021, 16:06 |
|
центр уведомлений
|
|||
---|---|---|---|
#18+
Garrick, напишу пакет на БД, через который можно будет в конце вызова ХП вызвать процедуру а-ля push2User ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2021, 16:06 |
|
центр уведомлений
|
|||
---|---|---|---|
#18+
wolfio, Перевод синхронного десктоп на асинхронную работу это переписать тонну кода. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2021, 16:09 |
|
центр уведомлений
|
|||
---|---|---|---|
#18+
мне кажется вы меня не правильно услышали. Задача в том, чтобы написать API для пуша, и постепенно применять его в работе, а не перевести все хранимки в асинхрон. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2021, 16:12 |
|
центр уведомлений
|
|||
---|---|---|---|
#18+
wolfio Garrick, напишу пакет на БД, через который можно будет в конце вызова ХП вызвать процедуру а-ля push2User т.е. вы готовы переделать все ХП? Тогда если исключить e-mail рассылку, будет очень удобно использовать JMS. ХП по окончании работы шлёт сообщение в очередь, клиенты JMS подписываются на нужные сообщения и получают их по мере появления. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2021, 16:13 |
|
центр уведомлений
|
|||
---|---|---|---|
#18+
господа, мы углубляемся в бессмысленную полемику. я написал вопрос в изыскательных целях. подскажите по сути - есть ли фреймворки для организации описанного взаимодействия между Приложением 2 и Приложением 1? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2021, 16:15 |
|
центр уведомлений
|
|||
---|---|---|---|
#18+
wolfio, А это что? автор. в нем очень нехватает api для пушей пользователей, когда они запускают хранимки какие-нибудь. При этом они запускают все это по RPC с ожиданием, хотя асинхронно запускать хранимки тоже можно. Подробнее As is to be Пример плохого сейчас. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2021, 16:15 |
|
центр уведомлений
|
|||
---|---|---|---|
#18+
wolfio, Вы ничего не описали. Но вот вам таблетка - Apache camel ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2021, 16:17 |
|
центр уведомлений
|
|||
---|---|---|---|
#18+
Garrick, Если у него длинный коннект, то все хранимки под своим юзверям запуск. Фиг знает что у него ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2021, 16:18 |
|
центр уведомлений
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, as is запустил отчет , который выгружает в эксель какую-то инфу минут 10-15. и пользователь либо идет покурить, либо поднимает второй экземпляр клиента к БД для параллельной работы в другом окне. to be пишу обертку пакета в БД на вызов того же отчета в job. В конце обертки, после вызова процедуры отчета вызываю собственный push API, через который пользователю приходит алерт, что отчет готов. При старте обертки, пользователь ставит задание на выполнение очета в джоб и модальное окно закрывается, таким образом не блокируя его рабочее место. Он может работать дальше. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2021, 16:20 |
|
центр уведомлений
|
|||
---|---|---|---|
#18+
wolfio 1. СУБД В Oracle пакет DBMS_PIPE IMHO. Или DBMS_AQ Без указания СУБД - обсуждение в вакууме. 2. Если про HTTP, то опять таки. Обычное HTTP соединение. На сервере в Stream пишешь, на клиенте из stream читаешь. В чем проблема? Да даже на сокетах - аналогично ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2021, 16:22 |
|
центр уведомлений
|
|||
---|---|---|---|
#18+
wolfio, To be Создай поток и внутри коннект. Вот там и запускай ХП. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2021, 16:23 |
|
центр уведомлений
|
|||
---|---|---|---|
#18+
wolfio Он может работать дальше. Так? Коммит через 10 мин в конце хранимки? Клиентский или северный? Не удалит СЛУЧАЙНО запись пока ХП работает? Которая один ко многим товар цепляет к накладной? ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2021, 16:28 |
|
центр уведомлений
|
|||
---|---|---|---|
#18+
Leonid Kudryavtsev, 1. Oracle проблема пайп в оракле в том, что они могут быть утеряны. для mission critical систем в какой-нибудь отчетный период потерять алерт - это не очень решение, мягко говоря. AQ целевой вариант. Но вы отвечаете на вопросы, которые я не задавал. опыт работы и с пайпами и с очередями у меня есть. Мне хочется понять есть ли готовые решения для общения между клиентским приложением, и приложением подключенным к серверу. Я понимаю, что можно на коленке написать на сокетах или на http. Но когда это потащу в прод, мне зададут резонные вопросы про http s , либо про гибкую отказоустойчивость на сокетах и не гибкую конфигурацию адресов для подключения к БД и Приложению, которое держит с ним коннект. Не говоря уже о всяких прокси, которых мне бы даже касаться не хотелось. т.е. в идеале я бы хотел взять готовый клиент-сервер экзампл, в котором уже зашиты возможности по работе с сертами, настройкой прокси, jdbc, пул коннектов и т.п, и просто написать на серверную часть логику для вычитки сообщений из очереди (AQ/Таблица/Pipe), а на клиентское приложение навесить получение сообщения и javafx с 3мя видами окон. и все ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2021, 16:32 |
|
центр уведомлений
|
|||
---|---|---|---|
#18+
PetroNotC Sharp, Вы ищете ответ на вопрос, который я не задавал. отправку пуша можно написать в автономной транзакции. ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2021, 16:33 |
|
центр уведомлений
|
|||
---|---|---|---|
#18+
wolfio, Готовое решение это запуск ХП не в потоке ГУИ! Всё ... |
|||
:
Нравится:
Не нравится:
|
|||
24.09.2021, 16:34 |
|
|
start [/forum/topic.php?fid=59&msg=40099829&tid=2120338]: |
0ms |
get settings: |
27ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
36ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
450ms |
get tp. blocked users: |
2ms |
others: | 291ms |
total: | 841ms |
0 / 0 |