Apache camel

Click here to load reader

download Apache camel

of 36

  • date post

    19-Jun-2015
  • Category

    Software

  • view

    99
  • download

    1

Embed Size (px)

description

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

Transcript of Apache camel

  • 1. Anwendungs-Integration mit ApacheCamelJava Expertenkreis, 30.10.2014 GedoplanHendrik Jungnitsch, GEDOPLAN GmbH

2. Anwendungs-Integration - ProblemstellungIntegrationsszenariosAnbindung von FremdsystemenIntegrieren von Legacy-SystemenAnwendungen als wiederverwendbare Komponenten(Microservices)Mgliche LsungsanstzeESB (Enterprise Service Bus)SOAPRouting-Engine (z. B. Camel oder Spring Integration)2 3. Anwendungs-Integration TypischeProbleme/AnforderungenVerschiedene TransferprotokolleUnterschiedliche DatenformateSynchrone und asynchrone KommunikationAufteilen und Zusammenfhren von DatenParallelisierungLogging / Monitoring3 4. Enterprise Integration PatternsBuch von Gregor Hohpe und Bobby Woolf (2004)Beschreibt 65 DesignmusterEnterprise Integration Pattern (EIP)Best-Practices fr Lsung von IntegrationsproblemenErleichtern Entwurf von Integrationsanwendungen4 5. Apache CamelRouting EngineImplementiert in JavaBietet technische Umsetzung der EIPApache License 2.0Aktuelle Version: 2.14.05 6. Getting Started Einbindung in ProjektCore-Bibliothek besteht ausRouting-EngineEinigen grundlegenden KommunikationsprotokollenWeitere Module mit gleicher Version wie Core einbinden6org.apache.camelcamel-core2.14.0 7. Getting Started - CamelContextLaufzeitumgebung fr Camel-RoutenFhrt Registry berBeansEndpointsDataTypesBietet Funktionen an wie:Starten / Stoppen von RoutenHinzufgen von RouteBuildern7CamelContext camelContext = new DefaultCamelContext(); 8. Getting Started - RouteBuilderAbstrakte BasisklasseErlaubt das Bauen von Routen mit Hilfe der Java DSL8public class MyRouteBuilder extends RouteBuilder {public void configure() throws Exception {from(file://C:Tempimport).to(file://C:Tempexport);}} 9. Getting Started Erste Anwendung9public 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. RoutingUmsetzung der EIP durch RoutenRouten beschreiben den DatenflussBestehen aus Endpoints und ProcessorsDeklariert mit DSLsJavaXMLScala. . .10 11. EndpointBeschreibt Schnittstellephysikalische und logische AdresseKommunikationsprotokollWeitere EinstellungenWird erzeugt von einer Factory genannt ComponentAnsprechen in Route in der Regel ber URIf i l e : / / C : i m p o r t11ComponentEndpointKonfiguration 12. ConsumerEndpoint fr Konsumieren von DatenImplementierung kapselt Code fr das EmpfangenImmer am Anfang einer RouteIn Java-DSL definiert mit: from(endpoint:uri)12from(file://C:import)PollingConsumerSelectiveConsumerEvent-DrivenConsumer 13. ProducerEndpoint fr Produzieren von DatenImplementierung kapselt Code fr das SendenImmer am Ende einer RouteIn Java-DSL definiert mit: to(endpoint:uri)13to(file://C:export) 14. Components - Beispiele14JMSFTPMailTwitterFacebookJPAXMPPHTTPCXFHazelcastVert.xWebsocket 15. Exchange von MessagesMessage kapselt ausgetauschte DatenIDHeaderBody (Payload)Exchange speichert Informationen ber den AustauschIn-MessageOut-MessageExceptions15 16. ProcessorRoutingbausteineBestimmen Daten-Fluss/Umwandlung zwischen EndpointsArbeiten mit dem Exchange-ObjektUmsetzung von EIPsEigene Processors mglich16 17. DataFormats(Un-) Marshalling von DatenJava SerialisierungJAXBCSV. . .Zustzliche Formate mssen als Dependency hinzugefgtwerden17from(endpoint).unmarshall(new JaxbDataFormat()).someProcessing().marshall(new GsonDataFormat()).to(endpoint) 18. Camel - berblick18Routing-Engine ProcessorsDataFormatsDSLs(Java,XML,Scala,)CamelContext(Runtime)XMLCSVEndpointsSMTPPop3 File FTPMail ComponentsJSONSplitterRouterRoute Routendefinition 19. Routing-Elemente - SplitterAufteilen einer MessageSplitting der PayloadProduzieren neuer Messages mit Einzeldatenstzen19from(endpoint).split(stax(Veranstaltung.class).to(endpoint) 20. Routing-Elemente - ParallelisierungParalleles Weiterverarbeiten von MessagesAngeboten von einigen RoutingbausteinenSplitterMulticastAuch mglich durch entsprechende Endpoints20from(endpoint).split().parallelProcessing().executorService(pool).to(endpoint) 21. Routing-Elemente - AggregatorZusammenfhren/Sammeln von MessagesErgebnis der Aggregation wird neue PayloadZusammenfhren nach Inhalt mglichSammeln beenden nachfrom().aggregate().constant(true).completionTimeout(50000).to()ZeitintervallAnzahl MessagesWeiteren Bedingungen21 22. Routing-Elemente - Bean BindingAufruf von Bean-Methoden aus einer Route herausberreicht Payload als ParameterRckgabewert wird neue Payload22from().beanRef(veranstaltungen , create)from().beanRef(new Veranstaltungen(), create)oderpublic Veranstaltung create(Veranstaltung v) {} 23. Routing-Elemente - WireTapAbzweigen von RoutenOriginal Route unbeeinflusstWeiterarbeiten auf Kopie der Payload mglich23from().wireTap(loggingendpoint).copy().end().to(originaldestination) 24. In-Memory EndpointsErlauben Verknpfen von RoutenCamelContext internSedadirectContext bergreifendvmvm-direct24from(direct:import).split().beanRef()from(file://C:import).to(direct:import).from(ftp://[email protected]).to(direct:import). 25. Routing-Elemente - RouterWeiterverteilen von MessagesInhaltsbasierter RouterFeste Anzahl Regeln/VerzweigungenDynamischer RouterDynamische Datenbasis fr Routingregeln25 26. Programmatisches Senden an RoutenSenden ber ProducerTemplateSynchrones SendenAsynchrones Senden26ProducerTemplate template = camelContext.createProducerTemplate()template.sendBody("direct:Import", payload);Future future = template.asyncSend("direct:import", exchange);Exchange result = future.get(); 27. TypumwandlungDataFormatFr (De)-serialisierenTypeConverterUmwandeln der Zugriffsart(File,byte[],String,InputStream)Translator (Processor, Bean-Methode)Mapping von Businessobjekten27 28. Exception HandlingTry-CatchException ClauseonException(Exception.class).to(endpoint)Deadletter-Channel28from("direct:start").doTry().process(new ProcessorFail()).to("mock:result").doCatch(IOException.class).to("mock:catch").doFinally().to("mock:finally").end();errorHandler(deadLetterChannel(endpoint)) 29. LoggingProblemstellungVielzahl Messages ParallelIn vielen RoutenVerarbeitet von unterschiedlichen ThreadsMapped-Diagnostic-Context (MDC)Speichert Kontextinformationen (routenId, messageId,usw)Informationen ber Pattern in Log-Formattermitausgegeben29 30. MonitoringCamel sammelt statistische Daten fr EndpointsDaten werden per JMX bereitgestelltZustzliche Daten mit neuem (2.14.0) Metrics ComponentEmpfehlung JMX-Konsole: HawtIOBietet Camel Modulbersicht Routen und EndpointsVisualisierung von RoutenDebuggen von Routen30 31. Monitoring - hawtio31 32. CDI-IntegrationKann als Zusatzmodul eingebunden werdenWenn Anwendung in CDI-Container luftCDI-RegistryAutomatisches Registrieren von Routebuildern,TypeConvertersErlaubt Injection von CamelContext, EndpointsAnsprechen von CDI-Beans aus Routen32 33. TestingTestlibraries fr Junit und TestNGMock EndpointsSenden an Routen ber ProducerTemplateNotifyBuilder fr Testen von BedingungenAdviceWith Builder erlaubt Modifizieren bestehenderRouten33 34. Setup SzenariosStandalone JavaSEJavaEE ApplicationserverAls Teil des Deployments (EAR/WAR)Oder als ModulOSGI-Runtimez. B. Apache KarafErlaubt dynamisches Hinzufgen von Endpoints undRouten34 35. DokumentationDokumentation auf Apache-ProjektseiteKonfigurationsmglichkeiten fr EndpunkteVerwendung von RoutingbausteinenViele Code BeispieleDSLsGut geeignet zum NachschlagenBcherTutorials35 36. FazitMchtig und FlexibelLeichtgewichtig Dank ModularisierungVielzahl DSLsJava-DSL Typsicher mit jeder gngigen IDEUntersttzt Vielzahl von DeploymentszenarienIntegrationsthematik bedingte KomplexittEntsprechende Einarbeitungszeit36