2014-09-20 80 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