javascript - BullMQ 使用 IIFE 从文件启动作业
问题描述
假设我有一个function1.js
(或ts
,在这种情况下无关紧要),function2.js
以及任何其他具有不同逻辑的 IIFE 文件,如下所示:
(async function F() {
try {
//[1,2,..n].map(x => console.log(x));
//await any other action
} catch (e) {
console.error(e)
}
})()
我有任何作业队列管理器,就我而言,它是BullMQ,但我想它与Bull或Agenda相关。所以问题是,我可以将文件本身放入队列中吗?
那么在启动一个新的Worker的情况下,它会自行执行吗?
像这样:
const worker = new Worker(queueName, async (job: Job) => {
// `path/to/functionN.js`
return 'some value';
});
我知道队列是为一个典型函数需要 args 的情况而创建的,应该由 MQ 传递它来执行例行任务。但在这种情况下,我有各种function.js
文件,想为它们管理队列。
解决方案
我在 BullMQ docs 中找到了一个相对示例。实际上,它被称为沙箱处理器,并且只有 Bull 和 BullMQ 以及其他任何作业队列管理器支持此功能。
其他,您需要编写自己的实现。
另一种方法是使用pm2 编程 API,它可以手动管理文件。在这种情况下,您使用 IIFE 传递文件的直接路径,然后它已通过 pm2 执行。
const worker = new Worker('Queue', async (job: Job) => {
/**
* job.data is path to file
* not sure that await before pm2 is nessessary
*/
console.log(job.data)
await pm2.connect(err => {
if (err) console.error(err)
pm2.start({
name: 'Task Name',
script: job.data.path,
exec_mode: 'cluster',
}, (err) => {
if (err) console.error(err)
pm2.disconnect()
});
});
}, {connection: connectionRedis});
在这种情况下,您可以通过以下方式监控您的任务pm2 -list command
如果您在项目中使用 TypeScript,那么不要忘记路径应该是编译后的 JS 文件,否则正确配置 pm2
推荐阅读
- json.net - 如何使用 json.net 在 Visual Basic 中创建 JSON 字符串?
- git - 如何恢复我在 git 上的推送或提交
- android - 删除多个表 execSQL
- html - HTML表格填充不起作用
- json - JSON Postman 正文不适用于 PostgreSQL 插入
- javascript - Jquery Datatable - 从服务器中提取数据 - 如何将值用作属性
- sql-server - 如果 SELECT 中的一个或多个链接服务器脱机,则链接服务器 SELECT UNION 结果
- ios - 尝试将过滤器与 Swift 4、IOS 11 一起使用时出现错误消息
- javascript - 这两行代码有什么区别?
- javascript - 反应不渲染类