Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Artikel wird beschrieben, wie Microsoft Message Queuing (MSMQ) über netzwerklastenausgleich (Network Load Balancing, NLB) funktionieren kann.
Originalproduktversion: 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. Stellen Sie sicher, dass Sie 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 erweiterte Benutzer.
Unterstützte Konfigurationen
MSMQ wird in einer NLB-Umgebung für das Senden und Empfangen von Nachrichten in den folgenden Konfigurationen unterstützt:
- Nicht transaktionsbezogenes Messaging mithilfe von Direct=TCP
- Nicht transaktionsbezogenes Messaging mithilfe von Direct=OS mit deaktivierter Überprüfung
- Nicht transaktionsbezogenes Messaging mithilfe von Direct=HTTP
- Die Transaktionsnachrichten erfolgen durch eine spezifische Konfiguration, die Speicher- und Weiterleitungsserver sowie einen einzelnen Back-End-Server nutzt.
Notiz
In einer dieser Konfigurationen werden nur private Warteschlangen als unterstützte Ziele 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 transaktionsbezogenes Messaging mithilfe von Direct=TCP
Diese Konfiguration funktioniert ohne bestimmte Konfigurationsänderungen.
Nicht transaktionsbezogenes Messaging mithilfe von 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:
- Klicken Sie auf Start und dann auf Ausführen. Geben Sie regedit& ein, und klicken Sie auf OK.
- Suchen Sie den folgenden Schlüssel in der Registrierung, und klicken Sie darauf:
HKEY_LOCAL_MACHINE\Software\Microsoft\MSMQ\Parameters
- Zeigen Sie im Menü Bearbeiten auf Neu, und klicken Sie anschließend auf DWORD-Wert.
- Geben Sie IgnoreOSNameValidation ein, und drücken Sie dann die EINGABETASTE.
- Klicken Sie im Menü "Bearbeiten " auf " Ändern".
- Geben Sie "1" ein, und klicken Sie dann auf "OK".
Standardmäßig überprüft MSMQ die Nachricht, die sie empfängt, um zu bestimmen, ob die Nachricht für den lokalen Computer vorgesehen ist. Wenn die Nachricht nicht für den lokalen Computer vorgesehen ist, wird die Nachricht abgelehnt.
Wenn eine Nachricht an einen Server gesendet wird, der sich hinter einem Netzwerklastenausgleich befindet, wird die Nachricht mithilfe des Namens des Lastenausgleichs oder mithilfe des Netzwerknamens gesendet, der der virtuellen IP im Netzwerklastenausgleich zugewiesen ist. Anschließend leitet der Netzwerklastenausgleich die Nachricht an einen MSMQ-Empfänger weiter. Der lokale Warteschlangen-Manager im MSMQ-Empfänger identifiziert 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 transaktionsbezogenes Messaging mithilfe von Direct=HTTP
Diese Konfiguration wird ohne bestimmte Konfigurationsänderungen unterstützt.
Transaktionsnachrichten mithilfe einer bestimmten Konfiguration, die aus Speicher- und Weiterleitungsservern sowie einem einzelnen Back-End-Server besteht
In dieser Konfiguration unterstützt Transaktionsnachrichten nur HTTP-Messaging, wenn Knoten, die Nachrichten empfangen, die empfangende Warteschlange einem einzelnen Back-End-Server zuordnen. Die HTTP-Transaktionsmeldungen werden nicht unterstützt, wenn sich die Zielwarteschlangen auf den einzelnen Knoten befinden.
Weitere Informationen zu dieser Konfiguration finden Sie in den HTTP-Bereitstellungsszenarien von Microsoft Message Queuing (MSMQ) für Windows Server 2003 und Windows XP Professional .
Eine Konfiguration für Transaktionsnachrichten, bei denen sich die Zielwarteschlangen auf jedem Mitgliedsknoten hinter einem Lastenausgleich befinden, unterstützt aus den folgenden Gründen weder das Senden noch das Empfangen von Nachrichten:
- Doppelte Nachrichten
- Nicht bestätigte Nachrichten von 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 protokolliert, und eine Bestellbestätigung wird an den Absender zurückgesendet. Die Bestellbestätigung wird an die IP-Adresse zurückgesendet, von der die ursprüngliche Nachricht mit direct=TCP stammt. Anschließend wird die Nachricht vom Absender empfangen, und die Nachricht wird aus der ausgehenden Warteschlange entfernt.
Wenn eine Bestätigung nicht vom sendenden Server innerhalb eines bestimmten Zeitraums empfangen wird, wird die ursprüngliche Nachricht erneut gesendet. Wenn die Nachricht am Ziel eintrifft, überprüft der Zielserver das Protokoll und findet, 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 den Absender, dass die Nachricht empfangen wurde.
Probleme mit Netzwerklastenausgleich und Transaktionsmeldungen
Wenn eine Nachricht über einen Load Balancer gesendet wird, sieht der Zielcomputer die Nachricht als ob sie vom Load Balancer kommt. Anschließend sendet der Zielcomputer die Bestellbestätigung über eine neue Sitzung. Daher kann der Load Balancer nicht dieselbe Logik für die Zustandsverwaltung eines Webservers oder eines ähnlichen Dienstes verwenden.
Das häufigste Problem in diesem Szenario besteht darin, dass mehrere Server Nachrichten über einen Lastenausgleich senden, aber alle Bestellbestätigungen werden an den falschen Server gesendet. Dieses Verhalten bewirkt, dass unbestätigte Nachrichten in der ausgehenden Warteschlange der sendenden Computer angesammelt werden. Wenn die Bestellbestätigung nicht vom Absender empfangen wird, sendet der Absender die Nachricht erneut. Der zweite Versuch, die Nachricht über den Lastenausgleich zu senden, sendet die Nachricht möglicherweise an einen anderen Computer. 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 die NLB reisen können.
Eine Nachricht, die über einen Lastenausgleich gesendet wurde, kann von allen Servern, die sich hinter dem Lastenausgleich befinden, einmal empfangen und verarbeitet werden, bevor eine Bestellbestätigung empfangen wird. Darüber hinaus können Transaktionen, die mehrere Nachrichten umfassen, nicht immer verarbeitet oder in der Reihenfolge eingehen. Daher unterstützt MSMQ das Senden von Transaktionsnachrichten nicht, wenn Sie eine NLB verwenden.