【问题标题】:Appengine Deferred task limited to 60 secondsAppengine 延迟任务限制为 60 秒
【发布时间】:2013-11-11 00:03:42
【问题描述】:

在 Google Appengine 文档中,它说任务限制为 10 分钟。但是,当我运行延迟任务时,它们会在 60 秒内死亡。我找不到任何可以提及的地方。

这是否意味着 Appengine 延迟任务被限制为 60 秒,或者我做错了什么?

更新:第一个任务是从请求触发的,但我不等待它返回(无论如何我怎么能,没有回调)。随后的那些 我是从任务本身内部以递归方式触发的。

DeferredTask df = new QuoteReader(params);
QueueFactory.getDefaultQueue().add(withPayload(df));

他们中的许多人只是工作,但对于那些达到 1 分钟限制的人,我得到ApiProxy$ApiDeadlineExceededException

com.googlecode.objectify.cache.Pending completeAllPendingFutures:清理未决未来时出错:com.googlecode.objectify.cache.CachingAsyncDatastoreService$3@17f5ddc java.util.concurrent.ExecutionException: com.google.apphosting.api.ApiProxy$ApiDeadlineExceededException: API 调用 datastore_v3.Get() 响应时间过长并被取消。

我注意到的另一件事是,这会影响同时发生的对该服务器的另一个请求,并且随着DeadlineExceededException 而下降。

【问题讨论】:

  • 你得到的确切错误是什么?
  • 您是在后台运行任务,还是在请求时触发它并等待任务完成后再将请求返回给用户?如果是后者,那是不正确的,请求有 60 秒的限制,不管其他任何事情。
  • 请显示您如何触发这些任务的代码。
  • 请参阅更新后的描述。

标签: java google-app-engine


【解决方案1】:

错误来自超过 60 秒的数据存储操作。它与任务队列的截止日期本身并没有真正的关系。你说得对,他们是 10 分钟(见 here

但是根据Old related issue(也许从那以后改为60s)

来自 Google:尽管离线请求目前最多可以存在 10 分钟(而后台实例可以永远存在),但数据存储区查询仍然只能存在 30 秒。

您的代码完成的异常似乎是 Objectify(稍后在请求过滤器中),这实际上是发生超时的地方。我建议您拆分数据操作,以便更快地查询数据存储区,并在必要时对您的数据操作使用 .now(),以便代码中出现异常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-27
    • 2018-10-21
    • 2020-12-12
    相关资源
    最近更新 更多