.net workflow-foundation queue msmq message-queue

ASP.NET: el mejor sistema de cola para una nueva aplicación



workflow-foundation queue (8)

¿Has investigado un Service Broker en SQL Server? Es un sistema de búsqueda que utiliza la base de datos como una tienda de respaldo.

Mi organización se está preparando para implementar un nuevo sistema, que es una aplicación asp.net. La aplicación tendrá una gran cola de trabajo fuera de línea que inicia el sitio web. Esta cola tendrá diferentes tipos de actividad, idealmente en mensajes XML. Piense en cosas como notificaciones por correo electrónico, tareas programadas, etc.

En el pasado, la organización probablemente habría utilizado MSMQ para realizar esta tarea. Sin embargo, consideran que MSMQ es de la vieja escuela (y estoy parcialmente de acuerdo con ellos), por lo que vamos a hacer una revisión arquitectónica para determinar la "mejor" solución.

En mi opinión, hay algunas opciones potenciales:

1. Seguir con una nueva implementación en la última versión de MSMQ: no es ideal, es un producto conocido.
2. Use Windows Workflow Foundation, que he escuchado de algunos otros desarrolladores que lo han usado para este tipo de cosas.
3. Desarrolle una solución de base de datos personalizada.

¿Me falta alguna solución obvia? Idealmente, este será un producto de Microsoft, pero realmente solo necesita trabajar en una tienda centrada en Microsoft.

Me preocupa lo siguiente:
1. Facilidad de implementación y mantenimiento
2. Una solución que estará disponible por un tiempo
3. Capaz de manejar un buen volumen de filas, con datos XML de tamaño mediano en ellas
4. Sistema de cola absolutamente confiable, con actualización rápida (es probable que múltiples procesos de utilidad extraigan los registros de la cola para procesarlos).


Estoy de acuerdo con alce-en-la-selva que MSMQ probablemente es con lo que debes quedarte.

Tal vez investigue algunas API alternativas que usan MSMQ bajo la cubierta, como nServiceBus de Udi Dahan.


Leer la publicación parece ser que la única razón por la que crees que MSMQ no es adecuado es porque alguien piensa que es "vieja escuela". No creo que sea una buena razón para no usarlo, ya que parece que su empresa tiene experiencia con él, por lo que no habría curva de aprendizaje, lo que significa una fácil implementación y mantenimiento.

Además, MSMQ encajaría perfectamente con todas las inquietudes que mencionó que tiene. Entonces, a menos que haya otra razón "real" para no usarlo, creo que me quedaré con MSMQ.


Podría ver utilizando un agente de mensajes de código abierto como Apache ActiveMQ


Sugiero que busque en WCF, puede configurarlo para especificar persistencia, mensajes en cola y utiliza la tecnología MSMQ debajo de las coberturas. La abstracción / interfaz de la WCF y la tecnología deberían estar presentes por mucho tiempo.


Tienes unas cuantas opciones:

  1. Biztalk: está diseñado para entrega de mensajes garantizados y enrutamiento a nivel corporativo. Es difícil de configurar, costoso y tiene una curva de aprendizaje abrupta; sin embargo, una vez que lo enciendes, es sólido.

  2. MSMQ: rápido, barato como en Free, fácil de usar, y simplemente funciona.

  3. SQL Service Broker. Es un paso adelante de MSMQ, pero un gran paso hacia abajo desde Biztalk.

Los principales problemas realmente se reducen al conjunto de características que necesita. Biztalk es más o menos su propio entorno de desarrollo. Mientras que MSMQ requiere que construyas todo a su alrededor.


Sin embargo, parece que para todo su sistema, puede usar Windows Workflow para administrar su lógica comercial, y simplemente usar MSMQ como almacenamiento para su lista de tareas. Su flujo de trabajo comenzará retirando el siguiente mensaje de la cola, y luego determinará qué hacer con él.

Hacer cola es algo con lo que no quiere meterse, confiar en algo que funciona y que ya ha sido probado por muchas personas.


Como alternativa a ActiveMQ (mencionado anteriormente) existe RabbitMQ de fuente abierta. Por lo que dicen, se integra muy bien con ASP.NET y WCF.

http://www.rabbitmq.com/