开始meteor工作收集的工作

我正在使用meteor-job-collection ( https://github.com/vsivsi/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; }, } ); } 

代码中缺less多个东西。

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