Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

1 10.4 JMS - Java Message Service ist Schnittstelle zu Implementierungen verschiedener Anbieter (z.B. IBM MQSeries) ist sehr liberal bezüglich der Semantik.

Ähnliche Präsentationen


Präsentation zum Thema: "1 10.4 JMS - Java Message Service ist Schnittstelle zu Implementierungen verschiedener Anbieter (z.B. IBM MQSeries) ist sehr liberal bezüglich der Semantik."—  Präsentation transkript:

1 JMS - Java Message Service ist Schnittstelle zu Implementierungen verschiedener Anbieter (z.B. IBM MQSeries) ist sehr liberal bezüglich der Semantik dieser Implementierungen unterstützt sowohl Nachrichten-Stil als auch Ereignis-Stil ( Paket javax.jms API Spez. ) JMS-Terminologie: Nachrichten:point-to-point via Queues/Schlangen Ereignisse:publish/subscribe via Topics/Themen Quelle und Senke heißen hier producer/consumer

2 vs10.42 Bestandteile einer Nachricht/Ereignismeldung: Kopf (header), enthältAdresse (destination), Lieferart (delivery mode) Kennung (message ID) Einlieferungszeit (timestamp) Korrelationskennung (correlation ID) Antwortadresse (replyTo) Wiederholungsanzeige (redelivered) Nachrichtentyp (type) Löschzeitpunkt (expiration) Priorität (priority) Eigenschaften (properties), d.h. Name/Wert-Paare mit Werten primitiver Typen oder String Rumpf (body):

3 vs10.43 Rumpf (body), bestimmt den Nachrichten-Typ: StreamMessage Folge von primitiven Werten MapMessage Name/Wert-Paare mit primitiven Werten TextMessage Typ String (XML!) ObjectMessage serialisiertes Java-Objekt BytesMessage Byte-Folge StreamMessage,.. erweitern die Schnittstelle javax.jms.Message (diese enthält 45 Operationen, hauptsächlich getters und setters)

4 vs Sitzungen und Verbindungen Nachrichten (messages) sind Objekte, die vom Sender nach ihrer Erzeugung mit Inhalt gefüllt werden Quellen und Senken sind Objekte, die bei ihrer Erzeugung an eine bestimmte Queue (bzw. Topic) gebunden werden und Operationen send bzw. receive für das Senden bzw. Empfangen von Nachrichten anbieten (Empfangen im Push Mode ist ebenfalls möglich)

5 vs10.45 Sitzung (session) ist der obligatorisch bereitzustellende Kontext für Quellen bzw. Senken – diese werden grundsätzlich mit Bezug auf ein bestimmtes Sitzungsobjekt erzeugt; eine Sitzung fungiert als Fabrikobjekt für Quellen, Senken und Nachrichten. Ein Sitzungsobjekt und die darüber erzeugten Objekte werden i.d.R. von einem Thread benutzt. Wenn im Push Mode empfangen wird, werden alle Senken der Sitzung von einem Thread bedient. Für nebenläufiges Senden/Empfangen sollten zwei getrennte Sitzungen verwendet werden. Außerdem fungiert die Sitzung als Transaktionskontext (und hat noch weitere Funktionen).

6 vs10.46 Verbindung (connection) zum JMS muss hergestellt werden, bevor – auf deren Basis – Sitzungen eröffnet werden können. Beim Herstellen der Verbindung authentisiert sich der Klient. Typischerweise hat der Dienst keinen lokalen Repräsentanten, weshalb eine Verbindung i.d.R. durch eine TCP-Verbindung realisiert wird. Die Verbindung fungiert als Fabrik für Sitzungen. Ein Verbindungsobjekt wird wiederum über eine Verbindungsfabrik erzeugt. Diese stellt gleichsam den Anker des ganzen Messaging-Systems dar und wird über das JNDI (Java Naming and Directory Interface) erhalten.

7 vs10.47 :InitialContext :ConnectionFactory :Connection :Session new lookup createConnection new createSession new createTextMessage createProducer start

8 vs10.48 import javax.naming.*; // providing Context, // InitialContext, import javax.jms.*;// providing Message, // ConnectionFactory, Context context = new InitialContext(); ConnectionFactory factory = (ConnectionFactory)context.lookup("JMSFactory"); Connection connection = factory.createConnection(); Session session = connection.createSession( false, Session.AUTO_ACKNOWLEDGE); // create producers/consumers connection.start();..... keine Transaktionen gewünscht erst danach werden Nachrichten zugestellt

