我认为你误解了工人角色是什么.Web和工作者角色是Window Server VM,主要区别在于Web角色有IIS运行.您可能有多个实例.
实际上并没有"同一个实例中的多个工作者角色".将Worker Role视为虚拟机的模板:启动脚本和事件处理代码,用于处理启动和关闭等消息,以及您编写的代码,这些代码在虚拟机中打包并运行.
从OnStart()或Run(),您可以运行任何您想要的代码.启动多个线程,运行服务器代码(如Tomcat)等.无论您拥有什么代码,都会在每个实例中运行.当您扩展到多个实例时,将在每个实例上使用相同的VM模板.
请看这个答案,我在那里提供更多细节.
就像大卫在回答中提到的那样,你可以启动多个线程.我的一位客户使用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");
}
Run Code Online (Sandbox Code Playgroud)
这里的优点是,您可以从一个角色(实际部署的角色)开始小规模并运行所有工作者角色(实际上不是工作者角色,而是让它们称之为进程或工作者).
然后,当您的业务开始增长时,您可以开始使用专用角色,这意味着每个工作者角色至少会运行一个实例.当需要发生这种情况时,对代码的影响将是最小的,因为传递给ThreadedRoleEntryPoint的工作人员继承自看起来很像RoleEntryPoint类的WorkerEntryPoint.
| 归档时间: |
|
| 查看次数: |
4646 次 |
| 最近记录: |