Post on 13-Dec-2014
description
1 1
Solving Enterprise Integration With
Apache Camel
Christian Posta Principal Consultant and Architect 11/09/13
2
• What is Integration?
• What is Apache Camel
• Why Apache Camel?
• Example
• Questions?
Agenda
3
Your speaker Christian Posta Blog: http://christianposta.com/blog
Twitter: @christianposta
Email: christian@redhat.com
ceposta@apache.org
• Principal Consultant and Architect at Red Hat (FuseSource)
• Based in Phoenix, AZ
• Committer on Apache Camel, ActiveMQ, Apollo
• PMC on ActiveMQ
• Author: Essential Camel Components DZone Refcard
4 4
What is Integration?
5
Integration?
6
Integration…
7
Just use one computer.
No integration needed.
8
• Off the shelf? Home Grown? Acquisition? • Platforms • Protocols / Data Formats • Data Formats • Timing • Organizational mismatch
Why is integration hard?
9
Commercial Solutions?
10
Enterprise Service Bus?
11
Enterprise Service Bus…
12
• Protocol mediation • Routing • Transformation • EIPs • Start small, build up • Open Source • Community driven
Extract the heart of ESB
13
• Common language!!!!! • Specific context • Forces at work • Concrete solution • Guidance • Other patterns… • 65 patterns
Patterns FTW!
14 14
What is Apache Camel?
15
Proud parents of Camel
16
Apache Camel Apache Camel is an open-source,
light-weight, integration library.
Use Camel to integrate disparate systems that speak different protocols and data formats
17
• Can carry more weight that other beasts?
• James fancied the cigarettes? • A horse designed by committee?
Why the name Camel?
Concise Application Messaging Exchange Language
18
• Light-weight integration library • Enterprise Integration Patterns • Components • Domain Specific Language • Routing and Mediation (like an ESB?) • Runs in any container (or stand alone)
What is Apache Camel?
19
• An integration library • Routing (content-based, dynamic, rules-engine…) • Mediation (xformations, protocols, wire transports…) • DSL
• Can build an ESB (real ESB.. Not just box in the middle)
• Many options based on Camel! • Fuse ESB / JBoss Fuse • Apache ServiceMix (Karaf + Camel) • Talend, wso2, others… • Not tied to vendor lock-in and commercial licenses!
Not an ESB…per-se…
20 20
Quick Example
21
Quick Example
File System Message Oriented Middleware
22
Quick Example
From A Send to B Filter message
23
Quick Example
from(A) to(B) filter(predicate)
24
Quick Example
from(A) .to(B) .filter(isWidget)
25
Quick Example
isWidget = xpath(“/quote/product = ‘widget’”); from(A) .filter(isWidget). to(B)
26 26
Using Camel
27
Very popular
• Used at top companies in finance, shipping,
retail/e-retail, health care, airline
reservations, etc
• FAA: http://fusesource.com/collateral/131
• Sabre: http://fusesource.com/collateral/139
• CERN: http://fusesource.com/collateral/103
28
Open source
• Apache Software Foundation
• ASL v 2.0 Licensed
• Vibrant community • Jira, mailing list, github
• Lots of contributions! Check out the components!
29
Pipes and Filters
• Step by Step – “Processors” in Camel terminology • Complex processing – “Routes” • Flexible • Testing • Reuse
30
• Defined in Java, XML, Scala, Groovy • Step by step processing of a message:
• Consumer – Listen for incoming message • Zero or more “filters” or Processors • Producer – Send outgoing message
• Number of processing filters, or “Processors” in Camel-speak • EIPs • Tranform, redirect, enrich
Camel Routes
31
Domain Specific Language • Domain specific (integration) • Used to build and describe Camel Routes • Embedded within a general programming language • Java, Spring XML, Scala, Groovy • Take advantage of existing tools • Fluent builders (builder pattern…)
• from(“..”).enrich(“…”).filter(“..”).to(“…”);
32
Java DSL
public class OrderProcessorRouteBuilder extends RouteBuilder { @Override public void configure() throws Exception { from(“activemq:orders”)
.choice() .when(header(“customer-rating”).isEqualTo(“gold”)) .to(“ibmmq:topic:specialCustomer”) .otherwise() .to(“ftp://user@host/orders/regularCustomers”) .end() .log(“received new order ${body.orderId}”) .to(“ibatis:storeOrder?statementType=Insert”); }}
33
Spring XML DSL
<route id=“processOrders”> <from uri=“activemq:orders”/>
<choice> <when> <simple>${header.customer-rating} == ‘gold’</simple> <to uri=“ibmmq:topic:specialCustomer”> </when>
<otherwise> <to uri=“ftp://user@host/orders/regularCustomers” /> </otherwise>
</choice> <log message=“received new order ${body.orderId}”/> <to uri=“ibatis:storeOrder?statementType=Insert”/> </route>
34
• Message Routing • Transformation • Aggregation • Splitting • Resequencer • Routing Slip • Enricher • All from the book!
Enterprise Integration Patterns
35
• Prepackaged bits of code • Highly configurable • Maximum interoperability • Used to build “Adapters” to existing systems • Don’t reinvent the wheel and end up with a box
Components
36
Components • ActiveMQ, Websphere, Weblogic (JMS)
• AMQP
• ATOM feeds
• AWS (S3, SQS, SNS, others)
• Bean
• Cache (EHCache)
• CXF (JAX-WS, JAX-RS)
• EJB
• Drools
• File
• FTP
• Google App Engine
• GMail
• HTTP
• IRC
• jclouds
• JDBC
• Jetty
• MQTT
• MyBatis
• JPA
• Spring Integration
• Spring Web Services
http://camel.apache.org/components.html
To see list of all components!!
37
• URI format: • scheme:localPart[?options]
• scheme: identifies the “component” • localPart: specific to the component • options: is a list of name-value pairs
• Creates endpoints based on configuration • Route endpoint “factories” • Integrate with Camel Routes by creating producer/
consumer endpoints
Components
38
Another Example
public class MyExampleRouteBuilder extends RouteBuilder { @Override public void configure() throws Exception { from(“aws-sqs://demo?defaultVisibilityTimeout=2”) .setHeader(“type”).jsonpath(“$[‘type’]”)
.filter(simple(“${header.type} == ‘login’”) .to(“jms:quote”);
}}
39
Test Framework • Powerful way to test your Camel routes
• http://camel.apache.org/mock.html
• Uses Mocks • Mocks vs Stubs? • http://martinfowler.com/articles/mocksArentStubs.html
• Provides declarative testing mechanism • Declare • Test • Assert
40
Management with HawtIO http://hawt.io
41
Developer Tooling Support Fuse IDE
42
JBoss Fuse (aka Fuse ESB)
43
JBoss Fuse (aka Fuse ESB)
44 44
Live Demo
can be found here: https://github.com/christian-posta/camel-sqs-example
45 45
Resources
46
Dzone Refcardz
• Camel Essential Components • http://refcardz.dzone.com/refcardz/essential-camel-components
• Essential EIP with Apache Camel • http://refcardz.dzone.com/refcardz/enterprise-integration
REFCARDZ
47
Apache Community • http://camel.apache.org • Mailing list: users@camel.apache.org • Nabble Archive:
http://camel.465427.n5.nabble.com/Camel-Users-f465428.html
• Source code: http://svn.apache.org/viewvc/camel/trunk/
• Blogs, Articles, Examples • http://camel.apache.org/articles.html • http://camel.apache.org/user-stories.html
• http://camel.apache.org/user-stories.html • http://www.davsclaus.com • http://www.christianposta.com/blog
48
Apache Camel Books
49
Apache Camel Books
50 50
Questions