首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BullMQ从文件中启动作业

BullMQ从文件中启动作业
EN

Stack Overflow用户
提问于 2021-02-13 13:32:33
回答 1查看 664关注 0票数 0

假设我有一个function1.js (或ts,在本例中并不重要)、function2.js和任何其他具有不同逻辑的文件,如:

代码语言:javascript
复制
(async function F() {
  try {
    //[1,2,..n].map(x => console.log(x));
    //await any other action 
  } catch (e) {
    console.error(e)
  }
})()

我有任何作业队列管理器,在我的例子中,它是BullMQ,但我想它与公牛议程相关。所以问题是,我能把文件放在队列里吗?

那么,在启动一个新员工的情况下,它会自我执行吗?

如下所示:

代码语言:javascript
复制
const worker = new Worker(queueName, async (job: Job) => {
    // `path/to/functionN.js`
    return 'some value';
});

我了解到,队列是为一个典型函数需要args的情况而创建的,MQ应该通过它来执行常规任务。但在本例中,我有各种function.js文件,并希望为它们管理队列。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-16 09:17:32

我找到了一个BullMQ文档中的相关示例。实际上,它被称为沙箱处理器,只有Bull和BullMQ等作业队列管理器支持这样的特性。

另外,您需要编写自己的实现。

另一种方法是使用pm2编程API,它将手动管理文件。在这种情况下,您将一个直接路径传递给IIFE,然后通过pm2执行该路径。

代码语言:javascript
复制
    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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66185655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档