Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework.

Ähnliche Präsentationen


Präsentation zum Thema: "No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework."—  Präsentation transkript:

1 No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework

2 Zur Person Dipl. Inf. Marcel Gnoth www.gnoth.net NTeam GmbH, Berlin www.nteam.de Senior Consultant, Trainer VB6, COM, Datenbanken Verteilte Informationssysteme Und.....Net

3 Überblick Einführung MSMQ Vorstellen des Anwendungsszenarios MSMQ im Detail

4 Message Queueing Einführung

5 Message – Queueing Transport von Nachrichten zwischen Computern

6 Einführung Konzepte Asynchrone Abarbeitung von Aufgaben Empfänger oder Sender kann Offline sein Nachrichten werden zwischengepuffert Aktiver Austausch von Informationen zwischen Programmen / Computern Pushen der Infos

7 Einführung Technik Versionen NT4: MSMQ 1.0 (Option Pack) ab Win2k MSMQ 2.0 Bestandteil des Win2k / WinXP Setup Active Directory / Domänen Controller MQIS Message Queue Information Store Public Queues Aktive Directory Ohne MQIS nur Private Queues

8 Einführung Programmieren Referenz auf System.Messaging MessageQueue Zugriff auf eine Warteschlange Public Queues Sind im MQIS eingetragen Private Queues Ohne Active Directory Message Nachrichten, die verschickt oder empfangen werden

9 Öffnen einer Queue MessageQueue.Create (Path As String) New MessageQueue (Path As String) MessageQueue.Exists (Path As String) Imports System.Messaging Private WithEvents m_JobQueue As MessageQueue Sub Test() m_JobQueue = New MessageQueue _ ("Gengar\Private$\Jobs") End Sub Dim mqs As MessageQueue() = _ MessageQueue.GetPrivateQueuesByMachine("Gengar")

10 Wie findet MSMQ eine Queue? Mit MQIS (Active Directory) Public und Private Path - Property Label - Property FormatName - Property Ohne MQIS Nur Private FormatName - Property

11 Öffnen mit Path Zugriff auf MQIS Kein Offline Private Queues nur lokal öffnen Dim mq As MessageQueue, s As String s = "Gengar\Jobs" 'Public s = "Gengar\Private$\Jobs"'Private mq = New MessageQueue(s)

12 Öffnen mit Label Label = Name einer Queue Sucht über MQIS die Queue Langsamer, da Zugriff auf MQIS Kein Offline Nur Public Queues Dim myQueue As New MessageQueue("Label:TheLabel")

13 Öffnen mit FormatName Offline Mode Ohne MQIS Schnellste und flexibelste Methode FormatName:Public=5A5F7535-AE9A-41d4-935C-845C2AFF7112 FormatName:DIRECT=SPX:NetworkNumber;HostNumber\QueueName FormatName:DIRECT=TCP:IPAddress\QueueName FormatName:DIRECT=OS:MachineName\QueueName FormatName:DIRECT=OS:MachineName\Private$\QueueName Dim myQueue As New MessageQueue _ ("FormatName:DIRECT=OS:Gengar\private$\Jobs")

14 Senden einer Nachricht Queue öffnen Send Methode mit einen String oder einem Objekt aufrufen Object wird serialisiert XML ist Standardformat z.B. DataSets verschicken msgQ.Send(myObject, "Message Label")

15 Senden mit explizitem Message - Objekt Konfigurieren der Message – Parameter Format, Verschlüsselung, TimeOuts Formate für Serialisierung: XMLMessageFormatter BinaryMessageFormatter ActiveXMessageFormatter With myMsg.Label = "Job " + theJob.ID.Formatter = New BinaryMessageFormatter().AppSpecific = 34.Priority = MessagePriority.VeryHigh.Body = theJob End With

16 Demo: Nachricht versenden

17 Inhalt einer Queue ansehen Peek – Methode GetEnumerator Dim eM As IEnumerator = mqJobs.GetEnumerator() lstJobMessages.Items.Clear() Do While eM.MoveNext() Dim q As Message q = CType(eM.Current, Message) lstJobMessages.Items.Add(q.Label) Loop myMsg = m_JobQueue.Peek()

18 Nachricht empfangen Receive BeginReceive Asynchrones Empfangen Dim msg As Message = mqResults.Receive() mqResults.BeginReceive() Private Sub mqResults_ReceiveCompleted(..., _ ByVal e As...ReceiveCompletedEventArgs) _ Handles mqResults.ReceiveCompleted Dim myMsg As System.Messaging.Message myMsg = e.Message End Sub

19 Format der Nachricht Body ist vom Typ Object Mögliche Typen festlegen Formatter initialisieren Für Deserialisierung zuständig Dim m_MsgTargetTypes(1) As Type m_MsgTargetTypes(0) = GetType(String) m_MsgTargetTypes(1) = GetType(Job) Dim m_XmlMsgFrmt As XmlMessageFormatter m_XmlMsgFrmt = New _ XmlMessageFormatter(m_MsgTargetTypes)

20 Nachrichten Body auspacken Der Formatter deserialisiert den Body Erzeugt gewünschtes Objekt Dim j As Job, s As String myMsg.Formatter = m_XmlMsgFrmt If TypeOf (myMsg.Body) Is Job Then 'Job Object j = CType(myMsg.Body, Job) ProcessJob(j) Else 'String s = CStr(myMsg.Body) Console.Write(s) End If

