Boğa işi cron [Düğümünde tetiklenmiyor.js]

0

Soru

Aşağıdaki gibi boğa paketini kullanarak ayarlanmış birden fazla arka plan iş işlemcim var

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

İşi cron paketini kullanarak bir Crontime'a göre çalıştırmayı denedim ancak yalnızca birişlendi, lütfen aşağıdaki örneği kontrol edin

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

Çalışmasını sağlamak için birçok şey denedim ama hiçbiri işe yaramıyor gibi görünüyor, aşağıda birkaçını listeleyeceğim

  • bekleme kuyruğunu çalıştırıyorum.yok etmek ({kuvvet: doğru });
  • çalışan işlemciyi ayrı bir örnek üzerinde çalıştırma
  • kuyruğuna gecikme ekleyin.ekle ('test', {}, {gecikme: 500});
  • kuyruğuna öncelik ekleme.ekle ('test', {}, {öncelik: 1});

Yukarıdaki iki İşten (test, sağlık Kontrolü) yalnızca biri her zaman tetiklenir.

diğer bir deyişle, diğeri değilken test adlı iş işlenir veya diğeri değilken iş adı healthCheckPing işlenir

Bu, aşağıdaki iş işlemcisi işlevleridir

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;

Bu kod yerel makinemde mükemmel çalışıyor, ancak bu sorun yalnızca üretim sırasında ortaya çıkar. Düğüm sunucusu pm2 kullanılarak çalıştırılır (küme modu, örnek = 1)

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

En iyi cevabı

0

sorun, aynı Redis bağlantısını paylaşan başka bir hizmette aynı sıra adını kullanmamdı,

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

işçileri başka bir şeye değiştirmek sorunu çözdü

2021-11-20 19:22:17

Diğer dillerde

Bu sayfa diğer dillerde

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

Bu kategoride popüler

Popüler soruları bu kategoride