Býk práci nedostávají spouští v cronu[Node.js]

0

Otázka

Mám více pracovních míst na pozadí procesory nastavit pomocí bull balíček jako níže

import { CronJob } from 'cron';

import Queue from 'bull';

let queue = new Queue('workers', {
  //  settings: { lockDuration: 60 * 20000 },
  defaultJobOptions: {
    removeOnComplete: true
  },
});


queue
  .on('waiting', function(jobId) {
    // A Job is waiting to be processed as soon as a worker is idling.
    // workerLogger.info(`Job ${jobId} waiting to be processed `);
  })
  .on('completed', async(job, result) => {
    workerLogger.info(`Job ID: ${job.id}, Result: ${result}`);
    try {
      const jobbed = await queue.getJob(job.id);
      if (jobbed) {
        await jobbed.remove();
        workerLogger.info(`removed completed job ${job.id}`);
      }
    } catch (error) {
      throw new Error(error);
    }
  })
  .on('failed', function(job, err) {
    workerLogger.error('job ' + job.id + ' in queue failed... ' + err);
  })
  .on('error', function(err) {
    workerLogger.error('Queue Error... ' + err);
  })
  .on('stalled', function(job) {
    workerLogger.info(
      `stalled job, restarting it again! ${job.queue.name} ${JSON.stringify(
          job.data,
        )} ${job.id} ${job.name}`,
    );
  });

queue.process('healthCheckPing', concurrency, function(job, done) {
  jobs.healthCheckPing(job.data, done);
});

queue.process('test', concurrency, function(job, done) {
  jobs.test(job.data, done);
});

Snažil jsem se běží práce na základě Crontime pomocí cron balíček, ale pouze jednu práci dostane zpracované, prosím, podívejte se na vzorek níže

  const cron = new CronJob({
    cronTime: '* * * * *',
    onTick: function() {
      (() => {
        workerLogger.info('Pushing test to queue...');

        queue.add('test');

        queue.add(
          'healthCheckPing',
          {
            jobName: 'test',
          },
        );
      })();
    },
    start: true,
    timeZone: 'Africa/Lagos',
  });

Snažil jsem se hodně věcí, aby to fungovalo ale nic zdá se k práci, bude seznam několik níže

  • běží čekají fronty.vyhladit({ platnost: true });
  • běží pracovník procesor na samostatné instance
  • přidat zpoždění na práci - fronty.add('test',{}, {delay:500});
  • přidání přednost práci - fronty.add('test',{}, {priorita:1});

Ze dvou Míst(test, healthCheckPing) výše, pouze jeden, vždy se spustí.

to znamená, že buď práci jménem test zpracovaný, zatímco druhý nikoli, nebo název úlohy healthCheckPing zpracovaný, zatímco druhý není

Je to práce procesoru funkcí níže

const jobs = {};

jobs.test = (_, done) => {
  try {
    workerLogger.error('test');

    done(false, 'ok');
  } catch (e) {
    done(e);
  }
};

jobs.healthCheckPing = async({
  jobName
}, done) => {
  try {
    workerLogger.info('health check pinger');

    if (!jobName) throw new Error('uuid not passed');

    // jobname is the slug for monitor

    // use pingkey to negate between staging and prod monitors
    const pingKey = !process.env.NODE_ENV || process.env.NODE_ENV !== 'production' ?
      process.env.STAGING_HEALTH_CHECK_KEY :
      process.env.PROD_HEALTH_CHECK_KEY;

    const url = `https://hc-ping.com/${pingKey}/${jobName}`;

    await axios.get(url);

    done(false, `pinged ${jobName}!`);
  } catch (error) {
    done(error);
  }
};

export default jobs;

Tento kód funguje perfektně na mém lokálním počítači, ale tento problém pouze nastane, když na produkci. Uzel server je spuštěn pomocí pm2(cluster režimu, instance = 1)

bull bullmq cron javascript
2021-11-20 16:34:11
1

Nejlepší odpověď

0

problém byl, protože jsem byl s použitím stejný název fronty v jiné službě pro sdílení stejné Redis připojení,

let queue = new Queue('workers', {
  //  settings: { lockDuration: 60 * 20000 },
  defaultJobOptions: {
    removeOnComplete: true
  },
});

změna pracovníků na něco jiného opraven problém

2021-11-20 19:22:17

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................

Populární v této kategorii

Oblíbené položky v této kategorii