同一实例上的多个辅助角色

时间:2012-05-31 06:28:27

标签: azure azure-worker-roles

如何在同一个实例上运行多个辅助角色的Windows Azure?可能吗?

3 个答案:

答案 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)