2015-11-02 246 views
2

我使用Azure雲工作者角色處理來自隊列的傳入任務。每個任務的處理可能需要幾個小時,每個工作角色可以同時處理多達N個任務。基本上,它工作。Azure雲服務OnStop

現在,您可以在documentation中看到,工作人員時常可以關閉(用於軟件更新,OS升級等)。基本上,沒關係。但是,此計劃的關機不能強制停止已經運行的任務的工作人員角色。

預計:

當調用由環境調用OnStop()方法:

  1. 輔助角色將停止獲取新的任務進行處理。
  2. 等待運行任務完成。
  3. 繼續計劃關機。

實際:

調用OnStop()方法可長達5分鐘塊。我不能保證我會在5分鐘內完成任務 - 所以,這是問題...我的任務在處理過程中被殺死,這對我的軟件來說變得不穩定。

我怎樣才能避免這5分鐘的限制?任何提示將受到歡迎。

回答

2

我怎樣才能避免這5分鐘的限制?

不幸的是,你不能。這是Azure方面的硬性限制。你需要解決這個問題。

有兩個可能的解決方案,我能想到的,他們都需要你重新思考你目前的架構:

  1. 打破你的一個大任務分解成很多較小的任務和創建某種工作流程。
  2. 使您的任務具有冪等性,以便即使它在兩者之間終止(因爲工作者角色關閉或任務本身出錯)以及當它被另一個實例拾取時,它也會以這樣的方式再次啓動:輸出任務沒有損壞。
1

不,你不能繞過這個限制。一般來說,你不應該依賴你的任何實例長時間連續運行。實例可能會突然停止,或者它們可能突然消失(因爲服務器底層故障)。您應該設計軟件,以便在實例重新啓動(可能重新部署)或某個其他實例找到容納先前釋放的工作項目的情況下重新處理工作項目,而沒有任何不利影響。