问题 是否可以在Kue Node.js中更新已创建的作业?


我正在创造就业机会 苦厄

jobs.create('myQueue', { 'title':'test', 'job_id': id ,'params':  params } )
            .delay(milliseconds)
            .removeOnComplete( true )
            .save(function(err) {
                if (err) {
                    console.log( 'jobs.create.err', err );
                }

});

每个工作都有延迟时间,通常是3个小时。

现在我将检查每个想要创建新作业的传入请求并获取id。

从上面的代码中可以看出,当我创建一个作业时,我会将作业ID添加到作业中。

所以现在我想检查队列中现有作业的job_id的传入id,如果匹配的id,用新参数更新现有作业 找到。

所以我的工作队列每次都会有独特的job_id :)。

可能吗?我搜索了很多,但没有找到帮助。我查了一下kue JSON API。但它只能创建和获取检索作业,无法更新现有记录。


10479
2018-01-21 09:28


起源

你试过更新方法吗? github.com/Automattic/kue/blob/master/lib/queue/job.js#L807 - Hugeen
在创建作业之前,使用json API进行GET / job / <id>。如果存在(状态200),则更新作业。如果它不存在(状态404),则创建作业。 - Monkpit


答案:


这在文档和示例中没有提到,但有一个 更新 方法 job

你可以通过更新你的工作 job_id 这条路:

// you have the job_id
var job_id_to_update = 1;
// get delayed jobs
jobs.delayed( function( err, ids ) {
  ids.forEach( function( id ) {
    kue.Job.get( id, function( err, job ) {
      // check if this is job we want
      if (job.data.job_id === job_id_to_update) {
          // change job properties
          job.data.title = 'set another title';
          // save changes
          job.update();
      }
    });
  });
});

完整的例子是 这里

更新:您还可以考虑使用kue已知的“本机”作业ID。 您可以在创建作业时获取作业ID:

var myjob = jobs.create('myQueue', ...
    .save(function(err) {
        if (err) {
            console.log( 'jobs.create.err', err );
        }
        var job_id = myjob.id;
        // you can send job_id back to the client
});

现在您可以直接修改作业而无需循环遍历列表:

kue.Job.get( id, function( err, job ) {
  // change job properties
  job.data.title = 'set another title';
  // save changes
  job.update();
});

12
2018-02-03 21:08



它会更新'延迟'期吗?下面是我的代码,在更新之前和之后,延迟保持不变 - Sahas


只是想发布更新。这张票 https://github.com/Automattic/kue/issues/505 有我的问题的答案。


1
2017-08-24 04:00