2012-05-31 13 views

Respuesta

8

Creo que malinterpretas lo que es un Rol de los Trabajadores. Las funciones web y de trabajo son máquinas virtuales de Windows Server, la principal diferencia es que las funciones web tienen IIS ejecutándose. Puede tener múltiples instancias de cada uno.

Realmente no existe tal cosa como "roles de múltiples trabajadores en la misma instancia". Piense en Worker Role como una plantilla para su máquina virtual: los scripts de inicio y el código de manejo de eventos para tratar mensajes como el inicio y el apagado, junto con el código que escribe que se empaqueta y ejecuta dentro de la máquina virtual.

Desde OnStart() o Run(), puede ejecutar casi cualquier código que desee. Inicia varios hilos, ejecuta el código del servidor (como Tomcat), etc. Cualquier código que tengas se ejecutará en cada instancia. A medida que escala a varias instancias, esta misma plantilla de VM se usa en cada una de esas instancias.

Consulte también this answer, donde proporciono un poco más de detalle.

5

Como David mencionó en su respuesta, puede lanzar múltiples hilos. Uno de mis clientes hizo esto usando la clase ThreadedRoleEntryPoint.

Esta clase permite el uso de múltiples clases de punto de entrada de rol de trabajo (incluso de varios ensamblados) y ejecutarlos en el mismo papel:

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"); 
    } 

La ventaja aquí es que se puede empezar poco a poco y correr todo trabajador roles (no roles de trabajador, pero llamémoslos procesos o trabajadores) en un solo rol (que realmente implementa).

Luego, cuando su negocio comience a crecer, podría comenzar a usar roles dedicados, lo que significa que tendrá al menos 1 instancia ejecutándose por rol de trabajador. Y cuando esto deba suceder, el impacto en su código será mínimo ya que los trabajadores pasaron a ThreadedRoleEntryPoint heredado de WorkerEntryPoint que se parece mucho a la clase RoleEntryPoint.

Cuestiones relacionadas