SlideShare ist ein Scribd-Unternehmen logo
1 von 36
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-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
Anwendungs-Integration – Typische 
Probleme/Anforderungen 
Verschiedene Transferprotokolle 
Unterschiedliche Datenformate 
Synchrone und asynchrone Kommunikation 
Aufteilen und Zusammenführen von Daten 
Parallelisierung 
Logging / Monitoring 
3
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
Apache Camel 
Routing Engine 
Implementiert in Java 
Bietet technische Umsetzung der EIP 
Apache License 2.0 
Aktuelle Version: 2.14.0 
5
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>
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();
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”); 
} 
}
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(); 
} 
}
Routing 
Umsetzung der EIP durch Routen 
Routen beschreiben den Datenfluss 
Bestehen aus Endpoints und Processors 
Deklariert mit DSLs 
Java 
XML 
Scala 
. . . 
10
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
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
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“)
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 über den Austausch 
In-Message 
Out-Message 
Exceptions 
15
Processor 
Routingbausteine 
Bestimmen Daten-Fluss/Umwandlung zwischen Endpoints 
Arbeiten mit dem Exchange-Objekt 
Umsetzung von EIPs 
Eigene Processors möglich 
16
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)
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
Routing-Elemente - Splitter 
Aufteilen einer Message 
Splitting der Payload 
Produzieren neuer Messages mit Einzeldatensätzen 
19 
from(endpoint).split(stax(Veranstaltung.class).to(endpoint)
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)
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
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) {…}
Routing-Elemente - WireTap 
Abzweigen von Routen 
Original Route unbeeinflusst 
Weiterarbeiten auf Kopie der Payload möglich 
23 
from(…) 
.wireTap(loggingendpoint).copy().end() 
.to(originaldestination)
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“).
Routing-Elemente - Router 
Weiterverteilen von Messages 
Inhaltsbasierter Router 
Feste Anzahl Regeln/Verzweigungen 
Dynamischer Router 
Dynamische Datenbasis für Routingregeln 
25
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();
Typumwandlung 
DataFormat 
Für (De)-serialisieren 
TypeConverter 
Umwandeln der Zugriffsart 
(File,byte[],String,InputStream) 
Translator (Processor, Bean-Methode) 
Mapping von Businessobjekten 
27
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))
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
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
Monitoring - hawtio 
31
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
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
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
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
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

Weitere ähnliche Inhalte

Was ist angesagt?

Adobe AEM - From Eventing to Job Processing
Adobe AEM - From Eventing to Job ProcessingAdobe AEM - From Eventing to Job Processing
Adobe AEM - From Eventing to Job ProcessingCarsten Ziegeler
 
JSON, JSON Schema, and OpenAPI
JSON, JSON Schema, and OpenAPIJSON, JSON Schema, and OpenAPI
JSON, JSON Schema, and OpenAPIOctavian Nadolu
 
Angular components
Angular componentsAngular components
Angular componentsSultan Ahmed
 
Mastering Moodle Web Services development
Mastering Moodle Web Services developmentMastering Moodle Web Services development
Mastering Moodle Web Services developmentJuan Leyva Delgado
 
Visio Diagram of a user SSO Flow
Visio Diagram of a user SSO FlowVisio Diagram of a user SSO Flow
Visio Diagram of a user SSO FlowMike Reams
 
Apache ActiveMQ and Apache Camel
Apache ActiveMQ and Apache CamelApache ActiveMQ and Apache Camel
Apache ActiveMQ and Apache CamelOmi Om
 
Javascript Design Patterns
Javascript Design PatternsJavascript Design Patterns
Javascript Design PatternsLilia Sfaxi
 
Mastering the Sling Rewriter
Mastering the Sling RewriterMastering the Sling Rewriter
Mastering the Sling RewriterJustin Edelson
 
Building secure applications with keycloak
Building secure applications with keycloak Building secure applications with keycloak
Building secure applications with keycloak Abhishek Koserwal
 
Web application security & Testing
Web application security  & TestingWeb application security  & Testing
Web application security & TestingDeepu S Nath
 

Was ist angesagt? (20)

Api security
Api security Api security
Api security
 
Adobe AEM - From Eventing to Job Processing
Adobe AEM - From Eventing to Job ProcessingAdobe AEM - From Eventing to Job Processing
Adobe AEM - From Eventing to Job Processing
 
