advertisement

EIP with Apache Camel

67 %
33 %
advertisement
Information about EIP with Apache Camel
Technology

Published on February 24, 2014

Author: AndreaRodriguez105

Source: slideshare.net

Description

Enterprise Integration Pattern con Apache Camel, talk al JUG Genova 2013
advertisement

Enterprise Integration Patterns con Apache Camel Andrea Torino Rodriguez marzo 2013 andrea.torino.rodriguez@gmail.com

Cosa vi racconto • E.I.P., E.A.I. : di cosa parliamo • Apache Camel architecture • Apache Camel essentials • Il mio Caso d’uso • Riferimenti… • Q&A

E.I.P., E.I.A. : di cosa parliamo 1/6 Enterprise Integration Patterns: “una collezione definita e riconosciuta di approcci risolutivi per casi di integrazione di sistemi software” Enterprise Application Integration: “un (il) processo di integrazione di sistemi software, mediante l’uso di E.I.P.” …spesso anche “la piattaforma utilizzata per attuare il processo di integrazione stesso (piattaforma E.A.I.)”

E.I.P., E.I.A. : di cosa parliamo 2/6 Enterprise Integration Patterns:  Dal libro omonimo di Gregor Hohpe e Bobby Woolf  65 pattern principali individuati  Organizzati in “categorie”        Integration Styles (modalità di integrazione) Channel patterns (sistemi di messaging) Message construction patterns (forme, contenuti dei msg.) Routing patterns (meccanismi di instradamento dei msg.) Transformation patterns (editing dei contenuti dei msg.) Endpoint patterns (comportamento dei client) System management patterns (manutenzione sistemi e.i.)

E.I.P., E.I.A. : di cosa parliamo Enterprise Integration Patterns: + = + 3/6

E.I.P., E.I.A. : di cosa parliamo 4/6 La fonte di riferimento per Enterprise Integration Patterns: http://www.eaipatterns.com Risorse, link, pubblicazioni, talk, downloads vari ed i contatti di Gregor …si pronuncia “hoh-puh” !

E.I.P., E.I.A. : di cosa parliamo Camel fornisce una serie di strumenti per poter facilmente supportare gli “Integration Styles” File transfer Ogni applicazione produce Files contenenti informazioni che altre applicazioni hanno necessità di consumare. Shared database Integrare le applicazioni facendo in modo che salvino i propri dati in un Repository condiviso. 5/6

E.I.P., E.I.A. : di cosa parliamo 6/6 Camel fornisce una serie di strumenti per poter facilmente supportare gli “Integration Styles” Remote procedure invocation Pensare ogni applicazione come un componente avente dati incapsulati. Utilizzare Interfacce per permettere l’interazione con le altre applicazioni. Messaging Usare Messaging per trasferire pacchetti di dati velocemente, frequentemente, in modo asincrono ed affidabile usando formati personalizzati.

Apache Camel architecture 1/15 E‟ difficile definire cosa sia Camel …proviamoci, è stata definita come:  Lightweight Integration Framework  Open-source lightweight Integration Library  Routing and mediation Engine  E.I.P. implementation Library  Open-source Integration Framework based on E.I.P.

Apache Camel architecture 2/15 …Può far comodo definire cosa NON sia Camel:  Enterprise Service Bus (ESB)  Container (ServiceMix/FuseESB, OSGi, Tomcat, Jb oss, Geronimo…)  E.A.I. Platform (per alcuni lo è)  Application server  Commercial

Apache Camel architecture 3/15 La mia definizione preferita di Camel: “una libreria open-source leggera che fornisce strumenti per integrare sistemi disparati che comunicano con protocolli e formati dati differenti fra loro” Può essere ospitato (istanziato, avviato…) in molti container, oppure può essere utilizzato stand-alone. Implementa un potente DSL (Domain Specific Language) fruibile in Java, XML, Scala, Groovy

Apache Camel architecture Architettura di Camel: più in dettaglio • • • • • • • Disegno d’insieme Message model Runtime: CamelContext Route Processor, Component Endpoint Producer, Consumer 4/15

Apache Camel architecture Architettura di Camel: disegno d‟insieme 5/15

Apache Camel architecture 6/15 Architettura di Camel: message model, due astrazioni  org.apache.camel.Message entità base contenente i dati oggetto di trasporto e smistamento  org.apache.camel.Exchange astrazione corrispondente ad uno scambio di messaggi; contiene richiesta e risposta (in/out), esiste durante il routing

