Как добавить вложенный узел-планировщик

#node.js #nodemailer

#node.js #nodemailer

Вопрос:

Допустим, у меня есть 100 000 записей пользователей. Я хочу отправлять им ежедневные оповещения о заданиях в 10:00 вечера с помощью nodejs node-mailer .

Если я запрошу их все одновременно и отправлю активные задания, это даст Javascript heap out of memory . Поэтому я решил выполнить следующие шаги.

  1. Начиная с 10:00 вечера.
  2. Отправляйте электронную почту для 1000 пользователей каждые 15 минут, пока все пользователи не закончат.
  3. Один и тот же процесс каждый день.

Итак, я решил начать вложенный node-scheduler . Первый планировщик должен начинаться в 10:00 вечера, а вложенный планировщик должен запускаться каждые 15 минут.

   schedule.scheduleJob("*/2 * * * *", async () => {
    console.log("Parent --------every two minutes---------------------------");
    let count= 1;
    schedule.scheduleJob("*/5 * * * * *", async () => {
      console.log("Nested ------------every 5 seconds-----------------------",   count);

    });
  });
  

Результат приведенного выше кода :

 Tue, 09 Apr 2019 06:40:10 GMT  Nested ------------------- every five second---------------- 3
Tue, 09 Apr 2019 06:40:15 GMT  Nested ------------------- every five second---------------- 4
Tue, 09 Apr 2019 06:40:20 GMT  Nested ------------------- every five second---------------- 5
Tue, 09 Apr 2019 06:40:25 GMT  Nested ------------------- every five second---------------- 6
Tue, 09 Apr 2019 06:40:30 GMT  Nested ------------------- every five second---------------- 7
Tue, 09 Apr 2019 06:40:35 GMT  Nested ------------------- every five second---------------- 8
Tue, 09 Apr 2019 06:40:40 GMT  Nested ------------------- every five second---------------- 9
Tue, 09 Apr 2019 06:40:45 GMT  Nested ------------------- every five second---------------- 10
Tue, 09 Apr 2019 06:40:50 GMT  Nested ------------------- every five second---------------- 11
Tue, 09 Apr 2019 06:40:55 GMT  Nested ------------------- every five second---------------- 12
Tue, 09 Apr 2019 06:41:00 GMT  Nested ------------------- every five second---------------- 13
Tue, 09 Apr 2019 06:41:05 GMT  Nested ------------------- every five second---------------- 14
Tue, 09 Apr 2019 06:41:10 GMT  Nested ------------------- every five second---------------- 15
Tue, 09 Apr 2019 06:41:15 GMT  Nested ------------------- every five second---------------- 16
Tue, 09 Apr 2019 06:41:20 GMT  Nested ------------------- every five second---------------- 17
Tue, 09 Apr 2019 06:41:25 GMT  Nested ------------------- every five second---------------- 18
Tue, 09 Apr 2019 06:41:30 GMT  Nested ------------------- every five second---------------- 19
Tue, 09 Apr 2019 06:41:35 GMT  Nested ------------------- every five second---------------- 20
Tue, 09 Apr 2019 06:41:40 GMT  Nested ------------------- every five second---------------- 21
Tue, 09 Apr 2019 06:41:45 GMT  Nested ------------------- every five second---------------- 22
Tue, 09 Apr 2019 06:41:50 GMT  Nested ------------------- every five second---------------- 23
Tue, 09 Apr 2019 06:41:55 GMT  Nested ------------------- every five second---------------- 24
Tue, 09 Apr 2019 06:42:00 GMT  Nested ------------------- every five second---------------- 25
Tue, 09 Apr 2019 06:42:00 GMT  Parent -----------------every two minute------------------
Tue, 09 Apr 2019 06:42:05 GMT  Nested ------------------- every five second---------------- 2
Tue, 09 Apr 2019 06:42:05 GMT  Nested ------------------- every five second---------------- 26
Tue, 09 Apr 2019 06:42:10 GMT  Nested ------------------- every five second---------------- 27
Tue, 09 Apr 2019 06:42:10 GMT  Nested ------------------- every five second---------------- 3
Tue, 09 Apr 2019 06:42:15 GMT  Nested ------------------- every five second---------------- 4
Tue, 09 Apr 2019 06:42:15 GMT  Nested ------------------- every five second---------------- 28
Tue, 09 Apr 2019 06:42:20 GMT  Nested ------------------- every five second---------------- 29
Tue, 09 Apr 2019 06:42:20 GMT  Nested ------------------- every five second---------------- 5
Tue, 09 Apr 2019 06:42:25 GMT  Nested ------------------- every five second---------------- 6
Tue, 09 Apr 2019 06:42:25 GMT  Nested ------------------- every five second---------------- 30
Tue, 09 Apr 2019 06:42:30 GMT  Nested ------------------- every five second---------------- 31
Tue, 09 Apr 2019 06:42:30 GMT  Nested ------------------- every five second---------------- 7
  

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

Решение, вложенный планировщик должен перезапускаться каждые две минуты.

Я не знаю, как это сделать.

Любое решение для этого было бы оценено.

Ответ №1:

Это происходит, поскольку вы создаете новое задание каждые 15 минут, не останавливая старое задание. Вы можете просто остановить старое задание перед началом нового задания.

 let oldJob = null;

schedule.scheduleJob("*/2 * * * *", async () => {

    console.log("Parent --------every two minutes---------------------------");
    let count = 1;

    if (oldJob) {
        oldJob.cancel();
    }

    oldJob = schedule.scheduleJob("*/5 * * * * *", async () => {
        console.log("Nested ------------every 5 seconds-----------------------",   count);
    });
});
  

Комментарии:

1. Спасибо, я не знал, как отменить вложенный планировщик.