带有事务的队列#addAsync有时会丢失任务

时间:2015-08-02 10:45:35

标签: java google-app-engine

这是关于Google App Engine / Java的问题。

我正在尝试使用带有事务的异步API将任务添加到队列。

这是查看下面问题的最小样本。

https://gist.github.com/hogedigo/4e1943be5a3d3550a6ce

我循环10次并将实体保存到数据存储区并将任务添加到队列中,但有时某些任务似乎丢失了。

我创建事务并将tx传递给Queue#addTask。 始终保存所有实体,但有时会丢失某些任务。 即使我进行交易,我也担心没有一致性。

我没有调用addAsync结果future的get方法。 我确信如果我得到未来的结果会好的,但我不想这样做,因为我需要同时运行事务。

下面的文档说“调用Transaction.commit()会阻止事务在提交之前所做的所有异步调用的结果。”

https://cloud.google.com/appengine/docs/java/datastore/async#Working_with_Async_Transactions

Transaction.commit只阻止数据存储异步调用? 并且不会阻止taskqueue异步调用吗?

1 个答案:

答案 0 :(得分:0)

addAsync()返回Future<TaskHandle>。在你的位置,我会尝试将未来添加到futures。这至少应该揭示隐藏的ExecutionException