2016-05-13 78 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,任務的數量開始和任務的數量完成。完成後,每個任務都會更新此實體,並且如果完成的任務數量等於啓動的任務數量,則創建「最終」任務以生成報告。

相關問題