Redis
 sql >> Teknologi Basis Data >  >> NoSQL >> Redis

Antrian banteng:Saat pekerjaan gagal, bagaimana cara menghentikan antrian dari memproses pekerjaan yang tersisa?

Di bull Tidak mungkin mengulangi pekerjaan yang sama segera setelah kegagalannya sebelum mengambil pekerjaan berikutnya dalam antrian.

Solusi:

  1. Buat pekerjaan baru dan tetapkan prioritasnya ke nilai yang lebih kecil dari jenis pekerjaan saat ini.
  2. Lepaskan pekerjaan yang gagal (resolve() atau done() )
  3. Pekerjaan baru ini akan segera diambil oleh bull untuk diproses.

Contoh kode:Pada kode di bawah ini Pekerjaan-3 akan gagal dan menciptakan pekerjaan baru dan seterusnya sampai "tujuan pekerjaan" berhasil pada suatu saat.

var Queue = require('bull');

let redisOptions = {
  redis: { port: 6379, host: '127.0.0.1' }
}
var myQueue = new Queue('Linear-Queue', redisOptions);

myQueue.process('Type-1', function (job, done) {
  console.log(`Processing Job-${job.id} Attempt: ${job.attemptsMade}`);
  downloadFile(job, async function (error) {
    if (error) {
      await repeatSameJob(job, done);
    } else {
      done();
    }
  });
});

async function repeatSameJob(job, done) {
  let newJob = await myQueue.add('Type-1', job.data, { ...{ priority: 1 }, ...job.opts });
  console.log(`Job-${job.id} failed. Creating new Job-${newJob.id} with highest priority for same data.`);
  done(true);
}

function downloadFile(job, done) {
  setTimeout(async () => {
    done(job.data.error)
  }, job.data.time);
}

myQueue.on('completed', function (job, result) {
  console.log("Completed: Job-" + job.id);
});

myQueue.on('failed', async function (job, error) {
  console.log("Failed: Job-" + job.id);
});

let options = {
  removeOnComplete: true, // removes job from queue on success
  removeOnFail: true // removes job from queue on failure
}

for (let i = 1; i <= 5; i++) {
  let error = false;
  if (i == 3) { error = true; }

  setTimeout(i => {
    let jobData = {
      time: i * 2000,
      error: error,
      description: `Job-${i}`
    }
    myQueue.add('Type-1', jobData, options);
  }, i * 2000, i);
}

Keluaran:




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mengatur jalur dinamis di redis.conf menggunakan variabel Lingkungan

  2. dapatkan tanggal dan waktu saat ini di lua di redis

  3. Siaran Pers:ScaleGrid Mengumumkan Layanan Hosting untuk Redis™ di AWS

  4. Bagaimana cara mengubah antara database redis?

  5. Performa Redis vs Disk dalam aplikasi caching