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

Всем привет. Какая библиотека поможет решить такую задачу? - Приходит запрос

на формирование отчета. Клиенту сразу нужно отдать 200 и запомнить параметры, которые он прислал (сервер может перезагрузиться, так что это будет в БД. Сейчас в проекте в сервисах везде постгрес, поэтому ему приоритет.)
- далее эти параметры нужно взять и запустить долгосрочную задачу (например несколько минут). Если задача зафейлилась, то нужно поставить ей статус об этом. Если сервак потух когда задача выполнялась, то при повторном запуске нужно выполнять ее заново.
- задач может быть несколько, нужно выполнять их по очереди

Я так понимаю, мне нужен фоновый поток, который будет подниматься при старте сервера и смотреть на наличие задач в БД. Дальше будет выполнять их по очереди. В реквестах будут приходить еще задачи.

Мне достаточно будет понимать как этот фоновый поток запустить, как это сделать на ноде? Я если что Шарпист, с нодой пока на ВЫ.

13 ответов

19 просмотров

https://github.com/OptimalBits/bull . Очередь для выполнения заданий

Sergii- Автор вопроса

Она на редисе. Мне не хочется еще какую-то БД подключать для маленькой очереди. Если я по крону буду просыпаться каждую минуту, то через static переменную класса могу отметку ставить, что уже работа выполняется и чтобы из другого крона я видел это состояние?

В смысле как пример есть много других очередей и без редиса, но я только этой пользовался, поэтому названия не на слуху

Sergii- Автор вопроса

Понял, спасибо

А вот ещё достаточно известная https://github.com/bee-queue/bee-queue прям по описания самое оно

Просто мне кажется, редис использовать очень удобно. В нем то как раз и будут сохраняться недоаыполненные задания при рестарте сервера. И автоматически будут пытаться выполнится повторно в подобной ситуации

Sergii- Автор вопроса

У нас уже есть постгрес, поэтому буду писать в нее. Она тоже удобная и уже есть.

По хорошему такую задачу нужно выполнять через очередь, типа кафки, но достаточно будет реализовать поверх постгреса. Создаете пару таблиц в постгресе с зачами, параметрами для них и статусами, а потом в ноде в index.js делаете обычный setInterval и в функции выбираете из базы задачи с нужным вам статусом и делаете с этими задачами все что вам нужно, хоть все сразу выполняете, хоть по очереди, опираясь на параметры, ну в общем я думаю смысл понятен 😊

а вообще worker_threads вам в помощь))

Sergii- Автор вопроса

Вот это что-то интересное. Спасибо!

Типичная задача для месседж брокеров и воркеров

Sergii- Автор вопроса

Я сделал что хотел в 6 строк кода. А сколько инфраструктуры мне нужно поднять для месседж брокера и его воркеров? Если нужно будет масштабировать это дело (в чем я очень сомневаюсь) то конечно будет разговор о всем этом.

Рад за вас

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

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

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
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
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
~ 2m21s  nix shell github:nixos/nixpkgs#stack ~  stack ghc -- --version error: … while calling the 'derivationStrict' builtin at /builtin/derivation.nix:...
Rebuild your mind.
6
Карта сайта