【问题标题】:Most Ideal Way to Run a Scheduled Job with Angular-Meteor使用 Angular-Meteor 运行计划作业的最理想方式
【发布时间】:2017-04-19 06:36:49
【问题描述】:

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

【问题讨论】:

    标签: node.js mongodb angular meteor angular-meteor


    【解决方案1】:

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

    Meteor 的持久和反应式作业队列,支持可以在任何地方运行的分布式工作器。

    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 可以在processJobs options 中指定。默认为每 5 秒一次。

    【讨论】:

    • 这很诱人。我一定会进一步研究。
    • 你有这个包的经验吗?
    【解决方案2】:

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

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

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

    【讨论】:

    • 这行得通。我在想我可以写一些服务器端的东西,为每个创建的约会添加一个 cron 作业。然后,该 cron 将运行一个脚本,并提供一个电子邮件地址。但是你的想法会变成一个批处理。
    • 您不想动态添加 crons,只需编写一个脚本来检查需要发送的通知。您还应该将 cron 指向将其日志输出到文件,以便您可以监视它是否有错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-12
    • 2015-08-03
    • 2018-02-28
    • 1970-01-01
    • 1970-01-01
    • 2020-09-24
    相关资源
    最近更新 更多