Webinar Camel Grundlagen Teil 1

31
Apache Camel Grundlagen (Teil 1) Erste Schritte mit Apache Camel Talend, Global Leader in Open Source Integration Solutions Bernhard Schuhmann Christian Schneider

description

- First steps- Apache Camel Architecture- Camel in OSGi

Transcript of Webinar Camel Grundlagen Teil 1

Page 1: Webinar Camel Grundlagen Teil 1

Apache Camel Grundlagen (Teil 1)

Erste Schritte mit Apache Camel

Talend, Global Leader in Open Source Integration Solutions

Bernhard Schuhmann

Christian Schneider

Page 2: Webinar Camel Grundlagen Teil 1

© 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

Page 3: Webinar Camel Grundlagen Teil 1

Webinarreihe Apache Camel GrundlagenTeil 1: Erste Schritte mit Apache CamelTeil 2: Enterprise Integration PatternsTeil 3: Apache Camel für Fortgeschrittene

Page 4: Webinar Camel Grundlagen Teil 1

© 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

Page 5: Webinar Camel Grundlagen Teil 1

© Talend 2011 5

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

Page 6: Webinar Camel Grundlagen Teil 1

© Talend 2011 6

Erste Schritte mit Apache Camel

Überblick Download Erste Applikation Applikation ausführen Applikation deployen Beispiele

Page 7: Webinar Camel Grundlagen Teil 1

© Talend 2011 7

Integration ist nicht einfach

Das Thema Integration ist riesig Es gibt keinen goldenen Hammer, keine “one size fits all”

Lösung Es dauert lang, bis eine Architekturentscheidung als gut oder

schlecht bewertet werden kann Integrationsaufgaben lassen sich schwer dokumentieren Anforderungen ändern sich Änderungen verursachen hohe Kosten Zu viel Middleware!

Page 8: Webinar Camel Grundlagen Teil 1

© Talend 2011 8

Camel macht Integration einfacher

Ausrichtung auf Standards (mehr als 100 Technologien, Protokolle und Dataformate werden unterstützt)

Nutzen der Enterprise Integration Patterns, diese Patterns definieren eine Sprache mit einheitlicher Semantik, mit der sich Integrationsanforderungen ausdrücken lassen

Konvention vor Konfiguration, vereinfacht die Erstellung Integrationsabläufen (und macht Spaß)

Nachrichteninhalt ist egal Wahl des Containers ist egal Leichtgewichtig, modular und einfach erweiterbar „Jede Jeck is anners“ – Camel ermöglicht immer

mehrere Lösungswege Kein ESB

Page 9: Webinar Camel Grundlagen Teil 1

© Talend 2011 9

Wo lade ich Camel runter?Die Distribution von Apache Aktuelles stabiles Release 2.8.1 Die Apache Distribution enthält alle Camel JARshttp://camel.apache.org/download.html … oder Maven benutzen

Distributionen von Talend, TIF oder TESB SE OSGi Container (Apache Karaf und Eclipse Equinox) Ein Installationsarchiv (Auspacken, Einschalten, Geht nicht) Für den produktiven Einsatz geeignet, Support von Talendhttp://www.talend.com/products-application-integration/talend-integration-factory-community-edition.php

<dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-core</artifactId> <version>2.8.1</version></dependency>

Page 10: Webinar Camel Grundlagen Teil 1

© Talend 2011 10

Hello World

Wie implementiere ich meine erste Camel Anwendung? Camel nutzt Apache Maven Wir nehmen einen der vorhandenen Maven Archetypes

http://camel.apache.org/camel-maven-archetypes.html …generieren das Projekt

…und lassen es laufen

mvn archetype:generate \

-DarchetypeGroupId=org.apache.camel.archetypes \

-DarchetypeArtifactId=camel-archetype-java \

-DarchetypeVersion=2.8.1 \

-DgroupId=org.talend.example \

-DartifactId=example-one \

-Dversion=1.0-SNAPSHOT

mvn camel:run

Page 11: Webinar Camel Grundlagen Teil 1

Genug der Theorie…

Page 13: Webinar Camel Grundlagen Teil 1

© Talend 2011 13

Die Architektur von Camel

Camels API EIPs und die DSLs Laufzeitumgebung Komponenten

Page 14: Webinar Camel Grundlagen Teil 1

© Talend 2011 14

Die API von Camel

Einheitlicher Umgang mit Protokollen (Standard oder nicht) Datenformaten Sprachen für Ausdrücke Fehlerbehandlung

Kernkonzepte Message und Exchange Processor Endpoint Producer und Consumer Language, Expression und Predicate TypeConverter Route CamelContext, Service und Registry

