23
Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Kapitel 8: Nachrichtenbasierte Kommunikation mit JMS

Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Kapitel 8: Nachrichtenbasierte Kommunikation mit JMS

Embed Size (px)

Citation preview

Page 1: Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Kapitel 8: Nachrichtenbasierte Kommunikation mit JMS

Middleware in Java vieweg 2005

© Steffen Heinzl, Markus Mathes

Kapitel 8:Nachrichtenbasierte

Kommunikation mit JMS

Page 2: Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Kapitel 8: Nachrichtenbasierte Kommunikation mit JMS

Middleware in Java vieweg 2005

© Steffen Heinzl, Markus Mathes

Middleware und nachrichtenorientierte Middleware

• Eine Software heißt Middleware genau dann, wenn sie die Entwicklung und den Betrieb eines verteilten Systems ermöglicht und Funktionen anbietet, die über einfache Netzwerkkommunikation hinausgehen.

• Eine Middleware heißt nachrichtenorientierte Middleware (MOM) genau dann, wenn die Kommunikation zwischen den beteiligten Komponenten durch den Austausch von Nachrichten über eine Zwischeninstanz erfolgt.

Page 3: Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Kapitel 8: Nachrichtenbasierte Kommunikation mit JMS

Middleware in Java vieweg 2005

© Steffen Heinzl, Markus Mathes

Vor- und Nachteile einer MOM

Vorteile:– Kommunikation auf

hohem Abstraktionsniveau

– lose Kopplung zwischen einzelnen Komponenten

– Entwickler können sich auf Anwendungslogik konzentrieren

Nachteile:– nicht „out-of-the-box“

verwendbar– zusätzlicher Overhead– ungeeignet für

Echtzeitsysteme– zusätzliche

Lizenzkosten

Page 4: Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Kapitel 8: Nachrichtenbasierte Kommunikation mit JMS

Middleware in Java vieweg 2005

© Steffen Heinzl, Markus Mathes

Java Message Service (JMS)

• Der Java Message Service (JMS) ist eine Schnittstellenspezifikation von Sun Microsystems zum Zugriff auf nachrichtenorientierte Middleware.

• JMS definiert die Syntax und Semantik beim Zugriff auf eine nachrichtenorientierte Middleware und wurde erstmals im Jahre 1998 veröffentlicht.

• Die aktuelle Spezifikation stammt aus dem Jahr 2002 und trägt die Versionsnummer 1.1.

Page 5: Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Kapitel 8: Nachrichtenbasierte Kommunikation mit JMS

Middleware in Java vieweg 2005

© Steffen Heinzl, Markus Mathes

Einsatz von JMS

• MOM ohne JMS

• MOM mit JMS

Clientnachrichtenorien-tierte MiddlewareA

PI

ServerAPI

Clientnachrichtenorien-tierte Middleware

API

JMS

Server

API

JMS

Page 6: Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Kapitel 8: Nachrichtenbasierte Kommunikation mit JMS

Middleware in Java vieweg 2005

© Steffen Heinzl, Markus Mathes

Point-to-Point (P2P)

JMS-Provider

Warteschlange Konsument 1

Produzent

Konsument 1

Konsument 2

Warteschlange Konsument 2

Page 7: Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Kapitel 8: Nachrichtenbasierte Kommunikation mit JMS

Middleware in Java vieweg 2005

© Steffen Heinzl, Markus Mathes

Publish/Subscribe (Pub/Sub)

JMS-Provider

Topic 1

Produzent 1Abonnent von Topic 1 und 3

Topic 5

Abonnent von Topic 3 und 5

Topic 2

Topic 3

Topic 4Produzent 2

Page 8: Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Kapitel 8: Nachrichtenbasierte Kommunikation mit JMS

Middleware in Java vieweg 2005

© Steffen Heinzl, Markus Mathes

Verbindungsfabriken

<<interface>>ConnectionFactory

<<interface>>QueueConnectionFactory

<<interface>>TopicConnectionFactory

Page 9: Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Kapitel 8: Nachrichtenbasierte Kommunikation mit JMS

Middleware in Java vieweg 2005

© Steffen Heinzl, Markus Mathes

Verbindungen

<<interface>>Connection

<<interface>>QueueConnection

<<interface>>TopicConnection

Page 10: Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Kapitel 8: Nachrichtenbasierte Kommunikation mit JMS

Middleware in Java vieweg 2005

© Steffen Heinzl, Markus Mathes

Sitzungen

<<interface>>Session

<<interface>>QueueSession

<<interface>>TopicSession

Page 11: Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Kapitel 8: Nachrichtenbasierte Kommunikation mit JMS

Middleware in Java vieweg 2005

© Steffen Heinzl, Markus Mathes

Nachrichtenproduzenten

<<interface>>MessageProducer

<<interface>>QueueSender

<<interface>>TopicPublisher

Page 12: Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Kapitel 8: Nachrichtenbasierte Kommunikation mit JMS

Middleware in Java vieweg 2005

© Steffen Heinzl, Markus Mathes

Nachrichtenkonsumenten

<<interface>>MessageConsumer

<<interface>>QueueReceiver

<<interface>>TopicSubscriber

Page 13: Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Kapitel 8: Nachrichtenbasierte Kommunikation mit JMS

Middleware in Java vieweg 2005

© Steffen Heinzl, Markus Mathes

Nachrichten

<<i nterface>>Message

<<i nterface>>BytesMessage

<<i nterface>>Obj ectMessage

<<i nterface>>MapMessage

<<i nterface>>StreamMessage

<<i nterface>>TextMessage

