Работа по обработке микросервисов с использованием быка - PullRequest
1 голос
/ 22 сентября 2019

Я хотел бы обработать запланированные задания, используя node.js bull .В основном у меня есть два процессора, которые обрабатывают 2 типа заданий.Существует один конфигуратор, который конфигурирует задания, которые будут добавлены в очередь с использованием cron.

Планировщик будет находиться в одном микросервисе, а каждый процессор будет отдельным микросервисом.Так что у меня будет 3 микро услуги.

У меня вопрос, использую ли я правильный шаблон с быком?

index.js

const Queue = require('bull');

const fetchQueue = new Queue('MyScheduler');
fetchQueue.add("fetcher", {name: "earthQuakeAlert"}, {repeat: {cron: '1-59/2 * * * *'}, removeOnComplete: true});
fetchQueue.add("fetcher", {name: "weatherAlert"}, {repeat: {cron: '3-59/3 * * * *'}, removeOnComplete: true});

processor-configurator.js

const Queue=require('bull');

const scheduler = new Queue("MyScheduler");
scheduler.process("processor", __dirname + "/alert-processor");

fetcher-configurator.js

const Queue=require('bull');

const scheduler = new Queue("MyScheduler");
scheduler.process("fetcher", __dirname+"/fetcher");

fetcher.js

const Queue = require('bull');
const moment = require('moment');

module.exports = function (job) {
    const scheduler = new Queue('MyScheduler');
    console.log("Insider processor ", job.data, moment().format("YYYY-MM-DD hh:mm:ss"));
    scheduler.add('processor', {'name': 'Email needs to be sent'}, {removeOnComplete: true});
    return Promise.resolve()
};

alert-processor.js

const Queue = require('bull');
const moment = require('moment');

module.exports = function (job) {
    const scheduler = new Queue('MyScheduler');
    console.log("Insider processor ", job.data, moment().format("YYYY-MM-DD hh:mm:ss"));
    scheduler.add('processor', {'name': 'Email needs to be sent'}, {removeOnComplete: true});
    return Promise.resolve()
};

Будет три микросервиса:

  1. узел index.js
  2. узел fetcher-configurator.js
  3. узел процессор-configurator.js

Я вижу противоречивое поведение от быка.Иногда я получаю сообщение об ошибке Отсутствует обработчик процесса для типа задания

1 Ответ

2 голосов
/ 23 сентября 2019

Цитирую себя с надеждой, что это будет полезно для кого-то другого

Это потому, что оба работника используют одну и ту же очередь.Работник пытается получить следующее задание из очереди, получает задание с неправильным типом (например, «сборщик» вместо «процессор») и терпит неудачу, потому что он знает, как обрабатывать «процессор», и не знает, что делать с «сборщик».Bull не позволяет вам брать только совместимые задания из очереди, оба работника должны иметь возможность обрабатывать все типы заданий.Простейшим решением было бы использовать две разные очереди, одну для процессоров и одну для сборщиков.Затем вы можете удалить имена из заданий и процессоров, они больше не будут нужны, поскольку имя определяется очередью.

https://github.com/OptimalBits/bull/issues/1481

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...