Taureau travail n'est pas prise en déclenchée dans cron[Node.js]

0

La question

J'ai plusieurs tâches en arrière-plan processeurs configurés à l'aide du taureau paquet comme ci-dessous

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);
});

J'ai essayé de lancer le travail basé sur une Crontime à l'aide de la cron paquet, mais seulement un travail est traitée, veuillez consulter l'exemple ci-dessous

  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',
  });

J'ai essayé beaucoup de choses pour le faire fonctionner, mais aucun ne semble fonctionner, une liste non exhaustive ci-dessous

  • l'exécution de l'attendent en file d'attente.effacer({ force: true });
  • l'exécution de l'ouvrier processeur sur une instance distincte
  • ajouter du retard à l'emploi de la file d'attente.add('test',{}, {delay:500});
  • l'ajout de la priorité à l'emploi de la file d'attente.add('test',{}, {priorité:1});

En dehors des deux Emplois(test, healthCheckPing) ci-dessus, seulement une toujours est déclenché.

qui est, soit le travail appelé test de traiter, tandis que l'autre ne l'est pas, ou le nom de la tâche healthCheckPing traités, tandis que l'autre n'est pas

C'est l'emploi processeur fonctions ci-dessous

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;

Ce code fonctionne parfaitement sur ma machine locale, mais seulement sur ce problème se produit lorsque la production. Le nœud du serveur est exécuté à l'aide de pm2(mode cluster, instance = 1)

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

La meilleure réponse

0

la question était parce que j'ai été en utilisant le même nom de file d'attente dans un autre service de partage de la même Redis connexion,

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

changer les travailleurs à autre chose correction du problème

2021-11-20 19:22:17

Dans d'autres langues

Cette page est dans d'autres langues

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

Populaires dans cette catégorie

Questions populaires dans cette catégorie