Java Message Service

Werbung
JMS
Java Message Service
TK3 – WS02/03
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: 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
9
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!
10
JMS: Durable Subscribers
• Nondurable Subscribers/Subscriptions
• Durable Subscribers/Subscriptions
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
SwiftMQ: Installation
• Installation auf ultra*:
– PATH für JDK1.3 setzen
(export PATH=/opt/j2se/bin:$PATH)
– cd ~
– tar xvf /home/erwin/tk1/smq_user.tar
– cd smq/src
– source set_classpath setzt CLASSPATH für SwiftMQ
• Verzeichnisse
– src: Übersetzen & Starten von JMS-Apps dort möglich
– doc: Dokumentation (HTML)
• Download
– http://www.swiftmq.com/
– Lokale Kopie auf TK-Server; siehe Homepage der Übung
14
SwiftMQ: Anmerkungen
• JNDI
Java Naming and Directory Interface
• Erzeugen des JNDI-Kontexts:
String providerURL="smqp://localhost:4001„;
Hashtable env=new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.swiftmq.jndi.InitialContextFactoryImpl");
env.put(Context.PROVIDER_URL, providerURL);
Context jndiContext=new InitialContext(env);
• Starten des Routers
– scripts/unix/smqr1
– scripts/unix/smqr2
• Admin-Tools
– scripts/unix/cli
– scripts/unix/explorer
15
SwiftMQ: Verzeichnisse
• conf
– Enthält Konfig-Dateien, Portnummer des Routers hier
evtl. ändern
•
•
•
•
•
doc: Dokumentation
jars: .class-Dateien
log: Log-Dateien
samples: Beispiele
scripts
– Starten der router, cli, explorer
• src: Hier das eigene Programm schreiben
• store: Hier werden die Msgs gespeichert
16
Links
• JMS-Tutorial
– In der Dokumentation von J2EE
– http://java.sun.com/products/jms/
• JMS API
– In SwiftMQ-Doku
• JNDI API
– In J2EE-Doku
– In SwiftMQ-Doku
• SwiftMQ
– Doku im doc-Verzeichnis
– www.swiftmq.com
17
Herunterladen