JSON, JSON Schema, and OpenAPI
JSON, JSON Schema, and OpenAPIJSON, JSON Schema, and OpenAPI
JSON, JSON Schema, and OpenAPI
 
Angular components
Angular componentsAngular components
Angular components
 
Spring security
Spring securitySpring security
Spring security
 
Pentesting ReST API
Pentesting ReST APIPentesting ReST API
Pentesting ReST API
 
Angular Data Binding
Angular Data BindingAngular Data Binding
Angular Data Binding
 
Mastering Moodle Web Services development
Mastering Moodle Web Services developmentMastering Moodle Web Services development
Mastering Moodle Web Services development
 
Building Netty Servers
Building Netty ServersBuilding Netty Servers
Building Netty Servers
 
Visio Diagram of a user SSO Flow
Visio Diagram of a user SSO FlowVisio Diagram of a user SSO Flow
Visio Diagram of a user SSO Flow
 
Apache ActiveMQ and Apache Camel
Apache ActiveMQ and Apache CamelApache ActiveMQ and Apache Camel
Apache ActiveMQ and Apache Camel
 
NestJS
NestJSNestJS
NestJS
 
API and Microservices Management
API and Microservices ManagementAPI and Microservices Management
API and Microservices Management
 
Sightly - Part 2
Sightly - Part 2Sightly - Part 2
Sightly - Part 2
 
Javascript Design Patterns
Javascript Design PatternsJavascript Design Patterns
Javascript Design Patterns
 
Mastering the Sling Rewriter
Mastering the Sling RewriterMastering the Sling Rewriter
Mastering the Sling Rewriter
 
Api Gateway
Api GatewayApi Gateway
Api Gateway
 
Building secure applications with keycloak
Building secure applications with keycloak Building secure applications with keycloak
Building secure applications with keycloak
 
Security Considerations for API Gateway Aggregation
Security Considerations for API Gateway AggregationSecurity Considerations for API Gateway Aggregation
Security Considerations for API Gateway Aggregation
 
Web application security & Testing
Web application security  & TestingWeb application security  & Testing
Web application security & Testing
 

Ähnlich wie Apache camel

Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...GFU Cyrus AG
 
Service Mesh mit Istio und MicroProfile - eine harmonische Kombination?
Service Mesh mit Istio und MicroProfile - eine harmonische Kombination?Service Mesh mit Istio und MicroProfile - eine harmonische Kombination?
Service Mesh mit Istio und MicroProfile - eine harmonische Kombination?Michael Hofmann
 
Bkr Workflow Oeffentlich
Bkr Workflow OeffentlichBkr Workflow Oeffentlich
Bkr Workflow OeffentlichRalf Ruethlein
 
Go - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeGo - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeFrank Müller
 
Übersicht Skriptsprachen
Übersicht SkriptsprachenÜbersicht Skriptsprachen
Übersicht SkriptsprachenA. LE
 
XML-Socket-Server zur Kommunikation mit Flash
XML-Socket-Server zur Kommunikation mit FlashXML-Socket-Server zur Kommunikation mit Flash
XML-Socket-Server zur Kommunikation mit FlashStephan Schmidt
 
Sockets – Theorie und Implementierung
Sockets – Theorie und ImplementierungSockets – Theorie und Implementierung
Sockets – Theorie und ImplementierungAndreas Roth
 
TYPO3 CMS 7.3 - Die Neuerungen - pluswerk
TYPO3 CMS 7.3 - Die Neuerungen - pluswerkTYPO3 CMS 7.3 - Die Neuerungen - pluswerk
TYPO3 CMS 7.3 - Die Neuerungen - pluswerkdie.agilen GmbH
 
Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?
Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?
Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?Marc Müller
 
TYPO3 CMS 7.4 - Die Neuerungen - pluswerk
TYPO3 CMS 7.4 - Die Neuerungen - pluswerkTYPO3 CMS 7.4 - Die Neuerungen - pluswerk
TYPO3 CMS 7.4 - Die Neuerungen - pluswerkdie.agilen GmbH
 
Anbindung von Silverlight an RESTful Web Services
Anbindung von Silverlight an RESTful Web ServicesAnbindung von Silverlight an RESTful Web Services
Anbindung von Silverlight an RESTful Web ServicesAndré Wussow
 
