Search code examples
node.jsmongodbangularmeteorangular-meteor

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


I'm writing an appointment scheduling app with angular-meteor. One of the requirements is that a text notification be sent out to the customer who made the appointment. The customer provides a cell number. But basically, all I want to do is send out an email X many minutes before the appointment time. Running off the angular-meteor stack, what might be the best way to do this? All of the appointment information is saved to a mongo db.


Solution

  • You might be interested in Meteor job-collection package (not specific to 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
    • […]

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

    The pollInterval can be specified in processJobs options. Default is every 5 seconds.