我正在做一些应该在60秒内完成的操作但是可能会有一些罕见的情况需要更长时间(但绝不会超过10分钟)。它在应用程序引擎文档中说如果你捕获到DeadlineExceededException,那么在它永久失败之前你需要不到一秒的时间来进行操作。这是否足够时间将任务添加到队列和/或执行数据存储区写入?我假设最安全的方法是在操作开始时添加任务异步/写入数据存储区实体(async),并在操作完成时将其从队列中删除。后一种方法会占用api调用的两倍但是值得吗?
答案 0 :(得分:2)
我建议使用队列作为所有操作的默认值,这样如果你遇到死线超过错误就不必实现回退。它更干净,更易于维护,同时用户无需等待操作完成。为了实现这一点,您可以使用ajax调用触发队列并在后台获取结果,因此用户不会等待操作完成。是的,它值得,因为它可以“保证”你可能需要的时间窗口。
答案 1 :(得分:1)
在引发异常以准备自定义响应之后,运行时环境为请求处理程序提供了更多的时间(不到一秒)。所以将它添加到任务队列就足够了。
答案 2 :(得分:1)
如果您不希望客户端继续轮询任务队列结果,我建议您查看Channel API。它将使您能够向客户端实施推送通知。
在任务队列结束时,您只需向客户端发送通知即可让他现在处理任务。