2017-04-18 29 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將它的日誌輸出到一個文件,以便你可以監視它的錯誤。 –