Der MQSeries-Adapter ruft keine Nachrichten mehr von einem gruppierten MQSeries-Warteschlangen-Manager ab, wenn für den Warteschlangen-Manager ein Failover auf einen anderen Clusterknoten ausgeführt wird.

Dieser Artikel hilft Ihnen, das Problem zu umgehen, dass der MQSeries-Adapter keine Nachrichten mehr von einem gruppierten MQSeries-Warteschlangen-Manager abruft, wenn der Warteschlangen-Manager ein Failover auf einen anderen Clusterknoten führt.

Ursprüngliche Produktversion: BizTalk Server 2020, BizTalk Server 2016, BizTalk Server 2013, BizTalk Server 2010, BizTalk Server 2009
Ursprüngliche KB-Nummer: 893059

Problembeschreibung

Sie konfigurieren den Microsoft BizTalk Server-Adapter für MQSeries, um Nachrichten von einem gruppierten MQSeries-Warteschlangen-Manager zu empfangen. Wenn für den Warteschlangen-Manager ein Failover auf einen anderen Clusterknoten ausgeführt wird, ruft der MQSeries-Adapter keine Nachrichten mehr aus der gruppierten Warteschlange ab. Wenn dieses Verhalten auftritt, wird das folgende Ereignis im Anwendungsprotokoll protokolliert:

Ereignistyp: Warnung
Ereignisquelle: BizTalk Server 20xx
Ereigniskategorie: BizTalk Server 20xx
Ereignis-ID: 5740
Datum: 31.12.2006 Uhrzeit: 11:12:13
Benutzer: Nicht zutreffend
Computer:
Beschreibung: Der Adapter "MQSeries" hat eine Fehlermeldung ausgelöst. Details "Fehler beim Öffnen des Warteschlangen-Manager-Namens = MYQMNAME Grundcode = 2059.".

Hinweis

In diesem Protokolleintrag <20xx> stellt die tatsächliche Versionsnummer und <MYQMNAME> den tatsächlichen Warteschlangen-Manager-Namen dar.

Problemumgehung

Um dieses Problem zu umgehen, erstellen Sie eine geplante Aufgabe auf beiden Knoten. Gehen Sie dazu wie folgt vor:

  1. Öffnen Sie auf dem aktiven Knoten Services.msc. Es sollten zwei MSDTC-Dienste aufgeführt werden: einer, der lokal ist und keine GUID aufweist, und einer, der gruppiert ist und über eine GUID verfügt.

  2. Führen Sie an einer Eingabeaufforderung mit erhöhten Rechten den folgenden Befehl aus:

    sc queryex | find /I "Transaction"
    

    Die Befehlsausgabe enthält die GUID, die Sie für das Skript in dieser Prozedur verwenden müssen. Die GUID: Distributed Transaction Coordinator (01234567-89ab-cdef-0123-456789abcdef)

  3. Speichern Sie den folgenden Code in einer Datei, und benennen Sie die Datei Shutdownmqadapter.vbs. Sie können die Datei auf einem anderen Datenträger als dem Quorumdatenträger speichern.

    Hinweis

    In diesem Code ist die angegebene GUID (01234567-89ab-cdef-0123-456789abcdef) ein Platzhalter. Ersetzen Sie diese GUID durch die tatsächliche gruppierte MSDTC-GUID, die Sie sich in Schritt 2 notiert haben.

    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. Wählen Sie Start aus, geben Sie Task ein, und wählen Sie dann aufgabenplaner in der Ergebnisliste aus.

  5. Wählen Sie im Taskplaner die Option Aktion>Create Einfache Aufgabe aus.

  6. Führen Sie die Bildschirme des Assistenten durch, um eine geplante Aufgabe zu erstellen, die die Shutdownmqagent.vbs Datei täglich ausführt.

Hinweis

Legen Sie für den 6-Schritt fest, dass der Zeitplan um Mitternacht beginnt und 24 Stunden lang alle 1 Minute wiederholt wird.

Frühere BizTalk-Versionen verfügen möglicherweise über eine andere MQSAgent COM+-GUID. Sie können anstelle von C691D827-19A0-42E2-B5E8-2892401481F5enthalten6D06157A-730B-4CB3-BD11-D48AC6B8A4BB. Daher müssen Sie möglicherweise das vorhandene Skript ändern, nachdem Sie das Produkt aktualisiert haben.

Weitere Informationen

Selbst wenn der IBM MQ-Warteschlangen-Manager als gruppierte Ressource in einer Failoverclusterrolle ausgeführt wird, sollten Sie die MQSAgent COM+-Anwendung nicht gruppieren. Dies liegt daran, dass DLLHost.exe, in dem die COM+-Anwendung ausgeführt wird, nicht clusterfähig ist. Die MQSAgent COM+-Anwendung muss auf beiden Knoten einzeln installiert und konfiguriert sein.
Um Hochverfügbarkeit sicherzustellen, stellen Sie sicher, dass Sie sowohl die gruppierte IBM MQ-Warteschlangen-Manager-Ressource als auch die gruppierte MSDTC-Ressource in derselben Clusterrolle zusammen mit dem Überwachungsskript aus dem Abschnitt Problemumgehung verwenden.

Gilt für

  • 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