Apache Camel architecture 7/15 Architettura di Camel: il Runtime, CamelContext  org.apache.camel.CamelContext rappresenta il “runtime” di Camel, un’unica entità che mantiene il riferimento di tutti i servizi disponibili e ne permette l’inter-comunicazione. CamelContext inplementa l’interfaccia Service (come altri componenti di Camel), con lifecycle start/stop, suspend/resume presenta analogie d’uso con lo Spring ApplicationContext, di cui mantiene anche riferimento (nel Registry) in caso di Spring DSL.

Apache Camel architecture Architettura di Camel: Route  org.apache.camel.Route  Può essere intesa come una “chain of processors”  Disaccoppia Client e Server, Producer e Consumer: • Decide dinamicamente quale server il client invocherà • Fornisce un metodo semplice per inserire extra elaborazioni • Permette lo sviluppo indipendente di Client e Server 8/15

Apache Camel architecture 9/15 Architettura di Camel: Processor  org.apache.camel.Processor interfaccia che rappresenta il concetto di “nodo” in grado di usare, creare o modificare un Exchange in ingresso nell’implementazione a pipeline di Camel, durante il routing un Exchange fluisce da un Processor al successivo molti dei Processor disponibili sono implementazioni E.I.P., ma si possono creare facilmente i propri

Apache Camel architecture 10/15 Architettura di Camel: Component  org.apache.camel.Component essenzialmente rappresentano una factory di Endpoint sono usati per creare degli adapter a sistemi esistenti in Camel sono già presenti più di 80 Component il cui uso varia dal datatransport, al DSL, al data-format… AHC, AMQP, APNS, Atom, AWS (Amazon), ActiveMQ, JMS, Gmail, HTTP, Bean, Cache, Jetty, T witter, EJB, Drools, File, FTP, JPA, Spring Integration, Spring WS, JDBC, GAE, Jclouds, CXF, DNS, FOP, Exec, Event, JBI, IMA P …ecc

Apache Camel architecture 11/15 Architettura di Camel: Endpoint  org.apache.camel.Endpoint astrazione che modella l’estremo di un canale attraverso il quale un sistema può inviare o ricevere messaggi gli Endpoint vengono configurati tramite URI, con la sintassi: [schema]:[context-path]?[options] file:data/incoming?delay=5000

Apache Camel architecture Architettura di Camel: Producer  org.apache.camel.Producer astrazione che modella un entità in grado di creare ed inviare messaggi ad un Endpoint in Camel, quando un messaggio deve essere inviato ad un Endpoint, un Producer sarà in grado di creare un Exchange e popolarlo con i dati compatibili con quel particolare Endpoint 12/15

Apache Camel architecture Architettura di Camel: Consumer  org.apache.camel.Consumer é il servizio che riceve, attraverso un Endpoint, i messaggi prodotti da un Producer ed a sua volta li rende disponibili alla pipeline per essere processati in Camel, esistono due tipi di Consumers:   Event-driven Consumers Polling Consumers 13/15

Apache Camel architecture Architettura di Camel: Event-driven Consumer  org.apache.camel.Consumer il più comune Consumer, poiché spesso associato al paradigma client-server e web-service rappresenta “asynchronous receiver” del mondo E.I.P.; sta in ascolto su un canale in attesa di un messaggio inviato dal client 14/15

Apache Camel architecture 15/15 Architettura di Camel: Polling Consumer  org.apache.camel.Consumer direttamente opposto al precedente, si comporta in maniera attiva, andando a prelevare i dati da una sorgente rappresenta “synchronous receiver” del mondo E.I.P.; attende la fine dell’elaborazione di un messaggio prima di prelevarne un altro dalla sorgente

Apache Camel essentials I fondamentali di Camel: • • • • Routing and mediation basato su regole Configurazione con DSL (e codice) Architettura modulare: pipes and filters Componenti principali 1/25

Apache Camel essentials 2/25 Routing and mediation basato su regole – producer e/o consumer model per ogni endpoint – il default model é asincrono; può essere forzato sincrono – la definizione delle route è basata su URIs esempio: file system message oriented middleware

Apache Camel essentials 3/25 Routing and mediation basato su regole file system from A message oriented middleware filter message send to B

