на формирование отчета. Клиенту сразу нужно отдать 200 и запомнить параметры, которые он прислал (сервер может перезагрузиться, так что это будет в БД. Сейчас в проекте в сервисах везде постгрес, поэтому ему приоритет.)
- далее эти параметры нужно взять и запустить долгосрочную задачу (например несколько минут). Если задача зафейлилась, то нужно поставить ей статус об этом. Если сервак потух когда задача выполнялась, то при повторном запуске нужно выполнять ее заново.
- задач может быть несколько, нужно выполнять их по очереди
Я так понимаю, мне нужен фоновый поток, который будет подниматься при старте сервера и смотреть на наличие задач в БД. Дальше будет выполнять их по очереди. В реквестах будут приходить еще задачи.
Мне достаточно будет понимать как этот фоновый поток запустить, как это сделать на ноде? Я если что Шарпист, с нодой пока на ВЫ.
https://github.com/OptimalBits/bull . Очередь для выполнения заданий
Она на редисе. Мне не хочется еще какую-то БД подключать для маленькой очереди. Если я по крону буду просыпаться каждую минуту, то через static переменную класса могу отметку ставить, что уже работа выполняется и чтобы из другого крона я видел это состояние?
В смысле как пример есть много других очередей и без редиса, но я только этой пользовался, поэтому названия не на слуху
Понял, спасибо
А вот ещё достаточно известная https://github.com/bee-queue/bee-queue прям по описания самое оно
Просто мне кажется, редис использовать очень удобно. В нем то как раз и будут сохраняться недоаыполненные задания при рестарте сервера. И автоматически будут пытаться выполнится повторно в подобной ситуации
У нас уже есть постгрес, поэтому буду писать в нее. Она тоже удобная и уже есть.
По хорошему такую задачу нужно выполнять через очередь, типа кафки, но достаточно будет реализовать поверх постгреса. Создаете пару таблиц в постгресе с зачами, параметрами для них и статусами, а потом в ноде в index.js делаете обычный setInterval и в функции выбираете из базы задачи с нужным вам статусом и делаете с этими задачами все что вам нужно, хоть все сразу выполняете, хоть по очереди, опираясь на параметры, ну в общем я думаю смысл понятен 😊
а вообще worker_threads вам в помощь))
Вот это что-то интересное. Спасибо!
Типичная задача для месседж брокеров и воркеров
Я сделал что хотел в 6 строк кода. А сколько инфраструктуры мне нужно поднять для месседж брокера и его воркеров? Если нужно будет масштабировать это дело (в чем я очень сомневаюсь) то конечно будет разговор о всем этом.
Рад за вас
Обсуждают сегодня