Getting Started with Apache Camel - Malmo JUG - March 2013
- 1. Getting Started with Apache Camel
Claus Ibsen (@davsclaus)
Principal Software Engineer, Red Hat
Javaforum Malmo, march 2013
1 PUBLIC PRESENTATION | CLAUS IBSEN
- 2. Agenda
● What is Apache Camel?
● A little Example
● Riding Camel
● What's in the Camel box?
● Deploying Camel
● Creating new Camel Projects
● Q and A
2 PUBLIC PRESENTATION | CLAUS IBSEN
- 3. Your Speaker
● Principal Software Engineer at Red Hat
● Apache Camel
● 5 years working with Camel
● Author of Camel in Action book
● Contact
● EMail: cibsen@redhat.com
● Twitter: @davsclaus
● Blog: http://davsclaus.com
3 PUBLIC PRESENTATION | CLAUS IBSEN
- 4. What is Apache Camel?
● Quote from the website
4 PUBLIC PRESENTATION | CLAUS IBSEN
- 5. 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"
5 PUBLIC PRESENTATION | CLAUS IBSEN
- 6. What is Apache Camel?
● What is Enterprise Integration Patterns?
It's a book
6 PUBLIC PRESENTATION | CLAUS IBSEN
- 7. What is Apache Camel?
● Enterprise Integration Patterns
http://camel.apache.org/eip
7 PUBLIC PRESENTATION | CLAUS IBSEN
- 8. What is Apache Camel?
● EIP - Content Based Router
8 PUBLIC PRESENTATION | CLAUS IBSEN
- 9. What is Apache Camel?
from newOrder
9 PUBLIC PRESENTATION | CLAUS IBSEN
- 10. What is Apache Camel?
from newOrder
choice
10 PUBLIC PRESENTATION | CLAUS IBSEN
- 11. What is Apache Camel?
from newOrder
choice
when isWidget to widget
11 PUBLIC PRESENTATION | CLAUS IBSEN
- 12. What is Apache Camel?
from newOrder
choice
when isWidget to widget
otherwise to gadget
12 PUBLIC PRESENTATION | CLAUS IBSEN
- 13. What is Apache Camel?
from(newOrder)
choice
when(isWidget) to(widget)
otherwise to(gadget)
13 PUBLIC PRESENTATION | CLAUS IBSEN
- 14. What is Apache Camel?
from(newOrder)
.choice()
.when(isWidget).to(widget)
.otherwise().to(gadget);
14 PUBLIC PRESENTATION | CLAUS IBSEN
- 15. What is Apache Camel?
Endpoint newOrder = endpoint("activemq:queue:newOrder");
from(newOrder)
.choice()
.when(isWidget).to(widget)
.otherwise().to(gadget);
15 PUBLIC PRESENTATION | CLAUS IBSEN
- 16. 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);
16 PUBLIC PRESENTATION | CLAUS IBSEN
- 17. 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);
17 PUBLIC PRESENTATION | CLAUS IBSEN
- 18. 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();
}
18 PUBLIC PRESENTATION | CLAUS IBSEN
- 19. What is Apache Camel?
● Java Code
import 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();
}
}
19 PUBLIC PRESENTATION | CLAUS IBSEN
- 20. 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();
}
}
20 PUBLIC PRESENTATION | CLAUS IBSEN
- 21. 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>
21 PUBLIC PRESENTATION | CLAUS IBSEN
- 22. What is Apache Camel?
use file instead
● 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>
22 PUBLIC PRESENTATION | CLAUS IBSEN
- 23. What is Apache Camel?
parameters
● 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>
23 PUBLIC PRESENTATION | CLAUS IBSEN
- 24. What is Apache Camel?
● Camel's Architecture
24 PUBLIC PRESENTATION | CLAUS IBSEN
- 25. What is Apache Camel?
120+ Components
25 PUBLIC PRESENTATION | CLAUS IBSEN
- 26. What is Apache Camel?
120+ Components
26 PUBLIC PRESENTATION | CLAUS IBSEN
- 27. What is Apache Camel?
● Summary
● Integration Framework
● Enterprise Integration Patterns (EIP)
● Routing (using DSL)
● Easy Configuration (endpoint as uri's)
● Payload Agnostic
● No Container Dependency
● A lot of components
27 PUBLIC PRESENTATION | CLAUS IBSEN
- 28. Agenda
● What is Apache Camel?
● A little Example
● Riding Camel
● What's in the Camel box?
● Deploying Camel
● Creating new Camel Projects
● Extending Camel
● Q and A
28 PUBLIC PRESENTATION | CLAUS IBSEN
- 34. Agenda
● What is Apache Camel?
● A little Example
● Riding Camel
● What's in the Camel box?
● Deploying Camel
● Creating new Camel Projects
● Q and A
34 PUBLIC PRESENTATION | CLAUS IBSEN
- 35. Riding Camel
● Downloading Apache Camel
● zip/tarball (approx 14mb)
http://camel.apache.org
35 PUBLIC PRESENTATION | CLAUS IBSEN
- 36. Riding Camel
● Using Command Shell
● Requires: Apache Maven
● From Eclipse
36 PUBLIC PRESENTATION | CLAUS IBSEN
- 37. Riding Camel
● Console Example
● cd examples/camel-example-console
● mvn compile exec:java
37 PUBLIC PRESENTATION | CLAUS IBSEN
- 38. Riding Camel
● Twitter Example
● cd examples/camel-example-twitter-websocket
● mvn compile exec:java http://localhost:9090/index.html
38 PUBLIC PRESENTATION | CLAUS IBSEN
- 39. Riding Camel
● More examples ...
... and further details at website.
http://camel.apache.org/examples
39 PUBLIC PRESENTATION | CLAUS IBSEN
- 40. Agenda
● What is Apache Camel?
● A little Example
● Riding Camel
● What's in the box?
● Deploying Camel
● Creating new Camel Projects
● Q and A
40 PUBLIC PRESENTATION | CLAUS IBSEN
- 42. What's in the box?
● Enterprise Integration Patterns
http://camel.apache.org/eip
42 PUBLIC PRESENTATION | CLAUS IBSEN
- 43. What's in the box?
● Splitter EIP
43 PUBLIC PRESENTATION | CLAUS IBSEN
- 44. What is Apache Camel?
120+ Components
44 PUBLIC PRESENTATION | CLAUS IBSEN
- 45. What is Apache Camel?
19 Data Formats
45 PUBLIC PRESENTATION | CLAUS IBSEN
- 46. What is Apache Camel?
15 Expression Languages
46 PUBLIC PRESENTATION | CLAUS IBSEN
- 47. 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)
47 PUBLIC PRESENTATION | CLAUS IBSEN
- 48. What is Apache Camel?
Test Kit
● camel-test camel-test-spring
● camel-test-blueprint camel-testng
48 PUBLIC PRESENTATION | CLAUS IBSEN
- 49. What is Apache Camel?
Management
● JMX
● REST
49 PUBLIC PRESENTATION | CLAUS IBSEN
- 50. What is Apache Camel?
Tooling – Web console - HawtIO
http://hawt.io
50 PUBLIC PRESENTATION | CLAUS IBSEN
- 51. What is Apache Camel?
Tooling – Eclipse Plugin – Fuse IDE
http://github.com/fusesource/fuseide
51 PUBLIC PRESENTATION | CLAUS IBSEN
- 52. What is Apache Camel?
Error Handling
52 PUBLIC PRESENTATION | CLAUS IBSEN
- 53. What is Apache Camel?
try .. catch style
53 PUBLIC PRESENTATION | CLAUS IBSEN
- 54. What is Apache Camel?
Dead Letter Channel (EIP style)
54 PUBLIC PRESENTATION | CLAUS IBSEN
- 55. What is Apache Camel?
The Rest
● Interceptors
● Security
● Route Policy
● Type Converters
● Transaction
● Compensation as rollback
● Asynchronous non-blocking routing engine
● Thread management
● Maven Tooling
● ... and much more
55 PUBLIC PRESENTATION | CLAUS IBSEN
- 56. Agenda
● What is Apache Camel?
● A little Example
● Riding Camel
● What's in the Camel box?
● Deploying Camel
● Creating new Camel Projects
● Extending Camel
● Q and A
56 PUBLIC PRESENTATION | CLAUS IBSEN
- 57. Deploying Camel
● Deployment Strategy
● No Container Dependency
● Lightweight & Embeddable
● Deployment Options
● Standalone
● WAR
● Spring
● JEE
● OSGi
● Cloud
57 PUBLIC PRESENTATION | CLAUS IBSEN
- 58. Camel as a Client
● Java Client Application (no routes)
● Example
● Upload a file to a FTP server
58 PUBLIC PRESENTATION | CLAUS IBSEN
- 59. Agenda
● What is Apache Camel?
● A little Example
● Riding Camel
● What's in the Camel box?
● Deploying Camel
● Creating new Camel Projects
● Q and A
59 PUBLIC PRESENTATION | CLAUS IBSEN
- 60. Creating new Camel Projects
● Using Command Shell
● From Eclipse
60 PUBLIC PRESENTATION | CLAUS IBSEN
- 62. Creating new Camel Projects
● camel-archetype-blueprint
62 PUBLIC PRESENTATION | CLAUS IBSEN
- 63. Creating new Camel Projects
● Importing into Eclipse
Existing Maven Project
63 PUBLIC PRESENTATION | CLAUS IBSEN
- 64. Creating new Camel Projects
● Testing Camel Projects
● ... from inside Eclipse
64 PUBLIC PRESENTATION | CLAUS IBSEN
- 65. Agenda
● What is Apache Camel?
● A little Example
● Riding Camel
● What's in the Camel box?
● Deploying Camel
● Creating new Camel Projects
● Q and A
65 PUBLIC PRESENTATION | CLAUS IBSEN
- 66. 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”
66 PUBLIC PRESENTATION | CLAUS IBSEN
- 67. 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
67 PUBLIC PRESENTATION | CLAUS IBSEN
- 68. 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
68 PUBLIC PRESENTATION | CLAUS IBSEN
- 69. Where do I get more information?
● Buy the Camel in Action book
Use code ...
camel40
… for 40% discount
http://manning.com/ibsen/
69 PUBLIC PRESENTATION | CLAUS IBSEN
- 70. Any Questions ?
● Contact
● EMail: cibsen@redhat.com
● Twitter: @davsclaus
● Blog: http://davsclaus.com
70 PUBLIC PRESENTATION | CLAUS IBSEN