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

Всем привет У меня есть небольшой микросервис на nodejs, который принимает

запросы от другого сервиса и отправляет сообщеньки в телегу

Беда в том, что если кинуть три запроса подряд, средний из которых - отправка файла (занимает больше времени на обработку) - в бота приходят сообщения в порядке





Какой есть самый простой способ обеспечить их обработку "поочередно"?

Может, есть какой-то простой но умный фреймворк который может отдать все это в очередь, и достать из неё, но зная, что "это" задание должно выполнятся после предыдущего?

25 ответов

23 просмотра

асинхронное программирование это не просто но эффективно

Watch-This Автор вопроса
Hide 🏋
асинхронное программирование это не просто но эффе...

Тут не про асинхронное программирование, тут больше про работу с Queue на стороне какого-нибудь редиса/реббита Инстансов приложульки может быть несколько, на разных машинах... Они не будут знать о "ин мемори" друг друга

Создать очередь запросов с concurrency=1 и гонять все через нек

Watch-This Автор вопроса
саша2007
Сам же и ответит по сути)

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

а если 1е не придет то 3е и 2е не надо отправлять?

Watch-This Автор вопроса
Anton K.
а если 1е не придет то 3е и 2е не надо отправлять?

Надо отправлять, но это уже можно логикой обработки задания разрулить, по сути

Эта очерёдность должна быть в контексте каждого пользователя? Или очередь одна на всех?

Watch This
Дык вопрос не в том "как сделать", вопрос в том, е...

Тебе точно не нужны никакие редисы и прочее внешнее, ищи на npm in-memory queue и будет тебе счастье

Watch-This Автор вопроса
Watch-This Автор вопроса
Feanorx
Тебе точно не нужны никакие редисы и прочее внешне...

два запроса отправляется балансировщиком на сервер №1, два запроса на сервер №2 Как они узнают друг о друге?)

Watch This
Очередность в контексте ключа уникальности

Не понял ответ. Ключ уникальности - уникален для каждого сообщения

Watch-This Автор вопроса
Алексей Попов
Не понял ответ. Ключ уникальности - уникален для к...

В контексте пользователя, совершающего запрос к апи

Watch This
Надо отправлять, но это уже можно логикой обработк...

если ты хочешь чтобы сообщения шли в очередности 1 2 3 в какой то группе то тебе их надо помечать как группу и отправлять сколько сообщений должно быть в группе и когда ловишь такое сообщение видишь к кой группе оно принадлежит скольки их всего и какое оно по счету в группе и когда все соберешь тогда уже отправишь их в нужном тебе порядке

Watch This
В контексте пользователя, совершающего запрос к ап...

Не знаю ничего готового. Я бы, наверное, пробовал через ключи партиций Кафки эту очерёдность реализовать. Но с ходу даже не придумать как это сделать правильно

Watch-This Автор вопроса
Anton K.
если ты хочешь чтобы сообщения шли в очередности 1...

Не совсем тот кейс... Запросы приходят в порядке 1, 2, 3 - это ок, дополнительный индекс здесь не требуется Но запросы приходят с интервалом, ориентировочно, 100мс. При этом выполнение "простого" запроса занимает 150мс, выполнение запроса с обработкой файла - 500мс Таким образом имеем ситуацию, когда 1 и 3 отрабатывают, и соовтетственно отправляются, быстрее, чем 2 Я вижу один вариант решать эту беду - кидать все в очередь с контекстом "запрос от пользователя Василий" в очередь, и доставать в порядке добавления Соответственно об этом весь мой вопрос, есть ли на ноде какая-то обертка, которая позволяет легко и без лишних велоспиедов решать эту задачу (доставать задачи из очереди в том порядке, в котором они добавлены, и приступать к обработке следующей задачи только после того, как предыдущая обработана)

Алексей Попов
Не знаю ничего готового. Я бы, наверное, пробовал ...

То есть какой-нибудь отдельный сервис, который следит за получением ответов, понимает, какое место в очереди занимает ответ, и проталкивает очередь если пришла пора отправлять ответ

Watch This
Не совсем тот кейс... Запросы приходят в порядке...

Сколько процессов запущено на сервисе? Используется ли кластер или workerы?

Watch-This Автор вопроса
Feanorx
Сколько процессов запущено на сервисе? Используетс...

3 инстанса в кластере, у каждого 8 воркеров

Watch This
3 инстанса в кластере, у каждого 8 воркеров

Распределяй тогда запросы по воркерам согласно группам

Roman
а что будет если воркер 2 не ответит?

Ничего страшного не произойдет. За жизнью воркеров и так нужно следить постоянно

Feanorx
Распределяй тогда запросы по воркерам согласно гру...

Это может быть очень опасный путь. Какие-то воркеры будут забиты работой, какие-то будут пустыми

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
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
Карта сайта