getting started with apache camel - jdays 2013
DESCRIPTION
In this session will teach you how to get a good start with Apache Camel. We will introduce you to Apache Camel and how Camel its related to Enterprise Integration Patterns. And how you go about using these patterns in Camel routes, written in Java code or XML files. We will then discuss how you can get started developing with Camel, and how to setup new projects from scratch using Maven and Eclipse tooling. This session includes live demos that show how to build Camel applications in Java, Spring, OSGi Blueprint and alternative languages such as Scala and Groovy. You will also hear what other features Camel provides out of the box, which can make integration much easier for you. We also take a moment to look at hawtio, then hot new web console tooling that allows you to get insight into your running Apache Camel applications, which has among others visual route diagrams with tracing/debugging and profiling capabilities. Before opening up for QA, we will share useful links where you can dive into learning more about Camel.TRANSCRIPT
PUBLIC PRESENTATION | CLAUS IBSEN1
Getting started with Apache Camel
Claus Ibsen (@davsclaus)Principal Software Engineer, Red Hatjdays.se, november 2013
PUBLIC PRESENTATION | CLAUS IBSEN2
Your Speaker
● Principal Software Engineer at Red Hat
● Apache Camel● 5 years working full-time with Camel
● Author of Camel in Action book
● Contact● EMail: [email protected]● Twitter: @davsclaus● Linkedin: davsclaus● Blog: http://davsclaus.com
PUBLIC PRESENTATION | CLAUS IBSEN3
Agenda
● What is Apache Camel?
● A little Example
● Riding Camel
● What's in the Camel box?
● Deploying Camel
● Creating new Camel Projects
● Hawtio – Camel Tooling
● Q and A
PUBLIC PRESENTATION | CLAUS IBSEN4
What is Apache Camel?
● Quote from the website
PUBLIC PRESENTATION | CLAUS IBSEN5
What is Apache Camel?
● Why do we need integration?● Critical for your business to integrate
● Why Integration Framework?● Framework do the heavy lifting● You can focus on business problem● Not "reinventing the wheel"
PUBLIC PRESENTATION | CLAUS IBSEN6
What is Apache Camel?
● What is Enterprise Integration Patterns?
It's a book
PUBLIC PRESENTATION | CLAUS IBSEN7
What is Apache Camel?
● Enterprise Integration Patterns
http://camel.apache.org/eip
PUBLIC PRESENTATION | CLAUS IBSEN8
What is Apache Camel?
● EIP - Content Based Router
PUBLIC PRESENTATION | CLAUS IBSEN9
What is Apache Camel?
from newOrder
PUBLIC PRESENTATION | CLAUS IBSEN10
What is Apache Camel?
from newOrder choice
PUBLIC PRESENTATION | CLAUS IBSEN11
What is Apache Camel?
from newOrder choice when isWidget to widget
PUBLIC PRESENTATION | CLAUS IBSEN12
What is Apache Camel?
from newOrder choice when isWidget to widget otherwise to gadget
PUBLIC PRESENTATION | CLAUS IBSEN13
What is Apache Camel?
from(newOrder) choice when(isWidget) to(widget) otherwise to(gadget)
PUBLIC PRESENTATION | CLAUS IBSEN14
What is Apache Camel?
from(newOrder) .choice() .when(isWidget).to(widget) .otherwise().to(gadget);
PUBLIC PRESENTATION | CLAUS IBSEN15
What is Apache Camel?
Endpoint newOrder = endpoint("activemq:queue:newOrder");
from(newOrder) .choice() .when(isWidget).to(widget) .otherwise().to(gadget);
PUBLIC PRESENTATION | CLAUS IBSEN16
What is Apache Camel?
Endpoint newOrder = endpoint("activemq:queue:newOrder");Predicate isWidget = xpath("/order/product = 'widget'");
from(newOrder) .choice() .when(isWidget).to(widget) .otherwise().to(gadget);
PUBLIC PRESENTATION | CLAUS IBSEN17
What is Apache Camel?
Endpoint newOrder = endpoint("activemq:queue:newOrder");Predicate isWidget = xpath("/order/product = 'widget'");Endpoint widget = endpoint("activemq:queue:widget");Endpoint gadget = endpoint("activemq:queue:gadget");
from(newOrder) .choice() .when(isWidget).to(widget) .otherwise().to(gadget);
PUBLIC PRESENTATION | CLAUS IBSEN18
What is Apache Camel?
● Java Code
public void configure() throws Exception { Endpoint newOrder = endpoint("activemq:queue:newOrder"); Predicate isWidget = xpath("/order/product = 'widget'"); Endpoint widget = endpoint("activemq:queue:widget"); Endpoint gadget = endpoint("activemq:queue:gadget");
from(newOrder) .choice() .when(isWidget).to(widget) .otherwise().to(gadget) .end(); }
PUBLIC PRESENTATION | CLAUS IBSEN19
What is Apache Camel?
● Java Codeimport org.apache.camel.Endpoint;import org.apache.camel.Predicate;import org.apache.camel.builder.RouteBuilder;
public class MyRoute extends RouteBuilder {
public void configure() throws Exception { Endpoint newOrder = endpoint("activemq:queue:newOrder"); Predicate isWidget = xpath("/order/product = 'widget'"); Endpoint widget = endpoint("activemq:queue:widget"); Endpoint gadget = endpoint("activemq:queue:gadget");
from(newOrder) .choice() .when(isWidget).to(widget) .otherwise().to(gadget) .end(); }}
PUBLIC PRESENTATION | CLAUS IBSEN20
What is Apache Camel?
● Camel Java DSL
import org.apache.camel.builder.RouteBuilder;
public class MyRoute extends RouteBuilder {
public void configure() throws Exception { from("activemq:queue:newOrder") .choice() .when(xpath("/order/product = 'widget'")) .to("activemq:queue:widget") .otherwise() .to("activemq:queue:gadget") .end(); }}
PUBLIC PRESENTATION | CLAUS IBSEN21
What is Apache Camel?
● Camel XML DSL
<route> <from uri="activemq:queue:newOrder"/> <choice> <when> <xpath>/order/product = 'widget'</xpath> <to uri="activemq:queue:widget"/> </when> <otherwise> <to uri="activemq:queue:gadget"/> </otherwise> </choice> </route>
PUBLIC PRESENTATION | CLAUS IBSEN22
What is Apache Camel?
● Endpoint as URIs
<route> <from uri="file:inbox/orders"/> <choice> <when> <xpath>/order/product = 'widget'</xpath> <to uri="activemq:queue:widget"/> </when> <otherwise> <to uri="activemq:queue:gadget"/> </otherwise> </choice> </route>
use file instead
PUBLIC PRESENTATION | CLAUS IBSEN23
What is Apache Camel?
● Endpoint as URIs
<route> <from uri="file:inbox/orders?delete=true"/> <choice> <when> <xpath>/order/product = 'widget'</xpath> <to uri="activemq:queue:widget"/> </when> <otherwise> <to uri="activemq:queue:gadget"/> </otherwise> </choice> </route>
parameters
PUBLIC PRESENTATION | CLAUS IBSEN24
What is Apache Camel?
● Camel's Architecture
PUBLIC PRESENTATION | CLAUS IBSEN25
What is Apache Camel?
120+ Components
PUBLIC PRESENTATION | CLAUS IBSEN26
What is Apache Camel?
120+ Components
PUBLIC PRESENTATION | CLAUS IBSEN27
What is Apache Camel?
● Summary● Integration Framework● Enterprise Integration Patterns (EIP)● Routing (using DSL)● Easy Configuration (endpoint as uri's)● No Container Dependency● A lot of components
PUBLIC PRESENTATION | CLAUS IBSEN28
Agenda
● What is Apache Camel?
● A little Example
● Riding Camel
● What's in the Camel box?
● Deploying Camel
● Creating new Camel Projects
● Hawtio – Camel Tooling
● Q and A
PUBLIC PRESENTATION | CLAUS IBSEN29
A Little Example
● File Copier Example
PUBLIC PRESENTATION | CLAUS IBSEN30
A Little Example
● File Copier Example
PUBLIC PRESENTATION | CLAUS IBSEN31
A Little Example
● File Copier Example
PUBLIC PRESENTATION | CLAUS IBSEN32
A Little Example
● File Copier Example
PUBLIC PRESENTATION | CLAUS IBSEN33
A Little Example
● File Copier Example
PUBLIC PRESENTATION | CLAUS IBSEN34
Agenda
● What is Apache Camel?
● A little Example
● Riding Camel
● What's in the Camel box?
● Deploying Camel
● Creating new Camel Projects
● Hawtio – Camel Tooling
● Q and A
PUBLIC PRESENTATION | CLAUS IBSEN35
Riding Camel
● Downloading Apache Camel● zip/tarball (approx 8mb)
http://camel.apache.org
PUBLIC PRESENTATION | CLAUS IBSEN36
Riding Camel
● Using Command Shell● Requires:
Apache Maven
● From Eclipse
PUBLIC PRESENTATION | CLAUS IBSEN37
Riding Camel
● Console Example
● cd examples/camel-example-console
● mvn compile exec:java
PUBLIC PRESENTATION | CLAUS IBSEN38
Riding Camel
● Twitter Example
● cd examples/camel-example-twitter-websocket
● mvn compile exec:java http://localhost:9090/index.html
PUBLIC PRESENTATION | CLAUS IBSEN39
Riding Camel
● More examples ...
... and further details at website.
http://camel.apache.org/examples
PUBLIC PRESENTATION | CLAUS IBSEN40
Agenda
● What is Apache Camel?
● A little Example
● Riding Camel
● What's in the box?
● Deploying Camel
● Creating new Camel Projects
● Hawtio – Camel Tooling
● Q and A
PUBLIC PRESENTATION | CLAUS IBSEN41
What's in the box?
PUBLIC PRESENTATION | CLAUS IBSEN42
What's in the box?
● Enterprise Integration Patterns
http://camel.apache.org/eip
PUBLIC PRESENTATION | CLAUS IBSEN43
What's in the box?
● Splitter EIP
PUBLIC PRESENTATION | CLAUS IBSEN44
What is Apache Camel?
120+ Components
PUBLIC PRESENTATION | CLAUS IBSEN45
What is Apache Camel?
19 Data Formats
PUBLIC PRESENTATION | CLAUS IBSEN46
What is Apache Camel?
15 Expression Languages
PUBLIC PRESENTATION | CLAUS IBSEN47
What is Apache Camel?
5+ DSL in multiple languages● Java DSL● XML DSL (Spring and OSGi Blueprint)● Groovy DSL● Scala DSL● Kotlin DSL (work in progress)
PUBLIC PRESENTATION | CLAUS IBSEN48
What is Apache Camel?
Test Kit● camel-test camel-test-spring● camel-test-blueprint camel-testng
PUBLIC PRESENTATION | CLAUS IBSEN49
What is Apache Camel?
Management● JMX● REST (w/ Jolokia)
PUBLIC PRESENTATION | CLAUS IBSEN50
What is Apache Camel?
Tooling – Web console - HawtIO
http://hawt.io
PUBLIC PRESENTATION | CLAUS IBSEN51
What is Apache Camel?
Tooling – Eclipse Plugin – Fuse IDE
http://github.com/fusesource/fuseide
PUBLIC PRESENTATION | CLAUS IBSEN52
What is Apache Camel?
Error Handling
PUBLIC PRESENTATION | CLAUS IBSEN53
What is Apache Camel?
try .. catch style
PUBLIC PRESENTATION | CLAUS IBSEN54
What is Apache Camel?
Dead Letter Channel (EIP style)
PUBLIC PRESENTATION | CLAUS IBSEN55
Agenda
● What is Apache Camel?
● A little Example
● Riding Camel
● What's in the Camel box?
● Deploying Camel
● Creating new Camel Projects
● Hawtio – Camel Tooling
● Q and A
PUBLIC PRESENTATION | CLAUS IBSEN56
Deploying Camel
● Deployment Strategy● No Container Dependency● Lightweight & Embeddable
● Deployment Options● Standalone● WAR● Spring● JEE● OSGi● Cloud
PUBLIC PRESENTATION | CLAUS IBSEN57
Camel as a Client
● Java Client Application (no routes)
● Example● Upload a file to a FTP server
PUBLIC PRESENTATION | CLAUS IBSEN58
Agenda
● What is Apache Camel?
● A little Example
● Riding Camel
● What's in the Camel box?
● Deploying Camel
● Creating new Camel Projects
● Hawtio – Camel Tooling
● Q and A
PUBLIC PRESENTATION | CLAUS IBSEN59
Creating new Camel Projects
● Using Command Shell
● From Eclipse
PUBLIC PRESENTATION | CLAUS IBSEN60
Creating new Camel Projects
● Maven Archetypes
PUBLIC PRESENTATION | CLAUS IBSEN61
Creating new Camel Projects
● camel-archetype-blueprint
PUBLIC PRESENTATION | CLAUS IBSEN62
Creating new Camel Projects
● Importing into Eclipse
Existing Maven Project
PUBLIC PRESENTATION | CLAUS IBSEN63
Agenda
● What is Apache Camel?
● A little Example
● Riding Camel
● What's in the Camel box?
● Deploying Camel
● Creating new Camel Projects
● Hawtio – Camel Tooling
● Q and A
PUBLIC PRESENTATION | CLAUS IBSEN64
Hawtio – Camel Tooling
http://hawt.io
PUBLIC PRESENTATION | CLAUS IBSEN65
Agenda
● What is Apache Camel?
● A little Example
● Riding Camel
● What's in the Camel box?
● Deploying Camel
● Creating new Camel Projects
● Hawtio – Camel Tooling
● Q and A
PUBLIC PRESENTATION | CLAUS IBSEN66
Where do I get more information?
● Best Article covering what Apache Camel is● http://java.dzone.com/articles/open-source-integration-
apache
Link to article from “Getting Started”
PUBLIC PRESENTATION | CLAUS IBSEN67
Where do I get more information?
● Try Camel Examples● http://camel.apache.org/examples.html
● Read other blogs and articles● http://camel.apache.org/articles.html
● Use the “search box” on the Camel front page
PUBLIC PRESENTATION | CLAUS IBSEN68
Where do I get more information?
● Use the mailing list / forum● http://camel.apache.org/mailing-lists.html
● Use stackoverflow● http://stackoverflow.com/questions/tagged/apache-camel
PUBLIC PRESENTATION | CLAUS IBSEN69
Where do I get more information?
● Buy the Camel in Action book
http://manning.com/ibsen/
Use code ...camel40
… for 40% discount
PUBLIC PRESENTATION | CLAUS IBSEN70
Any Questions ?
● Contact● EMail: [email protected]● Twitter: @davsclaus● Linkedin: davsclaus● Blog: http://davsclaus.com