user1862965
user1862965

Reputation: 386

Bull - Triggering multiple functions on a single queue

i would like to create one Bull Queue, and put function in queue? is it possible.

for example: I have

http request /func1 + params -> start func1(params)

http request /func2 + params -> start func2(params)

http request /func3 + params -> start func3(params)

Queue name: MyQueue

How can i process func1(params), func2(params), func3(params) in MyQueue.

i do not know how to queue.add function.

import Queue from "bull";
const queue = new Queue("myQueue");
const main = async () => {
  await queue.add({ name: "John", age: 30 });
};
queue.process((job, done) => {
  console.log(job.data);
  done();
});
main().catch(console.error);

tnx a lot

Upvotes: 0

Views: 861

Answers (1)

Pavel Bely
Pavel Bely

Reputation: 2415

When publishing jobs to the queue you can add parameter
and based on that handle them differently

import express from "express";
import Queue from "bull";

const router = express.Router();
const queue = new Queue("myQueue");

router.get("/func1", function (req, res) {
  queue.add({ func: "func1", ...req.query.params})
});

router.get("/func2", function (req, res) {
  queue.add({ func: "func2", ...req.query.params})
});

router.get("/func3", function (req, res) {
  queue.add({ func: "func3", ...req.query.params})
});

queue.process((job, done) => {
  switch (job.data.func) {
    case "func1":
      // do something
      break;
    case "func2":
      // do something else
      break;
    case "func3":
      // do something else
      break;
    default:
      throw new Error(`unexpected func=${job.data.func}`);
  done();
});

Upvotes: 2

Related Questions