Mit MSMQ (Microsoft Message Queue) können Anwendungsentwickler bequem schnell und zuverlässig mit Anwendungen kommunizieren, indem sie Nachrichten senden und empfangen. Nachrichtenverarbeitung bietet Ihnen eine zuverlässige, fehlersichere Methode für garantierte Nachrichtenvergabe und die Durchführung vieler Geschäftsprozesse.
MSMQ ist, wie XML Web Services und .Net Remote, eine verteilte Entwicklungstechnologie. Bei Verwendung von XML-Webservices oder .Net Remote-Komponenten muss der Client jedoch Informationen in Echtzeit mit dem Server austauschen, und der Server muss online bleiben. MSMQ kann funktionieren, wenn der Server offline ist, indem die Nachricht vorübergehend in der Nachrichtenwarteschlange auf der Clientseite gespeichert wird und sie dann zur Verarbeitung an den Server gesendet wird, wenn sie online ist.
Offensichtlich ist MSMQ nicht geeignet für Situationen, in denen der Client zeitnah vom Server reagieren muss und MSMQ asynchron mit dem Server interagiert, sodass man sich keine Sorgen machen muss, lange auf die Verarbeitung des Servers zu warten.
Obwohl sowohl XML Web Services als auch .Net Remoting die [OneWay]-Eigenschaft zur Behandlung asynchroner Aufrufe bereitstellen, wird sie verwendet, um das Problem zu lösen, dass lange Methodenaufrufe auf der Serverseite die Clientseite über lange Zeit blockieren. Allerdings kann das Problem der großen Client-Last nicht gelöst werden, und der Server akzeptiert Anfragen schneller, als er verarbeiten kann.
Im Allgemeinen wird das Attribut [OneWay] in spezialisierten Nachrichtendiensten nicht verwendet.
1. Grundlegende Begriffe und Konzepte
Eine "Nachricht" ist eine Dateneinheit, die zwischen zwei Computern übertragen wird. Nachrichten können sehr einfach sein, etwa indem sie nur Textzeichenketten enthalten; Sie kann auch komplexer sein und eingebettete Objekte enthalten.
Nachrichten werden an die Warteschlange gesendet. Eine "Nachrichtenwarteschlange" ist ein Container, der Nachrichten während ihrer Übertragung speichert. Der Nachrichtenwarteschlangenmanager fungiert als Vermittler, wenn er Nachrichten von seiner Quelle an das Ziel weiterleitet. Der Hauptzweck einer Warteschlange ist es, Routing bereitzustellen und die Zustellung von Nachrichten zu garantieren; Wenn der Empfänger beim Senden der Nachricht nicht verfügbar ist, hält die Nachrichtenwarteschlange die Nachricht zurück, bis sie erfolgreich zugestellt werden kann.
"Message Queuing" ist Microsofts Nachrichtenverarbeitungstechnologie, die Nachrichtenverarbeitungs- und Nachrichtenwarteschlangefunktionen für jede Anwendung in jeder Kombination von Computern mit installiertem Microsoft Windows bietet, unabhängig davon, ob sie sich im selben Netzwerk befinden oder gleichzeitig online sind.
Ein "Nachrichten-Warteschlangennetzwerk" ist jede Gruppe von Computern, die Nachrichten miteinander senden können. Verschiedene Computer in einem Netzwerk spielen unterschiedliche Rollen, um sicherzustellen, dass Nachrichten reibungslos verarbeitet werden. Einige von ihnen liefern Routing-Informationen, um zu bestimmen, wie Nachrichten gesendet werden, andere enthalten wichtige Informationen über das gesamte Netzwerk, und manche senden und empfangen einfach Nachrichten.
Während der Installation der Nachrichtenwarteschlange bestimmen Administratoren, welche Server miteinander kommunizieren können, und legen spezielle Rollen für bestimmte Server fest. Die Computer, die dieses Netzwerk von "Nachrichtenwarteschlangen" bilden, werden "Sites" genannt und sind durch "Site Links" miteinander verbunden. Jeder Sitelink hat einen zugehörigen "Overhead", der vom Administrator bestimmt wird und angibt, wie oft Nachrichten über diesen Sitelink zugestellt werden.
Der Administrator der Nachrichtenwarteschlange richtet außerdem einen oder mehrere Computer im Netzwerk ein, die als Routing-Server fungieren. Der Routing-Server berücksichtigt den Overhead jedes Sitelinks, um den schnellsten und effizientesten Weg zu bestimmen, eine Nachricht über mehrere Seiten zu liefern und so zu bestimmen, wie die Nachricht zugestellt werden soll.
2. Warteschlangentyp
Es gibt zwei Haupttypen von Warteschlangen: Warteschlangen, die von Ihnen oder anderen Nutzern in Ihrem Netzwerk erstellt werden, sowie Systemwarteschlangen.
Eine vom Benutzer erstellte Warteschlange kann eine der folgenden Eigenschaften sein:
Öffentliche Warteschlangen werden im gesamten Nachrichten-Warteschlangen-Netzwerk repliziert und können von allen angeschlossenen Standorten genutzt werden.
Private Warteschlangen werden nicht im gesamten Netzwerk veröffentlicht. Stattdessen sind sie nur auf dem lokalen Computer verfügbar, auf dem sie sich befinden. Private Warteschlangen können nur von Anwendungen abgerufen werden, die den vollständigen Pfadnamen oder das Label der Warteschlange kennen.
Die Management-Warteschlange enthält Nachrichten, die Nachrichtenempfange bestätigen, die in einem bestimmten Nachrichtenwarteschlangennetzwerk gesendet wurden. Gib die Management-Warteschlange an, die du für die MessageQueue-Komponente verwenden möchtest, falls vorhanden.
Die Response Queue enthält die Antwortnachrichten, die an die sendende Anwendung zurückgesendet werden, wenn die Zielanwendung die Nachricht erhält. Gib die Antwortwarteschlange an, die du für die MessageQueue-Komponente verwenden möchtest, falls vorhanden.
Die vom System generierten Warteschlangen werden im Allgemeinen in folgende Kategorien unterteilt:
Journal Queue speichert optional Kopien gesendeter Nachrichten und Kopien von aus der Warteschlange entfernten Nachrichten. Eine einzelne Journal-Warteschlange speichert auf jedem Message Queue-Client eine Kopie der von diesem Computer gesendeten Nachrichten. Für jede Warteschlange auf dem Server wird eine separate Tagebuchwarteschlange erstellt. Dieses Journal verfolgt Nachrichten, die aus dieser Warteschlange entfernt werden.
Die Dead Letter Queue speichert Kopien von Nachrichten, die nicht zugestellt werden können oder abgelaufen sind. Wenn eine ablaufende oder nicht zugestellte Nachricht transaktional ist, wird sie in einer speziellen Dead-Letter-Warteschlange gespeichert, die als "transaktionale Dead-Letter Queue" bezeichnet wird. Tote Buchstaben werden auf dem Computer gespeichert, auf dem sich die abgelaufene Nachricht befindet. Weitere Informationen zu Timeout- und Ablaufnachrichten finden Sie unter Eigenschaften der Standardnachrichten.
Die Report Queue enthält Nachrichten, die die Route angeben, die die Nachricht zum Ziel erreicht, und kann auch Testnachrichten enthalten. Es darf nur eine Berichtswarteschlange auf jedem Computer geben.
Eine dedizierte Systemwarteschlange ist eine Reihe von dedizierten Warteschlangen, die die Verwaltungs- und Benachrichtigungsnachrichten speichern, die ein System für die Bearbeitung von Nachrichten benötigt.
Die meiste Arbeit in der Anwendung besteht darin, auf öffentliche Warteschlangen und deren Nachrichten zuzugreifen. Je nach Journaling, Bestätigung und anderen speziellen Bearbeitungsanforderungen der Anwendung ist es jedoch wahrscheinlich, dass im täglichen Betrieb mehrere verschiedene Systemwarteschlangen verwendet werden.
3. Synchrone VS. Asynchrone Kommunikation
Warteschlangenkommunikation ist von Natur aus asynchron, da das Senden von Nachrichten an und der Empfang von Nachrichten aus der Warteschlange in unterschiedlichen Prozessen erfolgt. Außerdem kann die Empfangsoperation asynchron durchgeführt werden, da die Person, die die Nachricht empfangen möchte, die Methode BeginReceive in jede beliebige Warteschlange aufrufen und sofort mit anderen Aufgaben fortfahren kann, ohne auf eine Antwort warten zu müssen. Das unterscheidet sich stark von dem, was viele als "synchrone Kommunikation" kennen.
In der synchronen Kommunikation muss der Absender der Anfrage auf eine Antwort vom vorgesehenen Empfänger warten, bevor er weitere Aufgaben ausführen kann. Die Wartezeit des Absenders hängt vollständig davon ab, wie lange der Empfänger benötigt, um die Anfrage zu verarbeiten und die Antwort zu senden.
4. Interakulation mit Nachrichtenwarteschlangen
Nachrichtenverarbeitung und Messaging bieten einen leistungsstarken und flexiblen Mechanismus für die interprozessbezogene Kommunikation zwischen serverbasierten Anwendungskomponenten. Sie bieten mehrere Vorteile gegenüber der direkten Invocation zwischen den Komponenten, darunter:
Stabilität – Komponentenausfälle betreffen Nachrichten deutlich weniger als direkte Anrufe zwischen Komponenten, da Nachrichten in einer Warteschlange gespeichert werden und dort bleiben, bis sie ordnungsgemäß verarbeitet sind. Die Nachrichtenverarbeitung ähnelt der Transaktionsverarbeitung, da die Nachrichtenverarbeitung garantiert ist. Nachrichtenpriorisierung – Dringendere oder wichtigere Nachrichten können vor relativ unwichtigen Nachrichten empfangen werden, sodass Sie eine angemessene Antwortzeit für kritische Anwendungen garantieren können. Offline-Funktionalität – Wenn Nachrichten gesendet werden, können sie in eine temporäre Warteschlange geschickt werden und dort bleiben, bis sie erfolgreich zugestellt sind. Wenn der Zugriff auf die gewünschte Warteschlange aus irgendeinem Grund nicht verfügbar ist, kann der Benutzer mit der Aktion fortfahren. Gleichzeitig können andere Operationen so fortlaufen, als wäre die Nachricht verarbeitet worden, da die Nachrichtenzustellung garantiert ist, wenn die Netzwerkverbindung wiederhergestellt wird. Transaktionale Nachrichtenverarbeitung – Koppeln Sie mehrere zusammenhängende Nachrichten zu einer einzigen Transaktion, um sicherzustellen, dass Nachrichten sequentiell nur einmal zugestellt werden und erfolgreich aus der Zielwarteschlange abgerufen werden können. Wenn Fehler auftreten, wird die gesamte Transaktion storniert. Sicherheit – Die Nachrichten-Warteschlangen-Technologie, auf der die MessageQueue-Komponente basiert, nutzt Windows Security, um Zugriffskontrollen zu sichern, Audits durchzuführen sowie Nachrichten, die von der Komponente gesendet und empfangen werden, zu verschlüsseln und zu authentifizieren.
5. Schreiben Sie ein einfaches Nachrichten-Warteschlangenprogramm in der .Net-Umgebung
(1) Zuerst Nachrichten-Warteschlangendienste installieren
Installieren Sie MSMQ über das Kontrollpanel, den Schritt "Programme hinzufügen/entfernen" – "Windows-Komponenten hinzufügen/entfernen".
MSMQ kann entweder im Arbeitsgruppenmodus oder im Domänenmodus installiert werden. Wenn der Installer keinen Server findet, der eine Nachrichtenwarteschlange betreibt und Verzeichnisdienste bereitstellt, kann dieser nur im Arbeitsgruppenmodus installiert werden, und die Nachrichtenwarteschlange auf diesem Computer unterstützt nur die Erstellung privater Warteschlangen sowie die Einrichtung direkter Verbindungen zu anderen Computern, die Nachrichtenwarteschlangen ausführen.
(2) MSMQ konfigurieren
Computermanagement öffnen – Nachrichtenwarteschlangen und eine MSMQDemo-Warteschlange unter Private Queues erstellen
(3) Code schreiben – einfach das MSMQ-Objekt demonstrieren
Die MessageQueue-Klasse ist ein Wrapper um eine "Nachrichtenwarteschlange". Die MessageQueue-Klasse stellt eine Referenz auf die Message Queue Queue bereit. Du kannst im MessageQueue-Konstruktor einen Pfad zu einer bestehenden Ressource angeben oder eine neue Warteschlange auf dem Server erstellen. Bevor Sie Send, Peek oder Receive aufrufen können, müssen Sie eine neue Instanz der MessageQueue-Klasse mit einer bestehenden Warteschlange verknüpfen.
MessageQueue unterstützt zwei Arten der Nachrichtenabrufe: synchrone und asynchrone. Die synchronisierten Peek- und Empfangsmethoden bewirken, dass der Prozessthread darauf wartet, dass eine neue Nachricht in einem bestimmten Intervall in der Warteschlange eintrifft. Die asynchronen Methoden BeginPeek und BeginReceive ermöglichen es der Hauptaufgabe, die Anwendung in einem separaten Thread fortzusetzen, bevor die Nachricht die Warteschlange erreicht. Diese Methoden funktionieren, indem Callback-Objekte und Zustandsobjekte verwendet werden, um die Informationskommunikation zwischen Threads zu erleichtern.
Quellcode-Download:
Touristen, wenn ihr den versteckten Inhalt dieses Beitrags sehen wollt, bitte Antwort
|