Node.js 基于bull的节点cron作业调度
在我的Node Express应用程序中,我需要根据用户从UI上可用的日历中选择的开始时间日期和结束时间日期来安排作业(连接LinkedIn配置文件)。计划对少数选定的数据批执行作业,直到日期时间要求匹配为止 我正在使用npm package Bull来处理作业队列和调度,但它似乎不起作用。作业(用于连接LinkedIn配置文件)或简单控制台(用于测试),在设置计时器或从UI创建新作业时立即执行,而不是在定义的开始时间执行 这是我的密码:Node.js 基于bull的节点cron作业调度,node.js,mongoose,cron,schedule,Node.js,Mongoose,Cron,Schedule,在我的Node Express应用程序中,我需要根据用户从UI上可用的日历中选择的开始时间日期和结束时间日期来安排作业(连接LinkedIn配置文件)。计划对少数选定的数据批执行作业,直到日期时间要求匹配为止 我正在使用npm package Bull来处理作业队列和调度,但它似乎不起作用。作业(用于连接LinkedIn配置文件)或简单控制台(用于测试),在设置计时器或从UI创建新作业时立即执行,而不是在定义的开始时间执行 这是我的密码: const Queue = require("bull"
const Queue = require("bull");
const mongoose = require("mongoose");
const schedulerJobs = require("../api/models/schedulerJobs");
var id = mongoose.Types.ObjectId();
var HTMLParser = require("node-html-parser");
var { fetchSendConnectionData } = require("./services");
var { setLeadName } = require("./utils");
module.exports = async function connectionScheduler(
userId,
cookieName,
leads,
start,
end,
campaign_name,
connection_message,
campaign_id
) {
var i = 0;
var parse_message = HTMLParser.parse(
connection_message
).structuredText.toString();
// 1. Initiating the Queue
const campaignQueue = new Queue("Campaign", {
redis: {
host: "127.0.0.1",
port: 6379,
},
});
const data = leads;
const options = {
attempts: 2,
delay: 5000,
repeat: {
cron: "*/2 * * * * *",
tz: "America/Los_Angeles",
startDate: start,
endDate: end,
},
};
// 2. Adding a Job to the Queue
campaignQueue.add(`${campaign_name}`, data, options);
// 3. Consumer
campaignQueue.process(async (job) => {
campaignQueue.close();
return await console.log("CRON started.....");
console.log(
`Connection Cron For ${campaign_name} Now Points To Index => ${i}`
);
fetchSendConnectionData({
name: cookieName,
profile_links: job[i].profileUrl,
message: setLeadName(parse_message, job[i].name),
})
.then(({ data: { message } }) => {
if (message === "Connection send") {
console.log(
`Its Been 5 Minutes And Connection Request Is Sent To => ${job[i].name}`
);
} else {
console.log(
`Connection Request To => ${job[i].name} Has Failed So Now We Move On To The Next One`
);
}
i = i + 1;
if (i === job.length) {
job.close();
}
})
.catch((err) => {
console.log(
`Connection Request To => ${job[i].name} Has Failed Due To => ${err.message}`
);
i = i + 1;
if (i === job.length) {
job.close();
}
});
});
// 4. Listener
campaignQueue.on("error", (err) => {
// console.log(`Job completed with result ${result}`);
});
campaignQueue.on("progress", function (job, progress) {
// A job's progress was updated!
});
campaignQueue.on("completed", (job, result) => {
// console.log("job completed", job);
//save job completed to database
const jobdetail = {
userId,
start,
end,
campaign_id,
campaign_name,
connection_message,
jobId: job.opts.jobId,
};
const schedulerjobs = new schedulerJobs(jobdetail);
schedulerjobs.save().then((scheduledjob) => console.log("Job saved to db"));
});
campaignQueue.on("failed", function (job, err) {
// A job failed with reason `err`!
});
};
服务器启动后,会立即打印输出:
CRON started.....
Job saved to db
它不等待开始
,只运行一次,直到结束
才保持运行
请帮助解决此问题返回后的任何代码行都将被忽略。 试试这个:
// return await console.log("CRON started.....");
await console.log("CRON started.....");
如果需要,在函数结尾处放置一个空的返回值