no. 240 marcel gnoth, nteam gmbh message queueing stille post mit dem.net-framework
TRANSCRIPT
![Page 1: No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework](https://reader036.vdokument.com/reader036/viewer/2022062312/55204d7149795902118c4318/html5/thumbnails/1.jpg)
No. 240
Marcel Gnoth, NTeam GmbH
Message Queueing
Stille Post mit dem .Net-Framework
![Page 2: No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework](https://reader036.vdokument.com/reader036/viewer/2022062312/55204d7149795902118c4318/html5/thumbnails/2.jpg)
Zur Person
Dipl. Inf. Marcel Gnothwww.gnoth.net
NTeam GmbH, Berlinwww.nteam.de
Senior Consultant, TrainerVB6, COM, DatenbankenVerteilte InformationssystemeUnd ....
.Net
![Page 3: No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework](https://reader036.vdokument.com/reader036/viewer/2022062312/55204d7149795902118c4318/html5/thumbnails/3.jpg)
Überblick
Einführung MSMQ
Vorstellen des Anwendungsszenarios
MSMQ im Detail
![Page 4: No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework](https://reader036.vdokument.com/reader036/viewer/2022062312/55204d7149795902118c4318/html5/thumbnails/4.jpg)
Message Queueing
Einführung
![Page 5: No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework](https://reader036.vdokument.com/reader036/viewer/2022062312/55204d7149795902118c4318/html5/thumbnails/5.jpg)
Message – QueueingTransport von Nachrichten
zwischen Computern
Queue Manager
Queue
Message
Message
Message
Queue
Message
Message
Message
Message
Queue Manager
Queue
Message
Message
Queue
Message
Message
Message
Message
Message
Message
![Page 6: No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework](https://reader036.vdokument.com/reader036/viewer/2022062312/55204d7149795902118c4318/html5/thumbnails/6.jpg)
Einführung Konzepte
Asynchrone Abarbeitung von AufgabenEmpfänger oder Sender kann Offline
seinNachrichten werden
zwischengepuffert
Aktiver Austausch von Informationen zwischen Programmen / ComputernPushen der Infos
![Page 7: No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework](https://reader036.vdokument.com/reader036/viewer/2022062312/55204d7149795902118c4318/html5/thumbnails/7.jpg)
Einführung TechnikVersionen
NT4: MSMQ 1.0 (Option Pack)ab Win2k MSMQ 2.0
Bestandteil des Win2k / WinXP Setup
Active Directory / Domänen Controller
MQISMessage Queue Information StorePublic QueuesAktive DirectoryOhne MQIS nur Private Queues
![Page 8: No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework](https://reader036.vdokument.com/reader036/viewer/2022062312/55204d7149795902118c4318/html5/thumbnails/8.jpg)
Einführung ProgrammierenReferenz auf System.MessagingMessageQueue
Zugriff auf eine WarteschlangePublic Queues
Sind im MQIS eingetragen Private Queues
Ohne Active DirectoryMessage
Nachrichten, die verschickt oder empfangen werden
![Page 9: No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework](https://reader036.vdokument.com/reader036/viewer/2022062312/55204d7149795902118c4318/html5/thumbnails/9.jpg)
Öffnen einer Queue
MessageQueue.Create (Path As String)
New MessageQueue (Path As String)
MessageQueue.Exists (Path As String)
Imports System.MessagingPrivate WithEvents m_JobQueue As MessageQueueSub Test() m_JobQueue = New MessageQueue _ ("Gengar\Private$\Jobs")End Sub
Dim mqs As MessageQueue() = _ MessageQueue.GetPrivateQueuesByMachine("Gengar")
![Page 10: No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework](https://reader036.vdokument.com/reader036/viewer/2022062312/55204d7149795902118c4318/html5/thumbnails/10.jpg)
Wie findet MSMQ eine Queue?
Mit MQIS (Active Directory)Public und PrivatePath - PropertyLabel - PropertyFormatName - Property
Ohne MQISNur PrivateFormatName - Property
![Page 11: No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework](https://reader036.vdokument.com/reader036/viewer/2022062312/55204d7149795902118c4318/html5/thumbnails/11.jpg)
Öffnen mit Path
Zugriff auf MQISKein OfflinePrivate Queues nur lokal öffnen
Dim mq As MessageQueue, s As String
s = "Gengar\Jobs" 'Publics = "Gengar\Private$\Jobs" 'Private
mq = New MessageQueue(s)
![Page 12: No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework](https://reader036.vdokument.com/reader036/viewer/2022062312/55204d7149795902118c4318/html5/thumbnails/12.jpg)
Öffnen mit Label
Label = Name einer QueueSucht über MQIS die QueueLangsamer, da Zugriff auf MQISKein OfflineNur Public Queues
Dim myQueue As New MessageQueue("Label:TheLabel")
![Page 13: No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework](https://reader036.vdokument.com/reader036/viewer/2022062312/55204d7149795902118c4318/html5/thumbnails/13.jpg)
Öffnen mit FormatNameOffline ModeOhne MQISSchnellste 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")
![Page 14: No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework](https://reader036.vdokument.com/reader036/viewer/2022062312/55204d7149795902118c4318/html5/thumbnails/14.jpg)
Senden einer Nachricht
Queue öffnenSend Methode mit einen String
oder einem Objekt aufrufenObject wird serialisiertXML ist Standardformatz.B. DataSets verschickenmsgQ.Send(myObject, "Message Label")
![Page 15: No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework](https://reader036.vdokument.com/reader036/viewer/2022062312/55204d7149795902118c4318/html5/thumbnails/15.jpg)
Senden mit explizitem Message - ObjektKonfigurieren der Message –
ParameterFormat, Verschlüsselung, TimeOuts
Formate für Serialisierung:XMLMessageFormatterBinaryMessageFormatterActiveXMessageFormatterWith myMsg
.Label = "Job " + theJob.ID .Formatter = New BinaryMessageFormatter() .AppSpecific = 34 .Priority = MessagePriority.VeryHigh .Body = theJobEnd With
![Page 16: No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework](https://reader036.vdokument.com/reader036/viewer/2022062312/55204d7149795902118c4318/html5/thumbnails/16.jpg)
Demo: Nachricht versenden
![Page 17: No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework](https://reader036.vdokument.com/reader036/viewer/2022062312/55204d7149795902118c4318/html5/thumbnails/17.jpg)
Inhalt einer Queue ansehenPeek – Methode
GetEnumeratorDim 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()
![Page 18: No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework](https://reader036.vdokument.com/reader036/viewer/2022062312/55204d7149795902118c4318/html5/thumbnails/18.jpg)
Nachricht empfangenReceive
BeginReceiveAsynchrones 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.MessageEnd Sub
![Page 19: No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework](https://reader036.vdokument.com/reader036/viewer/2022062312/55204d7149795902118c4318/html5/thumbnails/19.jpg)
Format der NachrichtBody ist vom Typ ObjectMögliche Typen festlegen
Formatter initialisierenFür Deserialisierung zuständig
Dim m_MsgTargetTypes(1) As Typem_MsgTargetTypes(0) = GetType(String)m_MsgTargetTypes(1) = GetType(Job)
Dim m_XmlMsgFrmt As XmlMessageFormatter m_XmlMsgFrmt = New _ XmlMessageFormatter(m_MsgTargetTypes)
![Page 20: No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework](https://reader036.vdokument.com/reader036/viewer/2022062312/55204d7149795902118c4318/html5/thumbnails/20.jpg)
Nachrichten Body auspackenDer Formatter deserialisiert den BodyErzeugt gewünschtes Objekt
Dim j As Job, s As StringmyMsg.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
![Page 21: No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework](https://reader036.vdokument.com/reader036/viewer/2022062312/55204d7149795902118c4318/html5/thumbnails/21.jpg)
Woher weiß der Formatter das?
Durch Reflection kann zur Laufzeit ein Object „untersucht“ werden
Klasse als <Serializable()> kennzeichnen
Wird automatisch serialisiert<Serializable()> Public Class Job Public Name As StringEnd Class
![Page 22: No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework](https://reader036.vdokument.com/reader036/viewer/2022062312/55204d7149795902118c4318/html5/thumbnails/22.jpg)
Demo Nachricht empfangen
![Page 23: No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework](https://reader036.vdokument.com/reader036/viewer/2022062312/55204d7149795902118c4318/html5/thumbnails/23.jpg)
MSMQ in der Praxis
Job Shop Scheduling als Anwendungsszenario
![Page 24: No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework](https://reader036.vdokument.com/reader036/viewer/2022062312/55204d7149795902118c4318/html5/thumbnails/24.jpg)
Job Shop Scheduling
Viele Jobs die lange dauernArbeit auf mehrere Rechner
verteilenErgebnisse werden eingesammelt
Eine oder mehrere Queue(s) mit AufträgenQueue(s) mit Ergebnissen
![Page 25: No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework](https://reader036.vdokument.com/reader036/viewer/2022062312/55204d7149795902118c4318/html5/thumbnails/25.jpg)
Job Shop Scheduling
Job Creator
JobQueue
Result W atcher
ResultQueue
W orker
W orker
W orker
Database
Meßdaten
![Page 26: No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework](https://reader036.vdokument.com/reader036/viewer/2022062312/55204d7149795902118c4318/html5/thumbnails/26.jpg)
ProjekteJobShopComponent
(Dll)Klassen Job und JobsKapselt Aufträge
JobShopManager (Exe)Erzeugt JobsSammelt Ergebnisse einKontrolliert
Bestätigungen
JobShopWorker (Exe)Nimmt Job aus QueueVerarbeitet JobSendet Ergebnis in
Queue
![Page 27: No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework](https://reader036.vdokument.com/reader036/viewer/2022062312/55204d7149795902118c4318/html5/thumbnails/27.jpg)
JobShopManager.vbpjfrmCreatorMainErzeugt Jobs /
NachrichtenStellt
Nachrichten in Job-Queue
![Page 28: No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework](https://reader036.vdokument.com/reader036/viewer/2022062312/55204d7149795902118c4318/html5/thumbnails/28.jpg)
JobShopManager.vbpj
frmResultÜberwacht
Result-QueueZeigt
Ergebnisse an
![Page 29: No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework](https://reader036.vdokument.com/reader036/viewer/2022062312/55204d7149795902118c4318/html5/thumbnails/29.jpg)
JobShopWorker.vbpjLauscht an der Job-QueueBearbeitet JobsSendet Ergebnisse an Result-Queue
![Page 30: No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework](https://reader036.vdokument.com/reader036/viewer/2022062312/55204d7149795902118c4318/html5/thumbnails/30.jpg)
Live - Demo
![Page 31: No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework](https://reader036.vdokument.com/reader036/viewer/2022062312/55204d7149795902118c4318/html5/thumbnails/31.jpg)
MSMQ im DetailAcknowledgementsTimeOutsJournlaingTransaktionen
![Page 32: No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework](https://reader036.vdokument.com/reader036/viewer/2022062312/55204d7149795902118c4318/html5/thumbnails/32.jpg)
Time OutsWas passiert, wenn Nachricht nicht
gelesen wird?MSMQ informiert wenn Zeiten
zum Übermitteln und zum Lesen überschritten werden
Properties:TimeToReachQueueTimeToBeReceived
![Page 33: No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework](https://reader036.vdokument.com/reader036/viewer/2022062312/55204d7149795902118c4318/html5/thumbnails/33.jpg)
AcknowlegdgementsMSMQ schickt Bestätigungs -
NachrichtenReachQueue: Erreichen der QueueReceive: Aus der Queue entnommenAcknowledgeTypes:
NoneFullReachQueue, PositiveArrivalNotAcknowledgeReachQueueFullReceive, NotAcknowledgeReceiveNegativeReceive, PositiveReceive
![Page 34: No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework](https://reader036.vdokument.com/reader036/viewer/2022062312/55204d7149795902118c4318/html5/thumbnails/34.jpg)
AcknowledgementsAdministratorQueue:
Wurde der Nachricht beim Versenden übergeben
Benachrichtigungen landen in dieser Queue
Ganz „normale“ QueueNach dem Senden ist Message.ID
gesetzttheMsg.TimeToBeReceived = New TimeSpan(0, 0, 20)theMsg.AcknowledgeType = _ AcknowledgeTypes.FullReachQueue Or _ AcknowledgeTypes.FullReceivetheMsg.AdministrationQueue = m_JobAckQueuem_JobQueue.Send(theMsg)myJob.MQMessageID = theMsg.Id 'für CorrelationID
![Page 35: No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework](https://reader036.vdokument.com/reader036/viewer/2022062312/55204d7149795902118c4318/html5/thumbnails/35.jpg)
Acknowledgement NachrichtenMessageType:Acknowledgment
CorrelationId:Kennung der
betroffenen NachrichtBeim Öffnen der Ack-
Queue:
Dim j As Job, s As Stringj = m_Jobs.ItemByMQMessageID(theMsg.CorrelationID)s = Msg.Acknowledgment.ToString
m_JobAckQueue.MessageReadPropertyFilter.CorrelationId = True
![Page 36: No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework](https://reader036.vdokument.com/reader036/viewer/2022062312/55204d7149795902118c4318/html5/thumbnails/36.jpg)
JournalingÜberwacht Transport der
Nachrichten zwischen einzelnen ComputernNur bei Versand zwischen Computern!
Journal-Queues:System-QueuesIndividuelle für jede QueueEine Systemweite Journal-Queue
![Page 37: No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework](https://reader036.vdokument.com/reader036/viewer/2022062312/55204d7149795902118c4318/html5/thumbnails/37.jpg)
Journaling
Szenario:Negatives Acknowledgement
überwachenBetroffene Nachricht aus der Journal-
Queue holen (ReceiveByID)System – Journal – Queue
Queue eigene Journal - Queue
theMsg.UseJournalQueue = True
theQueue.UseJournalQueue = True
![Page 38: No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework](https://reader036.vdokument.com/reader036/viewer/2022062312/55204d7149795902118c4318/html5/thumbnails/38.jpg)
Demo
![Page 39: No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework](https://reader036.vdokument.com/reader036/viewer/2022062312/55204d7149795902118c4318/html5/thumbnails/39.jpg)
Transaktion
Interne MSMQ TransaktionenDTC – Transaktionen
Distributed Transaktion CoordinatorMSMQ, SQL-Server, Oracle, SybaseRessource-Manager arbeiten mit DTC
zusammenInfos:
http://msdn.microsoft.com/library/en-us/dnbda/html/bdadotnettransact1.asp
![Page 40: No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework](https://reader036.vdokument.com/reader036/viewer/2022062312/55204d7149795902118c4318/html5/thumbnails/40.jpg)
Fazit - MSMQEinfacher Daten (Objekt) – Austausch
in der WindowsweltBridges in andere Welten
http://www.microsoft.com/msmq/interop.htm
http://www.envoytech.com/ Wann Einsetzen:
Rechnerübergreifende KommunikationAsynchrone Abarbeitung von
ProgrammenDisconected Programmierung
![Page 41: No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework](https://reader036.vdokument.com/reader036/viewer/2022062312/55204d7149795902118c4318/html5/thumbnails/41.jpg)
Fazit - QueuesPublic Queues
sind bequemernur bei solidem Active Directory
Private QueuesSchneller, weniger OverheadErmöglichen Offline – Betrieb kein Domänen- oder Active Directory
Controller vorhanden
![Page 42: No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework](https://reader036.vdokument.com/reader036/viewer/2022062312/55204d7149795902118c4318/html5/thumbnails/42.jpg)
Fazit – Formate
XML:Kleine DatenmengeBLOBs ???Gut lesbar
Binary:Weniger Overhead, effizienterNur wenn XML keinen Sinn macht
Serialisierung kann kontrolliert werden
![Page 43: No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework](https://reader036.vdokument.com/reader036/viewer/2022062312/55204d7149795902118c4318/html5/thumbnails/43.jpg)
LinksBasic Pro 5/2001
„Nachrichtenbasierte Informationssysteme“
auf MSDN suchen„Accessing Message Queues“
http://msdn.microsoft.com/library/en-us/dnbda/html/bdadotnetasync1.asp
„Reliable Messaging with MSMQ and .NET“http://msdn.microsoft.com/library/en-us/dn
bda/html/bdadotnetasync2.asp
MSMQ Home-Pagehttp://www.microsoft.com/msmq/overview.
htm
![Page 44: No. 240 Marcel Gnoth, NTeam GmbH Message Queueing Stille Post mit dem.Net-Framework](https://reader036.vdokument.com/reader036/viewer/2022062312/55204d7149795902118c4318/html5/thumbnails/44.jpg)
Fragen?
Uff...Uff...