powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Пересылка (асинхронно) потока записей из БД
28 сообщений из 28, показаны все 2 страниц
Пересылка (асинхронно) потока записей из БД
    #39668225
fplab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть таблица PostgreSQL в которую пишутся данные. Не очень быстро, максимум 500 записей/мин. Эти данные по шедулеру надо каждые 5 секунд считывать и если есть новые, отсылать их по и-нету на определенные IP (в данных есть указания на какой IP и порт нужно отсылать ту или иную запись). После удачной отправки данных, на соответствующей записи в БД ставится пометка, что данные ушли (чтобы не дублировать ранее доставленные).
Сначала хотел сделать стандартными средствами Java (java.io.*, java.net.*), но поскольку это не "фреймворчно", то подумал, что наверняка в том же Spring есть подходящие решения. Ну хоть тот же Spring Integration. Проблема в том, что опыта его использования нет. Что толкового кроме Spring Integration Reference можно почитать для вхождения в тему? И второй вопрос: может, я не туда смотрю и для отправки данных есть решения получше?
Спасибо заранее!
...
Рейтинг: 0 / 0
Пересылка (асинхронно) потока записей из БД
    #39668249
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fplabдля отправки данных есть решения получше?слово репликация на форуме бд.
Если руками то не понял где проблема? В каком участке кода? Прочитать? Отправить?
...
Рейтинг: 0 / 0
Пересылка (асинхронно) потока записей из БД
    #39668273
fplab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,
Репликация всем хороша, но не в данном случае. IP-назначения могут быть где угодно. Посылалка периодически сканирует базу на предмет новых (не отправленных) записей. При обнаружении таковых, извлекается соответствующий IP и порт, устанавливается TCP-соединение и посылаются данные. Вот нечто вроде того, что есть в БД и что надо отослать:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
id              data                ip               port
...
1000         dollars             X.X.X.X       21000
1001         euro                Y.Y.Y.Y       21001
1002         roubles             Z.Z.Z.Z       21002
1003         dollars             X.X.X.X       21000
1004         dollars             X.X.X.X       21000
...



Записи с id=1000, 1003, 1004 (dollars) надо отослать на X.X.X.X:21000
Запись с id=1001 (euro) надо отослать на Y.Y.Y.Y:21001
Запись с id=1002 (roubles) надо отослать на Z.Z.Z.Z:21002
Проблема - не в коде: его еще нет. Проблема - в выборе технологии.
...
Рейтинг: 0 / 0
Пересылка (асинхронно) потока записей из БД
    #39668311
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fplab,

Нет проблемы. Слишком простая задача. Пробуй.
...
Рейтинг: 0 / 0
Пересылка (асинхронно) потока записей из БД
    #39668312
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fplabПроблема - в выборе технологии.
Тогда вместо выдумывания чудовищ просто почитай про уже существующие технологии репликации в PG.
...
Рейтинг: 0 / 0
Пересылка (асинхронно) потока записей из БД
    #39668317
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fplabЕсть таблица PostgreSQL в которую пишутся данные. Не очень быстро, максимум 500 записей/мин. Эти данные по шедулеру надо каждые 5 секунд считывать и если есть новые, отсылать их по и-нету на определенные IP (в данных есть указания на какой IP и порт нужно отсылать ту или иную запись). После удачной отправки данных, на соответствующей записи в БД ставится пометка, что данные ушли (чтобы не дублировать ранее доставленные).
Сначала хотел сделать стандартными средствами Java (java.io.*, java.net.*), но поскольку это не "фреймворчно", то подумал, что наверняка в том же Spring есть подходящие решения. Ну хоть тот же Spring Integration. Проблема в том, что опыта его использования нет. Что толкового кроме Spring Integration Reference можно почитать для вхождения в тему? И второй вопрос: может, я не туда смотрю и для отправки данных есть решения получше?
Спасибо заранее!

Зачем тут БД, когда это очередь?!
А так "все равно" фреймворочно или не фреймворочно вы делаете.

Грубо говоря можно сделать так.

1-ый сервис читает из БД и записывает в очередь (ставит в таблице признак, что данные уже в очереди)
2-ой сервис берет данные из очереди и отправляет в другие очереди, для определенных IP
3-ий сервис читает данные из очереди для определенного IP и отправляет их. Если данные не отправились, то отправляет их обратно в эту же очередь.

