Pregunta

Actualmente estoy construyendo dos servicios de windows:

  • La primera toma los mensajes de una conexión a internet y se inserta en una base de datos.Esto está diseñado para ser rápido y estable, y no cualquier otro tipo de procesamiento

  • El segundo realiza un proceso por lotes con los nuevos mensajes que han llegado desde la última vez que se ejecutó.

Estoy tratando de pensar en una manera para que el segundo servicio sólo se ejecutará en su proceso por lotes cuando los mensajes nuevos están listos para ser procesados y si el segundo servicio de errores el primer servicio que va a seguir y viceversa.En el momento en que se utiliza un bucle cada 5 segundos.

Actualmente estoy pensando en usar una cola de mensajes, donde el primer servicio escribe un mensaje sólo si la cola está vacía, y el segundo servicio ver si la cola contiene todos los mensajes, si no entra en un asincrónica esperar hasta que llegue un mensaje y, a continuación, quitar el mensaje y ejecutar.Por lo tanto, el uso de la cola no se realmente como una cola, pero como un interruptor binario que cuando se cambia de estado de hace un evento que se activa para el segundo servicio.

Supongo que hay una manera mejor de hacerlo que no he encontrado podría por favor alguien que me señale en la dirección correcta?

¿Fue útil?

Solución

En realidad, su forma es EXACTAMENTE cómo me gustaría poner en práctica esta para estos resultados.Con MSMQ, usted no tiene que comprobar para ver si usted tiene un mensaje escrito a la cola, el primer servicio sólo escribe a la cola, y el segundo servicio sólo lee a proceso (cuando está activo).

La belleza de la utilización de MSMQ es que uno o el otro servicio puede estar abajo, pero el las colas va a estar arriba, así que usted puede continuar con el procesamiento.

Otros consejos

A mi me parece como si para este caso todo lo que necesita es un casillero.El primer servicio que almacena en la base de datos y, a continuación, envía un "trabajo que hacer" mensaje.El otro, la espera de los mensajes entrantes.

MSMQ es un poco pesado para algo tan simple.A continuación, de nuevo sólo podría utilizar MSMQ y deshacerse de esa DB totalmente demasiado. Que sería la manera de hacerlo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top