我在Google App Engine上构建了一些东西,它可以充当iPhone应用程序的后端。在应用程序中,有一些互动通过他们的API推送到社交网络。因此,典型的工作流程是这样的:Google App Engine - 你如何处理DatastoreTimeoutException?
- 用户使用iPhone应用程序做的“东西”
- App Engine应用程序是通过HTTP惊动
- App Engine的提醒,用户做了社交网络“的东西。”如果用户要在该网络上检查他们的个人资料,他们将通过应用程序显示他们的活动。所以,就用户而言,他们可能做了什么。
- App Engine需要自己做一些持久性,但是当它尝试时,会引发DatastoreTimeException。现在数据处于一种怪异的状态。
那么处理这个问题的好方法是什么?根据问题的性质,我很乐意将它包装在“交易”中,但无法回滚发送到社交网络的内容。所以,我正在思考如何处理DatastoreTimeException?我是否应该将它包装在试块中,并再次尝试?向用户显示一个错误是否是一个更好的主意,然后当他们再次尝试时,“跳过”社交网络交互以便它不会被推出两次?有没有另一个想法,我没有想到这里?
实际上,重试通常是成功的;即使对于小型操作,您也会定期获取数据存储超时。 – geoffspear 2010-01-23 14:59:34
这就是我的意思 - 如果因为数据存储故障而失败,那么重试就很好。如果因为你的实体太大而失败,那么重试就会永远流失。假设这是一个小故障,这个持续时间大概决定了你是否可以在一个简单的循环中重试(在你的请求超时之前),或者你需要一个任务(因为解决“怪异状态” )。但是我在应用引擎上没有这方面的经验。 – 2010-01-23 15:10:49
该对象有几个属性 - 一个字符串,一个长,几个日期和几个整数。这可能会被视为“太大”,或者可以肯定,这是一个小故障(这是我唯一看到它的时间)。 – bpapa 2010-01-24 02:29:34