2016-05-13 32 views
0

我正在开发一个App Engine应用程序,其中,http请求产生未定义数量的任务(可以是10,可以是100,可以是1000)。 这些任务将在PUSH队列上运行。App Engine Java - 在所有任务完成其进程时执行最终事件

当所有任务完成后,我需要一个确定性操作来获取每个任务的状态并创建一个最终报告(所有已执行操作的摘要)。对于这个例子,假设它是电子邮件传递。

其他信息是,任务按照一个公共值分组(我们称之为group_id)。当相同group_id的所有任务都完成时,可以为该特定组执行该事件。我所做的规范是因为如果其他任务仍在运行,但还有其他group_id,则可以执行该组的事件。

我想知道哪种是最好的方法来实现这样的东西。 当然,可以有很多“自制”解决方案,例如,我将每个任务的状态保存在数据存储实体中,并检索每个状态,否则每个任务都可以“询问”其兄弟并检查它是否是最后一个一。

我的问题是如果有更高层次的解决方案来实现这种行为。

通过快速搜索,我发现管道API [1]似乎很有前途,但我不确定要了解它是否是我需要的行为的正确解决方案。 在stackoverflow这个库是非常受欢迎的,所以也许是正确的方式来做到这一点。

这里是一些线程我读

如果我理解正确的话这个Pipeli实施ne API,当Job开始时,它提供一个jobId来测试它是否已经完成或仍在运行。 如果是这样,这需要对工作状态进行外部调查,这不是我的情况。我特别需要的是,当最后的成品,自动触发的最后事件

[1] https://github.com/GoogleCloudPlatform/appengine-pipelines

+0

有人可能会争辩说,管道也是一种“自制”解决方案。它基本上使用相同的原则将状态存储在数据存储中。自制对我来说很好,所以我愿意和它一起去。如果您想要并行执行,而且不必使用应用程序引擎,则可能需要查看Google的Dataflow,它基本上就是为此目的而制作的。假设你在这里处理数据。除此之外,我在App Engine上实现了类似于管道的状态机,并使用数据存储来存储上下文。一个cron作业可以检查所有上下文是否完成 – konqi

回答

1

您可以使用一个单一的数据存储实体存储GROUP_ID,任务的数量开始和任务的数量完成。完成后,每个任务都会更新此实体,并且如果完成的任务数量等于启动的任务数量,则创建“最终”任务以生成报告。

相关问题