2017-04-18 25 views
1

我正在编写一个带角流星的预约安排应用程序。其中一项要求是将文本通知发送给预约的客户。客户提供一个手机号码。但基本上,我想要做的就是在预约时间前的几分钟发送一封电子邮件。运行角流星堆,可能是最好的方法来做到这一点?所有的约会信息都保存到mongo数据库中。使用Angular-Meteor运行计划任务的最理想方式

回答

2

您可能会感兴趣流星job-collection组(没有具体到角流星):

的流星持久性和无作业队列,支持分布式的工人,可以在任何地方运行。

作业集是一个功能强大且易于使用的作业管理器,专为Meteor.js设计和构建。

它解决了以下问题(及以上):

  • 调度作业在将来运行(和重复),跨服务器持续重启
  • [...]

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

pollInterval可以在processJobsoptions中指定。默认是每5秒。

+0

这很诱人。我一定会进一步研究。 – gh0st

+0

你有这个套餐的经验吗? – gh0st

1

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

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

重叠应该确保没有任何东西滑过裂缝,并且标志将防止倍数被发送。

+0

这将工作。我想我可以写一些服务器端,为每一个创建的约会添加一个cron作业。然后该cron将运行一个提供电子邮件地址的脚本。但是你的想法会把它变成一个批处理过程。 – gh0st

+1

您不想动态添加cron,只需编写一个脚本来检查需要发送的通知。你还应该指出cron将它的日志输出到一个文件,以便你可以监视它的错误。 –