2010-11-13 71 views
0

我想將一些耗時的東西抽取到隊列中。爲此,我發現Gearman是最常用的,但不知道它對我來說是否正確。 我們想要做的任務之一是隊列發送電子郵件,並希望提供能夠取消發送郵件1分鐘的功能。所以它不應該馬上工作,而是現在+ 1分鐘執行它。這樣我可以在此之前取消這項工作,並且它永遠不會被髮送。用Gearman推遲作業隊列

有沒有辦法做到這一點?

它會在debian上運行。並應該可以從PHP使用。到目前爲止,我發現的唯一的東西是Schedule a job in Gearman for a specific date and time,但運行的東西不廣泛:(

回答

0

有兩個部分給你的問題:(1)在將來進行調度和(2)能夠取消該作業,直到在這個問題中指定的傢伙甚至張貼了他的包裝代碼的時間。

對於(1)at應該只是罰款。你試過了嗎?

如果你不想使用,可以考慮這場景:

  • insert an emai l在數據庫中記錄要發送的電子郵件,包括將在未來1分鐘設置的「timeSent」列。
  • 有一個單獨的gearman worker(我將解釋爲什麼單個人)查看數據庫中未發送的郵件(例如status column = 0)以及timeSent已經通過併發送這些郵件。

因此,對於(2),如果您想在發送之前取消電子郵件,只需將其列更新爲其他內容即可。

你的齒輪工人必須是一個人,因爲如果你有多個他們可能會獲取並嘗試發送相同的電子郵件記錄。如果您需要多次確保獲取電子郵件記錄的人員在進行耗時的操作(如實際通過電子郵件發送)(比如將status列更新爲其他內容)之前立即將其鎖定,請立即將其鎖定。