http://code.google.com/appengine/docs/java/javadoc/com/google/appengine/api/datastore/DatastoreTimeoutException.html
"Это может произойти, когда вы пытаетесь поместить, получить или удалить слишком много сущностей или сущность со слишком многими свойствами, или если хранилище данных перегружено или возникли проблемы."
Если вы часто видите исключение, я ожидаю, что это связано с тем, что операция с хранилищем данных слишком велика, поэтому повторная попытка не поможет. Если вы просто защищаетесь от риска того, что исключение может быть сгенерировано, то вы можете попробовать его снова (возможно, поставив в очередь задачу, которая сделает это. Но если вы не можете нажать на хранилище данных, кто скажет, что вы можете поставить в очередь задача?)
Если вы хотите быть устойчивым к пуленепробиваемости и можете гарантировать, что операция, которую вы выполняете в социальной сети, идемпотентна (может повторяться), то:
- Запишите себе, что вам нужно выполнить операцию в социальной сети.
- Если записку не удалось сохранить, прервать и вернуть ошибку.
- В противном случае попытайтесь выполнить операцию в социальной сети.
- В случае успеха удалите заметку.
- Выполните какое-нибудь задание или цикл, чтобы повторить оставшиеся заметки в будущем.
Конечно, вы должны быть немного осторожнее с кодом ответа, который вы возвращаете клиенту iPhone, поскольку успех может занять долго времени - больше, чем длительность запроса, сделанного приложением iPhone. , Таким образом, вы хотите, чтобы запрос вашего движка приложений был также идемпотентным, и вам, вероятно, нужна какая-то отмена.
Если все, что вы получаете из социальной сети, - это успех или неудача, и если операция прошла успешно, повторять ее нельзя, значит, у вас проблемы. Это бесполезный API, предлагаемый в Интернете, поскольку только то, что веб-сервер отправляет вам успешный ответ, не означает, что вы получили его, поэтому иногда вызывающий абонент не может узнать, что он преуспел, даже если успех создает обязанности , Но это случается.