08 Nachrichtenbasierte Kommunikation -...
Transcript of 08 Nachrichtenbasierte Kommunikation -...
Aufbau IntegrierterInformationssysteme
Nachrichtenbasierte Kommunikation
Michael Schmidt, Jens Dietrich, Marco Schopp, SvenDammann
Martin-Luther-Universität Halle-Wittenberg
Hauptseminar - Halle - 05.03.2002
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 2
Gliederung
1. Message Queuing
2. Entwurfsmuster für MQS
3. Oracle Advanced Queuing
4. JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 3
Einleitung
• Middleware bildet zusätzliche Sicht zwischenHardware/Betriebssystem und Anwendungssicht
• Aufgabe:– Verbergen der Unterschiede der einzelnen Plattformen– System aus Anwendungssicht homogen erscheinen zu lassen
• Ansatz ist Message Queuing Systeme (MQS)
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 4
Nachrichtenaustausch mit Queues
• Kommunikation zwischen Anwendungen über Austausch vonNachrichten (Messages), die in Queue gestellt bzw. entnommenwerden
• Programme kommunizieren über ein Netzwerk ohne private undlogische Verbindung
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 5
Nachrichtenaustausch mit Queues
Einwegkommunikation:
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 6
Nachrichtenaustausch mit Queues
Zweiwegkommunikation:
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 7
• weiteres Merkmal:
– asynchrone Kommunikation
• 4 Queues sind notwendig für Client-Server-Anwendungen:
– Request-Queue– Reply-Queue– Dead-Letter-Queue (clientseitig)– Dead-Letter-Queue (serverseitig)
Nachrichtenaustausch mit Queues
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 8
• Zwei Modelle beim Einsatz von MQS
– Point-to-Point– Publish-and-Subscribe
Nachrichtenaustausch mit Queues
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 9
Netzwerkhandling
• Netzwerkhandling wir vor den Anwendungen versteckt
• MQS:
- regelt Kommunikation über das Netz
- kann auf auftretende Fehler reagieren
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 10
Kommunikationsablauf im Detail
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 11
Queue Manager und Message QueuingInterface
• mindestens ein Queue Manager (QM)pro Rechner bzw.Netzwerkknoten
• bei einzelnen Knoten
- „normalen“ Rechner
- „thin clients“ Rechner
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 12
Queue Manager und Message QueuingInterface
• Message Queuing Interface(MQI) für die Kommunikationzwischen Anwendung und QM
• besteht aus einer Menge von „Calls“ (Aufrufen)
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 13
Transaktionsunterstützung
• drei Stufen der Transaktionsunterstützung:
- interne Transaktionen
- Unterstützung externe Transaktionmanager
- Rolle eines Transaction Coordinators
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 14
Vergleich MessageQueuing mit anderenMiddlewaretechnologien
CORBA
•verbreitete Technik – ohne grossen Aufwand einsetzbar
•problematisch bei Auftreten eines Fehlers
Verteilte Transaktionsverarbeitung
•auftretende Fehler werden automatisch korrigiert
•hohe Kosten und schmales Spektrum der unterstützenden Systeme
MQS
• „ die goldene Mitte“
• übernimmt das Netzwerkhandling
• Entkopplung der Anwendungen
• problematisch bei stark zeitbezogenen Systemen
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 15
Vorteile von Messaging und Queuing
• freie Kapazitäten entstehen
• einfache Verwendung des Interface
• keine Beschränkung der Anwendungsarchitektur
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 16
Möglichkeiten des Message Queuing
AA
Q1Q1
DDCCBB
Q2Q2
Q3Q3EE FF
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
RQ2
RQ1
• Keine logische Verbindungzwischen E und F
• E schreibt Message in Queue (put)• F nimmt Message aus Queue (get)• Point-to-Point Kommunikation
• Keine logische Verbindungzwischen E und F
• E schreibt Message in Queue (put)• F nimmt Message aus Queue (get)• Point-to-Point Kommunikation
One-to-one Relationship
• E sammelt die Ergebnisse von B, Cund D
• B, C, D können z.B. Client von Server-programm E sein (Subscriber)
• Messagebearbeitung nach FIFOoder Prioritäten
• E sammelt die Ergebnisse von B, Cund D
• B, C, D können z.B. Client von Server-programm E sein (Subscriber)
• Messagebearbeitung nach FIFOoder Prioritäten
Many-to-one Relationship
• A verteilt Arbeit auf B, C und D• B, C, D können parallel arbeiten (loadbalancing)
• schnellere Bearbeitung bei sequen-tieller Abfolge
• Publish & Subscribe
• A verteilt Arbeit auf B, C und D• B, C, D können parallel arbeiten (loadbalancing)
• schnellere Bearbeitung bei sequen-tieller Abfolge
• Publish & Subscribe
One-to-many Relationship
• E sendet nur Request an F• keine Rückmeldung des Program-
mes, daß die Message aus derQueue nimmt
• Bsp.: Fire-and-Forget
• E sendet nur Request an F• keine Rückmeldung des Program-
mes, daß die Message aus derQueue nimmt
• Bsp.: Fire-and-Forget
One-way Communication
• C veranlasst E zur Rückmeldung(Reply)
• können Ergebnisse einer Operationsein oder Bestätigungen
• C veranlasst E zur Rückmeldung(Reply)
• können Ergebnisse einer Operationsein oder Bestätigungen
Two-way CommunicationFlexibles Systemdesign
• Keine Einschränkungen in derApplikationsstruktur
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 17
Message
Aufbau einer Message
Message Describtor
Application Data
Message Identifier (24 Byte String)
Correlation Identifier (24 Byte String)
• Eigentliche Nachricht• 4 MB – 100 MB
Queues• Target Queue• Reply Queue
(opt.)
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
Attribute• date• time• priority• persistance• expiry date
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 18
Attribute einer Queue
Queue
• Name• Max. Anzahl von Messages• Max. Messagegröße• Voreingestellte Art der Messages(persistent oder transient)
Eindeutige Identifizierungder Queue durch andereKomponenten des Systems
Eindeutige Identifizierungder Queue durch andereKomponenten des SystemsEinschränkungen / Vorein-
stellungen für Programme,die auf Queue zugreifen
Einschränkungen / Vorein-stellungen für Programme,die auf Queue zugreifen
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 19
LQLQ
QMB
QMB
TQA
TQC
Arten von Queues
LQLQ
QMA
QMA
TQB
TQC
N E T Z W E R KN E T Z W E R K
Applikation AApplikation A Applikation BApplikation B Applikation CApplikation C
LQLQ
QMC
QMC
TQA
TQB
DQAQ IQIQ
Applikation DApplikation D
DLQ
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
Local Queues• alle Queues, diedem QM zugeordnetsind auf den die App.zugreift
• App. schreibt in LQ• App. Liest aus LQ
Remote Queues• alle Queues, dienicht lokal sind
• App. weiß phys Ort nicht
• QM übernimmtZustellung
Transmission Queues• Zwischenqueuebeim Senden
• Je 1 TQ für jedenremote QM
• Remote QM liest ausTQ und schreibt inseine LQ
Dynamic Queues• autom. Beendigungbeim Progr.ende
• dynamische Erzeu-gung- permanent (überle-ben QM restart)
- temporär
Alias Queues• dieselbe physischeQueue
• mehrere ProgrammeZugriff auf dieselbeQueue
• Aufruf über versch.Namen (Definitionen)
Initiation Queues• QM schreibt in IQwenn Bed. Einer LQerfüllt ist
• IQ triggert neueApplikation
• App. handelt dasauslösende Event
Dead-Letter Queues• Queue für unzustell-bare Nachrichten
• Jeder QM hat DLQ• Gründe:- Zielqueue voll- Zielqueue ex. nicht- ...
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 20
ClientClient ServerServer
Entwurfsmuster
Sende Anfrage
Erwarte Antwort
Lese Anfrage
Sende Ergebnis
Führe aus
DatenDaten
Pseudosynchronous Inquiry
Request Message
Q1Q1
Reply Message
Q2Q2
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
Kommunikation asynchron
• Client kann nicht weiterarbeitenbis Reply-Message eingetroffen
• nur lesender Zugriff
Kommunikation asynchron
• Client kann nicht weiterarbeitenbis Reply-Message eingetroffen
• nur lesender Zugriff
Anfragen idempotent• wiederholt sich die Anfrage ändert
sich das Ergebnis nicht• bei timeout: Wiederholung• einfaches Error-handling
Anfragen idempotent• wiederholt sich die Anfrage ändert
sich das Ergebnis nicht• bei timeout: Wiederholung• einfaches Error-handling Reply Message:
Nicht persistentReply Queue:
Temporary DynamicQueue
Request Queue:Standard Queue
Request Message:Nicht persistentProblem: Orphans
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 21
Entwurfsmuster (2)
ClientClient ServerServer
Lese Anfrage
Sende Ergebnis
Führe aus
DatenDaten
Asynchronous Inquiry
Request Message
Q1Q1
Reply Message
Q2Q2
Sende Anfrage
Arbeite weiter
Erhalte Antwort
Problem:Wie erfährt Client vom Eintreffen
der Reply-Message ?
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
Kommunikation asynchron
• Client kann weiterarbeiten undmuss nicht blockierend auf Reply-Message warten
Kommunikation asynchron
• Client kann weiterarbeiten undmuss nicht blockierend auf Reply-Message warten
Request ist Anfrage
• Daten des Servers bleiben unan-getastet
• bei Fehler: Wiederholung
Request ist Anfrage
• Daten des Servers bleiben unan-getastet
• bei Fehler: Wiederholung
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 22
Entwurfsmuster (3)
ClientClient ServerServerSende Auftrag Lese Auftrag
Führe aus
DatenDaten
Fire-and-forget Update
Request Message
Q1Q1
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
Änderung von Daten• Ankunft der Nachricht muss garan-tiert werden
• keine Bestätigung der ausge-führten Änderungen
Änderung von Daten• Ankunft der Nachricht muss garan-tiert werden
• keine Bestätigung der ausge-führten Änderungen
Anfragen nicht-idempotent
• evtl. Sicherstellung daß Nachrichtnur einmal gesendet wird
Anfragen nicht-idempotent
• evtl. Sicherstellung daß Nachrichtnur einmal gesendet wird
Request Queue:Standard Queue
Request Message:Persistent (exactly one o.
at least one)
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 23
Entwurfsmuster (4)
ClientClient ServerServer
Sende Auftrag
Erwarte Bestätigung
Lese Auftrag
Sende Ergebnis
Führe aus
DatenDaten
Pseudosynchronous Update
Request Message
Q1Q1
Reply Message
Q2Q2
Problem:Bei Ausbleiben der Bestätigungkeine Info ob Update erfolgreich
verarbeite
DatenDaten
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
Anfragen sind Updates
• Modifizierung von Daten• Client kann nicht weiterarbeiten bis
Bestätigung eingetroffen
Anfragen sind Updates
• Modifizierung von Daten• Client kann nicht weiterarbeiten bis
Bestätigung eingetroffen
Anfragen nicht-idempotent
• Vermeidung unbeabsichtigterWiederholungen ein und derselbenAnfrage
Anfragen nicht-idempotent
• Vermeidung unbeabsichtigterWiederholungen ein und derselbenAnfrage
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 24
Entwurfsmuster (5)
ClientClient ServerServer
Lese Auftrag
Sende Ergebnis
Führe aus
DatenDaten
Request Message
Q1Q1
Reply Message
Q2Q2
Sende Auftrag
Arbeite weiter
Bearbeite Bestätigung
Asynchronous Update with Acknowledgement
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
Manipulation von Daten• Client erwartet Bestätigung• Asynchrone Kommunikation
Manipulation von Daten• Client erwartet Bestätigung• Asynchrone KommunikationAnfragen nicht-idempotent
• evtl. Sicherstellung daß Nach-richt nur einmal gesendet wird
• durch Persistenz garantierteNachrichtenübermittlung
Anfragen nicht-idempotent• evtl. Sicherstellung daß Nach-richt nur einmal gesendet wird
• durch Persistenz garantierteNachrichtenübermittlung Reply Message:
Persistent (exactly one o.at least one)
Reply Queue:Permanent Dynamic
Queue
Request Queue:Standard Queue
Request Message:Persistent (exactly one o.
at least one)
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 25
Beispiel: Oracle8i Advanced Queuing
• Oracle8i ist ein message-orientiertes System
• System hat Queues (Warteschlangen) implementiert
• Queues ermöglichen eine asynchrone Kommunikation
• Oracle8i stellt mit der Advanced Queuing Technologie einemessage-queuing-Infrastruktur zur Verfügung, die vollständig indie Datenbank integriert ist
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 26
Vorteile derAdvanced Queuing Technologie
• Backup/Recovery
• Unbegrenzte Messageanzahl
• Möglichkeit des Aufbaus einesMessage-Warehouse
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 27
Nachrichtenverarbeitung
• Anwendung stellt die Nachricht mit der Enqueue-Operationin eine Warteschlange (Queue)
• berechtigte Anwendungen können nun zeitlich unabhängigmit einer Dequeue-Operation diese Nachricht entnehmenund verarbeiten
DEQUEUEENQUEUE
Message
QUEUE
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 28
Vorteile duch Benutzungvon Queues
• fehlertolerantere Systeme
• Anwendungen können nach Bereitstellung der Nachrichtgleich weiterarbeiten
• Möglichkeit der Integration unterschiedlicherAnwendungssysteme
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 29
Queues in der Datenbank (1)
1. Single-Consumer-Queue
• jede Nachricht ist nur für eine Anwendung (Verbraucher)bestimmt
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 30
Queues in der Datenbank (2)
2. Multi-Consumer-Queue
• jede Nachricht kann für beliebig viele Verbraucheranwendungen bestimmt sein
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 31
Queues in der Datenbank (3)
3. Queue-to-Queue
• Message kann auch von einer Queue in eine andereQueue übertragen werden >> Propagation
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 32
Komponenten einesOracle8i-AQ Systems
• System besteht aus 3Komponenten
QT
Message-Kopf
Message-Payload
(Daten)
I. Queue-Tabellen
II. Queues
III. Messages
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 33
I. Queue-Tabellen
• Speicherorte der Queues
Charakteristische Eigenschaften:
• Art der Datenstruktur, die eine Message besitzen kann
• Sortierung der Messages innerhalb der Queues
• Art der Queues, die innerhalb der Queue-Tabelle definierbarsind
• Gruppierung aller Nachrichten einer Transaktion
Erzeugt durch den Befehl:
DBMS_AQADM.CREATE_QUEUE_TABLE
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 34
II. Queues
• Speicherorte für die einzelnen Nachrichten
Charakteristische Eigenschaften:
• Art der Queue (Normal, Exception, Non-Persistent)
• Maximale Anzahl von ´dequeue´-Wiederholungen im Fehlerfall
• Speicherzeit der Messages (nachdem eine Message verbraucht wurde)
Erzeugt durch den Befehl:
DBMS_AQADM.CREATE_QUEUE
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 35
III. Message
• Träger der relevanten Informationen, die über das Message-System übermittelt werden sollen
Besteht aus 2 Teilen
• Message-Kopf
>> enthält Informationen über die Nachricht
• Message-Payload
>> der Datenteil, in dem sich die Daten befinden
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 36
Operationen mit Queues (1)
ENQUEUE
• stellt eine Nachricht in dieWarteschlange
Syntax:
DBMS_AQ.ENQUEUE (Queue_namePayload
Syntax:
DBMS_AQ.ENQUEUE (Queue_namePayload
Beispiel
DBMS_AQ.ENQUEUE (Queue_name => ´q1´,Payload => nachricht);
Beispiel
DBMS_AQ.ENQUEUE (Queue_name => ´q1´,Payload => nachricht);
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 37
Operationen mit Queues (2)
DEQUEUE
• Operation, über die alle Benutzer eine Message aus einer Queueentnehmen können
Für eine ´dequeue´-Operation wird angegeben:
• die Queue, aus der die Message entnommen werden soll
• die ´dequeue´-Optionen
• Message-Eigenschaften
• der Datenbereich (payload)
• Message-Identifikation (message_id)
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 38
Operationen mit Queues (3)
BEISPIEL EINER DEQUEUE-OPERATION
DBMS_AQ.DEQUEUE (
QUEUE_NAME => ´q_1´,
DEQUEUE_OPTIONS => dequeue_opts,
MESSAGE_PROPERTIES => m_p,
PAYLOAD => nachricht,
MESSAGE_HANDLE => msg_h );
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 39
Operationen mit Queues (4)
DEQUEUE-OPTIONS
• Steuern der ´deque´-Operation
• wird angegeben welche Message verarbeitet werden soll
• wie eine Message verarbeitet werden soll
Remove-Mode
Browse-Mode
Locked-Mode
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 40
Operationen mit Queues (5)
DEQUEUE-OPTIONS (2)
• die Zugriffsposition innerhalb der Queue
First_message
Next_message
Next_transaction
• ob und wie lange eine ´dequeue´-Operation auf eine Messagewarten soll, falls diese in der Queue nicht vorhanden ist
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 41
Der Java Message Service
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 42
Java Message Service (JMS)
• ProgrammiersprachenbasierteMOM
• Unterstützt beideKommunikationsmodelle
Publish/Subscript
Client1
Publishes
Msg
Client2
Subscribes
Delivers
Msg
Topic
Client3
Subscribes
DeliversMsg-- Peer to Peer --
Client1Client2
Queue Sends Consumes
Acknowledges
Msg Msg
Domain
Message Consumption
•Synchron•Asynchron
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 43
JMS API Architecture
AdministrativeTool
JMS Client JMS ProviderJMS Provider
JNDI Namespace
DCFBind
Lookup
Logical Connection
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 44
The JMS API Programming ModelConnection Factory
•Verbindungskonfigurations-parameter
•Client benutzt CF, umVerbindung zu JMS Provider zukreieren
Connection Factory•Verbindungskonfigurations-parameter
•Client benutzt CF, umVerbindung zu JMS Provider zukreieren
Connection• aktive Verbindung von Clientzu JMS Provider•Authentität des Clientsüberprüft•Eindeutiger Client Identifier•Liefert ConnectionMetaDaten
Connection• aktive Verbindung von Clientzu JMS Provider•Authentität des Clientsüberprüft•Eindeutiger Client Identifier•Liefert ConnectionMetaDaten
Session•Produktion/Verbrauch vonNachrichten•Definiert Ordnungsrelation•Behält konsumierteNachrichten, bis zurBestätigung
Session•Produktion/Verbrauch vonNachrichten•Definiert Ordnungsrelation•Behält konsumierteNachrichten, bis zurBestätigung
Session(2)•Message Listener•Transcation
•Transacted Session•Non-transactedSession
•Bsp.:Onlineshopping
Session(2)•Message Listener•Transcation
•Transacted Session•Non-transactedSession
•Bsp.:Onlineshopping
Message Producer• zum Senden von Nachrichtenan eine Destination
Message Producer• zum Senden von Nachrichtenan eine Destination
Message Consumer• zum Empfangen vonNachrichten einer Destination•Message Listener•Message Selector
Message Consumer• zum Empfangen vonNachrichten einer Destination•Message Listener•Message Selector
Message• Format ist einfach, jedochsehr flexibel•Für jedes Format auf jederPlattform•3 Teile: Header
PropertiesBody
Message• Format ist einfach, jedochsehr flexibel•Für jedes Format auf jederPlattform•3 Teile: Header
PropertiesBody
ConnectionFactory
Connection
Creates
MessageProducer
CreatesSession
Creates
Destination
Sends To
Destination
Receives From
Message
Creates
MessageConsumer
Creates
AdministrativeObjekte
Objekte imProgramm
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 45
Messages
Message• Format ist einfach, jedochsehr flexibel•Für jedes Format auf jederPlattform•3 Teile: Header
PropertiesBody
Message• Format ist einfach, jedochsehr flexibel•Für jedes Format auf jederPlattform•3 Teile: Header
PropertiesBody
HeaderPropertiesBody
JMS providerJMSRedelivered
ClientJMSType
ClientJMSReplyTo
ClientJMSCorrelationID
send or publish methodJMSTimestamp
send or publish methodJMSMessageID
send or publish methodJMSPriority
send or publish methodJMSExpiration
send or publish methodJMSDeliveryMode
send or publish methodJMSDestination
Set ByHeader Field
------ Header -----
JMSMessageID
• identifiziert Nachricht eindeutig
JMSDestination
• Queue/Topic
Andere Felder enthalten z.B.Zeitstempel oder Prioritäten
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 46
Messages
Message• Format ist einfach, jedochsehr flexibel•Für jedes Format auf jederPlattform•3 Teile: Header
PropertiesBody
Message• Format ist einfach, jedochsehr flexibel•Für jedes Format auf jederPlattform•3 Teile: Header
PropertiesBody
HeaderPropertiesBody
------ Properties -----
•Beschreibende Felder einer Nachrichtread only
• zusätzliche Informationen überDaten / Prozess, der sie kreiert hat
•Syntax: property name: property value
•Optimierung der Kommunikation mit Queue/Topic (z.B. Selektionskriterien)
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 47
Messages
Message• Format ist einfach, jedochsehr flexibel•Für jedes Format auf jederPlattform•3 Teile: Header
PropertiesBody
Message• Format ist einfach, jedochsehr flexibel•Für jedes Format auf jederPlattform•3 Teile: Header
PropertiesBody
HeaderPropertiesBody
------ Body -----
Message
ObjectMessage
StreamMessage
BytesMessage
MapMessage
TextMessage
Message Type
•Java Zeichenkette: java.lang.String
•Grund der Aufnahme: String Messageswerden extensiv benutzt(XML basierte Nachrichten)
•<Name-Wert> Paar
• Name – String Werte Java Basistypen
• Sequenziell o. zufälligerZugriff über Namen
• Reihenfolge ist nicht definiert
• Uninterpretierte Bytes
• Universell einsetzbar
• Stream von Java Basistypen
•Sequentiell gelesen• Serialisiertes Java Objekt
• Nichts
• besteht aus Header und Properties
• Nützlich wenn der Body nicht benötigt wird
Body Contains:
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 48
Übersicht zum BeispielprogrammInitialisierungsteil
Starten desJMS Providers
Kreieren derJMS adiministr-
ativen Objekte
Sender-Client-Programm
ConnectionFactory
Kreierender
Connection
Kreierender
Session
Kreierender
Message
Schliessender
Connection
Empfänger-Client-Programm
ConnectionFactory
Kreierender
Connection
Kreierender
Session
Empfangender
Message
Schliessender
Connection
Kreierendes
MsgProd
Kreierendes
MsgCons
Beenden
Löschen derQueues
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 49
Beispielprogramm (Starten desProviders)
Beim Einsatz von J3EE 1.3 SDK, wird JMS im SDK mitgelifert
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 50
Beispielprogramm (Kreieren der JMSadministrierten Objekte)
•Warteschlange muss zu erst im JNDI registriert werden•Geschieht mit dem J2EE Administrations Tool,oder einem Batch Skript auf dem Server
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 51
Beispielprogramm (Überprüfung deradministrierten Objekte)
•Warteschlange muss zu erst im JNDI registriert werden•Geschieht mit dem J2EE Administrations Tool,oder einem Batch Skript auf dem Serverl
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 52
Sende-Client-Programm
Variablen Deklaration
•JNID InitialContext•jndi.properties
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 53
Sender-Client-ConnectionFactory
•QueueConnectionFactory ist als Standardfactory vorhanden
•Erstellung weitere Factorys mit Admintools:
•j2eeadmin -addJmsFactory jndi_name•queue j2eeadmin -addJmsFactory jndi_name topic
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 54
Sender-Client: Connection / Session
•Kreieren der Connection
•Kreieren der Session •MessageProducer wird erstellt
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 55
Sender-Client: Message kreieren
•Interface des MessageProducers•Senden einer non-text control message zeigt Ende der Messages an
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 56
Sender-Client: Connection schliessen
•Das Ende – Connection geschlossen
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 57
Empfänger-Client: Connection/Sessionstarten
•MessageConsumer wird erstellt
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 58
Empfänger-Client: Message empfangen
•Nach der start Methode kann die receive Methode jederzeit benutztwerden
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 59
Löschen einer Queue
•Administrative Objekt „meineWarteschlange“ sollte nach Abschluss wiederaus dem Enterpriseserver entfernt werdenen
Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 60
Was haben wir gelernt?!
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 61
Fazit
Not every DAD
(Distributed Application Development)
needs a MOM.
But many...
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 62
NavigationZurück zu:
NavigationZurück zu:Connection
Factory
Connection
Creates
MessageProducer
CreatesSession
Creates
MessageConsumer
Creates
Destination
Sends To
Destination
Receives From
Message
Creates
CF
Message
C/S (S)
C/S (E)
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 63
AdministrativeTool
JMS Client JMS ProviderJMS Provider
JNDI Namespace
DCFBind
Lookup
Logical Connection
CF
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 64
Nachteile MoM
• Kein echter Standard für die Programmierung mittels MoM
• Applikations-Daten einer Nachricht müssen vom Programmiererein- und ausgepackt werden
• MQS kennt meist den Inhalt der Nachricht nicht, kann daraufkeine Filter anwenden
• Schwer einsetzbar bei Programmen, die synchronen Ablaufhaben
• MoM verbirgt die Kommunikation nicht
© 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 65
Vorteile MoM
Asynchron Ereignisgesteuert
• MoM fügt sich fließend in Programme mit asynchronenoder ereignisgesteuerten Ablauf ein
Skalierbarkeit / Verfügbarkeit
MoM skaliert sehr gut und führt zu einer höheren Ver-fügbarkeit des Gesamtsystems
Orts- / Migrationstransparent
• Dienste können während der Lebenszeit des Gesamt-systems ihren Ort verändern
Dynamisch
• Dienste können während der Lebenszeit des Gesamt-systems hinzugefügt werden
Quality of Service
• MoM bietet über Quality of Services u.a. die garantierteAuslieferung von Nachrichten