O Adaptador de MQSeries não recupera mais mensagens de um gerenciador de filas MQSeries clusterizado quando o gerenciador de filas falha em um nó de cluster diferente

Este artigo ajuda você a contornar o problema em que o Adaptador de MQSeries não recupera mais mensagens de um gerenciador de filas MQSeries clusterizado quando o gerenciador de filas falha em um nó de cluster diferente.

Versão original do produto: BizTalk Server 2020, BizTalk Server 2016, BizTalk Server 2013, BizTalk Server 2010, BizTalk Server 2009
Número de KB original: 893059

Sintomas

Você configura o Microsoft BizTalk Server Adaptador para MQSeries para receber mensagens de um gerenciador de filas MQSeries clusterizado. Se o gerenciador de filas falhar em um nó de cluster diferente, o Adaptador MQSeries não recuperará mais as mensagens da fila clusterada. Quando esse comportamento ocorre, o seguinte evento é registrado no log do aplicativo:

Tipo de Evento: Aviso
Fonte do evento: BizTalk Server 20xx
Categoria do evento: BizTalk Server 20xx
ID do evento: 5740
Data: 31/12/2006 Hora: 11:12:13
Usuário: N/A
Computador:
Descrição: o adaptador "MQSeries" gerou uma mensagem de erro. Detalhes "Erro encontrado ao abrir o nome do Gerenciador de Filas = CÓDIGO DE RAZÃO MYQMNAME = 2059".

Observação

Nesta entrada de log, <20xx> representa o número da versão real e <MYQMNAME> representa o nome real do Gerenciador de Filas.

Solução alternativa

Para contornar esse problema, crie uma tarefa agendada em ambos os nós. Para fazer isso, siga estas etapas:

  1. No nó ativo, abra Services.msc. Você deve ver dois serviços MSDTC listados: um que é local e não tem GUID, e um que está clusterizado e tem um GUID.

  2. Abra um prompt de comando elevado e execute o seguinte comando:

    sc queryex | find /I "Transaction"
    

    A saída de comando contém o GUID que você deve usar para o script neste procedimento. O GUID: Distributed Transaction Coordinator (01234567-89ab-cdef-0123-456789abcdef)

  3. Salve o código a seguir em um arquivo e nomeie o arquivo Shutdownmqadapter.vbs. Você pode salvar o arquivo em qualquer disco diferente do disco de quorum.

    Observação

    Neste código, o GUID indicado (01234567-89ab-cdef-0123-456789abcdef) é um espaço reservado. Substitua este GUID pelo GUID MSDTC clusterizado real que você observou na etapa 2.

    Option Explicit
    On Error Resume Next
    Dim sComputerName, oWMIService, colRunningServices, oService, colProcessList, objProcess 
    If Wscript.Arguments.Count = 0 Then  
      sComputerName = "."  
      Call ServStat  
      Wscript.Quit
    End If
    Sub ServStat
    Set oWMIService  = GetObject("winmgmts:" _  
      & "{impersonationLevel=impersonate}!\\" & sComputerName& "\root\cimv2")
    Set colRunningServices = oWMIService.ExecQuery _  
      ("Select * from Win32_Service where DisplayName='Distributed Transaction Coordinator (01234567-89ab-cdef-0123-456789abcdef)'")
    For Each oService in colRunningServices  
       'Wscript.Echo oService.DisplayName  & VbTab & oService.State  
       If (oService.State="Stopped") Then
          'Wscript.Echo "Stopped"
          'find the dllhost
           Set colProcessList = oWMIService.ExecQuery ("SELECT * FROM Win32_Process WHERE Name = 'DLLHOST.EXE'")
           For Each objProcess in colProcessList
             If inStr(objProcess.CommandLine, "C691D827-19A0-42E2-B5E8-2892401481F5")>0 Then
                'Wscript.Echo objProcess.ProcessId
                Dim objShell
                Set objShell = CreateObject("WScript.Shell")
                objShell.Run "cmd /k taskkill /F /PID " & objProcess.ProcessId & "& exit"
                WScript.Quit
             End If
           Next  
        End If
    Next
    End Sub
    
  4. Selecione Iniciar, digite tarefa e selecione Agendador de Tarefas na lista de resultados.

  5. No Agendador de Tarefas, selecione Ação>Create Tarefa Básica.

  6. Execute as telas do assistente para criar uma tarefa agendada que executa o arquivoShutdownmqagent.vbs diariamente.

Observação

Para a etapa 6, defina a agenda para começar à meia-noite e repita a cada 1 minuto por 24 horas.

Versões anteriores do BizTalk podem ter um GUID COM+ do MQSAgent diferente. Eles podem ter 6D06157A-730B-4CB3-BD11-D48AC6B8A4BB em vez de C691D827-19A0-42E2-B5E8-2892401481F5. Portanto, talvez você precise alterar o script existente depois de atualizar o produto.

Mais informações

Mesmo que o gerenciador de filas do IBM MQ esteja sendo executado como um recurso clusterizado em uma função de cluster de failover, você não deve clusterizar o aplicativo COM+ do MQSAgent. Isso ocorre porque DLLHost.exe, que está executando o aplicativo COM+, não está ciente do cluster. Você deve ter o aplicativo MQSAgent COM+ instalado e configurado individualmente em ambos os nós.
Para garantir alta disponibilidade, certifique-se de usar o recurso clusterizado do gerenciador de filas do IBM MQ e o recurso MSDTC clusterizado na mesma função de cluster, juntamente com o script de monitoramento da seção Solução alternativa .

Aplicável a

  • BizTalk Server 2020 Enterprise
  • BizTalk Server 2016 Enterprise
  • BizTalk Server 2013 R2 Enterprise
  • BizTalk Server 2013 Enterprise
  • BizTalk Server Enterprise 2010
  • BizTalk Server 2009 Enterprise