如何在同一个实例上运行多个辅助角色的Windows Azure?可能吗?
答案 0 :(得分:8)
我认为你误解了工人角色是什么。 Web和工作者角色是Window Server VM,主要区别在于Web角色有IIS运行。您可能有多个实例。
在同一个实例中确实没有“多个工作者角色”。将Worker Role视为虚拟机的模板:启动脚本和事件处理代码,用于处理启动和关闭等消息,以及您编写的代码,这些代码在虚拟机中打包并运行。
从OnStart()
或Run()
,您可以运行任何您想要的代码。启动多个线程,运行服务器代码(如Tomcat)等。无论您拥有什么代码,都会在每个实例中运行。当您扩展到多个实例时,会在每个实例上使用相同的VM模板。
请参阅this answer,我提供了更多细节。
答案 1 :(得分: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的工作人员继承自看起来很像RoleEntryPoint类的WorkerEntryPoint。
答案 2 :(得分:-2)