10 Nachrichtenorientierte Middleware

Slides:



Advertisements
Ähnliche Präsentationen
Kapitel 8: Nachrichtenbasierte Kommunikation mit JMS
Advertisements

JMS - Java Message Service ist Schnittstelle zu Implementierungen verschiedener Anbieter (z.B. IBM MQSeries) ist sehr liberal bezüglich der Semantik.
6.3 Ereignisbasierte Systeme Ereignis (event) : eine Ereignis-Quelle (event source, publisher) generiert Benachrichtigung (event notification), an der.
4 Verteilte Algorithmen
Vs Klassifizierung von Kommunikationsdiensten synonym:Nachrichtensystem/dienst(message service) Kommunikationssystem/dienst(communication service)
Threads Richard Göbel.
Indirekte Adressierung
Kommunikation in verteilten Systemen (Middleware)
10 Nachrichtenorientierte Middleware
UML Begleitdokumentation des Projekts
Entwicklung verteilter eingebetteter Systeme - Einführung
Entwicklung verteilter Anwendungen I, WS 13/14 Prof. Dr. Herrad Schmidt WS 13/14 Kapitel 1 Folie 2 Microsoft.NET Framework: Quelle:
Entwicklung verteilter Anwendungen II, SS 13 Prof. Dr. Herrad Schmidt SS 2013 Kapitel 5 Folie 2 Windows Communication Foundation (WCF) s.a.
Management- und Web Services- Architekturen
Voyager Eigenschaften/Vorzüge Universalität: –ROI-Modelle: CORBA, RMI, DCOM –verschiedene Namens-, Verzeichnisdienste Nachrichtentypen: synchron, oneway,
7.2.4 Klassifikation mobilen Codes Nicht vergessen:  Sowohl das Fernkopieren als auch die Migration von Objekten setzt voraus, daß der Code entweder am.
Vs41 4 Verteilte Algorithmen. vs42 Prozesse als Systemkomponenten:  Spezifikation eines Prozesses ? (Vgl. Spezifikation eines ADT) syntaktisch:z.B. Ports.
©© 2013 SAP AG. Alle Rechte vorbehalten. Kundenanfragen bearbeiten Szenarioübersicht Eingehende Kunden- anfrage bearbeiten Service- anfrage anlegen, zuordnen.
Tutorium Software-Engineering SS14 Florian Manghofer.
Funktionsweise eines Funambolservers Natascha Graf Aachen, 01. Februar 2010.
© 2012 TravelTainment Einführung in Enterprise JavaBeans Seminarvortrag von Ralf Penners Folie 1 von 34.
Funktionen (Zweck und Eigenschaften) Funktionen sind Unterprogramme, die einen bestimmten Zweck erfüllen Sie zerlegen Probleme in kleine, abgeschlossene.
1 vs JMS - Java Message Service ist Schnittstelle zu MOM-Implementierungen verschiedener Anbieter (z.B. IBM MQSeries) ist sehr liberal bezüglich.
Vs3 1 3 Netzdienste im Internet. vs3 2 Netzdienste = über Ports ansprechbare Dienste, die hauptsächlich (aber nicht nur) für die Fernnutzung gedacht sind.
Vs Verteilte Hash-Tabellen (distributed hastables, DHT) am Beispiel von Chord (Stoica et al. 2001) Ziel:"Gutes" Verteilen von Informationen auf.
Anforderungen an die neue Datenstruktur
Verteilte Anwendungen: J2EE
Quelle: Deutsch. Aber hallo! B2
BewO Bewerberverfahren Online Baden-Württemberg
Testomat® 808 Produktpräsentation.
Web App-Entwicklung – der richtige Technologiemix macht’s
Objektorientiertes Modellieren und Programmieren mit Java
Anforderungen an die neue Datenstruktur
Schlange und Stapel.
Global Positioning System - (Globales Positionsbestimmungssystem)‏
Wsl schon abgeschaltet Idee dahinter ist interessant und revolutionär
Datentypen: integer, char, string, boolean
Zwei Denkansätze zur Klasse Schlange
Video- und Audio- Schnittkurs
August 2012 ABB STOTZ-KONTAKT GmbH ABB i-bus® KNX Energiemodul EM/S Energieaktor SE/S © ABB 28 May 2018 | Slide 1.
Business Process Excuction Lanaguage
Schulungsunterlagen der AG RDA
„Was du ererbt von Deinen Vätern hast, erwirb es, um es zu besitzen.“
Komponenten des Computers
Allgemeine Befehle für die allgemeine Liste
Unterwegs im Internet.
Herzlich Willkommen Präsentation für das Angebot «einfache Verlinkung»
Templates
Ereignissteuerung
Julian Lebherz Betreuer: Thomas Büchner Christian Neubert
Routing … … die Suche nach dem Weg..
Was ist ein eBook und wie löst man es ein
SS 04 Christiane Rauh Christian Hellinger
FAMILY.TENNIS ist ein cooler Teambewerb für Kinder & Jugendliche gemeinsam mit ihren Eltern. SPIELREGELN: Jedes Team besteht aus 1 Kind & 1 Elternteil.
Interfaces Definition von Interfaces Verwendung von Interfaces
2. Vererbung und Kapselung
«Delegierter» Methoden Schablone Funktionszeiger
1. Die rekursive Datenstruktur Liste 1
Datenstrukturen und Softwareentwicklung
9. Vererbung und Polymorphie
Kapitel IX: Übertragungsprotokollimplementierungen
Tutorstunde 10.
E-Book-Datenbank proquest
Abschluss-Keynote Captain Future
3. Die Datenstruktur Graph 3.3 Durchlaufen von Graphen
FAMILY.TENNIS ist ein cooler Teambewerb für Kinder & Jugendliche gemeinsam mit ihren Eltern. SPIELREGELN: Jedes Team besteht aus 1 Kind & 1 Elternteil.
Informatik Softwareentwicklung – 4.3 Entwurfsmuster
Computer Services Herausforderung ABK hatte sich zum Ziel gesetzt, den Kundenbedarf nach schnelleren Zahlungen zu erfüllen und trotz rapiden Wachstums.
Cloudlösungen für die Landesgeschäftsstelle
Hack2Sol – Powered by SAP
 Präsentation transkript:

