针对vsivsi / meteor-job-collection的Node.js worker在job.done()上失败:“调用方法job_jobDone时出现exception”错误:匹配错误…“

我正在编写一个Meteor应用程序,将应用程序添加到要由一个或多个外部工作人员处理的队列中。 我正在使用vsivsi / meteor-job-collection( https://github.com/vsivsi/meteor-job-collection ),当我(最初)使用基于方法的(即非外部的) Meteor应用程序内部的工作人员(排队,创build和pipe理工作)。

然而,我想要一个外部进程,即一个Node.js程序(甚至不是Meteor应用程序)来监听并随后处理张贴的作业,并且看到https://github.com/vsivsi/meteor -job-collection#quick-example (第三个代码块;“node.js Worker”) – 毕竟,这可以启用更一般的Meteor不可知的作业处理方法。

我创build了一个单独的Node.js程序,使用dpp,ddp-login和meteor-job成功地将其连接到我正在运行的Meteor应用程序,并以与我最初在Meteor应用程序中完全相同的方式启动作业监听器(当使用方法 – 但是当调用job.done()(其他工作方法似乎完美地工作)时,我得到以下莫名其妙的错误:

“调用方法job_jobDone时出现exception”错误:匹配错误:失败的Match.OneOf或Match.Optionalvalidation“

代码:

var DDP = require('ddp'); var DDPlogin = require('ddp-login'); var Job = require('meteor-job'); var ddp = new DDP({ host: "localhost", port: 3000, use_ejson: true }); Job.setDDP(ddp); ddp.connect(connectCB); function connectCB(err) { if (err) throw err; var options = { //Needed to be able to log in; METEOR_TOKEN is set as an environment variable and this works fine. env: 'METEOR_TOKEN', method: 'account', account: null, pass: null, retry: 5, plaintext: false }; DDPlogin(ddp, options, ddpLoginCB); } function ddpLoginCB(err) { if (err) throw err; Job.processJobs('jobs', 'dataGatherJob', { concurrency: 8, pollInterval: 250 }, processJobsCB); } function processJobsCB(job, cb) { //This is where the actual work gets done; this callback works fine, //is triggered when my Meteor app adds a new job, and the job object //conforms to my expectations; just some example calls on/usages of the //job object that work fine and are reactively updated and handled by my //Meteor app: //console.log(job); //Works fine. //job.progress(50, 100); //Works fine. //job.fail(); //Works fine. job.done(); //Causes the Meteor-app (server) to generate an "Exception while invoking method 'jobs_jobDone' Error: Match error: Failed Match.OneOf or Match.Optional validation" error. cb(); } 

我不明白为什么会这样。 作业ID与服务器设置的实际Mongo集合(队列使用Mongo集合来pipe理作业)是一样的,除此之外,其他的作业操作(例如job.fail())工作。 我还间歇性地重置了Meteor应用程序的“autopublish”和“insecure”包,以确保它们不会造成问题,事实并非如此。

对此有何想法?

非常感谢Danny。