Bull trabajo no llegar activa en cron[Node.js]

0

Pregunta

Tengo varios trabajos en segundo plano procesadores de configurar mediante el toro paquete como el de abajo

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

He intentado ejecutar el trabajo basado en un Crontime usando el cron paquete, pero sólo un trabajo se procesa, por favor revise el siguiente ejemplo

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

He probado un montón de cosas para hacer que funcione, pero ninguno parece funcionar, va una lista de algunos a continuación

  • ejecución esperan cola.borrar({ fuerza: true });
  • ejecuta el trabajador procesador en una instancia independiente
  • agregar el retraso para el trabajo - cola.add('prueba',{}, {delay:500});
  • la adición de prioridad para el trabajo - cola.add('prueba',{}, {prioridad:1});

De los dos Puestos de trabajo(prueba, healthCheckPing) anterior, sólo que uno siempre se activa.

es decir, el trabajo denominado prueba procesados, mientras que el otro no lo es, o el nombre del trabajo healthCheckPing procesados, mientras que el otro no lo es

Este es el empleo del procesador siguientes funciones

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;

Este código funciona perfectamente en mi máquina local, pero este problema solo se produce cuando en la producción. El nodo de servidor que se ejecute el uso de pm2(modo de clúster, instancia = 1)

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

Mejor respuesta

0

el problema era debido a que estaba usando el mismo nombre de la cola en otro servicio para compartir la misma Redis de conexión,

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

el cambio de los trabajadores a otra cosa se ha solucionado el problema

2021-11-20 19:22:17

En otros idiomas

Esta página está en otros idiomas

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

Popular en esta categoría

Las preguntas más habituales en esta categoría