2012-05-31 67 views

回答

8

我想你誤解了工人角色是什麼。 Web和Worker角色是Window Server VM,主要區別在於Web角色具有IIS運行。你可能有多個實例。

真的沒有「同一個實例中的多個工作者角色」這樣的事情。將工作角色看作虛擬機的模板:啓動腳本和事件處理代碼來處理啓動和關閉等消息,以及您在虛擬機中打包並運行的代碼。

OnStart()Run(),你可以運行任何你想要的代碼。啓動多個線程,運行服務器代碼(如Tomcat)等。無論您有哪些代碼都會在每個實例中運行。在擴展到多個實例時,在每個實例上使用相同的VM模板。

請參閱this answer以及我提供的更多細節。

5

像大衛在他的回答中提到的,你可以啓動多個線程。我的一位客戶通過使用ThreadedRoleEntryPoint類來做到這一點。

這個類允許你使用多個工作角色入口點類(甚至從多個組件),並在相同的角色運行它們:

public override void Run() 
    { 
     Trace.TraceInformation("WebRole::Run begin", "Information"); 

     List<WorkerEntryPoint> workers = new List<WorkerEntryPoint>(); 

     workers.Add(new Worker1()); 
     workers.Add(new Worker2()); 

     base.Run(workers.ToArray()); 

     Trace.TraceInformation("WebRole::Run end", "Information"); 
    } 

這裏的好處是,你可以從小處着手,並運行所有工作角色(實際上不是工作者角色,但讓我們稱他們爲流程或工作者)在一個角色中(您實際部署的角色)。

然後,當您的業務開始增長時,您可以開始使用專用角色,這意味着每個工作人員角色至少會運行一個實例。當這種情況發生時,由於傳遞給ThreadedRoleEntryPoint的Worker繼承自WorkerEntryPoint,這看起來很像RoleEntryPoint類,所以對代碼的影響將很小。

相關問題