Apache Camel essentials 4/25 Routing and mediation basato su regole file system from(A) message oriented middleware filter(predicate) to(B)

Apache Camel essentials 5/25 Routing and mediation basato su regole file system from(A) message oriented middleware .filter(isWidget) .to(B)

Apache Camel essentials Routing and mediation basato su regole isWidget = xpath(“/quote/product=„widget‟”); from(A).filter(isWidget).to(B); 6/25

Apache Camel essentials 7/25 Configurazione con DSL (e codice) isWidget = xpath(“/quote/product=„widget‟”); (rule) – Java DSL: from(“file:/tmp”).filter(isWidget).to(“jms:myQueue”); – Spring DSL: <route> <from uri=“file:/tmp”/> <filter> <simple>{$isWidget}</simple> <to uri=“jms:myQueue”/> </filter> </route>

Apache Camel essentials 8/25 Configurazione con DSL (e codice) – Scala DSL: from “file:/tmp” -> when (isWidget) -> to “jms:myQueue” – Java code: public class MyExampleRouteBuilder extends RouteBuilder { @Override public void configure() throws Exception { Predicate isWidget = xpath(“/quote/product=„widget‟”); from(“file:/tmp”).filter(isWidget).to(“jms:myQueue”); } }

Apache Camel essentials 9/25 Architettura modulare: pipes and filters – Camel può supportare E.I.P. “pipes and filters” in vari modi from(“direct:A”).to(“bean:B”).to(”direct:C”).to(”jms:outQ”); from(“direct:A”).pipeline(“bean:B”, “direct:C”, ”jms:outQ”);

Apache Camel essentials 10/25 Architettura modulare: pipes and filters – Camel può supportare E.I.P. “pipes and filters” in vari modi <route> <from uri=“direct:A”/> <pipeline> <bean ref=“B” /> <to uri=“direct:C” /> <to uri=“jms:outQ” /> </pipeline> </route> <route> <from uri=“direct:A”/> <bean ref=“B” /> <to uri=“direct:C” /> <to uri=“jms:outQ” /> </route>

Apache Camel essentials 11/25 Architettura modulare: pipes and filters – Camel può supportare E.I.P. “pipes and filters” in vari modi – …decidendo comunque per ogni caso lo scenario d’applicazione <route> <from uri=“direct:A”/> <multicast> <pipeline> <bean ref=“B” /> <bean ref=“C?method=calculate” /> <to uri=“log:myOutputLog” /> </pipeline> <pipeline> <to uri=“direct:audit” /> <to uri=“jms:outQueue” /> </pipeline> </multicast> </route>

Apache Camel essentials 12/25 Componenti principali • • • • • • File Bean Log JMS CXF Mock (camel-core) (camel-core) (camel-core) (camel-jms) (camel-cxf) (camel-core) http://refcardz.dzone.com/refcardz/essential-camel-components

Apache Camel essentials Componenti principali: • Re-inventiamo la ruota ? – – – – File 13/25 (camel-core) polling su location leggi contenuto file invia contenuto alla coda (ad es.) ev. sposta in cartella processed • o usiamo Camel from(“file:/location/path?move=.processed”). to(“jms:outQ”);

