45 lines
1.0 KiB
JavaScript
45 lines
1.0 KiB
JavaScript
/**
|
|
* 分布式定时任务
|
|
* 加载schedule文件夹下的任务
|
|
* https://blog.pincman.com/archives/18/
|
|
* https://docs.bullmq.io
|
|
* https://github.com/OptimalBits/bull/blob/develop/REFERENCE.md
|
|
*/
|
|
const config = require("./config")
|
|
// const schedule = require("./schedule")
|
|
const mq = require("./queue")
|
|
module.exports = async (app) => {
|
|
app.mq = mq
|
|
|
|
|
|
const queueName = "boobam_schedule"
|
|
const queue = mq.Queue(queueName);
|
|
mq.QueueScheduler(queueName);//处理延时任务
|
|
try {
|
|
await queue.drain();//清空所有定时任务
|
|
await queue.obliterate();//清空所有定时任务
|
|
} catch (err) {
|
|
console.log("清空任务失败,新改动的任务可能没有生效:", err)
|
|
}
|
|
|
|
const list = await app.load(config.path)
|
|
//等待所有插件载入完成后,启动Worker
|
|
app.willReadyList.push(async () => {
|
|
for (let el of list) {
|
|
mq.Worker(queueName, async job => {
|
|
if (job.name === el.parse.name) {
|
|
el.res.fun(app)
|
|
}
|
|
});
|
|
await queue.add(el.parse.name, {}, {
|
|
repeat: el.res.time,
|
|
})
|
|
}
|
|
})
|
|
|
|
}
|
|
|
|
|
|
|
|
|