A fila de mensagens pode funcionar no Balanceamento de Carga de Rede

Este artigo descreve como o MSMQ (Microsoft Message Queuing) pode funcionar por meio do NLB (Balanceamento de Carga de Rede).

Versão original do produto: Enfileiramento de mensagens da Microsoft
Número de KB original: 899611

Introdução

O artigo a seguir discute como o MSMQ pode funcionar no NLB. Este artigo também discute possíveis configurações incorretas do MSMQ.

Importante

Este artigo contém informações sobre como modificar o Registro. Faça backup do Registro antes de modificá-lo. Você deve saber como restaurar o Registro caso ocorra algum problema. Para obter mais informações sobre como fazer backup, restaurar e modificar o registro, consulte Informações de registro do Windows para usuários avançados.

Configurações suportadas

O MSMQ tem suporte em um ambiente NLB para enviar e receber mensagens nas seguintes configurações:

  • Mensagens não transacionais usando Direct=TCP
  • Mensagens não transacionais usando Direct=OS com validação desabilitada
  • Mensagens não transacionais usando Direct=HTTP
  • Mensagens transacionais usando uma configuração específica que usa servidores de armazenamento e encaminhamento e um único servidor de back-end.

Observação

Somente filas privadas têm suporte para destinos em qualquer uma dessas configurações. Como o nome da rede virtual não terá um objeto de serviço de diretório do Active Directory correspondente, as propriedades da fila de destino não podem ser consultadas. Você pode enviar mensagens para filas públicas desde que as filas públicas sejam acessadas usando um nome de formato direto em vez de usar o caminho padrão.

Mensagens não transacionais usando Direct=TCP

Essa configuração funciona sem alterações de configuração específicas.

Mensagens não transacionais usando Direct=OS

Essa configuração só funciona quando a validação é desabilitada. Para desabilitar a validação, você deve adicionar a seguinte chave de registro no MSMQ 2.0 junto com o Windows 2000 e no MSMQ 3.0 junto com Windows XP ou Windows Server 2003.

Aviso

Poderão ocorrer sérios problemas se você modificar o Registro incorretamente com o Editor do Registro ou outro método. Esses problemas podem exigir a reinstalação do sistema operacional. A Microsoft não pode garantir que esses problemas possam ser resolvidos. Modifique o Registro a seu próprio risco. Siga estas etapas e, em seguida, saia do Editor do Registro:

  1. Clique em Iniciar e, em Executar, digite regedit e clique em OK.
  2. Localize e clique na seguinte chave no registro:
    HKEY_LOCAL_MACHINE\Software\Microsoft\MSMQ\Parameters
  3. No menu Editar, aponte para Novo e clique em Valor DWORD.
  4. Digite IgnoreOSNameValidation e pressione ENTER.
  5. No menu Editar, clique em Modificar.
  6. Digite 1 e clique em OK.

Por padrão, o MSMQ verifica a mensagem que recebe para determinar se a mensagem é destinada ao computador local. Se a mensagem não for destinada ao computador local, a mensagem será rejeitada.

Quando uma mensagem é enviada para um servidor que está por trás de um balanceador de carga de rede, a mensagem é enviada usando o nome do balanceador de carga ou usando o nome de rede atribuído ao IP virtual no balanceador de carga de rede. Em seguida, o balanceador de carga de rede roteia a mensagem para um receptor MSMQ. No entanto, o Gerenciador de Filas local no receptor MSMQ identifica que o nome do computador e o nome do destino na mensagem não correspondem e o Gerenciador de Filas descarta a mensagem. Depois de definir esse valor de registro, o MSMQ não valida mais o nome do computador de destino e aceitará a mensagem.

Mensagens não transacionais usando Direct=HTTP

Essa configuração tem suporte sem alterações de configuração específicas.

Mensagens transacionais usando uma configuração específica que usa servidores de armazenamento e encaminhamento e um único servidor de back-end

Nessa configuração, as mensagens transacionais só dão suporte a mensagens HTTP quando nós que recebem mensagens mapeiam a fila de recebimento para um único servidor de back-end. As mensagens transacionais HTTP não têm suporte quando as filas de destino estão nos nós individuais.

Para obter mais informações sobre essa configuração, consulte os cenários de implantação HTTP do MSMQ (Enfileiramento de Mensagens da Microsoft) para Windows Server 2003 e Windows XP Professional .

Uma configuração para mensagens transacionais em que as filas de destino residem em cada nó membro atrás de um balanceador de carga não dá suporte ao envio ou recebimento de mensagens pelos seguintes motivos:

  • Mensagens duplicadas
  • Mensagens não reconhecidas em remetentes
  • Transações incompletas

Mensagens transacionais e reconhecimentos

Quando uma mensagem transacional é recebida por um computador, a mensagem é gravada no armazenamento, a mensagem é registrada e um reconhecimento de pedido é enviado de volta ao remetente. O reconhecimento do pedido é enviado de volta para o endereço IP do qual a mensagem original veio usando direct=TCP. Em seguida, a mensagem é recebida pelo remetente e a mensagem é removida da fila de saída.

Quando um reconhecimento não é recebido pelo servidor de envio dentro de um tempo especificado, a mensagem original é ressentida. Quando a mensagem chega ao destino, o servidor de destino examina o log e descobre que o servidor já recebeu essa mensagem. Portanto, o servidor de destino rejeita a mensagem e envia outra confirmação. O servidor de destino continuará enviando reconhecimentos até que o reconhecimento do pedido seja recebido pelo remetente. O registro em log impede que uma mensagem duplicada seja recebida e o reconhecimento da ordem confirma ao remetente que a mensagem foi recebida.

Problemas com balanceadores de carga de rede e mensagens transacionais

Quando uma mensagem é enviada por meio de um balanceador de carga, o computador de destino vê a mensagem como proveniente do balanceador de carga. Em seguida, o computador de destino envia o reconhecimento do pedido por meio de uma nova sessão. Portanto, o balanceador de carga não pode usar a mesma lógica para manter o estado para um servidor Web ou para um serviço semelhante.

O problema mais comum nesse cenário é que vários servidores enviam mensagens em um balanceador de carga, mas todos os reconhecimentos de pedido são enviados para o servidor incorreto. Esse comportamento faz com que mensagens não reconhecidas sejam criadas na fila de saída do envio de computadores. Além disso, quando o reconhecimento do pedido não for recebido pelo remetente, o remetente reenviará a mensagem. A segunda tentativa de enviar a mensagem por meio do balanceador de carga pode enviar a mensagem para um computador diferente. Este computador não terá visto essa mensagem antes e a mensagem será processada como uma nova mensagem. Lembre-se de que a validação foi desabilitada para permitir que as mensagens viajassem pelo NLB.

Uma mensagem enviada em um balanceador de carga pode ser recebida e processada uma vez por todos os servidores que estão por trás do balanceador de carga antes que um reconhecimento de pedido seja recebido. Além disso, transações que abrangem várias mensagens nem sempre podem ser processadas ou chegam em ordem. Portanto, o MSMQ não dá suporte ao envio de mensagens transacionais quando você usa um NLB.