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

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

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

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





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

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

25 ответов

8 просмотров

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

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
Распределяй тогда запросы по воркерам согласно гру...

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

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

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

Сообщение* в закодированном виде. То есть, просто сделать sendMessage?text=Привет бла-бла! не получится, надо в HEX переводить, и добавлять процент, типа такого: sendMessage?t...
КТ315
21
А случайно нет ли в паскале штатной возможности передать указатель и количество туда где array of в качестве аргумента?
zamtmn
25
Anyone here suffers from unexplained aural migraines, who would be up for talking for a bit? Doesn't *have* to be aural, but I am not asking about headaches, I mean actual mi...
Martin Rys
58
> комьюнити я бы не судил по этому чату. Как мы видели по статам просмотров нескольких телеговских постов, то в чате их набивается 30-40 или даже выше, когда как общаются акти...
Constantin F.
4
Как сделать чтобы short точно был 2 байта, int точно 4 байта ?(без стандартных библиотек, ну типа без int16_t, int32_t)
#
8
Ну раз я пока тут, задам пару глупых вопросов. Зачем писать на ассемблере если компилятор довольно умный, а ассемблер много времени занимает? В каких прикладных задачах сейчас...
Максим Рябцев
20
Всем привет. Испытываю проблемы в работе БД, а именно огромного роста логов, такого характера: 024-05-16 18:39:07 +05 sentry sentry [unknown] 1050169 7-1 app-sentry01.corp.ru>...
Alexey
2
Только такой if ($modx->event->name == 'OnBeforeCartItemAdding') { $meta = $params['item']['meta']; $lang = $modx->getConfig('_lang'); // проверяем, задана ли опция i...
Multi Web
1
Хм. А телеграм апи работают через HTTP?
The Bird of Hermes
14
Почему Telegram пишет, что объект media не найден, хотя на самом деле я его передаю? Делаю на urllib, без зависимостей, так надо. Вызываю метод sendMediaGroup с таким JSON: ...
Alexey S
1
Карта сайта