Page 15: Webinar Camel Grundlagen Teil 1

© Talend 2011 15

Message und Exchange

Message – repräsentiert die Daten, die in einer Route von einem Processor zum anderen weitergegeben werden Body Headers (Metadaten) Attachments

Exchange – enthält die Messages eines Durchlaufs einer Route in Message out Message exception (falls ausgelöst) properties id MEP (in-out, in-only)

public interface Message { String getMessageId(); Exchange getExchange(); boolean isFault();

Map<String, Object> getHeaders(); Object getBody(); <T> T getBody(Class<T> type); Map<String, DataHandler> getAttachments();}

public interface Exchange { Map<String, Object> getProperties(); boolean hasProperties();

Message getIn(); Message getOut(); boolean hasOut(); Exception getException();

boolean isFailed(); boolean isTransacted(); boolean isRollbackOnly();

CamelContext getContext(); Endpoint getFromEndpoint(); String getFromRouteId(); String getExchangeId(); ExchangePattern getPattern();}

Page 16: Webinar Camel Grundlagen Teil 1

© Talend 2011 16

Processor

Repräsentiert eine Node, die einen Exchange verarbeiten kann

Während der Verarbeitung wird ein Exchange von einem Processor zum nächsten weitergereicht

Eine Route ist ein Graph aus aneinandergehängten Processors

Camel enthält eine Vielzahl vordefinierter Processors Der Nutzer kann eigene Processors implementieren

public interface Processor { void process(Exchange exchange) throws Exception;}

from(“direct:test”).process(new MyProcessor())

Page 17: Webinar Camel Grundlagen Teil 1

© Talend 2011 17

Endpoint

Beschreibt ein Ende eines Kommunikationskanals Wird eindeutig durch eine URI identifiziert Die URI eines Endpoint dient auch zur Konfiguration Endpoints können beide Seiten eines

Kommunikationskanals darstellen (Consumer und Producer)public interface Endpoint extends IsSingleton, Service {

String getEndpointUri(); String getEndpointKey(); CamelContext getCamelContext(); void configureProperties(Map<String, Object> options);

Exchange createExchange(); Producer createProducer() throws Exception; Consumer createConsumer(Processor processor) throws Exception; PollingConsumer createPollingConsumer() throws Exception;}

Page 18: Webinar Camel Grundlagen Teil 1

© Talend 2011 18

URIs in Endpoints

URIs werden genutzt, um Endpunkte zu konfigurieren Der Präfix (hier file) bestimmt die Komponente Camel erkennt und instanziiert Komponenten in JARs automatisch anhand

des Präfix Komponenten wie z.B. JMS müssen explizit instanziiert werden, der Präfix

des Endpunkts ist dann der Beanname (etwa amq und wmq) Standardpräfix ist der Name einer Datei im Verzeichnis

META-INF/services/org/apache/camel/component/. Diese enthält den FQN der Komponentenklasse

DataFormats und TypeConverters und Languages werden ähnlich instanziiert Der Kontextteil der URI (hier data/messages) wird benutzt um den Endpunkt

eindeutig zu identifizieren Die Parameter der URL (hier recursive=true) dienen zur Konfiguration der