И да можно сделать со Spring Integration, а можно и без него...
Можно вообще без Spring'а :-)
...
Рейтинг: 0 / 0
Пересылка (асинхронно) потока записей из БД
    #39668324
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul,
Можно и без спринга и без 3х сервисов.
На классах и методах уже совсем разучились писать.
...
Рейтинг: 0 / 0
Пересылка (асинхронно) потока записей из БД
    #39668325
fplab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgulЗачем тут БД, когда это очередь?!

Понятное дело, что фактически это очередь. Но данные в БД кладутся другим (сторонним) приложением. И этой БД пользуются еще много кто и много как. А так - да, очередь, Вы совершенно правы :)
Спасибо
...
Рейтинг: 0 / 0
Пересылка (асинхронно) потока записей из БД
    #39668326
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgul,
Один метод в одном потоке прочитал, отправил и поставил галку что отправил.
...
Рейтинг: 0 / 0
Пересылка (асинхронно) потока записей из БД
    #39668327
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fplabПонятное дело, что фактически это очередь.в ТЗ выше нет показаний на очередь.
...
Рейтинг: 0 / 0
Пересылка (асинхронно) потока записей из БД
    #39668329
fplab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123mad_nazgul,
Можно и без спринга и без 3х сервисов.
На классах и методах уже совсем разучились писать.
Ну отчего же сразу и разучились? :) Я в самом начале написал, что "хотел сделать стандартными средствами Java (java.io.*, java.net.*)" (извините за самоцитирование). Да решил поинтересоваться у знающих людей - нет ли чего получше. Только то и всего ...
...
Рейтинг: 0 / 0
Пересылка (асинхронно) потока записей из БД
    #39668333
fplab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123fplabПонятное дело, что фактически это очередь.в ТЗ выше нет показаний на очередь.
Выдам "страшную" тайну - ТЗ нет. Знаю, что так неправильно, так работать нельзя и проч. Но такое случается.
Правда, mad_nazgul это и без ТЗ понял, что БД фактически моделирует очередь за что ему я сказал "спасибо"
...
Рейтинг: 0 / 0
Пересылка (асинхронно) потока записей из БД
    #39668363
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123mad_nazgul,
Можно и без спринга и без 3х сервисов.
На классах и методах уже совсем разучились писать.

Какая разница, сервисы или классы.
Все равно, ИМХО, "удобнее" завернуть в очередь/ди.
Причем для каждого IP желательно своя очередь, чтобы если не отправилось, то стучать до тех пор, пока не отправиться (ну или какая другая логика отправки)
Например в рамках Spring Integration это можно сделать в одном приложении.
Но в виде микросервисов - это "стильно, модно, молодежно" ;-)
...
Рейтинг: 0 / 0
Пересылка (асинхронно) потока записей из БД
    #39668365
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123mad_nazgul,
Один метод в одном потоке прочитал, отправил и поставил галку что отправил.

Вот это то мне мне нравиться.
Трудно распараллелить отправку.
...
Рейтинг: 0 / 0
Пересылка (асинхронно) потока записей из БД
    #39668366
Фотография Dmitry.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
надо отослать на X.X.X.X:21000

а что с той стороны? постгрес в чистом виде? или сервис какой?
...
Рейтинг: 0 / 0
Пересылка (асинхронно) потока записей из БД
    #39668367
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgulТрудно распараллелить отправку.чтобы добавить проблему когда галку ставить отправлено?
А без параллельности код с галкой просто ниже чем отправка.
...
Рейтинг: 0 / 0
Пересылка (асинхронно) потока записей из БД
    #39668375
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgulКакая разница, сервисы или классы.
Все равно, ИМХО, "удобнее" завернуть в очередь/ди.
Причем для
...
"Сложнее всего в мире достигнуть простоты — это крайняя граница опыта и последнее усилие гения". © George Sand.
...
Рейтинг: 0 / 0
Пересылка (асинхронно) потока записей из БД
    #39668383
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fplabВыдам "страшную" тайну - ТЗ нет.открою тайну - Сложно сделать через цикл for каждый дурак сможет.
Впрочем, если для обучения то делайте микросервисы плюс спринг плюс jpa плюс хибер.
...
Рейтинг: 0 / 0
Пересылка (асинхронно) потока записей из БД
    #39668404
fplab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry. надо отослать на X.X.X.X:21000

а что с той стороны? постгрес в чистом виде? или сервис какой?
Сервис. Ловит сообщение и дальше обрабатывает его по своей логике
...
Рейтинг: 0 / 0
Пересылка (асинхронно) потока записей из БД
    #39668409