TYPO3 CMS 7.5 - Die Neuerungen - pluswerk
TYPO3 CMS 7.5 - Die Neuerungen - pluswerkTYPO3 CMS 7.5 - Die Neuerungen - pluswerk
TYPO3 CMS 7.5 - Die Neuerungen - pluswerkdie.agilen GmbH
 
Sockets – Theorie und Implementierung
Sockets – Theorie und ImplementierungSockets – Theorie und Implementierung
Sockets – Theorie und ImplementierungAndreas Roth
 
Open icf (open identity connector framework) @ forgerock deutsch
Open icf (open identity connector framework) @ forgerock   deutschOpen icf (open identity connector framework) @ forgerock   deutsch
Open icf (open identity connector framework) @ forgerock deutschHanns Nolan
 
PAVONE Espresso Workflow für Java EE
PAVONE Espresso Workflow für Java EEPAVONE Espresso Workflow für Java EE
PAVONE Espresso Workflow für Java EEUdo Sill
 
".NET und jetzt!" C# in 21 Tagen oder doch besser Best Practices
".NET und jetzt!" C# in 21 Tagen oder doch besser Best Practices".NET und jetzt!" C# in 21 Tagen oder doch besser Best Practices
".NET und jetzt!" C# in 21 Tagen oder doch besser Best PracticesGFU Cyrus AG
 
Oracle ETL Herausforderungen - OPITZ CONSULTING - Till Sander - Wolfgang Rütter
Oracle ETL Herausforderungen - OPITZ CONSULTING - Till Sander - Wolfgang RütterOracle ETL Herausforderungen - OPITZ CONSULTING - Till Sander - Wolfgang Rütter
Oracle ETL Herausforderungen - OPITZ CONSULTING - Till Sander - Wolfgang RütterOPITZ CONSULTING Deutschland
 
SQL 2012: Reporting Services – Reporting und die Infrastruktur
SQL 2012: Reporting Services – Reporting und die InfrastrukturSQL 2012: Reporting Services – Reporting und die Infrastruktur
SQL 2012: Reporting Services – Reporting und die InfrastrukturDigicomp Academy AG
 
TYPO3 CMS 8.1 - Die Neuerungen - pluswerk
TYPO3 CMS 8.1 - Die Neuerungen - pluswerkTYPO3 CMS 8.1 - Die Neuerungen - pluswerk
TYPO3 CMS 8.1 - Die Neuerungen - pluswerkdie.agilen GmbH
 

Ähnlich wie Apache camel (20)

Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
Java Code Quality: Gute Software braucht guten Code - Regeln für verständlich...
 
Service Mesh mit Istio und MicroProfile - eine harmonische Kombination?
Service Mesh mit Istio und MicroProfile - eine harmonische Kombination?Service Mesh mit Istio und MicroProfile - eine harmonische Kombination?
Service Mesh mit Istio und MicroProfile - eine harmonische Kombination?
 
Bkr Workflow Oeffentlich
Bkr Workflow OeffentlichBkr Workflow Oeffentlich
Bkr Workflow Oeffentlich
 
Go - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare SystemeGo - Googles Sprache für skalierbare Systeme
Go - Googles Sprache für skalierbare Systeme
 
profil_2017
profil_2017profil_2017
profil_2017
 
Übersicht Skriptsprachen
Übersicht SkriptsprachenÜbersicht Skriptsprachen
Übersicht Skriptsprachen
 
XML-Socket-Server zur Kommunikation mit Flash
XML-Socket-Server zur Kommunikation mit FlashXML-Socket-Server zur Kommunikation mit Flash
XML-Socket-Server zur Kommunikation mit Flash
 
Sockets – Theorie und Implementierung
Sockets – Theorie und ImplementierungSockets – Theorie und Implementierung
Sockets – Theorie und Implementierung
 
TYPO3 CMS 7.3 - Die Neuerungen - pluswerk
TYPO3 CMS 7.3 - Die Neuerungen - pluswerkTYPO3 CMS 7.3 - Die Neuerungen - pluswerk
TYPO3 CMS 7.3 - Die Neuerungen - pluswerk
 
Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?
Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?
Karlsruher Entwicklertag 2016 - Monitoring 2.0: Alles im Lot?
 
TYPO3 CMS 7.4 - Die Neuerungen - pluswerk
TYPO3 CMS 7.4 - Die Neuerungen - pluswerkTYPO3 CMS 7.4 - Die Neuerungen - pluswerk
TYPO3 CMS 7.4 - Die Neuerungen - pluswerk
 