Page 14: Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Kapitel 8: Nachrichtenbasierte Kommunikation mit JMS

Middleware in Java vieweg 2005

© Steffen Heinzl, Markus Mathes

Aufbau einer JMS-Nachricht

• Nachrichtenkopf (Header)– Der Nachrichtenkopf wird zur Identifikation und zur

Übertragung der Nachricht benötigt und umfasst mehrere Felder.

• Nachrichteneigenschaften (Properties)– Nachrichteneigenschaften erlauben das Speichern

von Zusatzinformationen zur Nachricht.

• Nachrichtenrumpf (Body)– Der Nachrichtenrumpf enthält die Nutzdaten.

Page 15: Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Kapitel 8: Nachrichtenbasierte Kommunikation mit JMS

Middleware in Java vieweg 2005

© Steffen Heinzl, Markus Mathes

Nachrichtentypen

• BytesMessage

– Übertragung einer Menge uninterpretierter Bytes

• StreamMessage

– Übertragung sequentiell gelesen und geschriebener Daten

• MapMessage

– Übertragung von Name/Wert-Paaren

• TextMessage

– Übertragung von Textdaten

• ObjectMessage

– Übertragung serialisierbarer Objekte

Page 16: Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Kapitel 8: Nachrichtenbasierte Kommunikation mit JMS

Middleware in Java vieweg 2005

© Steffen Heinzl, Markus Mathes

Header-Felder einer Nachricht (1)

• JMSCorrelationID

– Abhängigkeiten zwischen Nachrichten

• JMSDeliveryMode– PERSISTENT

– NON_PERSISTENT

• JMSDestination

– Nachrichtenziel

• JMSExpiration

– Verfallsdatum der Nachricht

• JMSMessageID

– eindeutiger Bezeichner

Page 17: Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Kapitel 8: Nachrichtenbasierte Kommunikation mit JMS

Middleware in Java vieweg 2005

© Steffen Heinzl, Markus Mathes

Header-Felder einer Nachricht (2)

• JMSPriority

– Priorität von 0 (niedrig) bis 10 (hoch)

• JMSRedelivered

– Nachricht wurde mehrfach ausgeliefert

• JMSReplyTo

– Ziel der Antwortnachricht festlegen

• JMSTimestamp

– Übergabezeit der Nachricht an den JMS-Provider

• JMSType

– Nachrichtentyp der Nachricht

Page 18: Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Kapitel 8: Nachrichtenbasierte Kommunikation mit JMS

Middleware in Java vieweg 2005

© Steffen Heinzl, Markus Mathes

Nachrichtenziele

<<interface>>Destination

<<interface>>Queue

<<interface>>Topic

<<interface>>TemporaryQueue

<<interface>>TemporaryTopic

Page 19: Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Kapitel 8: Nachrichtenbasierte Kommunikation mit JMS

Middleware in Java vieweg 2005

© Steffen Heinzl, Markus Mathes

Ausnahmen in JMS

JMSException

JMSSecurity -exception

MessageNotReadable -exception

InvalidDestination -exception

RessourceAllocation -exception

MessageNotWriteable -exception

Page 20: Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Kapitel 8: Nachrichtenbasierte Kommunikation mit JMS

Middleware in Java vieweg 2005

© Steffen Heinzl, Markus Mathes

ECHO-Dienst mit P2P

JMS-Provider

ECHO JMSEchoServer

TEMP_1TEMP_2

JMSEchoClient 1

Produzent

Konsument

JMSEchoClient 2

Konsument

Produzent TEMP_2

2

3

3

1

1

4

4

Page 21: Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Kapitel 8: Nachrichtenbasierte Kommunikation mit JMS

Middleware in Java vieweg 2005

© Steffen Heinzl, Markus Mathes

DAYTIME-Dienst mit Pub/Sub

JMS-Provider

DAYTIME JMSDaytimePublisher

JMSDaytimeSubscriber 1

JMSDaytimeSubscriber 2

Page 22: Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Kapitel 8: Nachrichtenbasierte Kommunikation mit JMS

Middleware in Java vieweg 2005

© Steffen Heinzl, Markus Mathes

Literatur

• Ressourcen von Sun Microsystems Inc. zum Java Message Service (JMS); http://java.sun.com/products/jms

• Sun Microsystems Inc.: Java Message Service Specification; http://java.sun.com/products/jms/docs.html

• Sun Microsystems Inc.: Java Message Service API Tutorial; http://java.sun.com/products/jms/tutorial/index.html

• Richard Monson-Haefel, David A. Chappell: Java Message Service – Creating Distributed Enterprise Applications; O'Reilly 2001

• Levent Erdogan: Java Message Service (JMS) for J2EE; New Riders Publishing 2002

• Markus Mathes: Zeitverhalten von nachrichtenorientierter Middleware und deren Einsatz in der Industrieautomation; Diplomarbeit Fachhochschule Fulda 2004

• Florian Heidinger, Markus Mathes, Helmut Dohmann: Java Messaging Service (JMS) – Einsatz in der Industrieautomation; Automatisierungstechnische Praxis (atp) Ausgabe 05/2004

Page 23: Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Kapitel 8: Nachrichtenbasierte Kommunikation mit JMS

Middleware in Java vieweg 2005

© Steffen Heinzl, Markus Mathes

Aufgaben

In „Middleware in Java“ finden Sie•Wiederholungs-, •Vertiefungs-, •Programmieraufgaben zu den vorgestellten Themen. Zur Festigung und Vertiefung des Erlernten wird eine Bearbeitung der Aufgaben empfohlen.