Pregunta

Tenemos una aplicación MVC que lee datos de MSMQ.Estamos tratando de encontrar una manera de leer el mensaje de la cola y eliminarlo de la cola solo si el usuario ha realizado una operación exitosa en la cola.El mensaje debe permanecer en la cola hasta que el usuario complete el procesamiento; el mensaje no debe estar disponible para nadie más hasta que el usuario que está procesando el objeto del mensaje haya finalizado la operación.

¿Existe una propiedad para que un objeto Mensaje se establezca como Peeked que no permitirá la lectura de este mensaje nuevamente hasta que se vuelva a colocar en la cola o se elimine de la cola?

¿No estamos seguros de si usar MSMQ es una buena idea en este caso?

¿Fue útil?

Solución

Parece que necesita utilizar su(s) cola(s) en modo transaccional.Luego, su cliente puede recibir un mensaje, procesarlo y entonces confirme la transacción, momento en el cual el mensaje finalmente será retirado de la cola.Sin embargo, mientras la transacción esté activa, otros clientes no verán el mensaje; se mantendrá en reserva hasta que la transacción se complete o se cancele.

Este artículo de MSDN tiene una descripción general decente de los patrones de uso para mensajería confiable con MSMQ:

http://msdn.microsoft.com/en-us/library/ms978430.aspx

Otros consejos

La cola es la idea correcta. Su enfoque de "dejar en la cola, bloqueado, pero sigue siendo de tipo de disposición" es erróneo.

Es posible que tenga varias colas.

  1. encola procesar un algo en cola 1

  2. Retiros de cola Proceso B de cola 1 y comienza el trabajo.

    • Si B es exitosa, eso es todo.

    • De lo contrario, se pone en cola en otro lugar (tal vez la misma cola, o tal vez de cola 2) para el trabajo de seguimiento.

Si se volvió a entrar en cola 1, B encontrará de nuevo, con el tiempo. Si se fue a otra cola, a continuación, otro proceso que hace la limpieza, la tala, la corrección de errores o lo que sea, e incluso poner algo nuevo en cola 1.

Una cola no es una base de datos - no hay nada con estado (no "no se fijan en mí, que estoy siendo procesado")

.

Una cola es el almacenamiento transitorio. Alguien escribe, lee otra persona, y eso es todo.


Si quieres fiabilidad, lee esto: http://msdn.microsoft .com / es-es / library / ms978430.aspx

Y esto: http: //blogs.msdn. com / shycohen / archivo / 2006/02/20 / 535717.aspx

Y esto: http: //www.request-response.com/blog/PermaLink,guid,03fb0e40-b446-42b5-ad90-3be9b0260cb5.aspx

La fiabilidad es una característica de la cola, no su aplicación. Usted puede hacer una "lectura recuperables". Es una operación que forma parte de la API de cola.

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