10 Nachrichtenorientierte Middleware

10.1 Nachrichten- und Ereignisdienste Motivation: ? Defizite objektorientierter verteilter Systeme ?  Anderer Architekturstil sinnvoll für manche Anwendungen, z.B. Sensorsysteme, Unterstützung von Geschäftsprozessen, ...  Interaktion von Prozessen über Ereignisse, Nachrichten  Pipes? TCP-Verbindungen?  Keine festen Verbindungen zwischen Quellen und Senken von Informationen (mobile Geräte!)  Dienst für Vermittlung und persistente Zwischenspeicherung  E-mail?

 Selektive Entgegennahme durch Empfänger  Prioritäten, Filterung  Zusammengehörige Sendungen  als Bestandteile von Transaktionen  Ereignisdienst (event service) Nachrichtendienst (message service) (beide Begriffe sehr ähnlich, fast synonym) „Benachrichtigung über Ereignis“

Erzeuger Dienst Verbraucher (producers) (consumers) Aufruf: Klient Dienst Aufruf: Dienst Klient (Rückruf, callback) Informationsfluss: Quelle Senke . . . Kanäle, Schlangen, mailboxes, topics, subjects, ...

10.1.1 Nachrichtendienste Typisches Nachrichten/Ereignis-Modell class Message { String header; // message kind etc. int priority; // overrides FIFO handling Map properties; // for selective acceptance ..... String payload; // e.g., XML text } bezieht sich nur auf wenige elementare Typen (int,String,..) die „hoffentlich in allen Teilsystemen bekannt sind“ und auf die jeweiligen Programmiersprachen abbildbar sind Typisches Kanal-Modell: Menge von Nachrichten

Schnittstelle eines Kanals: interface Channel { void put(Message msg); // erweitert die Nachrichtenmenge um msg Message get(); // entnimmt der Nachrichtenmenge eine Nachricht // - sobald vorhanden Message get(String filter); // entnimmt der Nachrichtenmenge eine Nachricht, // deren properties der Bedingung filter genügen } Beispiel für eine Bedingung: "temperature > 80" Typische Filtersprache: Teilsprache von SQL

10.1.2 Ereignisdienste Registrierung von Verbrauchern/Erzeugern beim Dienst ermöglicht aktivere Rolle des Dienstes Erzeuger: Ankündigen (publish) von Nachrichten (Ereignismeldungen, notifications) zu bestimmtem Gegenstand (subject, topic) Verbraucher: Abonnieren (subscribe) von Nachrichten Gegenstand ≈ Kanal – aber Nachricht wird allen Interessenten zugestellt, nicht durch einen „weggenommen“

void subscribe(Handler h, String filter); interface Subject { void subscribe(Handler h, String filter); // sobald eine passende Nachricht eintrifft, // wird ein Thread erzeugt, der h.handle(msg) ausführt. // Beachte: dies geschieht für alle registrierten Abonnenten h! void unsubscribe(Handler h); // Registrierung löschen void publish(Generator g); // g.generate() wird zu gewissen Zeitpunkten aufgerufen, // um beim Erzeuger die nächste Nachricht abzurufen void unpublish(Generator g); } Bedeutung von publish häufig auch ‚put‘

Beachte  : Verbraucherseitig handelt es sich um eine asynchrone Variante des Beobachter-Musters (vgl. auch Java-Ereignisbehandlung) Beachte  : Erzeugerseitig handelt es sich um Polling, sofern generate bei Abwesenheit neuer Daten nicht blockiert Beachte  : Die Schnittstelle könnte auch zusätzlich die Operationen put und get enthalten Beachte  : Nachrichten werden nicht gespeichert, sondern gleich weitergegeben; was vor dem Abonnieren passiert war erfährt der Verbraucher nicht – es sei denn: Nachrichten tragen eine Angabe der Lebensdauer (time-to-live) und werden entsprechend aufbewahrt und weitergereicht Zusätzlich Operation get? Welche Semantik??

Klassifikation entsprechend dem Initiator des Informationsflusses: Push mode: Informationsfluss wird durch Quelle angestoßen Pull mode: Informationsfluss wird durch Senke angestoßen : Wirkungsrichtung Quelle Senke put (Push) handle (Push) generate (Pull) get (Pull) grün: Pufferung erforderlich rot: permanentes Polling

10.2 IBM MQSeries (Bestandteil des IBM Application Server WebSphere) Modell Queue Manager . . . Klient Queue Manager . . . Host Host

int mqInit() Initialisierung der MQ-Bibliothek int mqConnect(String queueManager, String host, String channel) Herstellung einer logischen Verbindung zu einem Queue Manager auf der angegebenen Station und Ablieferung einer Berechtigung (queue manager handle) int mqDisconnect(int qmHandle) Lösen der Verbindung zum angegebenen QueueManager; qmHandle ist danach ungültig.

int mqOpenQueue(int qmHandle, String queue, int options) „Öffnen“ einer Queue beim angegebenen Queue Manager, d.h. Beschaffen einer Berechtigung (queue handle) int mqCloseQueue(int qmHandle, int qHandle) „Schließen“ der angegebenen Queue beim angegebenen QueueManager; qHandle ist danach ungültig.

int mqSend(int qmHandle, int qHandle, String message) hängt eine Nachricht an die angegebene Queue beim angegebenen QueueManager an, falls noch Platz - sonst wird Fehlercode geliefert String mqGet(int qmHandle, int qHandle, int maxlen, int timeout) entnimmt eine Nachricht, sofern innerhalb der angegebenen Zeit (in Zehntelsekunden) vorhanden und nicht größer als die angegebene Länge - sonst Fehler int mqSendOpt(...) dsgl. mit verschiedenen Optionen, String mqGetOpt(...) z.B. Warten auf bestimmte Nachrichtenart

10.3 CORBA Notification Service (umfasst früheren Event Service) = hauptsächlich syntaktische Spezifikation von Schnittstellen mit wenig vorgeschriebener Semantik !  Kanal (channel) ist Umschlagplatz von  Ereignismeldungen (event notifications) als Nachrichten.  Nachrichtenquelle heißt supplier.  Nachrichtensenke heißt consumer. Alle diese sind CORBA-Objekte mit gewissen Schnittstellen !

10.3.1 Event Service (Modul CosEventComm) ! Für ein und denselben Kanal können Quellen und Senken wahlweise entweder im Pull- oder im Push-Modus arbeiten PushSupplier push push PushConsumer PullSupplier PullConsumer pull pull

interface PushConsumer { void push(in any data) raises(Disconnected); PushSupplier push push PushConsumer interface PushConsumer { void push(in any data) raises(Disconnected); void disconnect_push_consumer(); } // nach disconnect kein push mehr möglich interface PushSupplier { void disconnect_push_supplier(); Ein PushSupplier ruft push auf, wird aber selbst nicht aufgerufen – es sei denn für ein disconnect. In: module CosEventComm

PullSupplier PullConsumer pull pull interface PullSupplier { any pull() raises(Disconnected); any try_pull(out boolean has_event) raises(Disconnected); void disconnect_pull_supplier(); } // nach disconnect kein pull mehr möglich interface PullConsumer { void disconnect_pull_consumer(); Ein PullConsumer ruft pull auf, wird aber selbst nicht aufgerufen – es sei denn für ein disconnect.

Kanal wird über 4 verschiedene Schnittstellen angesprochen:   Channel   PushSupplier push push PushConsumer PullSupplier PullConsumer pull pull Kanal wird über 4 verschiedene Schnittstellen angesprochen:  ProxyPushConsumer  ProxyPushSupplier  ProxyPullConsumer  ProxyPullSupplier Kanal stellt sich als "Vertreter" der passenden Gegenseite dar. 2 and 3 may also raise TypeError !

interface ProxyPushConsumer : PushConsumer { void connect_push_supplier(in PushSupplier ps) raises(AlreadyConnected); } // erlaubt anschließendes push durch den Supplier // und gegebenenfalls disconnect durch den Kanal interface ProxyPushSupplier : PushSupplier { void connect_push_consumer(in PushConsumer pc) } // ermöglicht pc.push durch den Kanal

interface ProxyPullConsumer : PullConsumer { void connect_pull_supplier(in PullSupplier ps) raises(AlreadyConnected); } // ermöglicht ps.pull durch den Kanal // und gegebenenfalls disconnect durch den Kanal interface ProxyPullSupplier : PullSupplier { void connect_pull_consumer(in PullConsumer pc) } // erlaubt anschließendes pull durch den Consumer

Kanal hat 2 Schnittstellen, über die man Zugriff auf die Schnittstellen  erhält: interface ConsumerAdmin { ProxyPushSupplier obtain_push_supplier(); ProxyPullSupplier obtain_pull_supplier(); } interface SupplierAdmin { ProxyPushConsumer obtain_push_consumer(); ProxyPullConsumer obtain_pull_consumer(); interface EventChannel { ConsumerAdmin for_consumers(); SupplierAdmin for_suppliers(); void destroy(); // Finalisierung des Kanals } - und diese erhält man durch die „Wurzel-Schnittstelle“ des Kanals:

Erzeugung eines Kanal-Objekts ist – wie üblich - nicht Gegenstand von CORBA Auffinden eines Kanal-Objekts verläuft wie für alle Objekte, z.B. über Namensdienst Zur Typisierung: - Die gezeigten push/pull-Operationen sind generisch. - Ein Modul CosTypedEventComm erlaubt Typfestlegung bei der Verbindungsherstellung. - Vorzuziehen ist aber der Notification Service. (siehe aber Life Cycle Service)

10.3.2 Notification Service Erweiterung des Event Service um:  Filterung von Ereignismeldungen (beliebige Filtersprachen + default constraint language)  Steuerung der Dienstgüte (Reihenfolge, Zuverlässigkeit, Lebensdauer, …)  Information über die Kommunikationspartner (z.B. „Ist jemand an meinen Ereignissen interessiert?“)  Bessere Typisierung durch Structured Events Empfohlene Lektüre: Brose et al. 2001