2010-08-23 41 views
6

從我所看到的情況來看Gearman不支持計劃任務或延遲工作。我在想,也許預定的工作可能會先在at中排隊,然後在at時間段過期後再添加到Gearman隊列中。在Gearman上安排一個特定日期和時間的工作

at任務是持久性的,因爲它們被寫爲文件到服務器假脫機目錄中的目錄。因此,唯一的瓶頸可能是將任務添加到Gearman隊列的簡單腳本,因爲at無法在服務器之間分佈。將它傳遞給Gearman處理實際工作意味着我可以正確地進行作業記錄等。

這是處理此問題的最佳方法,您有任何其他想法嗎?

我選擇Gearman而不是其他隊列解決方案的原因是它有一個PHP擴展。

我正在編寫的代碼用於維護需要發送的電子郵件隊列。因此,我可能會指定我要在週五的9.50上發送電子郵件至[email protected]

+6

這是因爲我們德國人,我們做我們的工作*馬上*。我們不需要調度。 – 2010-08-23 12:34:57

+1

非常有趣!似乎所有Gearman的問題都是以這種方式展開的。 – Treffynnon 2010-08-23 12:37:56

+2

@Treffynnon是的,他們邀請他們......他們經常以正確的方式(「如何阻止一名齒輪工人」,「用一個命令殺死齒輪工人」......):) – 2010-08-23 12:41:22

回答

1

一個相當冒險的解決方案,只適用於每小時或每天的解析度,就是讓工作(函數)名稱包含你想要它發送的日期。然後讓工人每小時或每天開始在cron註冊這些工作。

例如,如果您想在2012年3月12日星期一上午9點​​發送電子郵件,請在隊列中添加一個名稱爲email_2012-03-12_09:00的作業。然後每小時運行一次cron作業,該作業運行一名工作人員,該作業人員註冊任何匹配email_ +當前日期和小時的作業。

正如我所說,可能可行,但相當哈克!

更新1:我最近看到的gearmand database persistence的文檔提現名爲when_to_run這是一個INT領域,並有可能保持一個Unix紀元時間戳。該字段似乎尚未在代碼中引用。

0

如果您正在使用Zend ...

SlmQueue是作業隊列抽象層。它允許您在Zend Framework 2應用程序中輕鬆使用作業隊列系統。因此它不會強制您專門使用一種類型的作業隊列。您可以編寫代碼和獨立於底層系統的作業。這使系統具有極大的靈活性和解耦。

https://github.com/juriansluiman/SlmQueue

相關問題