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. Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Vor- und Nachteile einer MOM Vorteile: Nachteile: – Kommunikation auf hohem Abstraktionsniveau – lose Kopplung zwischen einzelnen Komponenten – Entwickler können sich auf Anwendungslogik konzentrieren – nicht „out-of-the-box“ verwendbar – zusätzlicher Overhead – ungeeignet für Echtzeitsysteme – zusätzliche Lizenzkosten 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. Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Einsatz von JMS nachrichtenorientierte Middleware API Client API • MOM ohne JMS Server • MOM mit JMS API API Client Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Server JMS JMS nachrichtenorientierte Middleware Point-to-Point (P2P) JMS-Pr ovi der War teschlange Konsument 1 Konsum ent 1 Produzent War teschlange Konsument 2 Konsum ent 2 Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Publish/Subscribe (Pub/Sub) JMS-Pr ovi der Topic 1 Produzent 1 Topic 2 Abonnent von Topic 1 und 3 Topic 3 Produzent 2 Topic 4 Topic 5 Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Abonnent von Topic 3 und 5 Verbindungsfabriken <<i nt erf ace >> Connect i onFact ory <<i nt erf ace >> QueueConnect i onFact ory <<i nt erf ace >> Topi cConnect i onFact ory Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Verbindungen <<i nt erf ace >> Connect i on <<i nt erf ace >> QueueConnect i on <<i nt erf ace >> Topi cConnect i on Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Sitzungen <<i nt erf ace >> Sessi on <<i nt erf ace >> QueueSessi on <<i nt erf ace >> Topi cSessi on Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Nachrichtenproduzenten <<i nt erf ace >> MessageProducer <<i nt erf ace >> Topi cPubl i sher <<i nt erf ace >> QueueSender Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Nachrichtenkonsumenten <<i nt erf ace >> MessageConsumer <<i nt erf ace >> QueueRecei ver <<i nt erf ace >> Topi cSubscri ber Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Nachrichten <<i nt er f ace>> Obj ect Message <<i nt er f ace>> Message <<i nt er f ace>> Byt esMessage <<i nt er f ace>> MapMessage <<i nt er f ace>> Text Message <<i nt er f ace>> St r eamMessage 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. 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 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 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 Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Nachrichtenziele <<i nt erf ace >> Dest i nat i on <<i nt erf ace >> Queue <<i nt erf ace >> Topi c <<i nt erf ace >> TemporaryQueue <<i nt erf ace >> TemporaryTopi c Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes Ausnahmen in JMS I nval i dDest i nat i on except i on JMSSecuri t y except i on JMSExcept i on MessageNot Wri t eabl e except i on MessageNot Readabl e except i on RessourceAl l ocat i on except i on Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes ECHO-Dienst mit P2P Konsument JMSEchoClient 1 4 TEMP_2 Pr oduzent JMS-Provider TEMP_1 3 1 ECHO 1 JMSEchoClient 2 JMSEchoServer 3 TEMP_2 Pr oduzent 2 4 Konsument Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes DAYTIME-Dienst mit Pub/Sub JMSDaytim eSubscriber 1 JMS-Provider DAYTI ME JMSDaytim eSubscriber 2 Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes JMSDaytim ePublisher 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 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. Middleware in Java vieweg 2005 © Steffen Heinzl, Markus Mathes