如何使用Bull和Node.js通过后台作业处理功能?

时间:2019-03-19 02:38:39

标签: node.js express queue

我想知道如何通过Queue / Bull在我的函数“ myCustomMethod”中运行代码。这是正确的方法吗?

./ models / Sport.js

export async function myCustomMethod(type, req)
{
    console.log("This method should be executed via the Queue / Bull");
    let computationResult = true;
    return computationResult;
}

cronCustomFile.js

import { myCustomMethod } from './models/Sport.js';

cron.schedule('*/5 * * * * *', () =>
{
    var battleRoyaleQueue = new Queue('battle_royale_queue');
    console.log('Checking live events every 5 seconds');
    battleRoyaleQueue.process(function (job, done)
    {
        try
        {
            console.log('Processing via battle_royale_queue');
            myCustomMethod('live-events');
            done();
        }
        catch (err)
        {
            console.log(err.message);
        }
    });
    return true;
});

公牛版 “ bull”:“ ^ 3.6.0”

其他信息

作业似乎没有被添加到队列中或未处理。 enter image description here

参考

https://github.com/OptimalBits/bull

1 个答案:

答案 0 :(得分:1)

在您的代码中,您正在创建一个工作程序以每5秒处理一次作业,但您并未创建要处理的作业。相反,您应该创建一次工作程序,然后创建一个添加到队列中并重复处理的作业。

config / bull.js

import Queue from 'bull';
import { myCustomMethod } from '../models/Sport.js';

var battleRoyaleQueue = new Queue('battle_royale_queue');
battleRoyaleQueue.process(function(job, done) {
  const { type } = job.data
    try {
      console.log('Processing via battle_royale_queue');
      myCustomMethod(type);
      done();
    } catch (err) {
      console.log(err.message);
    }
  });

recurringJob.js

import battleRoyaleQueue from '../config/queues.js';

const beginReccuringJob = (type) => {
  battleRoyaleQueue.add({type: type}, { repeat: { cron: '*/5 * * * * *' } });
};
beginReccuringJob('live-events');