2011-10-04 10 views
8

Solo quería obtener una confirmación de cómo funciona el envío de mensajes a colas de mensajes transaccionales remotas.¿Cómo funciona la entrega de mensajes transaccionales de MSMQ?

Supongamos que tengo un dos máquinas, A y B.

máquina A tiene una cola transaccional que se utiliza para recibir los mensajes. Un servicio de Windows supervisa esta cola y hace algo con los datos (lo persiste en un servidor SQL). máquina B está ejecutando una aplicación que necesita escribir en la cola en la máquina A.

algunas preguntas:

  1. Cuando se envía el mensaje, es una copia local creada en la máquina B, antes de que se entregado a la máquina A?
    a. Si es así, ¿es este comportamiento por defecto, o solo ocurre cuando se envía la propiedad "IsRecoverable"?
    b. ¿El hecho de que la cola sea transaccional tiene algún efecto sobre este comportamiento?

  2. Dado que estoy usando una cola transaccional, ¿dónde están los datos una vez que se compromete la transacción? a. ¿Está sentado localmente, esperando que el servicio msmq envíe el mensaje a la cola remota?
    b. ¿O está el mensaje en la cola de la máquina remota?

Tengo problemas para interpretar la documentación. En algunos lugares, veo que se describe el comportamiento de almacenamiento y reenvío, pero tengo problemas para entender si ese es el comportamiento predeterminado con las colas transaccionales o si tengo que hacer algo explícitamente para hacerlo.

Respuesta

6

Lo principal que debe entender sobre MSMQ transaccional es que en realidad hay 3 transacciones distintas involucradas en una transmisión transaccional de un mensaje a una cola remota.

  1. El remitente escribe el mensaje en una cola temporal local.
  2. El gestor de colas en la máquina de remitentes transmite el mensaje por el cable al administrador de colas en la máquina del destinatario.
  3. El servicio de receptor procesa el mensaje de cola y luego elimina el mensaje de la cola.

Así que en respuesta a sus preguntas:

Cuando se envía el mensaje, es una copia local creada en la máquina B, antes de que se entrega a la máquina A?

Si es así, es este comportamiento por defecto, o se presenta únicamente cuando la propiedad "IsRecoverable" se envía?

De forma predeterminada. Esto es lo que se conoce como store and forward.

¿El hecho de que la cola sea transaccional tiene algún efecto en este comportamiento ?

No, excepto cuando se produce un error.

Dado que estoy usando una cola transaccional, ¿dónde están los datos una vez que se compromete la transacción ?

Depende qué transacción que quiere decir (ver más arriba)

Está sentado a nivel local, a la espera para el servicio MSMQ para entregar el mensaje a la cola remota?

Solo si la cola remota no está disponible.

O ¿Está el mensaje en la cola de la máquina remota?

Si el servicio del receptor no puede procesar el mensaje con éxito (hay una excepción en el controlador), el mensaje permanecerá en la cola remota.

+0

Gracias Hugh, ¡esto es muy útil! – Kartik

Cuestiones relacionadas