In den Beiträgen
wurden schon einige Grundlagen des Logging Application Blocks der Enterprise Library erläutert. In diesem Beitrag geht es nun um das Logging mit der Message Queuing (MSMQ) von Microsoft. MSMQ ist ein Warteschlangen System. Vereinfacht gesagt stellt man Nachrichten ein und ein Verwender holt diese ab und verarbeitet diese Nachrichten. Dieses Szenario wird oft in verteilten Anwendungen eingesetzt.
Grundlegender Ablauf
Um Log-Einträge an einem zentralen Ort zu verwalten, wird die Applikation so konfiguriert, dass alle anfallenden Log-Einträge an einen so genannten „Message Queue Trace Listener“ gesendet werden. Der Logging Application Block legt daraufhin einen Eintrag in der Message Queuing-Warteschlange an. Der „Enterprise Library Distributor Service“ arbeitet diese Warteschlange ab und schreibt die entsprechenden Einträge dann in ein konfiguriertes Logging-Ziel. Logging-Ziel kann z.B. eine einfache Text-Datei, eine XML-Datei oder eine Datenbank sein. Zur Verdeutlichung das folgende Schaubild:
Der Ablauf sieht folgendermaßen aus:
- Applikation auf Rechner A ruft die Enterprise Library API auf um einen Log-Eintrag zu schreiben
- Enterprise Library benutzt den Binary-Formater und stellt den serialisierten Log-Eintrag in die MSMQ-Queue
- MSMQ sendet den Log-Eintrag zu der Ziel-Queue auf Rechner C
- Der Enterprise Library Distributor Service pollt auf diese Ziel-Queue (Zeitspanne des Polling ist parametrierbar)
- Der Enterprise Library Distributor Service ruft die Enterprise Library API auf und serialisiert den Queue-Eintrag in einen entsprechenden Log-Eintrag (z.B. in eine Text-Datei, XML-Datei, Datenbank usw.)
- Danach wird der Queue-Eintrag aus der MSMQ-Queue entfernt
Installation MSMQ
Message Queuing muss sowohl auf Client als auch auf dem Server installiert werden! Unter Windows 7 kann das Message Queuing wie folgt installiert werden (Systemsteuerung -> Programme -> Windows-Funktionen aktivieren oder deaktivieren):
Der oben gezeigten Screenshot zeigt die Installation unter Windows 7. Unter Windows Server 2008R2 ist MSMQ unter den Server-Rollen zu finden:
Nachdem die MSMQ installiert wurde muss eine nicht transaktionale private Warteschlange erstellt werden, an die alle Log-Meldungen gesendet werden. Ein transaktionale Warteschlange würde auch funktionieren ist aber nicht notwendig, da der MSMQ Handler der Enterprise Library keine verteilten Transaktionen verwendet. Das ganze kann über die Computerverwaltung konfiguriert werden (Start -> Ausführen -> compmgmt.msc):
Installation Enterprise Library Distributor Service
Um den Distributor Service der Enterprise Library zu installieren müssen die folgenden Schritte durchgeführt werden:
- Der Logging Application Block, der Enterprise Library Core, die MSMQDistributor.exe Datei und MSMQDistributor.exe.config müssen auf den Rechner kopiert werden, der die Einträge aus der Message Queue liest. Auf diesem Computer muss die MSMQ installiert sein. Dieser Computer kann der gleiche Computer sein auf dem die Applikation läuft, es kann aber auch ein anderer Rechner in der gleichen Domäne sein.
- Darüber hinaus müssen alle Dateien auf den Rechner kopiert werden, die von den einzelnen Trace Listenern verwendet werden, z.B. wenn in eine Datenbank geloggt werden soll muss der Data Access Application Block auf den Rechner kopiert werden, auf dem der Distributor Service läuft.
- Anlegen einer entsprechenden Message Queue.
- MSMQDistributor.exe.config Konfigurationsdatei editieren. Hierfür kann nicht das Konfigurationstool der Enterprise Library verwendet werden. Hier muss das Attribut „msmqPath“ den Namen der neu angelegten Queue erhalten (Standardwert ist: „.\Private$\entlib“)
- Nun muss der Enterprise Library Distributor Service installiert werden. Am besten über das Kommandozeile mit dem Befehl: installutil -i msmqdistributor.exe. (Das Installer-Tool, Installutil.exe, befindet sich im .NET Framework Verzeichnis, z.B. C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727)! Installation als Administrator ausführen und Service unter dem lokalen Systemkonto laufen lassen!
War die Installation erfolgreich sollte der Dienst verfügbar sein:
Nachdem der Service installiert wurde, kann dieser über die Dienste-Verwaltung gestartet werden. Alternative kann man folgenden Kommandozeilen-Befehl verwenden: net start „Enterprise Library Distributor Service“
Weitere Hinweise zur Installation: http://msdn.microsoft.com/en-us/library/ff664428%28v=pandp.50%29.aspx
Konfiguration
Innerhalb dieses Szenarios gibt es zwei .NET-Konfigurationsdateien für das Logging. Die eine Konfigurationsdatei befindet sich auf der Clientseite (schreiben von Log-Meldungen in die MSMQ-Warteschlange). Die andere Konfigurationsdatei befindet sich auf der Seite des MSMQ-Handlers (Enterprise Library Distributor Service). Hier empfiehlt es sich das Konfigurationstool der Enterprise Library zu verwenden.
Client-Konfiguration
Enterprise Library Distributor Service Konfiguration
Beispiel-Szenarios
Hier nun einige Beispiel-Szenarien, die in diesem Zusammenhang denkbar wären.
Szenario 1
In diesem Szenario werden alle benötigten Komponenten auf einem Rechner installiert.
Szenario 2
In diesem Szenario wird das Logging auf zwei Rechner verteilt. Die Meldungs-Queue und der Enterprise Library Distributor Service werden auf einem Rechner installiert, wohingegen das eigentliche Logging-Ziel (z.B. eine MSSQL-Datenbank, XML-Dateien, usw.) auf einem weiteren Rechner eingerichtet wird.
Szenario 3
In diesem Szenario sind die einzelnen Komponenten jeweils auf einem separaten Rechner installiert.
Literaturverzeichnis und Weblinks
Abk. | Quelle |
---|---|
[1] | Using the Distributor Service |
[2] | Enterprise Library 5 Logging using MSMQ |
Login