Apache Camel essentials Componenti principali: • Qualche esempio File 14/25 (camel-core) from(“file://inbox?preMove=.inprogress&move=.done”). to(“activemq:queue:myQueue”); from(“direct:report”). to(“file://target/reports/?fileName=report.txt”); from(“file://data?exclude=_.*”). to(“bean:handleData?method=processData”); from(“file://data?sortBy=date:file:yyyyMMdd;file:name”). to(“direct:sorted”);

Apache Camel essentials 15/25 Componenti principali: Bean (camel-core) • implementa EIP “service activator” • permette la connessione ed uso di Java Bean/POJO logic a Route Camel • può ad es. invocare un metodo su un Java Object per processare un messaggio

Apache Camel essentials Componenti principali: • Qualche esempio 16/25 Bean (camel-core) public class CreditService { public int getScore(@Xpath(“/Borrower/id”) long id) { // implementation } } <bean id=“enrichService” class=“com.ref.CreditService” /> from(“jms:inQueue”). to(“bean:enrichService?method=getScore”) .to(“jms:outQueue”);

Apache Camel essentials 17/25 Componenti principali: Log (camel-core) • Camel usa SLF4J (Log4J, Logback, JDK Util …) • il Log Component può essere usato per loggare un message Exchange e/o parti di esso – Headers – Body • esiste anche il .log() DSL – può loggare custom expressions Endpoint URI format: log:category[?options]

Apache Camel essentials Componenti principali: • Qualche esempio Log 18/25 (camel-core) from(“direct:incoming”). to(“log:org.apache.camel?level=INFO”). to(“ims:out”); from(“direct:incoming”). to(“log:org.apache.camel?level=INFO&showBody=false”). to(“ims:out”); from(“direct:incoming”). log(LoggingLevel.INFO,”We recive a body: ${body}”) . to(“ims:out”);

Apache Camel essentials 19/25 Componenti principali: JMS (camel-jms) • usato per connettere broker JMS eterogenei • é possibile indirizzare queue e topic; il default è queue • può utilizzare più Consumer anche in manera asincrona Endpoint URI format: jms:[temp:][queue:][topic:]destination[?options]

Apache Camel essentials Componenti principali: • Qualche esempio JMS 20/25 (camel-jms) from(“jms:incoming?concurrentConsumers=5”). bean(myBean). to(“ims:out”); from(“jms:topic:in?clientId=1&durableSubscriptionName=foo”). bean(myBean); from(“direct:incoming”).inOut(). to(”jms:out”) . to(“bean:myBean”);

Apache Camel essentials 21/25 Componenti principali: CXF (camel-cxf) • si integra con Apache CXF WS framework • i Consumers espongono il web-service • i Producers consumano il web-service • si può configurare tramite attributo serviceClass (specificando l’interfaccia JAX-WS) • usando le annotazioni JAX-WS, si possono omettere alcuni parametri della URI Endpoint URI format:   address style cxf:address[?options] bean style cxf:bean:beanName

Apache Camel essentials Componenti principali: • Qualche esempio CXF 22/25 (camel-cxf) from(“cxf:http://localhost:9090/helloWorld?serviceClass=org.hello. HelloWorld&wsdlUrl=wsdl/HelloWorld.wsdl&serviceName=tns:Hell oService”). bean(processWS); from(“cxf:bean:HelloWorldWS”).bean(processWS); <cxf:cxfEndpoint id=“HelloWorldWS” … > <cxf:properties> <entry key=“dataFormat” value=“MESSAGE” /> </cxf:properties> </cxf:cxfEndpoint>

Apache Camel essentials 23/25 Componenti principali: Mock (camel-core) • ottimo strumento per testare le Route • usa i Mock • fornisce un meccanismo di test dichiarativo    Declare Test Assert Endpoint URI format: mock:mockName[?options]

Apache Camel essentials Componenti principali: • Qualche esempio 24/25 Mock (camel-core) from(“direct:incoming”). choice(). when(header(“loanNumber” ).isGreaterThan(12345). to(“mock:specialLoan”). when(header(“loanNumber” ).isLessThan(12345). to(“mock:regularLoan”). to(“mock:outgoing”);

Apache Camel essentials Componenti principali: • Qualche esempio 25/25 Mock (camel-core) // declare, lookup endpoint MockEndpoint resultEndpoint = context. resolveEndpoint(“mock:outgoing”, MockEndpoint.class); // set expectations resultEndpoint.expectedMessageCount(2); // send some messages ... // assert expectations resultEndpoint.assertIsSatisfied();

Il mio Caso d‟uso 1/9 “Migrazione” di un legacy system: • • • • • • Sistemi eterogenei già interoperanti Shared Database integration style (non proprio) Confini architetturali piuttosto indefiniti Contratti definiti non estendibili Comportamenti non documentati Periodo di funzionamento affiancato vecchio-nuovo sistema • Data di consegna certa

Il mio Caso d‟uso Disegno architetturale dell‟esistente …hhhmmm… un tanto monolitico ? 2/9

Il mio Caso d‟uso B A Disegno architetturale dell‟esistente: dettaglio ? 3/9

Il mio Caso d‟uso B A …Emergono particolari “nascosti” …e inquietanti ?! 4/9

Il mio Caso d‟uso “Sulla carta” il disegno è completo… riusciamo così ad individuare • • • • • Webservices in ingresso Code JMS in ingresso Code JMS in uscita RPC con EJB Store su RDBMS …manca interoperatività • Tutti scrivono su DB… e poi ? • Trasformazione/estrazione con task batch SQL • History e notify assenty 5/9

Il mio Caso d‟uso 6/9 Cerchiamo un percorso di disaccoppiamento ragioniamo “event-driven”, con CQRS (Command Query Responsibility Segregation) miglioriamo ! • Tutti i “connettori“ in unico Layer • Paradigma a comandi • Struttura persistenza inalterata • History gratuito, sempre attivo • Facilità integrazioni successive Camel a supporto di connettori e regole di comportamento (routing, mediation ….)

Il mio Caso d‟uso 7/9 Camel nello strato “connettori”  Sostituiamo un contratto alla volta  Velocità di definizione dei WS con CXF (wizard)  Il sistema originale rimane in linea; una opportuna Route continua ad alimentarlo  Otteniamo la ricercata configurazione “pluggable” senza dover investire su software che la supporti  Possiamo scalare orizzontalmente per ogni singolo contratto “da subito”

Il mio Caso d‟uso Camel nello strato “regole di comportamento”  Semplice configurazione, con Spring XML DSL, di routing e trasformazioni  Variazione della configurazione a caldo  Aggiunta, rimozione, stop/start di nuovi servizi (prodotti) gestiti dal sistema a caldo  Implementazione facile e rapida del ns. custom component Command 8/9

Il mio Caso d‟uso Disegno finale layered 9/9

Riferimenti Apache Camel http://camel.apache.org http://refcardz.dzone.com/refcardz/essential-camel-components http://refcardz.dzone.com/refcardz/apache-camel-update http://www.manning.com/ibsen/ (it-ebooks.info) E.I.P. http://www.eaipatterns.com http://refcardz.dzone.com/refcardz/enterprise-integration Blog http://www.davsclaus.com http://www.christianposta.com/blog

Fine Q&A?

Add a comment

Related presentations

Presentación que realice en el Evento Nacional de Gobierno Abierto, realizado los ...

In this presentation we will describe our experience developing with a highly dyna...

Presentation to the LITA Forum 7th November 2014 Albuquerque, NM

Un recorrido por los cambios que nos generará el wearabletech en el futuro

Um paralelo entre as novidades & mercado em Wearable Computing e Tecnologias Assis...

Microsoft finally joins the smartwatch and fitness tracker game by introducing the...

Related pages

Apache Camel: EIP

Enterprise Integration Patterns. Camel supports most of the Enterprise Integration Patterns from the excellent book by Gregor Hohpe and Bobby Woolf.
Read more

Apache Camel: Index

Apache Camel ™ is a versatile open-source integration framework based on known Enterprise Integration Patterns. Camel empowers you to define routing and ...
Read more

Apache Camel Tutorial - Introduction to EIP, Routes ...

10 Responses to “Apache Camel Tutorial – Introduction to EIP, Routes, Components, Testing, and other Concepts” wasylni Says:
Read more

Apache Camel Schulung mit EIP Patterns - predic8

Apache Camel Seminar für Java Entwickler mit jeder Menge Praxis und anschaulichen Beispielen. Die Enterprise Integration Patterns sind zentraler ...
Read more

EIP - Apache Camel - Apache Software Foundation

Enterprise Integration Patterns. Camel supports most of the Enterprise Integration Patterns from the excellent book by Gregor Hohpe and Bobby Woolf.
Read more

Hystrix EIP - Apache Camel - Apache Software Foundation

Hystrix EIP. Available as of Camel 2.18. The hystrix EIP provides integration with Netflix Hystrix to be used as circuit breaker in the Camel routes.
Read more

When to use Apache Camel? | SOA / Cloud / API / Big Data ...

This article shows when to use Apache Camel and when to ... FWIW this is one of the fundamental differences between Camel approach and SI. EIP does not ...
Read more

日本Apache Camelユーザ会 Wiki - osdn.net

日本Apache Camelユーザ会へようこそ. はじめに Apache Camelとは. Apache CamelはApache Software Foundation(ASF)が開発している
Read more

Apache Camel: LogEIP

Log. How can I log processing a Message? Camel provides many ways to log processing a message. Here is just some examples: You can use the Log component ...
Read more

Apache ActiveMQ ™ -- Enterprise Integration Patterns

Enterprise Integration Patterns. Version 5.0 onwards of Apache ActiveMQ comes complete with full support for the Enterprise Integration Patterns (from the ...
Read more