21 Woher weiß der Formatter das? Durch Reflection kann zur Laufzeit ein Object untersucht werden Klasse als kennzeichnen Wird automatisch serialisiert Public Class Job Public Name As String End Class

22 Demo Nachricht empfangen

23 MSMQ in der Praxis Job Shop Scheduling als Anwendungsszenario

24 Job Shop Scheduling Viele Jobs die lange dauern Arbeit auf mehrere Rechner verteilen Ergebnisse werden eingesammelt Eine oder mehrere Queue(s) mit Aufträgen Queue(s) mit Ergebnissen

25 Job Shop Scheduling

26 Projekte JobShopComponent (Dll) Klassen Job und Jobs Kapselt Aufträge JobShopManager (Exe) Erzeugt Jobs Sammelt Ergebnisse ein Kontrolliert Bestätigungen JobShopWorker (Exe) Nimmt Job aus Queue Verarbeitet Job Sendet Ergebnis in Queue

27 JobShopManager.vbpj frmCreatorMain Erzeugt Jobs / Nachrichten Stellt Nachrichten in Job-Queue

28 JobShopManager.vbpj frmResult Überwacht Result-Queue Zeigt Ergebnisse an

29 JobShopWorker.vbpj Lauscht an der Job-Queue Bearbeitet Jobs Sendet Ergebnisse an Result-Queue

30 Live - Demo

31 MSMQ im Detail Acknowledgements TimeOuts Journlaing Transaktionen

32 Time Outs Was passiert, wenn Nachricht nicht gelesen wird? MSMQ informiert wenn Zeiten zum Übermitteln und zum Lesen überschritten werden Properties: TimeToReachQueue TimeToBeReceived

33 Acknowlegdgements MSMQ schickt Bestätigungs - Nachrichten ReachQueue: Erreichen der Queue Receive: Aus der Queue entnommen AcknowledgeTypes: None FullReachQueue, PositiveArrival NotAcknowledgeReachQueue FullReceive, NotAcknowledgeReceive NegativeReceive, PositiveReceive

34 Acknowledgements AdministratorQueue: Wurde der Nachricht beim Versenden übergeben Benachrichtigungen landen in dieser Queue Ganz normale Queue Nach dem Senden ist Message.ID gesetzt theMsg.TimeToBeReceived = New TimeSpan(0, 0, 20) theMsg.AcknowledgeType = _ AcknowledgeTypes.FullReachQueue Or _ AcknowledgeTypes.FullReceive theMsg.AdministrationQueue = m_JobAckQueue m_JobQueue.Send(theMsg) myJob.MQMessageID = theMsg.Id 'für CorrelationID

35 Acknowledgement Nachrichten MessageType: Acknowledgment CorrelationId: Kennung der betroffenen Nachricht Beim Öffnen der Ack- Queue: Dim j As Job, s As String j = m_Jobs.ItemByMQMessageID(theMsg.CorrelationID) s = Msg.Acknowledgment.ToString m_JobAckQueue.MessageReadPropertyFilter.CorrelationId = True

36 Journaling Überwacht Transport der Nachrichten zwischen einzelnen Computern Nur bei Versand zwischen Computern! Journal-Queues: System-Queues Individuelle für jede Queue Eine Systemweite Journal-Queue

37 Journaling Szenario: Negatives Acknowledgement überwachen Betroffene Nachricht aus der Journal- Queue holen (ReceiveByID) System – Journal – Queue Queue eigene Journal - Queue theMsg.UseJournalQueue = True theQueue.UseJournalQueue = True

38 Demo

39 Transaktion Interne MSMQ Transaktionen DTC – Transaktionen Distributed Transaktion Coordinator MSMQ, SQL-Server, Oracle, Sybase Ressource-Manager arbeiten mit DTC zusammen Infos: http://msdn.microsoft.com/library/en- us/dnbda/html/bdadotnettransact1.asp http://msdn.microsoft.com/library/en- us/dnbda/html/bdadotnettransact1.asp

40 Fazit - MSMQ Einfacher Daten (Objekt) – Austausch in der Windowswelt Bridges in andere Welten http://www.microsoft.com/msmq/interop.htm http://www.envoytech.com/ Wann Einsetzen: Rechnerübergreifende Kommunikation Asynchrone Abarbeitung von Programmen Disconected Programmierung

41 Fazit - Queues Public Queues sind bequemer nur bei solidem Active Directory Private Queues Schneller, weniger Overhead Ermöglichen Offline – Betrieb kein Domänen- oder Active Directory Controller vorhanden

42 Fazit – Formate XML: Kleine Datenmenge BLOBs ??? Gut lesbar Binary: Weniger Overhead, effizienter Nur wenn XML keinen Sinn macht Serialisierung kann kontrolliert werden

43 Links Basic Pro 5/2001 Nachrichtenbasierte Informationssysteme auf MSDN suchen Accessing Message Queues http://msdn.microsoft.com/library/en- us/dnbda/html/bdadotnetasync1.asp http://msdn.microsoft.com/library/en- us/dnbda/html/bdadotnetasync1.asp Reliable Messaging with MSMQ and.NET http://msdn.microsoft.com/library/en- us/dnbda/html/bdadotnetasync2.asp http://msdn.microsoft.com/library/en- us/dnbda/html/bdadotnetasync2.asp MSMQ Home-Page http://www.microsoft.com/msmq/overview.htm

44 Fragen? Uff...


Herunterladen ppt "No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework."

Ähnliche Präsentationen


Google-Anzeigen