2009-08-31 21 views
7

Estoy estudiando el concepto de hacer cola para aplicaciones web (es decir, poner algunos tipos de trabajos en cola para que los complete un trabajador independiente, en lugar de completarlos en el ciclo de solicitud web).Soluciones de colas para ASP.NET MVC

Me gustaría saber si existen soluciones buenas para esto que puedan utilizarse en un entorno ASP.NET MVC.

¿Alguien ha tenido alguna (buena o mala) experiencia?

¡Gracias!

ACTUALIZACIÓN:

Solo para aclarar, no estoy hablando de cola las peticiones entrantes. Voy a tratar de ilustrar lo que quiero decir ...

1) Situación Estándar:

  • solicitud desde el navegador
  • inicia el procesamiento del servidor se inicia
  • trabajo largo
  • Trabajo largo terminado
  • procesamiento del servidor terminó
  • respuesta devuelta al navegador

2) Lo que estoy buscando en:

  • Requsest desde el navegador
  • procesamiento Server inicia
  • largo trabajo colocado en cola
  • servidor procesamiento terminó
  • respuesta devuelta al navegador

Y en otro proceso (posiblemente después de que se envió la respuesta):

  • largo trabajo tomado de la cola
  • largo trabajo comienza
  • trabajo largo finalizado

En la primera instancia, el usuario tiene waite d un largo tiempo para el servidor resoponse, en el segundo fue rápido.

Por supuesto, hay ciertos tipos de trabajos que serían apropiados para esto, algunos que no lo serían.

Update2:

El cliente no tiene que actualizarse inmediatamente con los resultados del tiempo de trabajo.Los cambios solo se mostrarían en la aplicación cada vez que el usuario actualizara una página (después de que el trabajo se haya completado, por supuesto).

Piense en algunas de las cosas que suceden en el desbordamiento de pila: no se actualizan de inmediato en cada parte de la aplicación, pero esto ocurre bastante rápido: sospecho que algunos de estos trabajos están en cola.

+0

La cola la realiza IIS. Cada solicitud se coloca en una cola procesada por los procesos del trabajador. El mantenimiento de los procesos de trabajo y el manejo de solicitud/respuesta lo realiza IIS. ¿Por qué implementar un segundo mecanismo de colas? – Christian13467

+1

@ Christian13467: Estoy hablando de un concepto diferente - vea la explicación en la actualización. – UpTheCreek

Respuesta

5

Publicar los datos de petición en una MSMQ queue y tener un proceso de servicio de Windows los elementos de la cola. O bien, permita que la solicitud web genere un proceso que procesa los elementos en la cola.

+0

Este es un nivel un poco más bajo de lo que pensaba, pero tal vez lo estoy viendo de la manera equivocada, no tengo ninguna habilidad de MSMQ, pero lo investigaré, gracias. – UpTheCreek

0

creo que el comentario de Chrisitan podría ser su respuesta, pero teniendo en cuenta que no sé mucho acerca de IIS y cola con ella, mi solución sería:

Hacer una solicitud asincrónica y cargar los detalles del trabajo en la base de datos. Luego, tenga un trabajo para recorrer la base de datos y procesar los detalles del trabajo. Lo hago para uno de mis sitios. Puede que no sea la mejor solución, pero hace el trabajo.

EDITAR

Mi respuesta todavía podría funcionar, pero tendrá que tener algún mecanismo de sondeo en el cliente para comprobar continuamente la base de datos para ver si el trabajo de ese usuario se lleva a cabo, a continuación, coger los datos que necesita.

+1

No, el comentario de Christian no es mi respuesta;) He considerado la ruta 'roll your own using the DB', pero estoy buscando algo un poco más rebust y construido para un propósito. No quiero volver a inventar la rueda (la mía probablemente no sea perfectamente redonda;) – UpTheCreek

+0

Solo para aclarar la edición: el cliente no necesitaría actualizarse en cuanto a los resultados del trabajo, por lo que no se requeriría una encuesta. – UpTheCreek

2

Es posible que desee utilizar un ESB. He jugado con MassTransit: http://code.google.com/p/masstransit/ - la documentación es (o al menos era) un poco escasa, pero es fácil de implementar.

Además, desarrollo aplicaciones para ejecutar en Amazon EC2 y me encanta su servicio AmazonSQS.

Gracias,

Hal

+0

Revisaré Mass Transit - Noté que está basado en MSMQ. Un equivalente de algo parecido a Amazon SQS es probablemente lo que estoy buscando. Gracias. – UpTheCreek

3

El Rhino servicio de autobús es otra solución que puede funcionar para usted:
http://ayende.com/Blog/archive/2008/12/17/rhino-service-bus.aspx

+0

Gracias - Lo verificare. He disfrutado leyendo las publicaciones de Ayende sobre otros temas en el pasado :) ¿Está listo para la producción? – UpTheCreek

+0

Personalmente nunca lo he usado en producción, sin embargo, conozco personas que lo han usado en producción. –

0

¿ha considerado MSMQ? No hay nada que le impida usar eso desde dentro de MVC, y es bastante simple para empezar.

1

he implementado este patrón haciendo que la llamada servidor web un servicio de WCF de forma asíncrona. Los asistentes VS generarán proxies asíncronos cuando consuma un servicio WCF. Si debe garantizar la entrega al solicitar el servicio, puede usar MSMQ como capa de transporte para el servicio WCF.