Anbindung von Silverlight an RESTful Web Services
Anbindung von Silverlight an RESTful Web ServicesAnbindung von Silverlight an RESTful Web Services
Anbindung von Silverlight an RESTful Web Services
 
TYPO3 CMS 7.5 - Die Neuerungen - pluswerk
TYPO3 CMS 7.5 - Die Neuerungen - pluswerkTYPO3 CMS 7.5 - Die Neuerungen - pluswerk
TYPO3 CMS 7.5 - Die Neuerungen - pluswerk
 
Sockets – Theorie und Implementierung
Sockets – Theorie und ImplementierungSockets – Theorie und Implementierung
Sockets – Theorie und Implementierung
 
Open icf (open identity connector framework) @ forgerock deutsch
Open icf (open identity connector framework) @ forgerock   deutschOpen icf (open identity connector framework) @ forgerock   deutsch
Open icf (open identity connector framework) @ forgerock deutsch
 
PAVONE Espresso Workflow für Java EE
PAVONE Espresso Workflow für Java EEPAVONE Espresso Workflow für Java EE
PAVONE Espresso Workflow für Java EE
 
".NET und jetzt!" C# in 21 Tagen oder doch besser Best Practices
".NET und jetzt!" C# in 21 Tagen oder doch besser Best Practices".NET und jetzt!" C# in 21 Tagen oder doch besser Best Practices
".NET und jetzt!" C# in 21 Tagen oder doch besser Best Practices
 
Oracle ETL Herausforderungen - OPITZ CONSULTING - Till Sander - Wolfgang Rütter
Oracle ETL Herausforderungen - OPITZ CONSULTING - Till Sander - Wolfgang RütterOracle ETL Herausforderungen - OPITZ CONSULTING - Till Sander - Wolfgang Rütter
Oracle ETL Herausforderungen - OPITZ CONSULTING - Till Sander - Wolfgang Rütter
 
SQL 2012: Reporting Services – Reporting und die Infrastruktur
SQL 2012: Reporting Services – Reporting und die InfrastrukturSQL 2012: Reporting Services – Reporting und die Infrastruktur
SQL 2012: Reporting Services – Reporting und die Infrastruktur
 
TYPO3 CMS 8.1 - Die Neuerungen - pluswerk
TYPO3 CMS 8.1 - Die Neuerungen - pluswerkTYPO3 CMS 8.1 - Die Neuerungen - pluswerk
TYPO3 CMS 8.1 - Die Neuerungen - pluswerk
 

Apache camel

  • 1. Anwendungs-Integration mit Apache Camel Java Expertenkreis, 30.10.2014 Gedoplan Hendrik Jungnitsch, GEDOPLAN GmbH
  • 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. Anwendungs-Integration – Typische Probleme/Anforderungen Verschiedene Transferprotokolle Unterschiedliche Datenformate Synchrone und asynchrone Kommunikation Aufteilen und Zusammenführen von Daten Parallelisierung Logging / Monitoring 3
  • 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. Apache Camel Routing Engine Implementiert in Java Bietet technische Umsetzung der EIP Apache License 2.0 Aktuelle Version: 2.14.0 5
  • 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. 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. 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. 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. Routing Umsetzung der EIP durch Routen Routen beschreiben den Datenfluss Bestehen aus Endpoints und Processors Deklariert mit DSLs Java XML Scala . . . 10
  • 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. 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. 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. Components - Beispiele 14 JMS FTP Mail Twitter Facebook JPA XMPP HTTP CXF Hazelcast Vert.x Websocket
  • 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. Processor Routingbausteine Bestimmen Daten-Fluss/Umwandlung zwischen Endpoints Arbeiten mit dem Exchange-Objekt Umsetzung von EIPs Eigene Processors möglich 16
  • 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. 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. 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. 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. 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. 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. 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. 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. Routing-Elemente - Router Weiterverteilen von Messages Inhaltsbasierter Router Feste Anzahl Regeln/Verzweigungen Dynamischer Router Dynamische Datenbasis für Routingregeln 25
  • 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. Typumwandlung DataFormat Für (De)-serialisieren TypeConverter Umwandeln der Zugriffsart (File,byte[],String,InputStream) Translator (Processor, Bean-Methode) Mapping von Businessobjekten 27
  • 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. 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. 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
  • 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. 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. 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. 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. 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

Hinweis der Redaktion

  1. 1