Можно ли обновить уже созданную работу в Kue Node.js?

Я создаю задания с помощью Kue.

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 часа.

Теперь я буду проверять каждый входящий запрос, который хочет создать новую работу и получить идентификатор.

Как вы можете видеть из приведенного выше кода, когда я создаю задание, я добавляю идентификатор задания к заданию.

Итак, теперь я хочу проверить входящий идентификатор с помощью существующих заданий job_id в очереди и обновить это существующее задание с новыми параметрами, если найден соответствующий идентификатор.

Таким образом, моя очередь заданий каждый раз будет иметь уникальный job_id :).

Является ли это возможным? Я много искал, но помощи не нашел. Я проверил kue JSON API. но он может только создавать и получать задания, не может обновлять существующие записи.


person Kanishka Panamaldeniya    schedule 21.01.2016    source источник
comment
Вы пробовали метод обновления? github.com/Automattic/kue/blob/master/ библиотека/очередь/job.js#L807   -  person Hugeen    schedule 28.01.2016
comment
Используйте json API для GET /job/‹id› перед созданием задания. Если он существует (статус 200), обновите задание. Если его нет (статус 404), создайте задание.   -  person Monkpit    schedule 03.02.2016


Ответы (2)


Это не упоминается в документации и примерах, но есть обновление метод для 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. Вы можете получить идентификатор задания при создании задания:

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();
});
person Boris Serebrov    schedule 03.02.2016
comment
обновляет ли он период «задержки»? ниже мой код, до и после обновления задержка остается прежней - person Sahas; 24.08.2016

Просто хотел опубликовать обновление. Этот билет https://github.com/Automattic/kue/issues/505 имеет ответ на мой вопрос.

person Sahas    schedule 24.08.2016