7

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

4

3 回答 3

8

我认为您误解了工人角色是什么。Web 和 Worker 角色是 Window Server VM,主要区别在于 Web 角色运行 IIS。您可能有多个实例。

真的没有“同一实例中的多个工作角色”这样的事情。将 Worker Role 视为虚拟机的模板:启动脚本和事件处理代码,用于处理启动和关闭等消息,以及您编写的打包并在虚拟机内部运行的代码。

OnStart()or Run(),您可以运行几乎任何您想要的代码。启动多个线程,运行服务器代码(如 Tomcat)等。您拥有的任何代码都将在每个实例中运行。当您横向扩展到多个实例时,每个实例都会使用相同的 VM 模板。

另请参阅此答案,我在其中提供了更多详细信息。

于 2012-05-31T10:55:25.353 回答
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");
    }

这里的优点是您可以从小处着手,并在单个角色(您实际部署的角色)中运行所有工作角色(实际上不是工作角色,但我们称它们为进程或工作人员)。

然后,当您的业务开始增长时,您可以开始使用专用角色,这意味着每个工作角色至少运行 1 个实例。当这需要发生时,对您的代码的影响将是最小的,因为传递给 ThreadedRoleEntryPoint 的工作人员继承自 WorkerEntryPoint,看起来很像 RoleEntryPoint 类。

于 2012-05-31T12:38:26.233 回答
-2

是的你可以。这是设计模式http://www.31a2ba2a-b718-11dc-8314-0800200c9a66.com/2010/12/running-multiple-threads-on-windows.html

于 2012-06-03T17:36:26.780 回答