Из цитаты в посте gso_gabriel ответ, кажется, да.
Однако у меня есть некоторые сомнения. Как представляется, постановка в очередь транзакционной задачи является функцией клиентской библиотеки хранилища данных (ndb / ваша java библиотека) - я не помню, чтобы она была задокументирована как универсальная c база данных (т. Е. На стороне сервера).
Если это правильно, то ответ может зависеть от фактической реализации библиотеки. Отсюда и мои сомнения - в некоторых случаях клиент не может определить из самого исключения, была ли транзакция успешной или нет. Например, см. исключение транзакции хранилища данных ядра приложения - хотя в ответе также предполагается, что постановка задачи в очередь будет выполняться правильно на стороне сервера). Возможно, все еще можно обеспечить правильную постановку задачи в очередь с дополнительными логами c, но опять же - в зависимости от реализации.
Если вы хотите избежать такой неопределенности в целом, я считаю, что у вас есть 2 варианта:
- если важно правильно и своевременно ставить задачу в очередь даже в этих неблагоприятных условиях, вы можете попытаться использовать именование задачи в качестве средства постановки задачи в идемпотентное состояние: даже если исключение может Не указывайте, была ли задача поставлена в правильном порядке или повторная попытка не повредит, поскольку вы не можете (на некоторое время) поставить в очередь именованную задачу дважды. Однако вам потребуется способ генерирования уникальных имен задач.
Преимущество назначения собственных имен задач состоит в том, что именованные задачи не дублируются, что означает, что вы можете использовать имена задач. чтобы гарантировать, что задача добавляется только один раз. Дедупликация продолжается в течение 9 дней после того, как задача завершена или удалена.
- , если сроки выполнения задачи не так важны, может быть возможно иметь дело со всей этой историей в по-другому. Например, у меня уже были некоторые периодические c высокоуровневые задания проверки целостности в поисках осиротевших предметов (независимо от причин их существования). В моем случае эффект от постановки пропущенного задания был лишь одним из способов создания такого объекта-сироты. Поскольку время не имело решающего значения, и шансы встретить такие события невелики, было приемлемо не беспокоиться о них, не усложнять ситуацию и оставить восстановление (повторное выполнение постановки задачи) этим заданиям проверки целостности.