【发布时间】:2014-08-17 21:33:53
【问题描述】:
documentation for GAE's Task Queue API 声明:
您可以将任务作为数据存储事务的一部分加入队列,这样该任务只有在事务成功提交的情况下才会加入队列并保证加入队列。
但是,documentation for datastore transactions 两次声明我们应该尽可能使它们具有幂等性,并且提交到任务队列不是幂等的。 documentation for objectify 更进一步,在其事务中解释了work MUST be idempotent。
那么,有没有一种标准的方法来处理这些建议/要求的组合,或者我应该采用自己的技术(也许使用类似this)?
【问题讨论】:
-
我不确定你在哪里找到了矛盾。如果您在事务中,则以事务方式添加任务,因此如果事务失败,则任务不会入队。
-
@DanielRoseman 推荐/要求事务是幂等的原因是针对这样的情况:事务抛出
DatastoreFailureException,但无论如何都会成功,因此任务已入队。 Objectify 重试事务,并再次成功。现在您的任务已经入队两次,因为入队任务不是幂等的。
标签: google-app-engine transactions google-cloud-datastore objectify