如何使用Google App Engine Java Task Queues为用户进行大规模调度



我专注于GAE-J开发Java web应用程序。

我有一个场景,用户将为一组提醒创建他的时间表。我必须在那个特定的日期/时间发送电子邮件。

我无法在GAE上创建线程。所以我有了任务队列的解决方案。

所以我可以用任务队列实现这个功能。用户将创建任务。App Engine会在特定的日期和时间执行。

谢谢

尽管像Chris建议的那样,直接使用任务队列会有效,但对于较长的提醒周期(例如30天以上)和可能修改提醒的情况,更间接的方法可能是明智的。

我建议在数据存储中存储提醒,然后根据您的需求采取几种方法之一:

  • 运行一个常规的cron作业(例如,每小时一次),获取在下一个间隔中出现的提醒列表,并为每个任务队列安排任务。
  • 安排一个任务在下一次提醒(系统范围)到期时运行,它会发出提醒,然后为下一次提醒排队一个新任务。
  • 运行后端,如Chris建议,定期扫描数据存储即将到来的提醒。

在上述所有情况下,当用户设置提醒的时间小于您设置的最小轮询间隔时,您可能需要一些特殊情况代码——可能是直接为任务排队。您还需要考虑批量发送提醒,以尽量减少任务和时钟所消耗的时间。

你可以用任务队列做到这一点-基本上当你收到"通过发送电子邮件提醒我在日期/时间X"的请求时,你创建一个具有以下基本结构的新任务:

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

如果提醒时间较晚,前几次调度任务会失败,会被调度到后面。这种方法的缺点是,它不能保证任务会在应该发送提醒的时候精确地运行——可能早一点,也可能晚一点。你可以通过考虑你的任务可以运行10分钟来缩短这个时间窗口,所以如果你在提醒时间的10分钟内,睡到合适的时间,然后发送电子邮件。

如果提醒必须尽可能及时发送,那么只需使用后端-保持实例永远运行并将所有提醒发送给它,它可以连续查看所有提醒,它必须发送并在正确的时间发送它们

最新更新