Javascript 使用meteor作业集合启动作业

Javascript 使用meteor作业集合启动作业,javascript,node.js,meteor,jobs,Javascript,Node.js,Meteor,Jobs,我正在使用meteor job collection();但是,我无法创建一个作业 我有一个方法定义为 Meteor.methods( { insertItems: function ( dataArray ) { check( dataArray, [ Object ] ); dataArray.forEach( function ( element ) { [...] } ); } } ); 但是这个方法对内存要求很高,所以我想把它封装在作业中

我正在使用meteor job collection();但是,我无法创建一个作业

我有一个方法定义为

Meteor.methods( {
  insertItems: function ( dataArray ) {
    check( dataArray, [ Object ] );

    dataArray.forEach( function ( element ) {
      [...]
    } );
  }
} );
但是这个方法对内存要求很高,所以我想把它封装在作业中。我如何开始这份工作

我试过了

var job = new Job( Jobs, 'insertItems', data ).priority( 'normal' ).retry(
  {
    retries: 5,
    wait: 15 * 60 * 1000
  }
).delay( 60 * 60 * 1000 ).save();
但是我得到了错误

Error invoking Method 'jobQueue_jobSave': Internal server error [500]
我的作业集合定义为

Jobs = JobCollection( 'jobQueue' );

if ( Meteor.isServer ) {
  Jobs.allow( {
    admin: function ( userId, method, params ) {
      return true;
    },
  } );
}

代码中缺少多个内容

1-确保在提交任何作业之前启动作业服务器。对服务器上的jobCollection调用startJobServer()

Jobs = JobCollection( 'jobQueue' );

if ( Meteor.isServer ) {
  Jobs.allow( {
    admin: function ( userId, method, params ) {
      return true;
    },
  } );
  Jobs.startJobServer();
}
2-您需要执行作业的处理。作业只不过是一个标签,标签上附有计划在某个时间点运行的数据。处理程序实现作业逻辑。在您的情况下,您需要以下内容:

var workers = Job.processJobs('jobQueue', 'insertItems',
  function (job, cb) {
    insertData = job.data;
    // do anything with the job data here.
    // when done, call job.done() or job.fail()

    job.done(); // when done successfully
    job.fail("with reason or error"); //when failing

    // Be sure to invoke the callback
    // when work on this job has finished
    cb();
  }
);    

查看您的服务器控制台以获取有关错误的更多详细信息现在我的作业显示
ready
,但从未启动或完成。我做错了什么?看起来你忘了实现作业处理本身。我已经更新了我的答案。我确实需要工人!:-D这个应该放在哪里?也许我误解了什么。我想我写了
insertItems
,因为我有一个同名的方法。这是错的吗?我是否必须使用
jobs.processJobs()
创建一些作业,并使用
newjob(作业,'job method name'…)
调用这些作业/作业方法?没错,不会自动调用方法
插入项。这只是工作的一个名称。
processJobs
方法引用该名称。在这里,您可以实现作业的处理。这样,您可以在同一作业队列中创建不同类型的作业。在内部,你可以做任何你想做的事情,比如调用Meteor方法。此代码可以放在客户端或服务器上。如果要从客户端卸载处理,则需要将其放在服务器上。这取决于你需要什么。此外,如果在服务器上定义了该方法,也可以从客户端调用它。