java - App Engine Java - 当所有任务完成其流程时执行最终事件

标签 java google-app-engine queue task pipeline

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

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

附加信息是任务按公共(public)值(我们称之为 group_id)进行分组。当同一 group_id 的所有任务都完成时,可以针对该特定组执行该事件。我这么规定是因为如果其他任务仍在运行,但有其他group_id,则该组的事件也可以执行。

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

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

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

这是我读过的一些帖子

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

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

最佳答案

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

关于java - App Engine Java - 当所有任务完成其流程时执行最终事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37215947/

相关文章:

node.js - 带有自定义 "company_id" header 的 GET 请求在本地有效,但 header 不存在于 GCP App Engine 中

google-app-engine - CDI/Weld 无法执行 RESTEasy 资源的构造函数注入(inject)

Python如何用信号杀死阻塞在队列上的线程?

java - JTextArea 中的控制台输出和用户输入

java - 在开始录制之前我是否必须猜测样本的采样率?

python - 如何更改管理端口?

java - 在 gs-collections 库中寻找排序堆和并发队列

Python 多处理 : RuntimeError: "Queue objects should only be shared between processes through inheritance"

java - JFileChooser 启动问题

java - 不使用 Servlet 和 Tomcat 使用 Java 创建一个简单的网页