Apache Camel ( Martin Polovinčák )
Transkript
Apache Camel ( Martin Polovinčák )
Apache Camel
Úvod do EIP a použití frameworku Apache Camel
Prezentace pro CZJUG
1
§ Úvod do problému
§ EIP, nástroje, které se používají
§ Apache Camel
§ Architektura
§ Spring
§ Testování – Junit
§ Optimalizace
§ Postřehy
Apache Camel / Úvod do EIP a použití frameworku Apache Camel
Témata
2
§ Aplikace na sobě nezávisí
§ Každá aplikace se zaměřuje na specifickou funkcionalitu
§ Delegace činností mezi aplikacemi
§ Komunikace je asynchronní, aplikace nečekají na odpověď
§ Než je k dispozici odpověď, pracuje aplikace na dalších
požadavcích
Příklad: “Messagingové řešení”
Apache Camel / Úvod do EIP a použití frameworku Apache Camel
Kdy mluvíme o integraci aplikací?
3
§ Přenos souborů
§ Sdílená databáze
§ RMI – vzdálené volání procedur
§ Messaging
Apache Camel / Úvod do EIP a použití frameworku Apache Camel
Pomocí čeho integrovat?
4
§ Channels – kanály zpráv (fronta, téma)
§ Messages – zprávy
§ Pipes and Filters – trubky a filtry
§ Routing – směrování
§ Transformation – transformace
§ Endpoints – napojení na externí zdroje, protokoly
Apache Camel / Úvod do EIP a použití frameworku Apache Camel
Messaging – některé pojmy z EIP
5
EIP
§ Sjednocení terminologie
§ Popis jednotlivých částí integračního řešení, které se často
opakují
§ Pomoc při návrhu
§ Vzorů je hodně, nemá smysl je procházet…
Apache Camel / Úvod do EIP a použití frameworku Apache Camel
§ Enterprise Integration Patterns
§ Hlavní úkol:
6
Nástroje k implementaci EIP
§ Apache Camel – podpora Springu, příznivá křivka učení
§ Spring Integration – těží z rozšíření a funkčnosti Springu
§ MSMQ/.NET
§ TIBCO
§ MS BizTalk
Apache Camel / Úvod do EIP a použití frameworku Apache Camel
§ JMS/Java
7
§ Režie frameworku v použitém řešení je velmi malá
§ Nezávislost na protokolu/zdroji
§ Implementován velký počet integračních vzorů
§ Velmi dobře zdokumentovaný
§ Velmi jednoduše rozšiřitelný
§ Relativně jednoduchý – příznivá křivka učení
Apache Camel / Úvod do EIP a použití frameworku Apache Camel
Camel Framework
8
Camel Framework
Architektura:
§ Integruje protokol nebo externí zdroj
§ Programátorsky: factory pro určitý typ endpointu
§ Endpoint – produkuje/konzumuje data
§ Router – obaluje pravidla pro směrování zpráv, endpointy
Apache Camel / Úvod do EIP a použití frameworku Apache Camel
§ Komponenta
9
Apache Camel / Úvod do EIP a použití frameworku Apache Camel
Camel Framework
10
Camel deployment
§ Spring IoC kontejner
§ Samostatně
§ OSGi kontejner
Apache Camel / Úvod do EIP a použití frameworku Apache Camel
§ Možnosti nasazení:
11
§ Transakce
§ XML konfigurace
§ Bean Integration
§ Dependency Injection – camel context/spring beany
§ JMS komponenta – postavena na JMS Template
Apache Camel / Úvod do EIP a použití frameworku Apache Camel
Camel a Spring
12
§ Integrují do jádra routeru určitý protokol nebo zdroj
§ Z pohledu programátora – factory pro vytvoření endpointu
§ Camel obsahuje mnoho hotových komponent
§ JMS komponenta (messaging)
§ CXF komponenta (web services)
§ File komponenta (soubory, adresáře)
§ Bean komponenta (beany nebo POJO)
§ Mock komponenta (testování)
§ a další…
Apache Camel / Úvod do EIP a použití frameworku Apache Camel
Camel komponenty
13
§ Vytvářeny komponentami
§ Konverze vstupu na vnitřní formát frameworku
§ Konverze vnitřního formátu frameworku na výstupní
§ Odkazuje se na ně pomocí URI, charakteristický prefix
§ jms – JMS koponenta (JMS messaging)
§ cxf – CXF komponenta (web services)
§ file – komponenta pro práci se soubory
§ mock – testování
Apache Camel / Úvod do EIP a použití frameworku Apache Camel
Camel endpoint
14
Camel endpoint
§ Varianta definice endpointu v xml
§ Odkaz na endpoint pomocí ref=id
<camel:endpoint id="input” uri="jms:input@z3smq_3001" />!
Apache Camel / Úvod do EIP a použití frameworku Apache Camel
!
15
Camel router
§ Definice chování routeru
§ Definice směrování zpráv
§ Definice endpointů
§ Kontext může být definován pomocí
§ XML
§ Java kódu
§ XML a Java kódu
Apache Camel / Úvod do EIP a použití frameworku Apache Camel
§ Router je reprezentován CamelContext (kontext) objektem
§ Kontext obsahuje:
16
Camel router – XML konifgurace
<camel:camelContext id="camel”>!
!<camel:route>!
!
!<camel:from uri="jms:input@z3smq_3001" />!
!
!<camel:bean ref=”MujProcesor" />!
!
!<camel:to uri="jms:output@z3smq_3001" />!
!</camel:route>!
</camel:camelContext>!
Apache Camel / Úvod do EIP a použití frameworku Apache Camel
§ Příklad kontextu definovaného pomocí XML:
17
Camel router – konfigurace pomocí Java kódu
§ Příklad cesty definované pomocí Java kódu
RouteBuilder builder = new RouteBuilder() {!
public void configure() {!
!from("jms:input@z3smq_3001")!
!
!.bean(mujProcesor)!
!
!.to("jms:output@z3smq_3001");!
}!
};!
Apache Camel / Úvod do EIP a použití frameworku Apache Camel
!
18
@Override!
public void process(Exchange exchange) throws Exception {!
!Message message = exchange.getIn();!
!MRPayload mrPayload = (MRPayload) message.getBody();!
!BAPayload baPayload = new BAPayload();!
!...!
!message.setBody(baPayload);!
!exchange.setOut(message);!
!
!if (exchange.isFailed()) {!
!
!Exception exception = exchange.getException();
!
!
!logger.error(exception);!
!}!
}!
Apache Camel / Úvod do EIP a použití frameworku Apache Camel
Camel procesor
19
Camel – směrování zpráv
RouteBuilder builder = new RouteBuilder() {!
public void configure() {!
from(”jms:input")!
.filter(header("foo").isEqualTo("bar"))!
.to(”jms:output");!
}!
};!
Apache Camel / Úvod do EIP a použití frameworku Apache Camel
§ Filtrování – filtr zahodí zprávu, která nevyhovuje podmínce
20
Camel – směrování zpráv
RouteBuilder builder = new RouteBuilder() {!
public void configure() {!
!((ChoiceDefinition) from(”jms:input")!
!
!.choice()!
!
!.when(header("mode").isEqualTo("NORMAL"))!
!
!
!.to(jms:normalChannel))!
!
!.when(header("mode").isEqualTo("PRIORITY"))!
!
!
!.to(jms:priorityChannel);!
}!
};!
Apache Camel / Úvod do EIP a použití frameworku Apache Camel
§ Podmínky
21
Camel Exception Handling
fronta
§ Lze zakázat znovuposlání zprávy (redelivery policy)
§ Znovuposlání začíná tam, kde se stala výjimka (zpráva
neputuje od začátku cesty)
§ Použít lze jak XML deklaraci, tak i Java kód
Apache Camel / Úvod do EIP a použití frameworku Apache Camel
§ Možnost definovat, co se stane při výskytu výjimky
§ Příjemce zprávy, která způsobila výjimku, může být procesor i
22
Camel Exception Handling
<camel:onException>!
!<camel:exception>java.lang.Exception</camel:exception>
!
!<camel:redeliveryPolicy disableRedelivery="true" />!
!<camel:process ref="exceptionHandler" />!
!<camel:rollback markRollbackOnly="true" />!
</camel:onException>!
!
§ Příklad definice v Java kódu
onException(IOException.class).maximumRedeliveries(3);
Apache Camel / Úvod do EIP a použití frameworku Apache Camel
§ Příklad definice v XML :
23
Testování
§ Vyplatí se použít Spring
@RunWith(SpringJUnit4ClassRunner.class)!
@ContextConfiguration(locations =
!"classpath:testErrorHandlerContext.xml”)!
public class RedeliveryProcessorTest {!
. . .!
!
§ Definice proměnných
@EndpointInject(ref = "delayer”)!
protected MockEndpoint delayer;!
Apache Camel / Úvod do EIP a použití frameworku Apache Camel
§ Deklarace
24
@Test!
public void testMsgProcessed () throws Exception {!
!delayer.reset();!
!Message msg = new DefaultMessage();!
!Exchange exchange = delayer!
!
!
!.createExchange(ExchangePattern.InOnly);
!
!exchange.setIn(msg);!
!redeliveryProcessor.process(exchange);!
!delayer.expectedMessageCount(1);!
!delayer.assertIsSatisfied();!
}!
Apache Camel / Úvod do EIP a použití frameworku Apache Camel
Testování
25
Camel – možnosti optimalizace
§ Agregace
“balících”
§ Poměr cena/výkon – velké zrychlení chodu aplikace
§ Dvě varianty:
§ Bez perzistence
§ S perzistencí
§ Nevýhoda – nefunguje dobře s XA transakcemi
Apache Camel / Úvod do EIP a použití frameworku Apache Camel
§ Přenos informací je “drahý”, informace se seskupí a přenáší v
26
Camel – možnosti optimalizace
!
Processor checker = (Processor) (new BACheckerMR()); !
!
from("jms:input@z3smq_3001”)!
!.process(checker)!
!.threads(5)!
!.to(jms:output@z3smq_3001);!
Apache Camel / Úvod do EIP a použití frameworku Apache Camel
§ Zpracování ve více vláknech
27
Camel – možnosti optimalizace
§ Round Robin
§ Random
§ Sticky (podle jsessionId, JMSXGroupId…)
§ Failover
§ Weighted Round Robin
§ Weighted Random
Apache Camel / Úvod do EIP a použití frameworku Apache Camel
§ Load balancing – distribuce zátěže na více endpointů
28
Camel – možnosti optimalizace
<camel:multicast>!
!<camel:loadBalance>!
!
!<camel:roundRobin />!
!
!<camel:process ref="journalingCore1" />!
!
!<camel:process ref="journalingCore2" />!
!</camel:loadBalance>!
</camel:multicast>!
Apache Camel / Úvod do EIP a použití frameworku Apache Camel
§ Příklad definice v XML – rozhazuje zprávy do dvou procesorů
29
Postřehy
§ Procesor – metoda process() – I když běží ve vláknech,
§ Agregátor – XA transakce – nefunguje úplně jak by měl
§ InOnly typ JMS endpointu – rychlost zapisování, obsah je
stejný objekt
§ JBOSS – bez jboss-camel knihovny nefunguje správně,
classloader resolving
§ JBOSS – transakční manažer/XA transakce a JMS
§ Spring backend aplikace – použití RAR
Apache Camel / Úvod do EIP a použití frameworku Apache Camel
instance je jen jedna – pozor na proměnné
30
§ http://www.enterpriseintegrationpatterns.com/
§ http://camel.apache.org/
§ http://fusesource.com
Apache Camel / Úvod do EIP a použití frameworku Apache Camel
Odkazy na další informace
31
INDRA Czech Repuiblic s.r.o.
Karolinská 1
186 00, Prague
Czech Republic
T +420 246 085 700
F +420 246 085 701
www.indra.cz
Apache Camel / Úvod do EIP a použití frameworku Apache Camel
Martin Polovinčák
Telco
[email protected]
32
Podobné dokumenty
JavaHelp Základní popis systému JavaHelp Soucástí vetšiny
poskytuje vývojárum a autorum standardní, plnohodnotný a snadno použitelný systém pro
prezentování on-line informací uživatelum aplikací napsaných v Jave. Tento systém je standardním rozšírením Jav...
Michal Klodner
Michal Klodner
Selected performances, publishing work and papers
scientific research
Metodika výuky a formy vědecké spolupráce s použitím audiovizuálních archívů v mezioborovém
prostředí, 2008 – 20...
Svět BVE - Brno BVE Website
alespoň kontrolu nad tím co stavíte.
Využít ho můžou i uživatelé, protože
pohled na trať z různých úhlů je někdy
opravdu
zajímavý.
Upozorňuji,
že
program jde použít pouze při tvorbě a
prohlížení tr...
Podejme pomocnou ruku
Jednohubky