170 похожих чатов

Всем привет Есть банк, к банку можно стучаться раз в минуту.

Нужно вытащить выписку по пользователю. Выписку можно вытаскивать максимум за 31 день. Вопрос: как на беке организовать логику эндпоинта, который получает любое значение from-to и на основании количества месяцев делает нужное количество запросов к банку раз в минуту?

21 ответов

13 просмотров
Dmytro-Svyrydenko Автор вопроса

1. Норм ли делать обычный setInterval? 2. Как хендлить что текущий setInterval уже работает, и юзеру нужно выкинуть ошибку мол «процесс уже запущен»? И можно ли так вообще делать, или нужно в массив текущего setInterval добавить новые значения юзера

создавай какую-нибудь запись в редисе с таймаутом (гугли redis locks), и в коде тупо проверяй ее наличие (если есть - запрос не посылай). setInterval - выглядит как костыль

Dmytro-Svyrydenko Автор вопроса

А как проверять редис? Редис ведь тоже нужно пинговать)

если отвалиться редис - то тут явно будет какое-то исключение, пинговать его - ты имеешь ввиду мониторить ?

Dmytro-Svyrydenko Автор вопроса

Ну да Вот ты говоришь что в редис можно поставить 60 секундный токен, и его чекать А как его чекать? Фронт хочет отправить 1 запрос с from-to, и забыть, а бек должен в фоне сам выполнить нужное количество запросов

https://github.com/OptimalBits/bull у була есть отложенные таски и рейт-лимит для них, юзает редис

ну когда ты с фронта принимаешь запросы - ты можешь в БД создать запись, отдать на фронт ссылку для просмотра результата, а когда получишь инфу данные в Бд обновить. Как фронт узнает что инфа получена - уже другое дело, либо сокетами оповестить, либо пусть фронт с определенным интервалом проверяет статус по ссылке

можно просто сделать очередь и один долгий промис

Dmytro-Svyrydenko Автор вопроса

Та о фронте забудь) он попросил бек и сам об этом забыл Вопрос только в том как беку это захендлить

Dmytro-Svyrydenko Автор вопроса

Это как?

Dmytro-Svyrydenko Автор вопроса

Не уверен что хочу еще одну либу в зависимостях и пару потраченных вечеров на чтение доки чтоб сделать эту задачу

ну разезолвить запрос только когда соберешь все данные (которые можно запросить раз в минуту)

Dmytro-Svyrydenko Автор вопроса

Мне не нужен один огромный промис Фронт по сути дает команду «сделай это», но не ждет результата

у p-queue есть опции по запуску N задач раз в M времени https://github.com/sindresorhus/p-queue

ну вот я об этом же +- и говорил

а тогда если его не надо оповещать что типо запрос прошел успешно и вот тебе данные тогда сразу ему 200 и через очередь собирай данные

Dmytro-Svyrydenko Автор вопроса

Не смог найти в доке инфу (это определенно касается не самой либы) как запускать очереди только для конкретного юзера Т.е. в одно время систему может юзать 10 человек, все они могут запросить загрузку данных, а значит у меня должно быть 10 параллельных очередей Как такое реализовать лучше всего?)

Dmytro-Svyrydenko Автор вопроса

А, или по сути новый инстанс PQueue это и есть то что мне нужно Типо пришел запрос сделать что-то, я сделал новый инстанс в и очередь этого инстанса накидал запросы Лан, вопрос видимо решен

new Map. ключ -- юзер ид, значение -- очередь. надо еще продумать как удалять неактивные очереди, чтобы память не текла. ну или создавать новый инстанс, без Map. если тебе не надо заново обращаться к очереди

Dmytro-Svyrydenko Автор вопроса

Та ну удалять по-идее легко Просто последним запросом в очереди добавить коллбек, который мэпу очищает Но мне заново обращаться по-идее не нужно, так что думаю и new хватит Спасибо за идеи)

Dmytro-Svyrydenko Автор вопроса

А нормально ли будет такие данные держать в памяти сервера?)

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта