Tengo un servicio de Windows escrito en C# que lee de MSMQ y se basa en el tipo de mensaje que les asigna a los agentes que procesan ese mensaje en un hilo de trabajo. La aplicación se inicia con ningún agente y se crean dinámicamente en tiempo de ejecución como los mensajes llegan en el MSMQMSMQ problema de diseño de procesamiento simultáneo
Aquí es una figura básica de cómo funciona:
Si el subproceso de trabajo agente está ocupado haciendo el trabajo el mensaje está en cola a su cola local. Hasta aquí todo bien. Pero si por algún motivo se detiene el servicio, se pierde el contenido de la cola local.
Estoy tratando de averiguar cuál podría ser la mejor manera de manejar este escenario. En este momento, las colas locales son System.Concurrent.ConcurrentQueue
. Probablemente podría usar un Sql Ce db u otro almacenamiento persistente, pero estoy preocupado por el rendimiento. La otra cosa en mi mente es leer de MSMQ solo cuando los agentes están listos para procesar el mensaje, pero el problema es que no sé qué mensaje contendrá el MSMQ.
¿Qué enfoques posibles puedo tomar sobre este tema?
Me encantaría usar Redis aquí, pero ¿no crees que sería una exageración? – Obaid
No, en absoluto. Es extremadamente liviano y hace para lo que fue diseñado, así que en lugar de elaborar y depurar algo nuevo solo, puedes usar algo que pueda hacer el trabajo por ti. Como alternativa, podría usar archivos mapeados en memoria para lograr acceso rápido a algún tipo de almacenamiento permanente, pero hay algunas complicaciones, y no sé sobre seguridad de hilos ... –