/** * 分布式定时任务 * 加载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 app.alias["$mq"] = app.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, }) } }) }