sql >> データベース >  >> NoSQL >> Redis

ブルキュー:ジョブが失敗した場合、キューが残りのジョブを処理しないようにするにはどうすればよいですか?

    bull 失敗した直後に、キュー内の次のジョブを取得する前に同じジョブを繰り返すことはできません。

    解決策:

    1. 新しいジョブを作成し、その優先度を現在のジョブタイプよりも小さい値に設定します。
    2. 失敗したジョブを解放します(resolve() またはdone()
    3. この新しいジョブは、bullによってすぐに取得されます 処理用。

    サンプルコード:以下のコード Job-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. 現在利用可能:AWSで完全にホストされたMongoDBインスタンス

    2. ClusterControl1.5ドキュメント-新機能

    3. カスタムredis-クライアントのコンパイルに失敗する

    4. マングースクエリにタイムアウトを設定するにはどうすればよいですか?