Apache Camel Grundlagen (Teil 2)
Enterprise Integration Patterns
Talend, Global Leader in Open Source Integration Solutions
Bernhard Schuhmann
Christian Schneider
© Talend 2011 2
Herzlich Willkommen!
Einige logistische Hinweise… Alle Teilnehmer sind stumm geschalten Sie können trotzdem Fragen stellen
Benutzen Sie dazu bitte das Q&A Fenster auf der rechten Seite Ihres Bildschirms, unten im Fenster von GoToWebinar
Wir beantworten Ihre Fragen am Ende des Webinars Wenn nicht genügend Zeit bleibt, alle Fragen zu beantworten, reichen wir
die Antworten per E-Mail nach Sie können Fragen auch per E-Mail an an [email protected] stellen
Sollten Sie Schwierigkeiten haben (z.B. mit dem Ton), schreiben Sie bitte eine kurze Nachricht ins Q&A Fenster
Dieses Webinar wird aufgezeichnet und in Kürze auf unserer Website unter On Demand Webinars zur Verfügung gestellt
Webinarreihe Apache Camel GrundlagenTeil 1: Erste Schritte mit Apache CamelTeil 2: Enterprise Integration PatternsTeil 3: Apache Camel für Fortgeschrittene
© Talend 2011 4
Investoren
StandorteFirmensitz San Francisco (Los Altos) Paris (Suresnes)
Niederlassungen Orange County (Irvine) Boston (Burlington) New York (Tarrytown) London (Maidenhead) Utrecht Nuremberg Bonn Munich Milan (Bergame) Tokyo Beijing
Talend weltweit…
Global leader in open source integration
© Talend 2011 5
Rückblende
Erste Schritte Unsere erste Camel Applikation Die Konzepte von Camel Typische Use Cases
© Talend 2011 6
Das Apache Camel Projekt
Leistungsfähiges Integrationsframework, basiert auf den Enterprise Integration Patterns Open Source Apache License v2 Homepage des Projekts: http://
camel.apache.org Aktive und wachsende Community
Highlights Projekt wurde im Mai 2007 gestartet Aktuelle stabile Version 2.8.1 Ausgereift, für den produktiven Einsatz
geeignet Unterstützt verschiedenste Technologien,
über 100 Komponenten Umfangreiche Dokumentation Mehrere Hersteller unterstützen das Projekt
© Talend 2011 7
Grundlegende Konzepte von Camel
Camel basiert auf EIPs! Messages und Exchanges Processors Endpoints Producers und Consumers Languages, Expressions und Predicates TypeConverters Routes CamelContext, Services und Registries
© Talend 2011 8
Routing in Camel
Konvention vor Konfiguration!
(Fast) alles ist ein Processor Ein Processor repräsentiert ein EIP Ein Processor verarbeitet einen Exchange,
indem er die eingehende Message nutzt und optional eine ausgehende Message erzeugt (oder eine Exception)
Processors können kombiniert werden (eine Pipeline ist z.B. ein Processor, der die inneren Processors der sequenziell ausführt)
Eine Route ist (vereinfacht) ein Consumer, der mit einem zusammengesetzten Processor verbunden ist
Camel nutzt URLs, um Endpoints zu konfigurieren
© Talend 2011 9
Konventionen beim Routing
Konvention vor Konfiguration!
Die out Message des vorherigen Processor ist die in Message des jeweils nächsten
Gibt der vorherige Processor keine out Message zurück, wird die vorige in Message zur out Message
Am Ende der Verarbeitung wird die letzte out (oder in) Message zur Rückgabenachricht und vom Consumer zurückgeschickt (in-out MEP)
Exchange Diagramm aus Camel in Action, © Manning 2011
Consumer
out in
out in
in
out out
Pipes and Filters EIP (Processors)
© Talend 2011 10
Wie funktioniert Camel?
Der Consumer erhält/erzeugt eine Message, verpackt sie in einen Exchange und übergibt diesen an einen Processor
Der Consumer legt das MEP des Exchange fest (in-out, in-only) Automatische Konvertierung der Message mittels
TypeConverters (falls der nächste Processor einen Typ benötigt, der noch nicht in der Message enthalten ist)
Eine Route wird (üblicherweise) mittels Domain Specific Language (DSL) definiert. Diese DSL erzeugt zur Laufzeit zuerst ein Modell (AST) der Route erzeugt, anhand des Modells werden im zweiten Schritt die Route und ihre Processors instanziiert
Routes haben keinen Zustand (sind stateless)!
© Talend 2011 11
Routen debuggen
Um Routen zu debuggen, können Sie… …mit einem vereinfachten Testfall beginnen …Unit Tests (JUnit) nutzen …das Test Kit von Camel nutzenhttp://camel.apache.org/testing.html …“mock://...” Endpoints nutzen …Logdateien und den “log://...” Endpoint nutzen …Camel Tracer Interceptor nutzenhttp://camel.apache.org/tracer.html …den Java Debugger einer IDE (z.B. Eclipse) nutzen …Camel Debugger nutzenhttp://camel.apache.org/debugger.html …die Funktionen von JMX und Notifications nutzen
Genug der Theorie…
© Talend 2011 13
Enterprise Integration Patterns
© Talend 2011 14
Integration Styles
Die Kategorie Integration Styles enthält übergeordnete Architekturmuster:“Wie integriert man mehrere Applikationen, damit diese zusammenarbeiten und Informationen austauschen können?”
File Transfer
Shared Database
Remote Procedure Invocation
Messaging
Mit Camel können alle dieser Architekturmuster umgesetzt werden
© Talend 2011 15
Messaging Channels
Point-to-Point – genau ein Empfänger bekommt die Nachricht
Publish-Subscribe – versendet Nachrichten an alle interessierten Empfänger
Dead Letter Channel – wie wird mit unzustellbaren Nachrichten umgegangen
Guaranteed Deliver Channel – stellt die Zustellung der Nachricht sicher, auch wenn die Infrastruktur ausfällt
Channel Adapter – Bindeglied zwischen Applikation und Messaging System zum Senden und Empfangen von Nachrichten
Messaging Bridge – verbindet mehrere Messagingsysteme miteinander, Nachrichten in einem System sind auch in den angeschlossenen Systemen verfügbar
Messaging Bus – eine Architektur, die es Applikationen ermöglicht, zusammen zu arbeiten und trotzdem unabhängig zu bleiben. Applikationen können ohne Auswirkung auf die anderen hinzugefügt oder entfernt werden.
© Talend 2011 16
Messaging Endpoints (Consumers)
Mit ihnen beginnt eine Camel Route Event-Driven Consumer – verarbeitet eine
Nachricht, sobald sie eintrifft Polling Consumer – verarbeitet eine Nachricht,
wenn die Applikation dazu bereit ist Competing Consumers – verarbeiten Nachrichten
parallel Idempotent Consumer – kann Duplikate
verarbeiten
from("direct:start")from("timer://eip?fixedRate=true&delay=0&period=500")from("direct:idempotent").idempotentConsumer(header("id"), store)
© Talend 2011 17
Messaging Endpoints (Producers)
from("direct:start“).to("mock:result");
Kommunizieren mit anderen Systemen Message Endpoint – sendet eine Nachricht über einen
Messaging Channel Transactional Client – steuert Transaktionen im
Messagingsystem Messaging Gateway – kapselt die Interaktion mit dem
Messagingsystem vom Rest der Applikation
© Talend 2011 18
Message Transformation
from("direct:set-body").setBody().constant("Goodbye World")from("direct:bean").to("bean:translatorBean")from("direct:processor").process(translatorProcessor)from("direct:template").to("velocity:templates/report.vm")
Message Translator“Wie können Applikationen, die unterschiedliche Datenformate nutzen, miteinander kommunizieren?” Implizit mittels TypeConverter Explizit – in er DSL deklariert
Normalizer“Wie werden Nachrichtenverarbeitet, die
semantisch gleich sind, aber unterschiedliche Formate haben?”
© Talend 2011 19
Message Transformation
from("direct:start") .enrich("direct:enrich", new AggregationStrategy() { @Override public Exchange aggregate(Exchange, Exchange) {
Content Enricher“Wie kann mit einem System kommuniziert werden, wenn der Sender nicht alle erforderlichen Daten hat?”
Content Filter“Wie kann man die Verarbeitung umfangreicher Nachrichten vereinfachen, wenn nur wenige Daten relevant sind?”
© Talend 2011 20
Message Transformation
from("direct:set-body") .setBody().constant("Goodbye World") .setHeader("secret")from("direct:bean").to("bean:wrapperBean")from("direct:processor").process(PwrapperProcessor)N
Envelope Wrapper“Wie können Bestandssysteme Nachrichten austauschen, die bestimmten Anforderungen, wie das Vorhandensein bestimmter Header oder Verschlüsselung, genügen müssen?”
© Talend 2011 21
Message Transformation
from("direct:start") .filter(header("rank").isGreaterThan("3"))
Message Filter“Wie kann eine Komponente vermeiden, uninteressante Nachrichten zu erhalten?”
© Talend 2011 22
Message Routing
.choice() .when(header("rank").isEqualTo("5")).to("...") .when(header("rank").isEqualTo("4")).to("...") .when(header("rank").isEqualTo("3")).to("...") .otherwise().to("log:maybe-some-other-time").end()
Message Router“Wie kann man Verarbeitungsschritte trennen und damit Nachrichten abhängig von bestimmten Kriterien an verschiedene Komponenten (filters) weitergereicht werden?”
Content-Based Router“Was ist zu tun, wenn eine bestimmte logische Funktion von mehreren Applikationen/Systemen bereitgestellt wird?”
© Talend 2011 23
Message Routing
Dynamic Router“Wie kann man die Abhängigkeit zwischen Router und allen Zielsystemen vermeiden, und trotzdem dessen Effizienz behalten?”
Recipient List“Wie wird eine Message zu einer dynamischen Liste von Empfängern geroutet?”
Routing Slip“Wie wird eine Nachricht nacheinander zu mehreren Verarbeitungsschritten geroutet, wenn diese Schritte während der Entwicklung noch nicht bekannt sind und je nach Nachricht variieren können?”
© Talend 2011 24
Message Routing
from("direct:start") .split(body().tokenize("\n“))
from("seda:aggregate") .aggregate(constant(true)).completionSize(2) .completionInterval(1000L).groupExchanges()
Splitter“Wie werden Nachrichten verarbeitet, die mehrere Teile enthalten, die wiederum unterschiedlich zu behandeln sind?”
Aggregator“Wie werden getrennte Nachrichten, die in Bezug stehen, zusammengeführt, um sie als Ganzen zu verarbeiten?”
© Talend 2011 25
Message Routing
Message Broker“Wie kann man den Empfänger einer Nachricht vom Sender entkoppeln und die zentrale Kontrolle über den Nachrichtenaustausch behalten?”
Process Manager“Wie wird eine Nachricht durch mehrere Verarbeitungsschritte geroutet, wenn die Schritte während der Entwicklung noch nicht bekannt und nicht sequentiell sind?”
© Talend 2011 26
System Management
Detour“Wie kann man eine Nachricht zur Validierung, zum Testen oder zum Debuggen über Zwischenschritte routen?”
Wire-tap“Wie schaut man in eine Nachricht, die über einen Point-to-point Kanal transportiert wird?”
from("direct:start") .wireTap("seda:wiretap")
© Talend 2011 27
System Management
Smart Proxy“Wie kann man Anfragen an einen Service den Antworten zuordnen, die er an die vom Sender angegebene Adresse schickt?”
(z.B. verwendet für die Integration zwischen asynchronen und synchronen Systemen, kann die Skalierbarkeit von Systemen erhöhen)
EIPs in der Praxis…
© Talend 2011 29
Benutzen Sie bitte das Q&A Fenster, Sie können Fragen auch per E-Mail an [email protected] stellen.
Vielen Dank für Ihre Aufmerksamkeit!
© Talend 2011 30
Weitere Informationen
Camel Website camel.apache.org Talends Website talend.com/products-application-integration/ Talendforge Forum talendforge.org/forum Christian Schneiders Blog liquid-reality.de Christian Schneider auf Twitter @schneider_chris Bernhard Schuhmann auf Twitter @schuhmab
Vielen Dank!
Recommended