Google Appengine:如何安排任务在一天中的某个时间运行一次

时间:2017-05-03 12:09:48

标签: google-app-engine cron

我遇到的情况是我希望用户执行操作,可以选择在接下来的24小时之前恢复操作,否则操作将被执行。我能够提出的唯一解决方案是使用 Cron Job 并在一天中的特定时间安排它,在工作中我将检查他们的预定时间已经过去的所有操作然后执行它们。但是这个动作并不经常发生,因此运行Cron工作对我来说似乎不是一个好的解决方案,因为我甚至不确定成本的含义。

我想要做的是,每当用户点击动作时,应该安排作业,一旦执行该动作,应该取消计划。可以用Cron Job做到这一点吗?如果没有GAE提供的替代方案?

2 个答案:

答案 0 :(得分:1)

您有两种选择:

(1)每小时运行一次cron-job(例如)。执行自创建之日起超过24小时的所有操作。

(2)存储操作时,使用DeferredTask API创建任务。如果您需要取消该任务,请为此任务指定一个名称(例如操作的ID)。将此任务添加到队列中,延迟时间为24小时。 Java示例:

 Queue queue = QueueFactory.getDefaultQueue();

  // Wait 24 hours to run
  queue.add(TaskOptions.Builder.withPayload(new MyTask())
      .name(taskName).etaMillis(System.currentTimeMillis() + (24 * 60 * 60 * 1000));

答案 1 :(得分:1)

当cron作业调度请求时,从配额/计费角度将其作为一个正常请求处理。我想你的应用程序每天会收到更多的请求,所以加上一个请求不应该是一个问题,除非你的应用程序非常重要。

我更喜欢cron而不是延期任务,因为后者更复杂。一个cron作业很可能会查询数据存储区然后做某事。跟踪延迟任务比跟踪延迟任务更容易跟踪或管理数据存储的状态。