使用 Angular-Meteor 运行 计划作业的最理想方式

Most Ideal Way to Run a Scheduled Job with Angular-Meteor

我正在用 angular-meteor 编写约会安排应用程序。其中一项要求是向进行预约的客户发送文本通知。客户提供手机号码。但基本上,我只想在预约时间前 X 分钟发送一封电子邮件。 运行 关闭 angular-meteor 堆栈,最好的方法是什么?所有约会信息都保存到 mongo 数据库。

编写一个节点脚本,向每个在 运行 时间后 X 分钟到 X+10 分钟之间有约会的客户发送电子邮件。发送电子邮件后,在 mongo 中的约会上设置一个布尔标志,这样就不会发送两次。

运行 每 5 分钟触发一次的 cron。

重叠应确保没有任何东西从裂缝中滑落,并且该标志将防止发送多个。

您可能对 Meteor job-collection 包感兴趣(不特定于 angular-meteor):

A persistent and reactive job queue for Meteor, supporting distributed workers that can run anywhere.

job-collection is a powerful and easy to use job manager designed and built for Meteor.js.

It solves the following problems (and more):

  • Schedule jobs to run (and repeat) in the future, persisting across server restarts
  • […]

特别是job.after(someTimeBeforeAppointment)

// Server
var myJobs = JobCollection('myJobQueue');

// Start the myJobs queue running
myJobs.startJobServer();


// Create a Job (e.g. in a Meteor method)
var job = new Job(myJobs, 'jobType', jobData);

// Specify when it can run and save it.
job.after(someTimeBeforeAppointment).save();


// Server (or could be a different server!)
// How jobs should be processed.
myJobs.processJobs('jobType', function (job, done) {
    var jobData = job.data;

    // Do something… could be asynchronous.
    job.done(); // or job.fail();

    // Call done when work on this job has finished.
    done();
});

可以在processJobsoptions中指定pollInterval。默认为每 5 秒一次。