1 / 33

Programmkommunikation Microsoft Message Queueing

Programmkommunikation Microsoft Message Queueing. Asynchron und Nachrichtenbasiert. E-Mail Marcel@Gnoth.net. No. NA10, NT5. Zur Person. Dipl. Inf. Marcel Gnoth, MCSD www.gnoth.net Code und Powerpoint auf der Webseite NTeam GmbH, Berlin www.nteam.de

sal
Download Presentation

Programmkommunikation Microsoft Message Queueing

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programmkommunikation Microsoft Message Queueing Asynchron und Nachrichtenbasiert E-Mail Marcel@Gnoth.net No. NA10, NT5

  2. Zur Person • Dipl. Inf. Marcel Gnoth, MCSD • www.gnoth.net • Code und Powerpoint auf der Webseite • NTeam GmbH, Berlin • www.nteam.de • IT – Infrastruktur, BI, BizTalk, Entwicklung • Senior Consultant, Trainer, Programmierer • Autor dotnet magazin und dotnetpro • VB6, COM, Datenbanken • Verteilte Informationssysteme • Und .....Net 

  3. Agenda • Kurze Einführung MSQM • Beispiel – Anwendung • Fallbeispiele • Offline Einsatz mit abgeklemmten Kabel • Journal, Timeouts, Acknowledgements • Message Queuing Trigger • Neuerungen in MSMQ3 • Messages über HTTP • Real Time Multicast Messages

  4. Teil 1 Kurze Einführung

  5. Message Queueing • Briefe zwischen Computern versenden

  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 • Workflows

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

  8. Objekte • Referenz: System.Messaging • MessageQueue • Zugriff auf eine Warteschlange • Message • Nachrichten, die verschickt oder empfangen werden • Achtung: ohne Active Directory = Workgroup – Modus -> nur Private Queues

  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. Ö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=HTTP://MSMQComputer/msmq/MyPublicQueue FormatName:DIRECT=HTTPS://MSMQComputer/msmq/MyPublicQueue FormatName:DIRECT=OS:MachineName\QueueName FormatName:DIRECT=OS:MachineName\Private$\QueueName Dim myQueue As New MessageQueue _ ("FormatName:DIRECT=OS:Gengar\private$\Jobs")

  11. Senden einer Nachricht • Queue öffnen • Send Methode mit einem Objekt aufrufen • Objekt wird serialisiert <Serializable()> Public Class Job • XML ist Standardformat • z.B. DataSets verschicken • Eigenes Message – Objekt verwenden • Konfiguration vieler Parameter msgQ.Send(myObject, "Message Label")

  12. 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

  13. Inhalt einer Queue ansehen • Peek – Methode • GetEnumerator myMsg = m_JobQueue.Peek() 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

  14. Beispielprojekt Jobs und Shops

  15. 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

  16. Job Shop Scheduling

  17. 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

  18. Live - Demo

  19. MSMQ im Detail Offline Trigger TimeOuts Acknowledgements Journlaing

  20. Offline • Disconnected Szenario • Außendienstmitarbeiter • Ausfallsicherheit • Direct Format Name verwenden • Kein Directory Service • Nachrichten im Recover – Mode verschicken • Ausgehende Warteschlangen theMsg.Recoverable = True

  21. Demo

  22. Trigger • Windows Service (mqtgsvc.exe) • Verwendet Regeln • Instanziiert COM Komponente • Startet Exe • Parameterübergabe

  23. Trigger

  24. Demo Trigger

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

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

  27. 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

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

  29. 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

  30. 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

  31. Demo

  32. Neues in MSMQ 3 • Trigger • Zugriff auf Queues über HTTP(S) • real-time multicast messaging • Administration

  33. Uff... Fragen? Alles wird gut 

More Related