Message Queuing kann über den Netzwerklastenausgleich funktionieren

In diesem Artikel wird beschrieben, wie Microsoft Message Queuing (MSMQ) über Netzwerklastenausgleich (NLB) funktionieren kann.

Ursprüngliche Produktversion: Microsoft Message Queuing
Ursprüngliche KB-Nummer: 899611

Einführung

Im folgenden Artikel wird erläutert, wie MSMQ über NLB funktionieren kann. In diesem Artikel werden auch mögliche falsche Konfigurationen von MSMQ erläutert.

Wichtig

Dieser Artikel enthält Informationen zum Bearbeiten der Registrierung. Sie sollten eine Sicherungskopie der Registrierung erstellen, bevor Sie die Registrierung bearbeiten. Sie müssen wissen, wie die Registrierung wiederhergestellt werden kann, wenn ein Problem auftritt. Weitere Informationen zum Sichern, Wiederherstellen und Ändern der Registrierung finden Sie unter Windows-Registrierungsinformationen für fortgeschrittene Benutzer.

Unterstützte Konfigurationen

MSMQ wird in einer NLB-Umgebung sowohl für das Senden als auch für den Empfang von Nachrichten in den folgenden Konfigurationen unterstützt:

  • Nicht transaktionales Messaging mithilfe von Direct=TCP
  • Nicht transaktionales Messaging mithilfe von Direct=OS mit deaktivierter Überprüfung
  • Nicht transaktionales Messaging mithilfe von Direct=HTTP
  • Transaktionsmessaging mithilfe einer bestimmten Konfiguration, die Speicher- und Weiterleitungsserver und einen einzelnen Back-End-Server verwendet.

Hinweis

Nur private Warteschlangen werden in einer dieser Konfigurationen unterstützt. Da der Name des virtuellen Netzwerks kein entsprechendes Active Directory-Verzeichnisdienstobjekt aufweist, können die Eigenschaften der Zielwarteschlange nicht abgefragt werden. Möglicherweise können Sie Nachrichten an öffentliche Warteschlangen senden, solange auf die öffentlichen Warteschlangen zugegriffen wird, indem Sie einen direkten Formatnamen anstelle des Standardpfads verwenden.

Nicht transaktionales Messaging mithilfe von Direct=TCP

Diese Konfiguration funktioniert ohne bestimmte Konfigurationsänderungen.

Nicht transaktionales Messaging mit Direct=OS

Diese Konfiguration funktioniert nur, wenn die Überprüfung deaktiviert ist. Um die Überprüfung zu deaktivieren, müssen Sie den folgenden Registrierungsschlüssel in MSMQ 2.0 zusammen mit Windows 2000 und in MSMQ 3.0 zusammen mit Windows XP oder Windows Server 2003 hinzufügen.

Warnung

Schwerwiegende Probleme können auftreten, wenn die Registrierung mit dem Registrierungs-Editor oder einer anderen Methode unsachgemäß bearbeitet wird. Diese Probleme können eine Neuinstallation des Betriebssystems erforderlich machen. Microsoft gibt keinerlei Garantien dafür ab, dass diese Probleme behoben werden können. Das Ändern der Registrierung erfolgt auf eigenes Risiko. Führen Sie die folgenden Schritte aus, und beenden Sie dann den Registrierungs-Editor:

  1. Klicken Sie auf Start, klicken Sie auf Ausführen, geben Sie regedit ein, und klicken Sie dann auf OK.
  2. Suchen Sie den folgenden Schlüssel in der Registrierung, und klicken Sie dann auf den folgenden Schlüssel:
    HKEY_LOCAL_MACHINE\Software\Microsoft\MSMQ\Parameters
  3. Zeigen Sie im Menü Bearbeiten auf Neu, und klicken Sie anschließend auf DWORD-Wert.
  4. Geben Sie IgnoreOSNameValidation ein, und drücken Sie dann die EINGABETASTE.
  5. Klicken Sie im Menü Bearbeiten auf Ändern.
  6. Geben Sie 1 ein, und klicken Sie dann auf OK.

Standardmäßig überprüft MSMQ die empfangene Nachricht, um zu bestimmen, ob die Nachricht für den lokalen Computer bestimmt ist. Wenn die Nachricht nicht für den lokalen Computer bestimmt ist, wird die Nachricht abgelehnt.

Wenn eine Nachricht an einen Server hinter einem Netzwerklastenausgleich gesendet wird, wird die Nachricht mithilfe des Namens des Lastenausgleichs oder mithilfe des Netzwerknamens gesendet, der der virtuellen IP-Adresse im Netzwerklastenausgleich zugewiesen ist. Anschließend leitet der Netzwerklastenausgleich die Nachricht an einen MSMQ-Empfänger weiter. Der lokale Warteschlangen-Manager auf dem MSMQ-Empfänger erkennt jedoch, dass der Computername und der Zielname in der Nachricht nicht übereinstimmen, und der Warteschlangen-Manager verwirft die Nachricht. Nachdem Sie diesen Registrierungswert festgelegt haben, überprüft MSMQ den Namen des Zielcomputers nicht mehr und akzeptiert die Nachricht.

