Какой лучший способ сделать более длительную задержку внутри серии задач? - PullRequest
0 голосов
/ 02 января 2019

Я пытаюсь построить систему рабочего процесса, которая будет обрабатывать ряд задач и задержек. Задержка может быть изменена или удалена из запущенного рабочего процесса.

Какой лучший способ сделать более длительную задержку внутри серии задач? (Вроде 3-4 месяца). Прямо сейчас у меня в голове два пути:

  1. Предварительный расчет и сохранение времени задержки. Настройте планировщик, который будет проверять задержку несколько раз после определенного интервала (возможно, 1 минута). Это приведет к большому количеству запросов к базе данных, но задержку можно изменить мгновенно.

  2. Запланируйте работу на задержку. Это может уменьшить количество запросов к базе данных, но проблема заключается в поддержании и изменении задержки в этих длительных заданиях. Кроме того, эти задания должны пережить сбой или перезапуск сервера.

Прямо сейчас я не уверен, как сделать это лучше, и все еще изучаю это. Если у кого-то есть подобный опыт, пожалуйста, поделитесь.

1 Ответ

0 голосов
/ 02 января 2019

Вы можете сохранить задачи в базе данных, например:

{
   _id: String,
   status: Enum,
   executionTime: timestamp,
}

Когда вы объявляете новую задачу, вставьте новую запись в БД.


При запуске сервера или при объявлении новой задачи создайте setTimeout, который будет запускать ваш файл node.js, когда это необходимо.


Оптимизация

Чтобы избежать X setTimeout, с X номер задачи для выполнения.Оставьте только одну setTimeout, при этом время ожидания равно ближайшей для выполнения задаче.

Например, у вас есть три задачи: одну нужно выполнить за 1 час, одну за 2 часа и одну за 3 часа,Используйте setTimeout 1 час.Когда он запускается, он выполняет задачу 1, а затем просматривает оставшиеся задачи для повторного запуска.

...