JMS Java Message Service TK3 - WS03/04 Dipl.-Ing. Erwin Aitenbichler Abt. Telekooperation TU Darmstadt 1 JMS: Java Message Service • Messaging – Lose gekoppelte verteilte Kommunikation RMI: Eng gekoppelt – Sender und Empfänger unabhängig: • Sender sendet Message an Destination • Receiver holt Message von Destination • Müssen nicht gleichzeitig verfügbar sein – Bei Kommunikation gemeinsam: • Message Format • Destination • JMS API – „Common set of interfaces and associated semantics“ – Implementierungen: Sun J2EE, SwiftMQ, iBus, MQSeries, SonicMQ, Weblogic, OpenJMS, ... 2 JMS: Transparenz • Messaging – Peer-to-peer-Kommunikation zw. Clients – Client <-> Messaging System – Abstrakte Sicht des Client: Client Client Client Messaging System Client 3 JMS: Transparenz • Messaging – Peer-to-peer-Kommunikation zw. Clients – Client <-> Messaging System – Dahinter z.B.: Client Client Client Msg. SSL Msg. Router Router Msg. Router Client Messaging System 4 JMS: Begriffe • Begriffe – Message: Informationsträger für Kommunikation zwischen Clients – JMS-Client: Sendet/empfängt Messages – JMS-Provider • Implementiert JMS Interfaces • Admin- & Control-Werkzeuge ¾ Trennung von Anwendungslogik und Admin/Control! – Administered Objects • Typen: Destination, Connection Factory • Werden mit Admin-Werkzeugen erstellt und bearbeitet • Programm erhält AOs über JNDI-Lookup (Java Naming and Directory Interface) 5 JMS: Messaging Domains • Point-to-point send Sender (consume) receive Empfänger message • • • • • Queue acknowledge Destination = Queue Jede Nachricht (message) hat einen Empfänger (consumer) Empfänger bestätigt Erhalt der Nachricht (acknowledge) Keine Zeitabhängigkeiten zw. Sender und Empfänger Queue speichert Nachrichten (persistent), bis sie • vom Empfänger gelesen wird • nach einem Zeitlimit abläuft (expire) 6 JMS: Messaging Domains • Publish/Subscribe send Sender Sender Sender subscribe Topic receive Empfänger acknowledge Empfänger • Destination = Topic • Empfänger erhält nur Nachrichten, so lange der Prozess existiert. 7 JMS: Messaging Domains • Publish/Subscribe – Durable Subscribers send Topic Queue Empfänger Sender Sender Sender Queue Empfänger • Erzeugen: session.createDurableSubscriber() • Subscriber wird über Name (und Topic) identifiziert • Speicherung der Nachrichten ähnlich PTP 8 JMS: Durable Subscribers • Nondurable Subscribers/Subscriptions • Durable Subscribers/Subscriptions 9 JMS: Subskriptions-Mechanismen • Channel-based Subscription (=Topic-based) – Abonnieren eines Kanals (Channel, Topic) – Anwendung schickt Nachrichten explizit an bestimmten Kanal – Messaging-System hat keine Kenntnis über den Aufbau von Nachrichten, nur Kanal-Name – Keine Wechselwirkungen zwischen unterschiedlichen Kanälen – Vergleichbar mit IP Multicast • Erweiterung: Topic Hierarchies (SwiftMQ) • <roottopic>.<subtopic>.<subsubtopic> – Nachrichten werden an alle adressierten Knoten und alle Unterknoten publiziert • iit.sales -> iit.sales.US, iit.sales.EU – Ein Abonnement bewirkt, dass Nachrichten an den aktuellen Knoten, alle übergeordneten Knoten und alle untergeordneten Knoten empfangen werden: • Subskription von iit.sales • empfängt auch von: iit, iit.sales, iit.sales.US, iit.sales.EU • aber nicht von: iit.projects – Abonnent erhält Nachricht nur einmal 10 JMS: Subskriptions-Mechanismen (2) • Subject-based Subscription – Eingeschränkte Form von Content-based Subscription – Nachrichten besitzen neben dem opaken Inhalt eine Reihe von strukturierten Attributen – Attribute bestimmen die Empfänger – Ein Abonnement drückt das Interesse an einem bestimmten Thema in Form von Ausdrücken aus, die auf diesen Attributen ausgewertet werden – Subject ist • Liste von Strings (TIB/Rendezvous, JEDI) • Properties: Typisierte Schlüssel/Wert-Paare (JMS) – Abonnement ist • (Eingeschränkte Form von) regulären Ausdrücken auf Strings (TIB, JEDI) • (Eingeschränkte Form von) SQL92 Queries (JMS) – Filterung wird im Router-Netz vorgenommen! 11 JMS: Objekte 12 Transactions • JMS Local Transactions • Lokal zwischen Client und Service Provider • Erzeugen von transacted Sessions: • connection.create...Session(true, 0) • Parameter ack-Modus hat hier keine Bedeutung 13 J2EE: Installation • Download – http://java.sun.com/j2ee – Lokale Kopie auf TK-Server; siehe Homepage der Übung • Installation auf ultra*: (getestet auf ultra10) – cd ~ – tar xvf /home/erwin/tk1/j2sdkee1.3.1-work.tar • Environment – JAVA_HOME=/usr/j2se – PATH=$PATH:~/j2sdkee1.3.1-work/bin – CLASSPATH=~/j2sdkee1.3.1-work/lib/j2ee.jar:. 14 J2EE: Anmerkungen • Starten – j2ee –verbose • Admin-Tool – j2eeadmin • Wenn das Programm ohne Parameter gestartet wird, dann werden die möglichen Optionen ausgegeben • Auflisten der Queues und Topics – j2eeadmin –listJmsDestination • Anlegen eines Topics – j2eeadmin –addJmsDestination <name> topic 15 Links • JMS-Tutorial und API-Dokumentation – In der Dokumentation von J2EE – http://java.sun.com/products/jms/ • Mirror – http://nibbler.tk.informatik.tu-darmstadt.de/docs 16