App Engine Java - 在所有任务完成其过程后执行最终事件

时间:2016-05-13 17:25:07

标签: java google-app-engine queue task pipeline

我正在开发一个App Engine应用程序,其中http请求产生未定义数量的任务(可以是10,可以是100,可以是1000)。 这些任务将在PUSH队列中运行。

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

另外一个信息是任务按公共值分组(让我们调用group_id)。当完成相同group_id的所有任务时,可以为该特定组执行该事件。我做的这个规范是因为如果其他任务仍然在运行但是还有其他group_id,那么该组的事件也可以执行。

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

我的问题是,是否有更高级别的解决方案来实现此行为。

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

这里有一些我读过的帖子

如果我正确理解了此Pipeline API的实现,当Job启动时,它会提供一个jobId来测试它是否已完成或仍在运行。 如果是这样,这需要对作业状态进行外部调查,这不是我的情况。我特别需要的是当最后一次完成时,最终的事件会自动触发

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

1 个答案:

答案 0 :(得分:1)

您可以使用单个数据存储区实体来存储group_id,已启动的任务数以及已完成的任务数。完成后,每个任务都会更新此实体,如果完成的任务数等于启动的任务数,则创建“最终”任务以生成报告。