Apache camel

36
Anwendungs-Integration mit Apache Camel Java Expertenkreis, 30.10.2014 Gedoplan Hendrik Jungnitsch, GEDOPLAN GmbH

description

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

Transcript of Apache camel

Page 1: Apache camel

Anwendungs-Integration mit Apache Camel

Java Expertenkreis, 30.10.2014 Gedoplan

Hendrik Jungnitsch, GEDOPLAN GmbH

Page 2: Apache camel

Anwendungs-Integration - Problemstellung

IntegrationsszenariosAnbindung von FremdsystemenIntegrieren von Legacy-SystemenAnwendungen als wiederverwendbare Komponenten (Microservices)

Mögliche LösungsansätzeESB (Enterprise Service Bus)SOAPRouting-Engine (z. B. Camel oder Spring Integration)

2

Page 3: Apache camel

Anwendungs-Integration – Typische Probleme/Anforderungen

Verschiedene Transferprotokolle

Unterschiedliche Datenformate

Synchrone und asynchrone Kommunikation

Aufteilen und Zusammenführen von Daten

Parallelisierung

Logging / Monitoring

3

Page 4: Apache camel

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

Page 5: Apache camel

Apache Camel

Routing Engine

Implementiert in Java

Bietet technische Umsetzung der EIP

Apache License 2.0

Aktuelle Version: 2.14.0

5

Page 6: Apache camel

Getting Started – Einbindung in Projekt

Core-Bibliothek besteht ausRouting-EngineEinigen 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>

Page 7: Apache camel

Getting Started - CamelContext

Laufzeitumgebung für Camel-RoutenFührt Registry über

BeansEndpointsDataTypes

Bietet Funktionen an wie:Starten / Stoppen von RoutenHinzufügen von RouteBuildern…

7

CamelContext camelContext = new DefaultCamelContext();