9 vs Schlangen (Queues) Anwendungsbeispiel: Quelle generiert zu erledigende Aufträge und legt entsprechende Text-Nachrichten in einer Schlange ab, die unter dem Namen Assignments verzeichnet ist. Queue tasks = (Queue)context.lookup(Assignments"); TextMessage message = session.createTextMessage(); message.setText("Do this and that..."); MessageProducer producer = session.createProducer(tasks); producer.send(message);

10 vs Senke nimmt Aufträge aus dieser Schlange im Pull Mode entgegen: Queue tasks = (Queue)context.lookup("Assignments"); MessageConsumer consumer = session.createConsumer(tasks); TextMessage message = (TextMessage)consumer.receive(); // oder für zeitlich begrenztes Warten: receive(3000); String task = message.getText(); MessageProducerMessageConsumer Queue (vgl. CORBA Event Service ( )) send receive (Push)(Pull)

11 vs Themen (Topics) Anwendungsbeispiel: Quelle generiert Ereignismeldungen zum Thema Sicherheitswarnungen, das unter dem Namen Security Alerts verzeichnet ist. Topic alerts = (Topic)context.lookup("Security Alerts"); TextMessage message = session.createTextMessage(); message.setText("New security hole discovered in..."); MessageProducer producer = session.createProducer(alerts); producer.send(message);

12 vs Senke nimmt Meldungen im Push Mode entgegen. Dafür wird ein Event Handler mit Schnittstelle MessageListener benötigt: import javax.jms.*; public class AlertListener implements MessageListener { public void onMessage(Message message) { String alert = ((TextMessage)message).getText();..... // take action! } } Damit: MessageConsumer consumer = session.createConsumer(alerts); consumer.setMessageListener(new AlertListener); connection.start();

13 vs Dauerhaftes Abonnement (durable subscription) überdauert das Stoppen und Wiederstarten einer Verbindung, d.h. wenn man später erneut an einem Thema interessiert ist, erhält man alle in der Zwischenzeit eingetroffenen Meldungen MessageConsumer consumer = session.createDurableSubscriber(alerts, "mySub"); // not createConsumer consumer.setMessageListener(new AlertListener); connection.start();..... connection.stop();..... consumer = session.createDurableSubscriber(alerts, "mySub"); // resumes subscription to topic consumer.setMessageListener(new AlertListener); connection.start();

14 vs Filterung benutzt die Properties einer Meldung. Anwendungsbeispiel: Meldungen enthalten ein Betrifft in Gestalt einer String Property TextMessage message = session.createTextMessage(); message.setText("Beware of virus "); message.setStringProperty("Subject", "Viruses")

15 vs Empfänger sei nur an Viren-Meldungen interessiert: entsprechenden Selektor (selector) verwenden ! String selector = "(Subject = 'Viruses')"; MessageConsumer consumer = session.createConsumer(alerts, selector); consumer.setMessageListener(new AlertListener); connection.start();

16 vs Syntax von Selektoren: Teil der Syntax von SQL92 für bedingte Ausdrücke

17 vs SIENA Scalable Internet Event Notification Architecture (Carzaniga et al …) Weltumspannender Ereignisdienst Leistungsfähige Filterung Raffiniert verteilte Architektur und Filterung

18 vs Ereignismeldung (notification) = Menge typbehafteter Attribute, z.B. string class = finance/exchanges/stock time date = Mar 4 11:43:37 MST 1998 string exchange = NYSE string symbol = DIS float prior = float change = -4 float earn = Filtersprache

19 vs Filter (filter) = Menge von Aussagen über einzelne Attribute, hauptsächlich mit Vergleichsoperatoren, z.B. string class >* finance/exchanges string exchange = NYSE string symbol = DIS float change < 0 Muster (pattern) = Folge von Filtern (zur Filterung einer Gruppe von Meldungen)

20 vs10.420

21 vs Senken und Quellen von Ereignismeldungen registrieren beim Ereignisdienst Abonnement (subscription) bzw. Ankündigung (advertisement) (jeweils in Gestalt eines Filters) die die interessierenden bzw. gemeldeten Ereignisse charakterisieren Ziel: gezielte, effiziente Vermittlung zwischen Quellen und Senken Beachte: Eine Quelle ist für eine Senke nur dann relevant, wenn die durch Ankündigung bzw. Abonnement erfassten Mengen nicht disjunkt sind Überdeckungsrelationen

22 vs Def.:Ein Abonnement erfasst/überdeckt (covers) eine Meldung, wenn für jede Aussage des Filters ein passendes Attribut der Meldung existiert z.B. string what = alarm string what = alarm integer level > 3 integer level = 5 integer level < 7 ! Nicht string what = alarm string what = alarm integer level > 3 time date = 02:40:03

23 vs Def.:Eine Meldung entspricht (is covered by) einer Ankündigung, wenn jedes Attribut der Meldung zu einer Aussage des Filters passt z.B. string what = alarmstring what = login string what = loginstring user = carzaniga string user any Ankündigung Meldung


Herunterladen ppt "1 10.4 JMS - Java Message Service ist Schnittstelle zu Implementierungen verschiedener Anbieter (z.B. IBM MQSeries) ist sehr liberal bezüglich der Semantik."

Ähnliche Präsentationen


Google-Anzeigen