2015-02-10 47 views
0

(我爲標題感到抱歉,這是我能想到的最好的)如何管理多個用戶的系統隊列和啓動/停止實例?

我有一個PlayFramework(2.3)應用程序,我的用戶可以上傳大的csv文件進行處理。 一旦CSV導入,我運行一個任務,將通過每個新的條目,並檢查一個特定的數據與外部API(每個條目)的請求。

因爲這需要很長的時間,我做的異步檢查,但我在這裏面臨的一個結構性問題:

  1. 用戶A上傳文件100K線
  2. 我的100K行添加到我的異步代碼,並啓動它
  3. 用戶B上傳文件200K線
  4. 我想補充的新線目前異步代碼
  5. 我停止應用程序(更新代碼)
  6. 重新啓動時,應該從停止位置開始。

我想到了一個Queue系統,但是我在啓動應用時會失去興趣。

有關我如何做到這一點的任何想法?

謝謝你的幫助。

回答

0

既然問題是結構性的,我只會專注於高層次的實現細節:

我停止應用程序(更新代碼)

當你決定停止應用程序,你需要一種方法來逐漸停止所有正在運行的線程爲此,您在應用程序中啓動的每個線程都應該註冊某種線程管理器。這樣,當您通過單擊停止按鈕/關閉應用程序服務器來決定停止應用程序時,您的線程管理器會知道哪些線程正在運行,並將使這些線程有機會保存其狀態或完成工作,而不允許任何新的線程在最終降低主線程本身之前產生。

重新啓動時,它應該開始停止的地方

爲了從停止的地方開始,你需要保存完成的工作狀態的地方。假設您正在使用基於隊列的系統,則必須在應用程序停止之前序列化您的隊列。這樣,當您重新啓動應用程序時,您不會丟失隊列中的內容。

+0

這聽起來對我來說很合理。我第二個這個高層次的實現描述。 – hfontanez 2015-02-10 15:28:31

相關問題