Page 8: Apache camel

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:\\Temp\import”).to(“file://C:\\Temp\export”); }}

Page 9: Apache camel

Getting Started – Erste Anwendung

9

public class MyRouteBuilder extends RouteBuilder { public void configure() throws Exception { from(“file://C:\\Temp\import”).to(“file://C:\\Temp\export”); }}

public class MyCamelApplication { public static void main(String[] args) { CamelContext camelContext = new DefaultCamelContext();

camelContext.addRoutes(new MyRouteBuilder());camelContext.start();. . .camelContext.stop();

}}

Page 10: Apache camel

Routing

Umsetzung der EIP durch Routen

Routen beschreiben den Datenfluss

Bestehen aus Endpoints und Processors

Deklariert mit DSLsJavaXMLScala. . .

10

Page 11: Apache camel

Endpoint

Beschreibt Schnittstellephysikalische und logische AdresseKommunikationsprotokollWeitere Einstellungen

Wird erzeugt von einer Factory genannt Component

Ansprechen in Route in der Regel über URIf i l e : / / C : \ \ i m p o r t

11

Component

Endpoint Konfiguration

Page 12: Apache camel

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

Page 13: Apache camel

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“)

Page 14: Apache camel

Components - Beispiele

14

JMS

FTP

Mail

Twitter

Facebook

XMPP

JPA

HTTPCXF

Hazelcast

Vert.x

Websocket

Page 15: Apache camel

Exchange von Messages

Message kapselt ausgetauschte DatenIDHeaderBody (Payload)

Exchange speichert Informationen über den AustauschIn-MessageOut-MessageExceptions

15

Page 16: Apache camel

Processor

Routingbausteine

Bestimmen Daten-Fluss/Umwandlung zwischen Endpoints

Arbeiten mit dem Exchange-Objekt

Umsetzung von EIPs

Eigene Processors möglich

16

Page 17: Apache camel

DataFormats

(Un-) Marshalling von DatenJava SerialisierungJAXBCSV. . .

Zusätzliche Formate müssen als Dependency hinzugefügt werden

17

from(endpoint).unmarshall(new JaxbDataFormat()).someProcessing().marshall(new GsonDataFormat()).to(endpoint)

Page 18: Apache camel

Camel - Überblick

18

Routing-Engine Processors

DataFormats

DSLs (Java,XML,Scala

,…)

CamelContext (Runtime)

Endpoints

ComponentsMail

SMTP

Pop3

File FTP

XML

CSV

JSON

Splitter

Router

Routendefinition

Route

Page 19: Apache camel

Routing-Elemente - Splitter

Aufteilen einer Message

Splitting der Payload

Produzieren neuer Messages mit Einzeldatensätzen

19

from(endpoint).split(stax(Veranstaltung.class).to(endpoint)

Page 20: Apache camel

Routing-Elemente - Parallelisierung

Paralleles Weiterverarbeiten von Messages

Angeboten von einigen RoutingbausteinenSplitterMulticast

Auch möglich durch entsprechende Endpoints

20

from(endpoint).split(…).parallelProcessing().executorService(pool).to(endpoint)

Page 21: Apache camel

Routing-Elemente - Aggregator

Zusammenführen/Sammeln von Messages

Ergebnis der Aggregation wird neue Payload

Zusammenführen nach Inhalt möglich

Sammeln beenden nachZeitintervallAnzahl MessagesWeiteren Bedingungen

21

from(…).aggregate().constant(true).completionTimeout(50000).to(…)

Page 22: Apache camel

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“)

public Veranstaltung create(Veranstaltung v) {…}

oder

Page 23: Apache camel

Routing-Elemente - WireTap

Abzweigen von Routen

Original Route unbeeinflusst

Weiterarbeiten auf Kopie der Payload möglich

23

from(…) .wireTap(loggingendpoint).copy().end().to(originaldestination)

Page 24: Apache camel

In-Memory Endpoints

Erlauben Verknüpfen von Routen

CamelContext internSedadirect

Context übergreifendvmvm-direct

24

from(“direct:import“).split().beanRef(…)…

from(“file://C:\\import“).to(“direct:import“).

from(“ftp://import@server“).to(“direct:import“).

Page 25: Apache camel

Routing-Elemente - Router

Weiterverteilen von Messages

Inhaltsbasierter RouterFeste Anzahl Regeln/Verzweigungen

Dynamischer RouterDynamische Datenbasis für Routingregeln

25

Page 26: Apache camel

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();

Page 27: Apache camel

Typumwandlung

DataFormatFür (De)-serialisieren

TypeConverterUmwandeln der Zugriffsart

(File,byte[],String,InputStream)

Translator (Processor, Bean-Methode)Mapping von Businessobjekten

27

Page 28: Apache camel

Exception Handling

Try-Catch

Exception Clause

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))

onException(Exception.class).to(endpoint)

Page 29: Apache camel

Logging

ProblemstellungVielzahl Messages ParallelIn vielen RoutenVerarbeitet von unterschiedlichen Threads

Mapped-Diagnostic-Context (MDC)Speichert Kontextinformationen (routenId, messageId, usw…)Informationen über Pattern in Log-Formatter mitausgegeben

29

Page 30: Apache camel

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: HawtIOBietet Camel ModulÜbersicht Routen und EndpointsVisualisierung von RoutenDebuggen von Routen

30

Page 31: Apache camel

Monitoring - hawtio

31

Page 32: Apache camel

CDI-Integration

Kann als Zusatzmodul eingebunden werdenWenn 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

Page 33: Apache camel

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

Page 34: Apache camel

Setup Szenarios

Standalone JavaSE

JavaEE ApplicationserverAls Teil des Deployments (EAR/WAR)Oder als Modul

OSGI-Runtimez. B. Apache KarafErlaubt dynamisches Hinzufügen von Endpoints und Routen

34

Page 35: Apache camel

Dokumentation

Dokumentation auf Apache-ProjektseiteKonfigurationsmöglichkeiten für EndpunkteVerwendung von RoutingbausteinenViele Code BeispieleDSLsGut geeignet zum Nachschlagen

Bücher

Tutorials

35

Page 36: Apache camel

Fazit

Mächtig und Flexibel

Leichtgewichtig Dank Modularisierung

Vielzahl DSLsJava-DSL Typsicher mit jeder gängigen IDE

Unterstützt Vielzahl von Deploymentszenarien

Integrationsthematik bedingte KomplexitätEntsprechende Einarbeitungszeit

36