Nicht transaktionales Messaging mithilfe von Direct=HTTP

Diese Konfiguration wird ohne bestimmte Konfigurationsänderungen unterstützt.

Transaktionsmessaging mithilfe einer bestimmten Konfiguration, die Speicher- und Weiterleitungsserver und einen einzelnen Back-End-Server verwendet

In dieser Konfiguration unterstützt Transaktionsmessaging nur HTTP-Messaging, wenn Knoten, die Nachrichten empfangen, die empfangende Warteschlange einem einzelnen Back-End-Server zuordnen. Die HTTP-Transaktionsnachrichten werden nicht unterstützt, wenn sich die Zielwarteschlangen auf den einzelnen Knoten befinden.

Weitere Informationen zu dieser Konfiguration finden Sie im Whitepaper Microsoft Message Queuing (MSMQ) HTTP-Bereitstellungsszenarien für Windows Server 2003 und Windows XP Professional .

Eine Konfiguration für Transaktionsmessaging, bei der sich die Zielwarteschlangen auf jedem Mitgliedsknoten hinter einem Lastenausgleich befinden, unterstützt das Senden oder Empfangen von Nachrichten aus den folgenden Gründen nicht:

  • Doppelte Nachrichten
  • Nicht bestätigten Nachrichten auf Absendern
  • Unvollständige Transaktionen

Transaktionsmeldungen und Bestätigungen

Wenn eine Transaktionsnachricht von einem Computer empfangen wird, wird die Nachricht in den Speicher geschrieben, die Nachricht wird protokolliert, und eine Bestellbestätigung wird an den Absender zurückgesendet. Die Bestellbestätigung wird mithilfe von direct=TCP an die IP-Adresse zurückgesendet, von der die ursprüngliche Nachricht stammt. Anschließend wird die Nachricht vom Absender empfangen, und die Nachricht wird aus der ausgehenden Warteschlange entfernt.

Wenn eine Bestätigung nicht innerhalb eines angegebenen Zeitraums vom sendenden Server empfangen wird, wird die ursprüngliche Nachricht erneut gesendet. Wenn die Nachricht am Ziel eingeht, untersucht der Zielserver das Protokoll und stellt fest, dass der Server diese Nachricht bereits empfangen hat. Daher lehnt der Zielserver die Nachricht ab und sendet eine weitere Bestätigung zurück. Der Zielserver sendet weiterhin Bestätigungen, bis die Bestellbestätigung vom Absender empfangen wird. Die Protokollierung verhindert, dass eine doppelte Nachricht empfangen wird, und die Bestellbestätigung bestätigt dem Absender, dass die Nachricht empfangen wurde.

Probleme mit Netzwerklastenausgleichsmodulen und Transaktionsnachrichten

Wenn eine Nachricht über einen Lastenausgleich gesendet wird, sieht der Zielcomputer die Nachricht als vom Lastenausgleich gesendet. Anschließend sendet der Zielcomputer die Bestellbestätigung über eine neue Sitzung. Daher kann der Lastenausgleich nicht dieselbe Logik verwenden, um den Zustand für einen Webserver oder einen ähnlichen Dienst beizubehalten.

Das häufigste Problem in diesem Szenario ist, dass mehrere Server Nachrichten über einen Lastenausgleich senden, aber alle Bestellbestätigungen an den falschen Server gesendet werden. Dieses Verhalten führt dazu, dass sich nicht bekannte Nachrichten in der ausgehenden Warteschlange der sendenden Computer anhüpfen. Wenn die Bestellbestätigung vom Absender nicht empfangen wird, sendet der Absender die Nachricht außerdem erneut. Beim zweiten Versuch, die Nachricht über den Lastenausgleich zu senden, wird die Nachricht möglicherweise an einen anderen Computer gesendet. Dieser Computer hat diese Nachricht noch nicht gesehen, und die Nachricht wird als neue Nachricht verarbeitet. Denken Sie daran, dass die Überprüfung deaktiviert wurde, damit Nachrichten über den NLB übertragen werden können.

Eine Nachricht, die über einen Lastenausgleich gesendet wurde, kann einmal von allen Servern hinter dem Lastenausgleich empfangen und verarbeitet werden, bevor eine Bestellbestätigung empfangen wird. Darüber hinaus können Transaktionen, die sich über mehrere Nachrichten erstrecken, nicht immer in der richtigen Reihenfolge verarbeitet werden. Daher unterstützt MSMQ das Senden von Transaktionsnachrichten nicht, wenn Sie einen NLB verwenden.