#node.js #nodemailer
#node.js #nodemailer
Вопрос:
Допустим, у меня есть 100 000 записей пользователей. Я хочу отправлять им ежедневные оповещения о заданиях в 10:00 вечера с помощью nodejs node-mailer
.
Если я запрошу их все одновременно и отправлю активные задания, это даст Javascript heap out of memory
. Поэтому я решил выполнить следующие шаги.
- Начиная с 10:00 вечера.
- Отправляйте электронную почту для 1000 пользователей каждые 15 минут, пока все пользователи не закончат.
- Один и тот же процесс каждый день.
Итак, я решил начать вложенный 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. Спасибо, я не знал, как отменить вложенный планировщик.