|
Пересылка (асинхронно) потока записей из БД
|
|||
---|---|---|---|
#18+
Есть таблица PostgreSQL в которую пишутся данные. Не очень быстро, максимум 500 записей/мин. Эти данные по шедулеру надо каждые 5 секунд считывать и если есть новые, отсылать их по и-нету на определенные IP (в данных есть указания на какой IP и порт нужно отсылать ту или иную запись). После удачной отправки данных, на соответствующей записи в БД ставится пометка, что данные ушли (чтобы не дублировать ранее доставленные). Сначала хотел сделать стандартными средствами Java (java.io.*, java.net.*), но поскольку это не "фреймворчно", то подумал, что наверняка в том же Spring есть подходящие решения. Ну хоть тот же Spring Integration. Проблема в том, что опыта его использования нет. Что толкового кроме Spring Integration Reference можно почитать для вхождения в тему? И второй вопрос: может, я не туда смотрю и для отправки данных есть решения получше? Спасибо заранее! ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2018, 11:44 |
|
Пересылка (асинхронно) потока записей из БД
|
|||
---|---|---|---|
#18+
fplabдля отправки данных есть решения получше?слово репликация на форуме бд. Если руками то не понял где проблема? В каком участке кода? Прочитать? Отправить? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2018, 12:24 |
|
Пересылка (асинхронно) потока записей из БД
|
|||
---|---|---|---|
#18+
Petro123, Репликация всем хороша, но не в данном случае. IP-назначения могут быть где угодно. Посылалка периодически сканирует базу на предмет новых (не отправленных) записей. При обнаружении таковых, извлекается соответствующий IP и порт, устанавливается TCP-соединение и посылаются данные. Вот нечто вроде того, что есть в БД и что надо отослать: Код: java 1. 2. 3. 4. 5. 6. 7. 8.
Записи с 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 Проблема - не в коде: его еще нет. Проблема - в выборе технологии. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2018, 12:51 |
|
Пересылка (асинхронно) потока записей из БД
|
|||
---|---|---|---|
#18+
fplab, Нет проблемы. Слишком простая задача. Пробуй. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2018, 13:45 |
|
Пересылка (асинхронно) потока записей из БД
|
|||
---|---|---|---|
#18+
fplabПроблема - в выборе технологии. Тогда вместо выдумывания чудовищ просто почитай про уже существующие технологии репликации в PG. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2018, 13:45 |
|
Пересылка (асинхронно) потока записей из БД
|
|||
---|---|---|---|
#18+
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'а :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2018, 13:50 |
|
Пересылка (асинхронно) потока записей из БД
|
|||
---|---|---|---|
#18+
mad_nazgul, Можно и без спринга и без 3х сервисов. На классах и методах уже совсем разучились писать. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2018, 14:00 |
|
Пересылка (асинхронно) потока записей из БД
|
|||
---|---|---|---|
#18+
mad_nazgulЗачем тут БД, когда это очередь?! Понятное дело, что фактически это очередь. Но данные в БД кладутся другим (сторонним) приложением. И этой БД пользуются еще много кто и много как. А так - да, очередь, Вы совершенно правы :) Спасибо ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2018, 14:01 |
|
Пересылка (асинхронно) потока записей из БД
|
|||
---|---|---|---|
#18+
mad_nazgul, Один метод в одном потоке прочитал, отправил и поставил галку что отправил. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2018, 14:01 |
|
Пересылка (асинхронно) потока записей из БД
|
|||
---|---|---|---|
#18+
fplabПонятное дело, что фактически это очередь.в ТЗ выше нет показаний на очередь. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2018, 14:04 |
|
Пересылка (асинхронно) потока записей из БД
|
|||
---|---|---|---|
#18+
Petro123mad_nazgul, Можно и без спринга и без 3х сервисов. На классах и методах уже совсем разучились писать. Ну отчего же сразу и разучились? :) Я в самом начале написал, что "хотел сделать стандартными средствами Java (java.io.*, java.net.*)" (извините за самоцитирование). Да решил поинтересоваться у знающих людей - нет ли чего получше. Только то и всего ... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2018, 14:05 |
|
Пересылка (асинхронно) потока записей из БД
|
|||
---|---|---|---|
#18+
Petro123fplabПонятное дело, что фактически это очередь.в ТЗ выше нет показаний на очередь. Выдам "страшную" тайну - ТЗ нет. Знаю, что так неправильно, так работать нельзя и проч. Но такое случается. Правда, mad_nazgul это и без ТЗ понял, что БД фактически моделирует очередь за что ему я сказал "спасибо" ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2018, 14:11 |
|
Пересылка (асинхронно) потока записей из БД
|
|||
---|---|---|---|
#18+
Petro123mad_nazgul, Можно и без спринга и без 3х сервисов. На классах и методах уже совсем разучились писать. Какая разница, сервисы или классы. Все равно, ИМХО, "удобнее" завернуть в очередь/ди. Причем для каждого IP желательно своя очередь, чтобы если не отправилось, то стучать до тех пор, пока не отправиться (ну или какая другая логика отправки) Например в рамках Spring Integration это можно сделать в одном приложении. Но в виде микросервисов - это "стильно, модно, молодежно" ;-) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2018, 14:47 |
|
Пересылка (асинхронно) потока записей из БД
|
|||
---|---|---|---|
#18+
Petro123mad_nazgul, Один метод в одном потоке прочитал, отправил и поставил галку что отправил. Вот это то мне мне нравиться. Трудно распараллелить отправку. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2018, 14:51 |
|
Пересылка (асинхронно) потока записей из БД
|
|||
---|---|---|---|
#18+
надо отослать на X.X.X.X:21000 а что с той стороны? постгрес в чистом виде? или сервис какой? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2018, 14:52 |
|
Пересылка (асинхронно) потока записей из БД
|
|||
---|---|---|---|
#18+
mad_nazgulТрудно распараллелить отправку.чтобы добавить проблему когда галку ставить отправлено? А без параллельности код с галкой просто ниже чем отправка. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2018, 14:52 |
|
Пересылка (асинхронно) потока записей из БД
|
|||
---|---|---|---|
#18+
mad_nazgulКакая разница, сервисы или классы. Все равно, ИМХО, "удобнее" завернуть в очередь/ди. Причем для ... "Сложнее всего в мире достигнуть простоты — это крайняя граница опыта и последнее усилие гения". © George Sand. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2018, 14:57 |
|
Пересылка (асинхронно) потока записей из БД
|
|||
---|---|---|---|
#18+
fplabВыдам "страшную" тайну - ТЗ нет.открою тайну - Сложно сделать через цикл for каждый дурак сможет. Впрочем, если для обучения то делайте микросервисы плюс спринг плюс jpa плюс хибер. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2018, 15:00 |
|
Пересылка (асинхронно) потока записей из БД
|
|||
---|---|---|---|
#18+
Dmitry. надо отослать на X.X.X.X:21000 а что с той стороны? постгрес в чистом виде? или сервис какой? Сервис. Ловит сообщение и дальше обрабатывает его по своей логике ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2018, 15:32 |
|
Пересылка (асинхронно) потока записей из БД
|
|||
---|---|---|---|
#18+
Petro123fplabВыдам "страшную" тайну - ТЗ нет.открою тайну - Сложно сделать через цикл for каждый дурак сможет. Впрочем, если для обучения то делайте микросервисы плюс спринг плюс jpa плюс хибер. Не для обучения. И коль скоро пошли цитаты, то позвольте и мне поучаствовать: "Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить" Ч.Э.Р.Хоар. Хочется, действительно, надежно и просто, чтобы ни самому потом не разбираться в собственном мусоре, ни других не подставлять, кому доведется сопровождать и поддерживать. Поэтому и не спешу как дурак реализовывать через цикл for :) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2018, 15:42 |
|
Пересылка (асинхронно) потока записей из БД
|
|||
---|---|---|---|
#18+
fplab, Просто равно надежно всегда было. Т.е. опять таки за пол часа можно написать твою задачу. Без спринга и SOA. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.07.2018, 16:11 |
|
Пересылка (асинхронно) потока записей из БД
|
|||
---|---|---|---|
#18+
fplabНе для обучения. И коль скоро пошли цитаты, то позвольте и мне поучаствовать: "Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить" Ч.Э.Р.Хоар. Хочется, действительно, надежно и просто, чтобы ни самому потом не разбираться в собственном мусоре, ни других не подставлять, кому доведется сопровождать и поддерживать. Поэтому и не спешу как дурак реализовывать через цикл for :) Если нужно быстро написать, то проще через цикл. Если нужно быстро - то нужно сразу закладывать "параллельность". Т.е., например, для каждого IP:port иметь свою очередь. Ну а чтобы решение было "понятным", то цикл вне конкуренции. Если поддерживаемым... то надо "ванговать", что может понадобиться "завтра". И тут либо "оверинженегринг", либо пусть, кто будет поддерживать в будущем сами разбираются. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2018, 07:36 |
|
Пересылка (асинхронно) потока записей из БД
|
|||
---|---|---|---|
#18+
Petro123fplab, Просто равно надежно всегда было. Т.е. опять таки за пол часа можно написать твою задачу. Без спринга и SOA. Просто != надежно. Просто это просто, а надежно, это надежно. Например, просто - это аналоговый сигнал. А надежно - цифровой сигнал. ;-) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2018, 07:39 |
|
Пересылка (асинхронно) потока записей из БД
|
|||
---|---|---|---|
#18+
mad_nazgulНапример, просто - это аналоговый сигнал. А надежно - цифровой сигнал. ;-)вопрос спорный - при аналоговом тв сигнале - не обратишь внимание на помехи, а при цифровом- замаешься смотреть ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2018, 08:40 |
|
Пересылка (асинхронно) потока записей из БД
|
|||
---|---|---|---|
#18+
вадяmad_nazgulНапример, просто - это аналоговый сигнал. А надежно - цифровой сигнал. ;-)вопрос спорный - при аналоговом тв сигнале - не обратишь внимание на помехи, а при цифровом- замаешься смотреть Корректирующие коды, и прочие хешики. Даже при искажении сигнала, есть алгоритмы, которые могут восстановить информацию. Это не так просто :-) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.07.2018, 08:49 |
|
|
start [/forum/topic.php?fid=59&msg=39668311&tid=2121938]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
67ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
others: | 318ms |
total: | 491ms |
0 / 0 |