Redis
 sql >> डेटाबेस >  >> NoSQL >> Redis

बुल कतार:जब कोई कार्य विफल हो जाता है, तो कतार को शेष कार्यों को संसाधित करने से कैसे रोकें?

bull . में कतार में अगली नौकरी लेने से पहले विफलता के तुरंत बाद उसी कार्य को दोहराना संभव नहीं है।

समाधान:

  1. नया कार्य बनाएं और उसकी प्राथमिकता को वर्तमान कार्य प्रकार से कम मान पर सेट करें।
  2. असफल कार्य को छोड़ें (resolve() या done() )
  3. यह नया काम bull द्वारा तुरंत लिया जाएगा प्रसंस्करण के लिए।

नमूना कोड:नीचे दिए गए कोड में नौकरी-3 विफल हो जाएगा और नई नौकरी का निर्माण करेगा और इसी तरह जब तक "नौकरी का उद्देश्य" किसी समय सफल नहीं हो जाता।

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

आउटपुट:




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. रेडिस और वॉच + मल्टी समवर्ती उपयोगकर्ताओं को अनुमति देता है

  2. सरल .NET वितरित कैशिंग समाधान के लिए सुझाव

  3. रेडिस - त्रुटि:मान मान्य फ्लोट नहीं है

  4. रेडिस को हेरोकू पर कैसे शुरू करें?

  5. लारवेल इको सर्वर, रेडिस, सॉकेट.आईओ:उन्हें काम करने के लिए प्रतीत नहीं कर सकता