запросы от другого сервиса и отправляет сообщеньки в телегу
Беда в том, что если кинуть три запроса подряд, средний из которых - отправка файла (занимает больше времени на обработку) - в бота приходят сообщения в порядке
1е
3е
2е
Какой есть самый простой способ обеспечить их обработку "поочередно"?
Может, есть какой-то простой но умный фреймворк который может отдать все это в очередь, и достать из неё, но зная, что "это" задание должно выполнятся после предыдущего?
асинхронное программирование это не просто но эффективно
Тут не про асинхронное программирование, тут больше про работу с Queue на стороне какого-нибудь редиса/реббита Инстансов приложульки может быть несколько, на разных машинах... Они не будут знать о "ин мемори" друг друга
Сам же и ответит по сути)
Создать очередь запросов с concurrency=1 и гонять все через нек
Дык вопрос не в том "как сделать", вопрос в том, есть ли для этого более-менее готовое решение, чтобы все ручками не городить)
а если 1е не придет то 3е и 2е не надо отправлять?
https://www.npmjs.com/search?q=queue
Надо отправлять, но это уже можно логикой обработки задания разрулить, по сути
Эта очерёдность должна быть в контексте каждого пользователя? Или очередь одна на всех?
Тебе точно не нужны никакие редисы и прочее внешнее, ищи на npm in-memory queue и будет тебе счастье
Очередность в контексте ключа уникальности
Там, судя по тексту вопроса, всего один чат
два запроса отправляется балансировщиком на сервер №1, два запроса на сервер №2 Как они узнают друг о друге?)
Не понял ответ. Ключ уникальности - уникален для каждого сообщения
В контексте пользователя, совершающего запрос к апи
если ты хочешь чтобы сообщения шли в очередности 1 2 3 в какой то группе то тебе их надо помечать как группу и отправлять сколько сообщений должно быть в группе и когда ловишь такое сообщение видишь к кой группе оно принадлежит скольки их всего и какое оно по счету в группе и когда все соберешь тогда уже отправишь их в нужном тебе порядке
Не знаю ничего готового. Я бы, наверное, пробовал через ключи партиций Кафки эту очерёдность реализовать. Но с ходу даже не придумать как это сделать правильно
Не совсем тот кейс... Запросы приходят в порядке 1, 2, 3 - это ок, дополнительный индекс здесь не требуется Но запросы приходят с интервалом, ориентировочно, 100мс. При этом выполнение "простого" запроса занимает 150мс, выполнение запроса с обработкой файла - 500мс Таким образом имеем ситуацию, когда 1 и 3 отрабатывают, и соовтетственно отправляются, быстрее, чем 2 Я вижу один вариант решать эту беду - кидать все в очередь с контекстом "запрос от пользователя Василий" в очередь, и доставать в порядке добавления Соответственно об этом весь мой вопрос, есть ли на ноде какая-то обертка, которая позволяет легко и без лишних велоспиедов решать эту задачу (доставать задачи из очереди в том порядке, в котором они добавлены, и приступать к обработке следующей задачи только после того, как предыдущая обработана)
То есть какой-нибудь отдельный сервис, который следит за получением ответов, понимает, какое место в очереди занимает ответ, и проталкивает очередь если пришла пора отправлять ответ
Сколько процессов запущено на сервисе? Используется ли кластер или workerы?
3 инстанса в кластере, у каждого 8 воркеров
Распределяй тогда запросы по воркерам согласно группам
а что будет если воркер 2 не ответит?
Ничего страшного не произойдет. За жизнью воркеров и так нужно следить постоянно
Это может быть очень опасный путь. Какие-то воркеры будут забиты работой, какие-то будут пустыми
Обсуждают сегодня