Heim > Artikel > Backend-Entwicklung > Einführung in Message Queue und seine Verwendung
Mithilfe von MSMQ (Microsoft Message Queue) können Anwendungsentwickler schnell und zuverlässig schnell und zuverlässig mit Anwendungen kommunizieren, indem sie Nachrichten senden und empfangen. Die Nachrichtenverarbeitung bietet Ihnen eine garantierte Nachrichtenzustellung und eine zuverlässige, ausfallsichere Möglichkeit, viele Geschäftsprozesse auszuführen.
MSMQ ist wie XML Web Services und .Net Remoting eine verteilte Entwicklungstechnologie. Bei Verwendung von XML-Webdiensten oder .Net Remoting-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 es die Nachricht vorübergehend in der Nachrichtenwarteschlange des Clients speichert und sie dann zur Verarbeitung an den Server sendet, wenn er später online ist.
Natürlich ist MSMQ nicht für Situationen geeignet, in denen der Client eine zeitnahe Antwort vom Server benötigt. MSMQ interagiert asynchron mit dem Server, sodass Sie sich keine Gedanken über das Warten auf die Verarbeitung durch den Server machen müssen lange.
Obwohl XML Web Services und .Net Remoting beide das [OneWay]-Attribut zur Verarbeitung asynchroner Aufrufe bereitstellen, wird dieses zur Lösung des Problems verwendet, dass lange Methodenaufrufe auf der Serverseite den Client behindern Seite für eine lange Zeit. Das Problem einer großen Anzahl von Client-Ladevorgängen kann jedoch nicht gelöst werden. Zu diesem Zeitpunkt nimmt der Server Anfragen schneller an, als er sie verarbeitet.
Im Allgemeinen wird das Attribut [OneWay] nicht in speziellen Messaging-Diensten verwendet.
1. Grundbegriffe und Konzepte
„Nachricht“ ist eine Dateneinheit, die zwischen zwei Computern übertragen wird. Nachrichten können sehr einfach sein und nur Textzeichenfolgen enthalten, oder sie können komplexer sein und möglicherweise eingebettete Objekte enthalten.
Die Nachricht wird an die Warteschlange gesendet. Eine „Nachrichtenwarteschlange“ ist ein Container, der Nachrichten während ihrer Übertragung speichert. Der Nachrichtenwarteschlangenmanager fungiert als Vermittler bei der Weiterleitung von Nachrichten von seiner Quelle an sein Ziel. Der Hauptzweck einer Warteschlange besteht darin, das Routing bereitzustellen und die Zustellung von Nachrichten zu gewährleisten. Wenn der Empfänger zum Zeitpunkt des Sendens der Nachricht nicht verfügbar ist, behält Message Queue die Nachricht bei, bis sie erfolgreich zugestellt werden kann.
„Message Queuing“ ist die Nachrichtenverarbeitungstechnologie von Microsoft, die jeder Anwendung auf jeder Kombination von Computern, auf denen Microsoft Windows installiert ist, Nachrichtenverarbeitungs- und Nachrichtenwarteschlangenfunktionen bereitstellt, unabhängig davon, auf welchem Computer sie ausgeführt werden im selben Netzwerk oder gleichzeitig online.
Ein „Message Queuing-Netzwerk“ ist eine Gruppe von Computern, die Nachrichten untereinander senden können. Verschiedene Computer im Netzwerk spielen unterschiedliche Rollen bei der Gewährleistung einer reibungslosen Verarbeitung von Nachrichten. Einige von ihnen stellen Routing-Informationen bereit, um zu bestimmen, wie Nachrichten gesendet werden, andere enthalten wichtige Informationen über das gesamte Netzwerk und wieder andere senden und empfangen nur Nachrichten.
Während der Message Queuing-Installation bestimmt der Administrator, welche Server miteinander kommunizieren können und legt spezielle Rollen für bestimmte Server fest. Die Computer, aus denen dieses Message Queuing-Netzwerk besteht, werden Sites genannt und sind über Site-Links miteinander verbunden. Mit jedem Site-Link sind „Kosten“ verbunden, die vom Administrator festgelegt werden und angeben, wie oft Nachrichten über den Site-Link zugestellt werden.
Der „Message Queuing“-Administrator richtet außerdem einen oder mehrere Computer als „Routing-Server“ im Netzwerk ein. Der Routing-Server bestimmt, wie die Nachricht zugestellt wird, indem er die Kosten für jede Site-Verknüpfung berücksichtigt, um den schnellsten und effizientesten Weg zu ermitteln, die Nachricht über mehrere Sites zuzustellen.
2. Warteschlangentyp
Es gibt zwei Hauptwarteschlangentypen: von Ihnen oder anderen Benutzern im Netzwerk erstellte Warteschlangen und Systemwarteschlangen.
Eine vom Benutzer erstellte Warteschlange kann eine der folgenden Warteschlangen sein:
„Öffentliche Warteschlangen“ werden im gesamten Message Queuing-Netzwerk repliziert und sind möglicherweise für alle mit dem Netzwerk verbundenen Standorte zugänglich.
„Private Warteschlangen“ werden nicht im gesamten Netzwerk veröffentlicht. Stattdessen sind sie nur auf dem lokalen Computer verfügbar, auf dem sie sich befinden. Auf private Warteschlangen können nur Anwendungen zugreifen, die den vollständigen Pfadnamen oder die Bezeichnung der Warteschlange kennen.
Eine „Management Queue“ enthält Nachrichten, die den Empfang von Nachrichten bestätigen, die in einem bestimmten „Message Queue“-Netzwerk gesendet wurden. Gibt die Verwaltungswarteschlange (falls vorhanden) an, die die MessageQueue-Komponente verwenden soll.
Die „Antwortwarteschlange“ enthält die Antwortnachrichten, die an die sendende Anwendung zurückgegeben werden, wenn die Zielanwendung die Nachricht empfängt. Gibt die Antwortwarteschlange (falls vorhanden) an, die die MessageQueue-Komponente verwenden soll.
Systemgenerierte Warteschlangen sind im Allgemeinen in die folgenden Kategorien unterteilt:
„Journal-Warteschlange“ speichert optional Kopien gesendeter Nachrichten und Kopien von Nachrichten, die aus der Warteschlange entfernt wurden. Eine einzelne Journalwarteschlange auf jedem Message Queuing-Client speichert Kopien der von diesem Computer gesendeten Nachrichten. Für jede Warteschlange wird auf dem Server eine eigene Journalwarteschlange erstellt. Dieses Journal verfolgt Nachrichten, die aus dieser Warteschlange entfernt wurden.
In der „Dead Letter Queue“ werden Kopien von Nachrichten gespeichert, die nicht zugestellt werden können oder abgelaufen sind. Wenn es sich bei der abgelaufenen oder unzustellbaren Nachricht um eine Transaktionsnachricht handelt, wird sie in einer speziellen Warteschlange für unzustellbare Nachrichten gespeichert, die als „Transaktionswarteschlange für unzustellbare Nachrichten“ bezeichnet wird. Unzustellbare Nachrichten werden auf demselben Computer gespeichert wie die abgelaufenen Nachrichten. Weitere Informationen zu Zeitüberschreitungen und abgelaufenen Nachrichten finden Sie unter Standardnachrichteneigenschaften.
Die „Berichtswarteschlange“ enthält Nachrichten, die den Weg angeben, den die Nachricht genommen hat, um ihr Ziel zu erreichen, und kann auch Testnachrichten enthalten. Es kann nur eine Berichtswarteschlange pro Computer geben.
„Private Systemwarteschlangen“ sind eine Reihe dedizierter Warteschlangen, in denen Verwaltungs- und Benachrichtigungsnachrichten gespeichert werden, die das System zur Durchführung von Nachrichtenverarbeitungsvorgängen benötigt.
Der Großteil der in der Anwendung geleisteten Arbeit umfasst den Zugriff auf öffentliche Warteschlangen und deren Nachrichten. Abhängig von den Protokollierungs-, Bestätigungs- und anderen speziellen Verarbeitungsanforderungen Ihrer Anwendung werden Sie jedoch im täglichen Betrieb wahrscheinlich mehrere unterschiedliche Systemwarteschlangen verwenden.
3. Synchrone vs. asynchrone Kommunikation
Die Warteschlangenkommunikation ist von Natur aus asynchron, da das Senden und Empfangen von Nachrichten an die Warteschlange in einem anderen Prozess erfolgt. Darüber hinaus können Empfangsvorgänge asynchron ausgeführt werden, da die Person, die die Nachricht empfangen möchte, die BeginReceive-Methode in einer beliebigen Warteschlange aufrufen und dann sofort mit anderen Aufgaben fortfahren kann, ohne auf eine Antwort warten zu müssen. Dies unterscheidet sich stark von dem, was die Leute als „synchrone Kommunikation“ kennen.
Bei der synchronen Kommunikation muss der Absender der Anfrage auf eine Antwort des vorgesehenen Empfängers warten, bevor er andere Aufgaben ausführt. Die Zeit, die der Sender wartet, hängt vollständig von der Zeit ab, die der Empfänger benötigt, um die Anfrage zu verarbeiten und die Antwort zu senden.
4. Interaktion mit Nachrichtenwarteschlangen
Nachrichtenverarbeitung und Nachrichtenübermittlung sorgen für eine leistungsstarke prozessübergreifende Kommunikation zwischen serverbasierten Anwendungskomponenten. Flexibler Mechanismus. Sie haben gegenüber direkten Aufrufen zwischen Komponenten mehrere Vorteile, darunter:
Stabilität – die Auswirkung von Komponentenausfällen auf Nachrichten ist viel geringer als bei direkten Aufrufen zwischen Komponenten, da Nachrichten in der Warteschlange gespeichert werden und dort immer verfügbar bleiben bis zur ordnungsgemäßen Entsorgung. Die Nachrichtenverarbeitung ähnelt der Transaktionsverarbeitung dahingehend, dass die Nachrichtenverarbeitung garantiert ist.
Nachrichtenpriorität – Dringendere oder wichtige Nachrichten können vor weniger wichtigen Nachrichten empfangen werden, wodurch eine angemessene Reaktionszeit für kritische Anwendungen gewährleistet wird.
Offline-Fähigkeit – Wenn Nachrichten gesendet werden, können sie an eine temporäre Warteschlange gesendet werden und dort bleiben, bis sie erfolgreich zugestellt werden. Benutzer können weiterhin Vorgänge ausführen, wenn der Zugriff auf die erforderliche Warteschlange aus irgendeinem Grund nicht verfügbar ist. In der Zwischenzeit können andere Vorgänge so fortgesetzt werden, als ob die Nachricht verarbeitet worden wäre, da die Nachrichtenzustellung garantiert ist, wenn die Netzwerkverbindung wiederhergestellt ist.
Transaktionale Nachrichtenverarbeitung – fasst mehrere zusammengehörige Nachrichten in einer einzigen Transaktion zusammen und stellt so sicher, dass Nachrichten in der richtigen Reihenfolge zugestellt werden, nur einmal zugestellt werden und erfolgreich aus ihren Zielwarteschlangen abgerufen werden können. Sollten Fehler auftreten, wird die gesamte Transaktion abgebrochen.
Sicherheit – Die Message Queuing-Technologie, auf der die MessageQueue-Komponente basiert, nutzt Windows-Sicherheit, um die Zugriffskontrolle zu schützen, Überwachung bereitzustellen und von der Komponente gesendete und empfangene Nachrichten zu verschlüsseln und zu authentifizieren.
5. Schreiben Sie ein einfaches Message Queuing-Programm in der .Net-Umgebung
(1) Installieren Sie zunächst Message Queuing Services
über die Systemsteuerung, „Hinzufügen“. /Programme entfernen“ – Der Schritt „Windows-Komponenten hinzufügen/entfernen“ installiert MSMQ.
MSMQ kann im Arbeitsgruppenmodus oder Domänenmodus installiert werden. Wenn das Installationsprogramm keinen Server findet, auf dem Message Queuing ausgeführt wird, der Verzeichnisdienste bereitstellt, können Sie die Installation nur im Arbeitsgruppenmodus durchführen. Message Queuing unterstützt nur die Erstellung privater Warteschlangen und die Erstellung gemeinsamer Warteschlangen mit anderen Computern, auf denen Message Queuing direkt ausgeführt wird Verbindung.
(2) MSMQ konfigurieren
Öffnen Sie Computer Management – Message Queuing und erstellen Sie eine MSMQDemo-Warteschlange unter Private Queues
(3) Code schreiben – einfaches Demonstrations-MSMQ-Objekt
Die MessageQueue-Klasse ist ein Wrapper um die „Message Queue“. Die MessageQueue-Klasse stellt einen Verweis auf die Message Queue-Warteschlange bereit. Sie können im MessageQueue-Konstruktor einen Pfad zu einer vorhandenen Ressource angeben oder eine neue Warteschlange auf dem Server erstellen. Vor dem Aufruf von Send, Peek oder Receive muss eine neue Instanz der MessageQueue-Klasse einer vorhandenen Warteschlange zugeordnet werden.
MessageQueue unterstützt zwei Arten des Nachrichtenabrufs: synchron und asynchron. Die synchronen Methoden „Peek“ und „Receive“ bewirken, dass der Prozessthread ein bestimmtes Intervall lang auf das Eintreffen neuer Nachrichten in der Warteschlange wartet. Die asynchronen Methoden BeginPeek und BeginReceive ermöglichen es der Hauptanwendungsaufgabe, die Ausführung in einem separaten Thread fortzusetzen, bevor die Nachricht in der Warteschlange ankommt. Diese Methoden verwenden Callback-Objekte und Statusobjekte, um Informationen zwischen Threads zu kommunizieren.
// Nachricht senden
private void btnSendMessage_Click(object sender, System.EventArgs e)
{
// Warteschlange öffnen
System.Messaging.MessageQueue queue = new System.Messaging.MessageQueue(".\Private$\MSMQDemo");
// Nachricht erstellen
System.Messaging .Message message = new System.Messaging.Message();
message.Body = txtMessage.Text.Trim();
message.Formatter = new System.Messaging.XmlMessageFormatter(new Type[] {typeof(string)});
// Nachricht in die Warteschlange stellen
queue.Send(message);
}
// Nachricht empfangen
private void btnReceiveMessage_Click(object sender, System.EventArgs e)
{
// Warteschlange öffnen
System.Messaging.MessageQueue queue = new System.Messaging.MessageQueue(".\Private$\MSMQDemo");
// Empfangen Sie eine Nachricht. Empfangen Sie eine Nachricht alter = queue.Receive();
message.Formatter = new System.Messaging.XmlMessageFormatter(new Type[] {typeof(string)});
txtReceiveMessage.Text = message.Body.ToString();
}