Anwendungs-Integration mit Apache 
Camel 
Java Expertenkreis, 30.10.2014 Gedoplan 
Hendrik Jungnitsch, GEDOPLAN GmbH
Anwendungs-Integration - Problemstellung 
Integrationsszenarios 
Anbindung von Fremdsystemen 
Integrieren von Legacy-Syste...
Anwendungs-Integration – Typische 
Probleme/Anforderungen 
Verschiedene Transferprotokolle 
Unterschiedliche Datenformate ...
Enterprise Integration Patterns 
Buch von Gregor Hohpe und Bobby Woolf (2004) 
Beschreibt 65 Designmuster 
Enterprise Inte...
Apache Camel 
Routing Engine 
Implementiert in Java 
Bietet technische Umsetzung der EIP 
Apache License 2.0 
Aktuelle Ver...
Getting Started – Einbindung in Projekt 
Core-Bibliothek besteht aus 
Routing-Engine 
Einigen grundlegenden Kommunikations...
Getting Started - CamelContext 
Laufzeitumgebung für Camel-Routen 
Führt Registry über 
Beans 
Endpoints 
DataTypes 
Biete...
Getting Started - RouteBuilder 
Abstrakte Basisklasse 
Erlaubt das Bauen von Routen mit Hilfe der Java DSL 
8 
public clas...
Getting Started – Erste Anwendung 
9 
public class MyCamelApplication { 
public class MyRouteBuilder extends RouteBuilder ...
Routing 
Umsetzung der EIP durch Routen 
Routen beschreiben den Datenfluss 
Bestehen aus Endpoints und Processors 
Deklari...
Endpoint 
Beschreibt Schnittstelle 
physikalische und logische Adresse 
Kommunikationsprotokoll 
Weitere Einstellungen 
Wi...
Consumer 
Endpoint für Konsumieren von Daten 
Implementierung kapselt Code für das Empfangen 
Immer am Anfang einer Route ...
Producer 
Endpoint für Produzieren von Daten 
Implementierung kapselt Code für das Senden 
Immer am Ende einer Route 
In J...
Components - Beispiele 
14 
JMS 
FTP 
Mail 
Twitter 
Facebook 
JPA 
XMPP 
HTTP 
CXF 
Hazelcast 
Vert.x 
Websocket
Exchange von Messages 
Message kapselt ausgetauschte Daten 
ID 
Header 
Body (Payload) 
Exchange speichert Informationen ü...
Processor 
Routingbausteine 
Bestimmen Daten-Fluss/Umwandlung zwischen Endpoints 
Arbeiten mit dem Exchange-Objekt 
Umsetz...
DataFormats 
(Un-) Marshalling von Daten 
Java Serialisierung 
JAXB 
CSV 
. . . 
Zusätzliche Formate müssen als Dependency...
Camel - Überblick 
18 
Routing-Engine Processors 
DataFormats 
DSLs 
(Java,XML,Scala, 
…) 
CamelContext 
(Runtime) 
XM 
L ...
Routing-Elemente - Splitter 
Aufteilen einer Message 
Splitting der Payload 
Produzieren neuer Messages mit Einzeldatensät...
Routing-Elemente - Parallelisierung 
Paralleles Weiterverarbeiten von Messages 
Angeboten von einigen Routingbausteinen 
S...
Routing-Elemente - Aggregator 
Zusammenführen/Sammeln von Messages 
Ergebnis der Aggregation wird neue Payload 
Zusammenfü...
Routing-Elemente - Bean Binding 
Aufruf von Bean-Methoden aus einer Route heraus 
Überreicht Payload als Parameter 
Rückga...
Routing-Elemente - WireTap 
Abzweigen von Routen 
Original Route unbeeinflusst 
Weiterarbeiten auf Kopie der Payload mögli...
In-Memory Endpoints 
Erlauben Verknüpfen von Routen 
CamelContext intern 
Seda 
direct 
Context übergreifend 
vm 
vm-direc...
Routing-Elemente - Router 
Weiterverteilen von Messages 
Inhaltsbasierter Router 
Feste Anzahl Regeln/Verzweigungen 
Dynam...
Programmatisches Senden an Routen 
Senden über ProducerTemplate 
Synchrones Senden 
Asynchrones Senden 
26 
ProducerTempla...
Typumwandlung 
DataFormat 
Für (De)-serialisieren 
TypeConverter 
Umwandeln der Zugriffsart 
(File,byte[],String,InputStre...
Exception Handling 
Try-Catch 
Exception Clause 
onException(Exception.class).to(endpoint) 
Deadletter-Channel 
28 
from("...
Logging 
Problemstellung 
Vielzahl Messages Parallel 
In vielen Routen 
Verarbeitet von unterschiedlichen Threads 
Mapped-...
Monitoring 
Camel sammelt statistische Daten für Endpoints 
Daten werden per JMX bereitgestellt 
Zusätzliche Daten mit neu...
Monitoring - hawtio 
31
CDI-Integration 
Kann als Zusatzmodul eingebunden werden 
Wenn Anwendung in CDI-Container läuft 
CDI-Registry 
Automatisch...
Testing 
Testlibraries für Junit und TestNG 
Mock Endpoints 
Senden an Routen über ProducerTemplate 
NotifyBuilder für Tes...
Setup Szenarios 
Standalone JavaSE 
JavaEE Applicationserver 
Als Teil des Deployments (EAR/WAR) 
Oder als Modul 
OSGI-Run...
Dokumentation 
Dokumentation auf Apache-Projektseite 
Konfigurationsmöglichkeiten für Endpunkte 
Verwendung von Routingbau...
Fazit 
Mächtig und Flexibel 
Leichtgewichtig Dank Modularisierung 
Vielzahl DSLs 
Java-DSL Typsicher mit jeder gängigen ID...
Nächste SlideShare
Wird geladen in …5
×

Apache camel

341 Aufrufe

Veröffentlicht am

Anwendungs-Integration mit Apache Camel,
Vortrag auf dem Expertenkreis Java, GEDOPLAN, 30.10.2014,
Hendrik Jungnitsch

Veröffentlicht in: Software
0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
341
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
2
Aktionen
Geteilt
0
Downloads
3
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie
  • 1
  • Apache camel

    1. 1. Anwendungs-Integration mit Apache Camel Java Expertenkreis, 30.10.2014 Gedoplan Hendrik Jungnitsch, GEDOPLAN GmbH
    2. 2. Anwendungs-Integration - Problemstellung Integrationsszenarios Anbindung von Fremdsystemen Integrieren von Legacy-Systemen Anwendungen als wiederverwendbare Komponenten (Microservices) Mögliche Lösungsansätze ESB (Enterprise Service Bus) SOAP Routing-Engine (z. B. Camel oder Spring Integration) 2
    3. 3. Anwendungs-Integration – Typische Probleme/Anforderungen Verschiedene Transferprotokolle Unterschiedliche Datenformate Synchrone und asynchrone Kommunikation Aufteilen und Zusammenführen von Daten Parallelisierung Logging / Monitoring 3
    4. 4. Enterprise Integration Patterns Buch von Gregor Hohpe und Bobby Woolf (2004) Beschreibt 65 Designmuster Enterprise Integration Pattern (EIP) Best-Practices für Lösung von Integrationsproblemen Erleichtern Entwurf von Integrationsanwendungen 4
    5. 5. Apache Camel Routing Engine Implementiert in Java Bietet technische Umsetzung der EIP Apache License 2.0 Aktuelle Version: 2.14.0 5
    6. 6. Getting Started – Einbindung in Projekt Core-Bibliothek besteht aus Routing-Engine Einigen grundlegenden Kommunikationsprotokollen Weitere Module mit gleicher Version wie Core einbinden 6 <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-core</artifactId> <version>2.14.0</version> </dependency>
    7. 7. Getting Started - CamelContext Laufzeitumgebung für Camel-Routen Führt Registry über Beans Endpoints DataTypes Bietet Funktionen an wie: Starten / Stoppen von Routen Hinzufügen von RouteBuildern … 7 CamelContext camelContext = new DefaultCamelContext();
    8. 8. Getting Started - RouteBuilder Abstrakte Basisklasse Erlaubt das Bauen von Routen mit Hilfe der Java DSL 8 public class MyRouteBuilder extends RouteBuilder { public void configure() throws Exception { from(“file://C:Tempimport”).to(“file://C:Tempexport”); } }
    9. 9. Getting Started – Erste Anwendung 9 public class MyCamelApplication { public class MyRouteBuilder extends RouteBuilder { public void configure() throws Exception { from(“file://C:Tempimport”).to(“file://C:Tempexport”); } } public static void main(String[] args) { CamelContext camelContext = new DefaultCamelContext(); camelContext.addRoutes(new MyRouteBuilder()); camelContext.start(); . . . camelContext.stop(); } }
    10. 10. Routing Umsetzung der EIP durch Routen Routen beschreiben den Datenfluss Bestehen aus Endpoints und Processors Deklariert mit DSLs Java XML Scala . . . 10
    11. 11. Endpoint Beschreibt Schnittstelle physikalische und logische Adresse Kommunikationsprotokoll Weitere Einstellungen Wird erzeugt von einer Factory genannt Component Ansprechen in Route in der Regel über URI f i l e : / / C : i m p o r t 11 Compone nt Endpoint Konfiguration
    12. 12. Consumer Endpoint für Konsumieren von Daten Implementierung kapselt Code für das Empfangen Immer am Anfang einer Route In Java-DSL definiert mit: from(endpoint:uri) 12 from(“file://C:import“) Polling Consumer Selective Consumer Event-Driven Consumer
    13. 13. Producer Endpoint für Produzieren von Daten Implementierung kapselt Code für das Senden Immer am Ende einer Route In Java-DSL definiert mit: to(endpoint:uri) 13 to(“file://C:export“)
    14. 14. Components - Beispiele 14 JMS FTP Mail Twitter Facebook JPA XMPP HTTP CXF Hazelcast Vert.x Websocket
    15. 15. Exchange von Messages Message kapselt ausgetauschte Daten ID Header Body (Payload) Exchange speichert Informationen über den Austausch In-Message Out-Message Exceptions 15
    16. 16. Processor Routingbausteine Bestimmen Daten-Fluss/Umwandlung zwischen Endpoints Arbeiten mit dem Exchange-Objekt Umsetzung von EIPs Eigene Processors möglich 16
    17. 17. DataFormats (Un-) Marshalling von Daten Java Serialisierung JAXB CSV . . . Zusätzliche Formate müssen als Dependency hinzugefügt werden 17 from(endpoint).unmarshall(new JaxbDataFormat()).someProcessing() .marshall(new GsonDataFormat()).to(endpoint)
    18. 18. Camel - Überblick 18 Routing-Engine Processors DataFormats DSLs (Java,XML,Scala, …) CamelContext (Runtime) XM L CS V Endpoints SMT P Pop3 File FTP Mail Components JSO N Splitter Router Route Routendefinition
    19. 19. Routing-Elemente - Splitter Aufteilen einer Message Splitting der Payload Produzieren neuer Messages mit Einzeldatensätzen 19 from(endpoint).split(stax(Veranstaltung.class).to(endpoint)
    20. 20. Routing-Elemente - Parallelisierung Paralleles Weiterverarbeiten von Messages Angeboten von einigen Routingbausteinen Splitter Multicast Auch möglich durch entsprechende Endpoints 20 from(endpoint).split(…).parallelProcessing() .executorService(pool).to(endpoint)
    21. 21. Routing-Elemente - Aggregator Zusammenführen/Sammeln von Messages Ergebnis der Aggregation wird neue Payload Zusammenführen nach Inhalt möglich Sammeln beenden nach from(…).aggregate().constant(true).comple tionTimeout(50000).to(…) Zeitintervall Anzahl Messages Weiteren Bedingungen 21
    22. 22. Routing-Elemente - Bean Binding Aufruf von Bean-Methoden aus einer Route heraus Überreicht Payload als Parameter Rückgabewert wird neue Payload 22 from(…).beanRef(“veranstaltungen“ , “create“) from(…).beanRef(new Veranstaltungen(), “create“) oder public Veranstaltung create(Veranstaltung v) {…}
    23. 23. Routing-Elemente - WireTap Abzweigen von Routen Original Route unbeeinflusst Weiterarbeiten auf Kopie der Payload möglich 23 from(…) .wireTap(loggingendpoint).copy().end() .to(originaldestination)
    24. 24. In-Memory Endpoints Erlauben Verknüpfen von Routen CamelContext intern Seda direct Context übergreifend vm vm-direct 24 from(“direct:import“) .split().beanRef(…)… from(“file://C:import“) .to(“direct:import“). from(“ftp://import@server“) .to(“direct:import“).
    25. 25. Routing-Elemente - Router Weiterverteilen von Messages Inhaltsbasierter Router Feste Anzahl Regeln/Verzweigungen Dynamischer Router Dynamische Datenbasis für Routingregeln 25
    26. 26. Programmatisches Senden an Routen Senden über ProducerTemplate Synchrones Senden Asynchrones Senden 26 ProducerTemplate template = camelContext.createProducerTemplate() template.sendBody("direct:Import", payload); Future<Exchange> future = template.asyncSend("direct:import", exchange); Exchange result = future.get();
    27. 27. Typumwandlung DataFormat Für (De)-serialisieren TypeConverter Umwandeln der Zugriffsart (File,byte[],String,InputStream) Translator (Processor, Bean-Methode) Mapping von Businessobjekten 27
    28. 28. Exception Handling Try-Catch Exception Clause onException(Exception.class).to(endpoint) Deadletter-Channel 28 from("direct:start") .doTry() .process(new ProcessorFail()) .to("mock:result") .doCatch(IOException.class) .to("mock:catch") .doFinally() .to("mock:finally") .end(); errorHandler(deadLetterChannel(endpoint))
    29. 29. Logging Problemstellung Vielzahl Messages Parallel In vielen Routen Verarbeitet von unterschiedlichen Threads Mapped-Diagnostic-Context (MDC) Speichert Kontextinformationen (routenId, messageId, usw…) Informationen über Pattern in Log-Formatter mitausgegeben 29
    30. 30. Monitoring Camel sammelt statistische Daten für Endpoints Daten werden per JMX bereitgestellt Zusätzliche Daten mit neuem (2.14.0) Metrics Component Empfehlung JMX-Konsole: HawtIO Bietet Camel Modul Übersicht Routen und Endpoints Visualisierung von Routen Debuggen von Routen 30
    31. 31. Monitoring - hawtio 31
    32. 32. CDI-Integration Kann als Zusatzmodul eingebunden werden Wenn Anwendung in CDI-Container läuft CDI-Registry Automatisches Registrieren von Routebuildern, TypeConverters Erlaubt Injection von CamelContext, Endpoints Ansprechen von CDI-Beans aus Routen 32
    33. 33. Testing Testlibraries für Junit und TestNG Mock Endpoints Senden an Routen über ProducerTemplate NotifyBuilder für Testen von Bedingungen AdviceWith Builder erlaubt Modifizieren bestehender Routen 33
    34. 34. Setup Szenarios Standalone JavaSE JavaEE Applicationserver Als Teil des Deployments (EAR/WAR) Oder als Modul OSGI-Runtime z. B. Apache Karaf Erlaubt dynamisches Hinzufügen von Endpoints und Routen 34
    35. 35. Dokumentation Dokumentation auf Apache-Projektseite Konfigurationsmöglichkeiten für Endpunkte Verwendung von Routingbausteinen Viele Code Beispiele DSLs Gut geeignet zum Nachschlagen Bücher Tutorials 35
    36. 36. Fazit Mächtig und Flexibel Leichtgewichtig Dank Modularisierung Vielzahl DSLs Java-DSL Typsicher mit jeder gängigen IDE Unterstützt Vielzahl von Deploymentszenarien Integrationsthematik bedingte Komplexität Entsprechende Einarbeitungszeit 36

    ×