Message Queuing puede funcionar a través del equilibrio de carga de red

En este artículo se describe cómo Microsoft Message Queuing (MSMQ) puede funcionar a través del equilibrio de carga de red (NLB).

Versión original del producto: Microsoft Message Queuing
Número de KB original: 899611

Introducción

En el siguiente artículo se describe cómo MSMQ puede funcionar a través de NLB. En este artículo también se describen las posibles configuraciones incorrectas de MSMQ.

Importante

Este artículo contiene información sobre cómo modificar el Registro. Antes de modificar el Registro, asegúrese de hacer una copia de seguridad del mismo y Asegúrese de saber cómo recuperar el registro en caso de producirse algún problema. Para obtener más información sobre cómo realizar copias de seguridad, restaurar y modificar el registro, consulte Información del Registro de Windows para usuarios avanzados.

Configuraciones admitidas

MSMQ se admite en un entorno NLB para enviar y recibir mensajes en las siguientes configuraciones:

  • Mensajería no transaccional mediante Direct=TCP
  • Mensajería no transaccional mediante Direct=OS con validación deshabilitada
  • Mensajería no transaccional mediante Direct=HTTP
  • Mensajería transaccional mediante una configuración específica que usa servidores de almacenamiento y reenvío y un único servidor back-end.

Nota:

Solo las colas privadas son destinos admitidos en cualquiera de estas configuraciones. Dado que el nombre de la red virtual no tendrá un objeto de servicio de directorio de Active Directory correspondiente, no se pueden consultar las propiedades de la cola de destino. Puede enviar mensajes a colas públicas siempre que se acceda a estas mediante un nombre de formato directo en lugar de la ruta de acceso estándar.

Mensajería no transaccional mediante Direct=TCP

Esta configuración funciona sin cambios de configuración concretos.

Mensajería no transaccional mediante Direct=OS

Esta configuración solo funciona cuando la validación está deshabilitada. Para deshabilitar la validación, debe agregar la siguiente clave del Registro en MSMQ 2.0 junto con Windows 2000 y en MSMQ 3.0 junto con Windows XP o Windows Server 2003.

Advertencia

Si modifica el Registro de forma incorrecta mediante el Editor del Registro o con otro método, podrían producirse graves problemas. Estos problemas pueden requerir que reinstale el sistema operativo. Microsoft no puede garantizar la solución de estos problemas. La modificación del Registro se hará bajo su propia responsabilidad. Siga estos pasos y, a continuación, salga del Editor del Registro:

  1. Haga clic en Inicio, en Ejecutar, escriba regedit& y, después, haga clic en Aceptar.
  2. Busque y haga clic en la siguiente clave del Registro:
    HKEY_LOCAL_MACHINE\Software\Microsoft\MSMQ\Parameters
  3. En el menú Edición, seleccione Nuevo y haga clic en Valor DWORD.
  4. Escriba IgnoreOSNameValidation y presione ENTRAR.
  5. En el menú Editar , haga clic en Modificar.
  6. Escriba 1 y, a continuación, haga clic en Aceptar.

De forma predeterminada, MSMQ comprueba el mensaje que recibe para determinar si el mensaje está destinado al equipo local. Si el mensaje no está pensado para el equipo local, se rechaza el mensaje.

Cuando se envía un mensaje a un servidor que está detrás de un equilibrador de carga de red, el mensaje se envía mediante el nombre del equilibrador de carga o mediante el nombre de red asignado a la dirección IP virtual en el equilibrador de carga de red. A continuación, el equilibrador de carga de red enruta el mensaje a un receptor MSMQ. Sin embargo, el Administrador de colas local del receptor MSMQ identifica que el nombre del equipo y el nombre de destino del mensaje no coinciden y el Administrador de colas descarta el mensaje. Después de establecer este valor del Registro, MSMQ ya no valida el nombre del equipo de destino y aceptará el mensaje.

Mensajería no transaccional mediante Direct=HTTP

Esta configuración se admite sin cambios de configuración concretos.

Mensajería transaccional mediante una configuración específica que usa servidores de almacenamiento y reenvío y un único servidor back-end

En esta configuración, la mensajería transaccional solo admite la mensajería HTTP cuando los nodos que reciben mensajes asignan la cola receptora a un único servidor back-end. Los mensajes transaccionales HTTP no se admiten cuando las colas de destino están en los nodos individuales.

Para obtener más información sobre esta configuración, vea el documento técnico Escenarios de implementación HTTP de Microsoft Message Queuing (MSMQ) para Windows Server 2003 y Windows XP Professional.

Una configuración para la mensajería transaccional en la que las colas de destino residen en cada nodo miembro detrás de un equilibrador de carga no admite el envío o recepción de mensajes por los siguientes motivos:

  • Mensajes duplicados
  • Mensajes no reconocidos por los remitentes
  • Transacciones incompletas

Mensajes transaccionales y confirmaciones

Cuando un equipo recibe un mensaje transaccional, el mensaje se escribe en el almacenamiento, se registra el mensaje y se devuelve una confirmación de pedido al remitente. La confirmación de pedido se devuelve a la dirección IP de la que procede el mensaje original mediante direct=TCP. A continuación, el remitente recibe el mensaje y este se quita de la cola saliente.

Cuando el servidor de envío no recibe una confirmación en un momento especificado, el mensaje original se vuelve a enviar. Cuando el mensaje llega al destino, el servidor de destino examina el registro y encuentra que el servidor ya ha recibido ese mensaje. Por lo tanto, el servidor de destino rechaza el mensaje y devuelve otra confirmación. El servidor de destino seguirá enviando confirmaciones hasta que el remitente reciba la confirmación del pedido. El registro impide que se reciba un mensaje duplicado y la confirmación del pedido confirma al remitente que se recibió el mensaje.

Problemas con equilibradores de carga de red y mensajes transaccionales

Cuando se envía un mensaje a través de un equilibrador de carga, el equipo de destino ve el mensaje como procedente del equilibrador de carga. A continuación, el equipo de destino envía la confirmación de pedido a través de una nueva sesión. Por lo tanto, el equilibrador de carga no puede usar la misma lógica para mantener el estado de un servidor web o para un servicio similar.

El problema más común en este escenario es que varios servidores envían mensajes a través de un equilibrador de carga, pero todas las confirmaciones de pedido se envían al servidor incorrecto. Este comportamiento provoca que los mensajes no confirmados se acumulen en la cola de salida de los equipos que envían. Además, cuando el remitente no recibe la confirmación del pedido, el remitente volverá a enviar el mensaje. El segundo intento de enviar el mensaje a través del equilibrador de carga puede enviar el mensaje a otro equipo. Este equipo no habrá visto este mensaje antes y el mensaje se procesará como un mensaje nuevo. Recuerde que la validación se deshabilitó para permitir que los mensajes viajen a través del NLB.

Todos los servidores que están detrás del equilibrador de carga pueden recibir y procesar un mensaje enviado a través de un equilibrador de carga antes de recibir una confirmación de pedido. Además, las transacciones que abarcan varios mensajes no siempre se pueden procesar ni llegar en orden. Por lo tanto, MSMQ no admite el envío de mensajes transaccionales cuando se usa un NLB.