fplab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123fplabВыдам "страшную" тайну - ТЗ нет.открою тайну - Сложно сделать через цикл for каждый дурак сможет.
Впрочем, если для обучения то делайте микросервисы плюс спринг плюс jpa плюс хибер.
Не для обучения. И коль скоро пошли цитаты, то позвольте и мне поучаствовать: "Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить" Ч.Э.Р.Хоар.
Хочется, действительно, надежно и просто, чтобы ни самому потом не разбираться в собственном мусоре, ни других не подставлять, кому доведется сопровождать и поддерживать. Поэтому и не спешу как дурак реализовывать через цикл for :)
...
Рейтинг: 0 / 0
Пересылка (асинхронно) потока записей из БД
    #39668419
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fplab,
Просто равно надежно всегда было.
Т.е. опять таки за пол часа можно написать твою задачу.
Без спринга и SOA.
...
Рейтинг: 0 / 0
Пересылка (асинхронно) потока записей из БД
    #39668573
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fplabНе для обучения. И коль скоро пошли цитаты, то позвольте и мне поучаствовать: "Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить" Ч.Э.Р.Хоар.
Хочется, действительно, надежно и просто, чтобы ни самому потом не разбираться в собственном мусоре, ни других не подставлять, кому доведется сопровождать и поддерживать. Поэтому и не спешу как дурак реализовывать через цикл for :)

Если нужно быстро написать, то проще через цикл.
Если нужно быстро - то нужно сразу закладывать "параллельность".
Т.е., например, для каждого IP:port иметь свою очередь.

Ну а чтобы решение было "понятным", то цикл вне конкуренции.

Если поддерживаемым... то надо "ванговать", что может понадобиться "завтра".
И тут либо "оверинженегринг", либо пусть, кто будет поддерживать в будущем сами разбираются.
...
Рейтинг: 0 / 0
Пересылка (асинхронно) потока записей из БД
    #39668575
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123fplab,
Просто равно надежно всегда было.
Т.е. опять таки за пол часа можно написать твою задачу.
Без спринга и SOA.

Просто != надежно.
Просто это просто, а надежно, это надежно.

Например, просто - это аналоговый сигнал.
А надежно - цифровой сигнал. ;-)
...
Рейтинг: 0 / 0
Пересылка (асинхронно) потока записей из БД
    #39668589
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgulНапример, просто - это аналоговый сигнал.
А надежно - цифровой сигнал. ;-)вопрос спорный - при аналоговом тв сигнале - не обратишь внимание на помехи, а при цифровом- замаешься смотреть
...
Рейтинг: 0 / 0
Пересылка (асинхронно) потока записей из БД
    #39668592
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадяmad_nazgulНапример, просто - это аналоговый сигнал.
А надежно - цифровой сигнал. ;-)вопрос спорный - при аналоговом тв сигнале - не обратишь внимание на помехи, а при цифровом- замаешься смотреть

Корректирующие коды, и прочие хешики.
Даже при искажении сигнала, есть алгоритмы, которые могут восстановить информацию.
Это не так просто :-)
...
Рейтинг: 0 / 0
Пересылка (асинхронно) потока записей из БД
    #39668594
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что есть оверхед в данной задаче всегда было искусством выбора архитектора.
Это и есть наша работа).
Можно еще треугольник вспомнить: Быстро <=> Надежно <=> Дешево
...
Рейтинг: 0 / 0
Пересылка (асинхронно) потока записей из БД
    #39668611
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Что есть оверхед в данной задаче всегда было искусством выбора архитектора.
Это и есть наша работа).
Можно еще треугольник вспомнить: Быстро <=> Надежно <=> Дешево

Вот.
Поэтому я и предложил "общий" случай.
Сразу заложив, распараллеливание, и разбиение на микросервисы.
Т.к. контекст задачи не известен, то исходил из "худшего" сценария.
Но это не значит, что я придумал правильно.
Вполне может оказаться, что вариант с циклом будет самым оптимальным.
...
Рейтинг: 0 / 0
Пересылка (асинхронно) потока записей из БД
    #39668620
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgulПоэтому я и предложил "общий" случай.
Сразу заложив,какой же общий если сразу заложил)))))).
Если заложил, то предупреди клиента и всё.
Он сам решит, надо это или нет.
EJB тоже заложило много чего, только плохо кончило.
Поэтому спринг + распределенные транзакции + очереди + jpa +hiber - правильно.
И просто 10 строк кода jdbc тоже - правильно.
...
Рейтинг: 0 / 0
28 сообщений из 28, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Пересылка (асинхронно) потока записей из БД
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]