2011-09-22 110 views
0

我正在關注GAE-J開發Java Web應用程序。Google App Engine Java任務隊列如何用於用戶的批量調度?

我有一個場景,其中用戶將創建他的日程安排提醒。我必須在特定的日期/時間發送電子郵件。

我無法在GAE上創建線程。所以我有任務隊列的解決方案。

所以我可以通過任務隊列來實現這個功能。用戶將創建任務。 App Engine將在特定的日期和時間執行它。

感謝

回答

0

您可以通過任務隊列做到這一點 - 當您收到請求「讓我想起了在日期/時間X通過發送郵件」,您創建具有以下基本結構的新的任務基本上是:

if current time is close to or past the given date/time X: 
    send the email 
else 
    fail this task 

如果提醒時間將來還很遠,任務安排的前幾次將會失敗並被安排在以後。這種方法的不足之處在於,它不能保證任務會在提醒被髮送時正好運行 - 可能會在之前或之後一段時間。考慮到你的任務可以運行10分鐘,你可以縮小這個窗口,所以如果你在提醒時間的10分鐘內,睡到適當的時間,然後發送電子郵件。

如果必須儘可能及時地發送提醒,那麼只需使用Backend - 讓一個實例永久運行並向其發送所有提醒,並且它可以持續查看它必須發送的所有提醒以及在恰當的時間發送出去。

+1

睡覺會佔用大量的掛鐘時間和浪費金錢。稍後重新安排任務是一個更好的主意。 –

3

雖然直接使用任務隊列,正如克里斯所建議的那樣,對於更長的提醒期(例如30天以上),以及在提醒可能被修改的情況下,更直接的方法可能是明智的。

我會建議被存儲提醒在數據存儲,再服用的幾種方法之一,根據您的要求:

  • 運行規律cron作業(比如,每小時),其獲取的列表提醒在下一個時間間隔內出現,併爲每個任務排定任務隊列任務。
  • 有一項任務計劃在下次提醒(系統範圍)到期時運行,該任務會發出提醒,然後爲下一次提醒提出新任務。
  • 運行一個後端,正如克里斯建議的那樣,它會定期掃描數據存儲以查找即將發生的提醒。

在上述所有情況下,當用戶設置的提示少於您設置的最小輪詢間隔時,您可能需要一些特殊情況代碼 - 可能直接排列任務。您還需要考慮批量發送提醒,以儘量減少任務和消耗的掛鐘時間。

相關問題