DeadlineExceededException和数据存储/任务队列操作



我正在做一些应该在60秒内完成的操作,但可能有一些罕见的情况需要更长的时间(但永远不会超过10分钟)。它在应用引擎文档中说,如果你捕获一个DeadlineExceededException,在它永久失败之前,你有不到一秒钟的时间来做操作。这段时间是否足够将任务添加到队列和/或执行数据存储写操作?我认为最安全的方法是在操作开始时异步添加任务/写入数据存储实体(async),并在操作完成后将其从队列中删除。后一种方法将使用两倍的api调用,但它值得吗?

我建议使用队列作为所有操作的默认值,这样您就不必在捕获死行超过错误时实现回退到它。它更干净,更容易维护,而且用户不必等待操作完成。为了实现这一点,您可以使用ajax调用触发队列,并在后台获取结果,这样用户就不必等待操作完成。是的,这是值得的,因为它可以"保证"你可能需要的时间窗口。

在引发异常后,运行时环境为请求处理程序提供了更多的时间(不到一秒)来准备自定义响应。因此,将它添加到任务队列中就足够了。

如果您不希望客户端继续轮询任务队列结果,我建议您查看Channel API。它将使您能够实现客户端的推送通知。

在任务队列结束时,您只需向客户端发送通知,让他知道任务已被处理。

最新更新