當佇列管理員容錯移轉至不同的叢集節點時,MQSeries 介面卡不再從叢集 MQSeries 佇列管理員檢索郵件。

本文可協助您解決此問題:當佇列管理員容錯移轉至不同的叢集節點時,MQSeries 配接器不再從叢集 MQSeries 佇列管理員檢索郵件。

原始產品版本:   BizTalk Server 2020,BizTalk Server 2016,BizTalk Server 2013,BizTalk Server 2010,BizTalk Server 2009
原始 KB 編號:   893059

徵狀

將 MQSeries 的 Microsoft BizTalk Server Adapter 設定為從叢集 MQSeries 佇列管理員接收郵件。 如果佇列管理員失敗轉移至不同的叢集節點,則 MQSeries 配接器不再從聚簇佇列中檢索郵件。 當此行為發生時,會在應用程式記錄檔中記錄下列事件:

事件種類:警告
事件來源: BizTalk 伺服器20xx
事件類別: BizTalk 伺服器20xx
事件 ID: 5740
日期:12/31/2006 時: 11:12:13 AM
使用者: N/A
電腦:
描述:配接器 "MQSeries" 引發錯誤訊息。 詳細資訊「在開啟佇列管理員名稱時發生錯誤 = MYQMNAME 原因碼 = 2059」。

注意

在此記錄專案中, <20xx> 代表實際的版本號碼,並 <MYQMNAME> 代表實際的佇列管理員名稱。

因應措施

若要解決此問題,請在這兩個節點上建立排程的任務。 如果要執行這項操作,請依照下列步驟執行:

  1. 在主動節點上,開啟 services.msc。 您應該會看到列出兩個 MSDTC 服務:一個是本機的,沒有 GUID,另一個則為聚簇,且具有 GUID。

  2. 在提升權限的命令提示字元中,執行下列命令:

    sc queryex | find /I "Transaction"
    

    命令輸出包含您必須在此程式中用於腳本的 GUID。 GUID: Distributed Transaction Coordinator (01234567-89ab-cdef-0123-456789abcdef)

  3. 將下列程式碼儲存至檔案,並將Shutdownmqadapter.vbs的檔案名命名為 **。 您可以將檔儲存到仲裁磁碟以外的任何磁片。

    注意

    在此程式碼中,指定的 GUID (01234567-89ab-cdef-0123-456789abcdef) 是預留位置。 將此 GUID 取代為您在步驟2中記下的實際群集 MSDTC GUID。

    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. 選取 [ 開始],輸入 任務,然後在 [結果] 清單中選取 [ 任務 排程器]。

  5. 在 [任務排程] 中,選取 [動作 > 建立基本任務]。

  6. 透過嚮導畫面執行,以建立每天執行 Shutdownmqagent.vbs 檔案的排程任務。

注意

在六個步驟中,將排程設定為從午夜開始,並每隔1分鐘重複24小時。

較舊的 BizTalk 版本可能會有不同的 MQSAgent COM+ GUID。 他們可能會有 6D06157A-730B-4CB3-BD11-D48AC6B8A4BB ,而不是 C691D827-19A0-42E2-B5E8-2892401481F5 。 因此,您可能需要在升級產品之後變更現有的腳本。

其他相關資訊

即使 IBM MQ 佇列管理員以容錯移轉叢集角色中的聚簇資源的身分執行,您也不應該將 MQSAgent COM+ 應用程式叢集。 這是因為執行 COM+ 應用程式的 DLLHost.exe 不是群集感知。 您必須在兩個節點上分別安裝和設定 MQSAgent COM+ 應用程式。
為了確保高可用性,請確定您同時使用群集 IBM MQ 佇列管理員資源和群集中的 MSDTC 資源與「 變通辦法 」區段中的監控腳本。

適用於

  • BizTalk Server 2020 企業版
  • BizTalk Server 2016 企業版
  • BizTalk Server 2013 R2 Enterprise
  • BizTalk Server 2013 企業版
  • BizTalk Server Enterprise 2010
  • BizTalk Server 2009 企業版