Komponente from(“file://data/messages?recursive=true”)…

Page 19: Webinar Camel Grundlagen Teil 1

© Talend 2011 19

Erstes Glied in der Verarbeitungskette

Empfängt eine protokollspezifische Nachricht (Server), steckt sie in einen Exchange und beginnt die Verarbeitung in der Route

Optional wird das Ergebnis zurückgesendet

Event-Driven Consumer (asynchroner Empfänger) wird durch Events von außen angestoßen

Polling Consumer (synchroner Empfänger) fragt eine Quelle regelmäßig ab

public interface Consumer extends Service {

Endpoint getEndpoint();}

public interface PollingConsumer extends Consumer {

Exchange receive(); Exchange receiveNoWait(); Exchange receive(long timeout);}

Consumer

Page 20: Webinar Camel Grundlagen Teil 1

© Talend 2011 20

Producer

Bindeglied zu den zu integrierenden Systemen (z.B. ftp) Erzeugt aus Messages protokollspezifische Nachrichten

und sendet diese (Client) Empfängt optional eine Antwort

public interface Producer extends Processor, Service, IsSingleton {

Endpoint getEndpoint(); Exchange createExchange();}

Page 21: Webinar Camel Grundlagen Teil 1

© Talend 2011 21

Language, Expression und PredicateLanguage Austauschbarer Ausführungs-

mechanismus für Ausdrücke Erlaubt Entwicklern, Ausdrücke

in der von ihnen bevorzugten Sprache zu formulieren

Expression Ausdruck, anhand dessen ein

Exchange ausgewertet wird, liefert einen beliebigen Rückgabewert

Predicate Spezielle Ausprägung einer

Expression, die einen booleschen Wert zurückliefert

public interface Language { Predicate createPredicate(String expr); Expression createExpression(String expr);}

public interface Expression { <T> T evaluate(Exchange exchange, Class<T> type);}

public interface Predicate { boolean matches(Exchange exchange);}

…body(simple(“${in.header.myHeader}”))…

…filter(xpath(“/order/@type”))…

…choice() .when(header(“myHeader”).containts(“my content”))…

Page 22: Webinar Camel Grundlagen Teil 1

© Talend 2011 22

TypeConverter

Für die implizite (automatische) Typkonvertierung Ein TypeConverter stellt die Konvertierung von einer Klasse

zu einer anderen bereit Class Class

from(“file://data/messages”).to(“log:myCategory”)

Page 23: Webinar Camel Grundlagen Teil 1

© Talend 2011 23

Enterprise Integration Patterns in Camel

Integration Patterns decken einen großen Teil der Integrationsaufgaben ab

Kategorien von Integration Patterns Messaging Endpoints Message Construction Messaging Channels Message Routing Message Transformation System Management

Funktionale Einordnung Beschreibt ein Artefakt (was es ist, z.B. Message, Message

Endpoint) Beschreibt eine Aktivität (was es tut, z.B. Content Based Router)

Page 24: Webinar Camel Grundlagen Teil 1

© Talend 2011 24

Laufzeitumgebung von Camel

Ausführungsumgebung vorgegeben durch den CamelContext Routen Registries (für Endpunkte, Beans, Services, Komponenten) Routing Engine (synchron und asynchron) Monitoring (JMX) Events und Notifications

CamelContext wird konfiguriert Programmatisch (Java API), Spring oder Blueprint Automatische Erkennung von Komponenten in JARs und OSGi

Bundles RouteBuilders zur Konfiguration von Routen

Page 25: Webinar Camel Grundlagen Teil 1

© Talend 2011 25

Komponenten von Camel

Komponenten kapseln jeweils eine Technologie Transportprotokolle (file, http, ftp, jms, pop/smtp, rss, …) Datenformate (JAXB, JSON, CSV, EDI, HL7, …) Expression Languages (Simple, XPath, JavaScript, Ruby,

Scala) Andere (SQL, Quartz, LDAP, JCR, …)

Die wichtigsten Komponenten bean (camel-core) file (camel-core) camel-spring camel-jms camel-cxf camel-http camel-jetty …u.v.m.

Page 26: Webinar Camel Grundlagen Teil 1

© Talend 2011 26

FehlerbehandlungManchmal entstehen während des Ablaufs einer Route Exceptions (oder Faults). Faults sind dauerhafte Fehler (analog wie bei WSDL), die

Wiederholung des Vorgangs würde den gleichen Fehler erzeugen (z.B. der Fehler HTTP 404)

Exceptions sind vorübergehende Fehler. Eine Wiederholung kann erfolgreich sein (z.B. kurzzeitig ausgefallene Services)

Camel bietet eine mächtige und flexible Fehlerbehandlung: DefaultErrorHandler – Keine Wiederholung, Exceptions an

Aufrufer DeadLetterChannel – Fehlerhafte Exchanges werden an

einen Dead Letter Queue gesendet, Wiederholungen konfigurierbar

NoErrorHandler – Keine Fehlerbehandlung LoggingErrorHandler – Nur Protokollierung des Fehlers

Page 27: Webinar Camel Grundlagen Teil 1

Noch mehr Praxis…

Page 28: Webinar Camel Grundlagen Teil 1

© Talend 2011 28

Typische Anwendungsszenarien

Adapter für Protokoll- oder Datenformate (Mediation)

Bestandsapplikationen als Web Services verfügbar machen

Systeme als Proxy/Gateway entkoppeln

Services aggregieren (leichtgewichtige Orchestrierung, technische Geschäftsprozesse)

Zusätzliche Verarbeitungsschritte (z.B. Validierung von Nachrichten)

Testunterstützung (Services simulieren, Traffic erzeugen, usw.)

…u.v.m.!

Page 29: Webinar Camel Grundlagen Teil 1

© 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!

Page 30: Webinar Camel Grundlagen Teil 1

© 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

Page 31: Webinar Camel Grundlagen Teil 1

Vielen Dank!