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

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

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

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

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.

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.

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

Message Queueing

Einführung

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

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.

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.

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.

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.

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

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.

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

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

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

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.

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.

Demo: Nachricht versenden

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

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.

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.

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.

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.

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.

Demo Nachricht empfangen

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

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.

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.

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.

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.

JobShopManager.vbpjfrmCreatorMainErzeugt Jobs /

NachrichtenStellt

Nachrichten in Job-Queue

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

JobShopManager.vbpj

frmResultÜberwacht

Result-QueueZeigt

Ergebnisse an

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

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.

Live - Demo

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

MSMQ im DetailAcknowledgementsTimeOutsJournlaingTransaktionen

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

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.

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.

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.

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.

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.

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.

Demo

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

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.

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.

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.

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.

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.

Fragen?

Uff...Uff...