L’adaptateur MQSeries ne récupère plus les messages d’un gestionnaire de files d’attente MQSeries en cluster lorsque le gestionnaire de files d’attente bascule vers un autre nœud de cluster

Cet article vous aide à contourner le problème où l’adaptateur MQSeries ne récupère plus les messages d’un gestionnaire de files d’attente MQSeries en cluster lorsque le gestionnaire de files d’attente bascule vers un autre nœud de cluster.

Version du produit d’origine : BizTalk Server 2020, BizTalk Server 2016, BizTalk Server 2013, BizTalk Server 2010, BizTalk Server 2009
Numéro de la base de connaissances d’origine : 893059

Symptômes

Vous configurez l’adaptateur Microsoft BizTalk Server pour MQSeries afin de recevoir des messages d’un gestionnaire de files d’attente MQSeries en cluster. Si le gestionnaire de files d’attente bascule vers un autre nœud de cluster, l’adaptateur MQSeries ne récupère plus les messages de la file d’attente en cluster. Lorsque ce comportement se produit, l’événement suivant est enregistré dans le journal des applications :

Type d'événement : Avertissement
Source de l’événement : BizTalk Server 20xx
Catégorie d’événement : BizTalk Server 20xx
ID d’événement : 5740
Date : 31/12/2006 Heure : 11 :12 :13
Utilisateur : N/A
Ordinateur:
Description : l’adaptateur « MQSeries » a déclenché un message d’erreur. Détails « Erreur rencontrée lors de l’ouverture du nom du gestionnaire de files d’attente = MYQMNAME Reason code = 2059 ».

Remarque

Dans cette entrée de journal, <20xx> représente le numéro de version réel et <MYQMNAME> le nom réel du Gestionnaire de files d’attente.

Solution de contournement

Pour contourner ce problème, créez une tâche planifiée sur les deux nœuds. Pour cela, procédez comme suit :

  1. Sur le nœud actif, ouvrez Services.msc. Vous devez voir deux services MSDTC répertoriés : un qui est local et qui n’a pas de GUID, et un autre qui est en cluster et a un GUID.

  2. Ouvrez une invite de commandes avec élévation de privilèges et exécutez la commande suivante :

    sc queryex | find /I "Transaction"
    

    La sortie de commande contient le GUID que vous devez utiliser pour le script dans cette procédure. GUID : Distributed Transaction Coordinator (01234567-89ab-cdef-0123-456789abcdef)

  3. Enregistrez le code suivant dans un fichier et nommez-le Shutdownmqadapter.vbs. Vous pouvez enregistrer le fichier sur n’importe quel disque autre que le disque de quorum.

    Remarque

    Dans ce code, le GUID indiqué (01234567-89ab-cdef-0123-456789abcdef) est un espace réservé. Remplacez ce GUID par le GUID MSDTC en cluster réel que vous avez noté à l’étape 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. Sélectionnez Démarrer, tapez tâche, puis planificateur de tâches dans la liste des résultats.

  5. Dans Planificateur de tâches, sélectionnez Action>Create Tâche de base.

  6. Exécutez les écrans de l’Assistant pour créer une tâche planifiée qui exécute le fichier Shutdownmqagent.vbs quotidiennement.

Remarque

Pour l’étape 6, définissez la planification pour qu’elle démarre à minuit et se répète toutes les 1 minute pendant 24 heures.

Les versions antérieures de BizTalk peuvent avoir un GUID COM+ MQSAgent différent. Ils peuvent avoir 6D06157A-730B-4CB3-BD11-D48AC6B8A4BB au lieu de C691D827-19A0-42E2-B5E8-2892401481F5. Par conséquent, vous devrez peut-être modifier le script existant après la mise à niveau du produit.

Plus d’informations

Même si le gestionnaire de files d’attente IBM MQ s’exécute en tant que ressource en cluster dans un rôle de cluster de basculement, vous ne devez pas mettre en cluster l’application COM+ MQSAgent. Cela est dû au fait que DLLHost.exe, qui exécute l’application COM+, ne prend pas en charge les clusters. L’application COM+ MQSAgent doit être installée et configurée individuellement sur les deux nœuds.
Pour garantir la haute disponibilité, veillez à utiliser à la fois la ressource du gestionnaire de files d’attente IBM MQ en cluster et la ressource MSDTC en cluster dans le même rôle de cluster avec le script de surveillance de la section Solution de contournement .

S’applique à

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