08 Nachrichtenbasierte Kommunikation -...

9
Nachrichtenbasierte Kommunikation Michael Schmidt, Jens Dietrich, Marco Schopp, Sven Dammann 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 zwischen Hardware/Betriebssystem und Anwendungssicht Aufgabe: Verbergen der Unterschiede der einzelnen Plattformen System aus Anwendungssicht homogen erscheinen zu lassen Ansatz ist Message Queuing Systeme (MQS) sage Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingService Nachrichtenaustausch mit Queues Kommunikation zwischen Anwendungen über Austausch von Nachrichten (Messages), die in Queue gestellt bzw. entnommen werden Programme kommunizieren über ein Netzwerk ohne private und logische Verbindung © 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 5 Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingS © 2001 Sven Dammann, Jens Dietrich, Michael Schmidt, Marco Schopp 6 Nachrichtenaustausch mit Queues Zweiwegkommunikation: Message Queuing Entwurfsmuster Oracle Advanced Queuing JavaMessagingS © 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 JavaMessagingS Zwei Modelle beim Einsatz von MQS – Point-to-Point – Publish-and-Subscribe Nachrichtenaustausch mit Queues

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