2012-03-04 47 views
12

Tengo una aplicación web alojada de Azure que funciona junto con una cantidad de instancias de un rol de trabajador. Actualmente, la aplicación web les pasa trabajo a estos trabajadores colocando mensajes en una cola de Azure para que los trabajadores los recojan. Los trabajadores pasan el estado y los mensajes de progreso al colocar los mensajes en una cola de "comentarios". Por el momento, para informar a los clientes de mi navegador sobre el progreso, hago ajax las llamadas de sondeo periódicas en el navegador a un método de controlador MVC que a su vez lee la cola de retroalimentación de Azure y devuelve estos mensajes como json al navegador .Uso de SignalR en Roles de trabajador de Azure

Obviamente, SignalR parece una alternativa muy atractiva a este torpe método de sondeo/búsqueda, pero he encontrado muy poca orientación sobre cómo hacerlo cuando hablamos de múltiples roles de trabajadores (en oposición al rol web) necesidad de enviar estado a individuo o a todos los clientes.

SignalR.WindowsAzureServiceBus by Clemens vasters se ve excelente pero deja un poco alto y seco al final, es decir, falta una buena solución de ejemplo.

Agregado comentario: De mi lectura hasta el momento parece que no hay directa comunicación del trabajador papel (en contraposición a web papel) al cliente de navegador mediante el enfoque SignalR es posible. Parece que los trabajadores tienen que comunicarse con el rol web utilizando colas. Esto a su vez obliga a un método de sondeo, es decir, las colas deben sondearse para los mensajes de los roles de los trabajadores; este sondeo debe originarse (ser expulsado) del navegador que aparece (¿cómo se puede configurar un ciclo de sondeo en un rol web?)

En resumen, SignalR, incluso con el enfoque de escalado SignalR.WindowsAzureServiceBus de Clemens Vasters, no puede manejar la comunicación directa desde el rol de trabajador al navegador.

Cualquier comentario de los expertos sería apreciado.

+0

¿Cuál fue la manera más ligera en la que pudo retransmitir la función de trabajador => webrole => navegador de cliente? – DeepSpace101

+0

Como bacr han respondido. También he tenido múltiples roles de trabajadores ejecutándose como clientes y el webrole los controla. –

Respuesta

1

Usamos colas de bus de servicio de Azure para enviar datos a nuestros roles web SignalR que luego se envían a los clientes. El CAT pages tiene muy buenos ejemplos de cómo configurar ciclos asincrónicos y enviar.

+3

Gracias @el_tone Parece que el rol web tiene que hacer el envío al cliente del navegador usando SignalR. Mi problema es que los mensajes que deben enviarse ** se originan en _worker_ roles **. Cómo obtener dichos mensajes de los roles de los trabajadores. Si colocaron estos mensajes en una cola de Bus de servicio parece que el bus de servicio debería ser consultado por la función web. Tal encuesta es lo que se intenta evitar utilizando SignalR en primer lugar. – t0rus

+0

@ t0rus: las colas del bus de servicio se pueden ejecutar en modo de bloqueo, es decir, sin sondeo. La lectura en cola retorna en un tiempo de espera establecido (por ejemplo, 24 horas) o cuando se recibe un mensaje. Bloquear un hilo de IIS en esto es un no-no, pero con las Tareas parece que los gastos generales * podrían * ser bajos. Preguntándose si la sobrecarga puede ser INCLUSO más baja ... – DeepSpace101

+0

Parece que el enlace está caído. –

6

Puede usar sus roles de trabajador como clientes SignalR, de modo que enviarán mensajes al rol web (que es el servidor SignalR) y el rol web reenviará mensajes a los clientes.

+2

¿Tiene un ejemplo de cómo hacer esto? –

+1

Abajo votó esta respuesta porque tal como está actualmente no agrega ningún valor. –

1

Tenga en cuenta que mi conocimiento de estas dos tecnologías es muy básico, recién estoy comenzando. Y podría haber entendido mal su pregunta, pero me parece bastante obvio:

Los roles web pueden suscribirse a un servidor de cola donde el rol de trabajador deposita el mensaje. De ser así, no habría ningún cliente "tirando", el servicio de cola proporcionaría un nuevo mensaje al código del servidor web y, a través de SignalR, enviaría los cambios al cliente sin las solicitudes del cliente involucradas. La comunicación entre la web y el trabajador seguirá siendo la misma (que en mi opinión, es la forma correcta de hacerlo).

0

Los productos de bus de mensajes alternativos como NServiceBus podrían valer la pena investigar. NServiceBus tiene la capacidad de entregar mensajes de forma asincrónica a través de los límites del proceso sin necesidad de sondeo.

Cuestiones relacionadas