Webinar Apache Camel Grundlagen Teil 2

Post on 05-Dec-2014

2.208 views 4 download

description

- Testing- Debugging- Enterprise Integration Patterns- Larger example

Transcript of Webinar Apache Camel Grundlagen Teil 2

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 webinar@talend.com 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 webinar@talend.com 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!