Buena estrategia para hacer cola de mensajes?

Actualmente estoy diseñando una aplicación que finalmente querré mover a Windows Azure. Sin embargo, a corto plazo, se ejecutará en un servidor que yo mismo hospedaré.

La aplicación involucra una serie de aplicaciones web separadas, algunas de ellas son esencialmente servicios WCF que reciben datos y otras son sitios para que los usuarios administren datos. Además, será necesario que haya un servicio de trabajo en segundo plano que procesará los datos de varias maneras.

Estoy muy interesado en usar una arquitectura desacoplada para esto. Idealmente, quiero que los componentes (es decir, las aplicaciones web y el servicio de los trabajadores) sepan lo menos posible unos de otros. Parece que usar la cola de mensajes será la mejor solución aquí: las aplicaciones web pueden poner en cola los mensajes con unidades de trabajo en la cola y el servicio de trabajadores puede seleccionarlos y procesarlos según sea necesario.

Sin embargo, quiero desarrollar un buen conjunto de tecnologías para hacer esto, teniendo en cuenta que, en última instancia, me moveré a Azure y deseo minimizar la cantidad de trabajo que tendré que hacer cuando migre a la nube. . Azure tiene un componente de Cola incorporado que parece ideal para mis necesidades. Lo que me gustaría hacer es crear algo que imite esto lo más cerca posible.

Parece que hay varias opciones (estoy usando .NET en Windows, con un back-end de SQL Server 2005), las que he encontrado hasta ahora son:

MSMQAgente de servicios de SQL ServerRodando mi propio usando una tabla de base de datos y algunos procs almacenados

Me preguntaba si alguien tiene alguna sugerencia para esto, o si alguien ha hecho algo similar y tiene consejos sobre qué hacer o evitar. Me doy cuenta de que cada situación es diferente, pero en este caso creo que mis requisitos de colas son bastante genéricos, así que me encantaría escuchar los pensamientos de los demás sobre la mejor manera de hacerlo.

Gracias por adelantado,

Juan

Respuestas a la pregunta(3)

Su respuesta a la pregunta