2014-09-20 82 views
2

我使用appengine(java)作爲移動應用程序(android)的後端。我的應用程序的用戶可以創建由標題和日期/時間組成的公共活動。這些事件存儲在我的appengine後端。任何用戶都可以訂閱活動,並在活動開始時收到推送通知。AppEngine中的計劃任務

所以我想安排一個工作/任務appengine運行在事件日期/時間發送推送通知給所有用戶。

示例: 用戶A創建一個活動,該活動將於下週八晚上8點開始。用戶B和用戶B訂閱此事件。 星期六晚上8點,工作/任務應該開始發送推送通知給用戶B和用戶C,以通知事件已經開始。

我的問題是: 如何在appengine上以高效的方式實現類似的功能?我想說,星期六晚上8點開始一個任務。有Cronjobs和TaskQueues。 Cronjobs不能以編程方式創建。 TaskQueue需要被拉下來,並且無法安排在給定的日期/時間拉取,對吧? 因此,我看到的唯一解決方案是創建一個每分鐘運行一次的cronjob,以檢查是否有現在開始的事件。

一個事件可以在任何時間和一週中的任何一天創建。然而,大多數事件是在週末創建的,有些時候沒有創建事件。因此,每分鐘定時運行一次cronjob效率非常低。我在尋找更聰明的解決方案,有什麼想法?

回答

3

的確,根據您的描述,解決方案是創建一個cron作業,用於檢查現在開始的新事件。

但是,您應該小心不要超過每個cron作業的10分鐘窗口。如果您有很多事件,則可能應該使用推式任務隊列將實際處理從cron作業移至後臺任務。

您可以看看this的帖子,瞭解cron作業和任務隊列的組合。

+0

請注意,由cron調用的HTTP請求最多可運行10分鐘,而不是30秒:https://cloud.google.com/appengine/docs/python/config/cron – Adam 2014-12-14 03:44:37

+0

您是對的。 cron的限制已經改變。我編輯了我的答案。感謝您指出。 – 2014-12-15 07:37:40